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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (793) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -2
  3. package/docs/AGENTS.snippet.md +10 -0
  4. package/docs/accordion.json +345 -0
  5. package/docs/accordion.md +207 -0
  6. package/docs/action-bar.json +421 -0
  7. package/docs/action-bar.md +364 -0
  8. package/docs/action-sheet.json +210 -0
  9. package/docs/action-sheet.md +19 -0
  10. package/docs/alert.json +407 -0
  11. package/docs/alert.md +239 -0
  12. package/docs/app-shell.examples.md +349 -0
  13. package/docs/app-shell.json +835 -0
  14. package/docs/app-shell.md +214 -0
  15. package/docs/aspect-ratio.json +159 -0
  16. package/docs/aspect-ratio.md +134 -0
  17. package/docs/attachment.json +486 -0
  18. package/docs/attachment.md +253 -0
  19. package/docs/avatar-group.json +208 -0
  20. package/docs/avatar-group.md +130 -0
  21. package/docs/avatar.json +342 -0
  22. package/docs/avatar.md +142 -0
  23. package/docs/badge.json +334 -0
  24. package/docs/badge.md +138 -0
  25. package/docs/breadcrumb.json +368 -0
  26. package/docs/breadcrumb.md +237 -0
  27. package/docs/button-group.json +158 -0
  28. package/docs/button-group.md +72 -0
  29. package/docs/button.examples.md +621 -0
  30. package/docs/button.json +977 -0
  31. package/docs/button.md +200 -0
  32. package/docs/calendar.json +592 -0
  33. package/docs/calendar.md +242 -0
  34. package/docs/card.json +283 -0
  35. package/docs/card.md +130 -0
  36. package/docs/carousel.json +560 -0
  37. package/docs/carousel.md +357 -0
  38. package/docs/cascader.json +933 -0
  39. package/docs/cascader.md +379 -0
  40. package/docs/chart.examples.md +582 -0
  41. package/docs/chart.json +1359 -0
  42. package/docs/chart.md +187 -0
  43. package/docs/checkbox-group.examples.md +612 -0
  44. package/docs/checkbox-group.json +395 -0
  45. package/docs/checkbox-group.md +106 -0
  46. package/docs/checkbox.examples.md +546 -0
  47. package/docs/checkbox.json +506 -0
  48. package/docs/checkbox.md +104 -0
  49. package/docs/code-block.json +616 -0
  50. package/docs/code-block.md +303 -0
  51. package/docs/collapsible.json +456 -0
  52. package/docs/collapsible.md +261 -0
  53. package/docs/color-picker.json +523 -0
  54. package/docs/color-picker.md +201 -0
  55. package/docs/column-manager.json +486 -0
  56. package/docs/column-manager.md +277 -0
  57. package/docs/combobox.examples.md +1732 -0
  58. package/docs/combobox.json +1250 -0
  59. package/docs/combobox.md +209 -0
  60. package/docs/command-palette.json +800 -0
  61. package/docs/command-palette.md +419 -0
  62. package/docs/container.json +156 -0
  63. package/docs/container.md +92 -0
  64. package/docs/context-menu.json +231 -0
  65. package/docs/context-menu.md +176 -0
  66. package/docs/currency-field.examples.md +321 -0
  67. package/docs/currency-field.json +649 -0
  68. package/docs/currency-field.md +128 -0
  69. package/docs/dashboard-grid.json +680 -0
  70. package/docs/dashboard-grid.md +265 -0
  71. package/docs/data-grid.examples.md +3064 -0
  72. package/docs/data-grid.json +1577 -0
  73. package/docs/data-grid.md +237 -0
  74. package/docs/data-grid.props.md +81 -0
  75. package/docs/data-list.json +685 -0
  76. package/docs/data-list.md +327 -0
  77. package/docs/date-field.json +490 -0
  78. package/docs/date-field.md +235 -0
  79. package/docs/date-picker.examples.md +1226 -0
  80. package/docs/date-picker.json +696 -0
  81. package/docs/date-picker.md +121 -0
  82. package/docs/date-range-picker.examples.md +1300 -0
  83. package/docs/date-range-picker.json +903 -0
  84. package/docs/date-range-picker.md +142 -0
  85. package/docs/datetime-field.json +665 -0
  86. package/docs/datetime-field.md +337 -0
  87. package/docs/datetime-picker.examples.md +1269 -0
  88. package/docs/datetime-picker.json +928 -0
  89. package/docs/datetime-picker.md +150 -0
  90. package/docs/datetime-range-picker.examples.md +225 -0
  91. package/docs/datetime-range-picker.json +1015 -0
  92. package/docs/datetime-range-picker.md +162 -0
  93. package/docs/description-list.json +471 -0
  94. package/docs/description-list.md +268 -0
  95. package/docs/detail-panel.json +530 -0
  96. package/docs/detail-panel.md +361 -0
  97. package/docs/dialog.examples.md +2467 -0
  98. package/docs/dialog.json +1141 -0
  99. package/docs/dialog.md +217 -0
  100. package/docs/dialog.props.md +63 -0
  101. package/docs/divider.json +148 -0
  102. package/docs/divider.md +83 -0
  103. package/docs/drawer.examples.md +1929 -0
  104. package/docs/drawer.json +753 -0
  105. package/docs/drawer.md +199 -0
  106. package/docs/entity-picker.json +946 -0
  107. package/docs/entity-picker.md +365 -0
  108. package/docs/event-calendar.examples.md +308 -0
  109. package/docs/event-calendar.json +1202 -0
  110. package/docs/event-calendar.md +201 -0
  111. package/docs/field-group.json +333 -0
  112. package/docs/field-group.md +181 -0
  113. package/docs/field.examples.md +676 -0
  114. package/docs/field.json +528 -0
  115. package/docs/field.md +127 -0
  116. package/docs/filter-bar.json +817 -0
  117. package/docs/filter-bar.md +380 -0
  118. package/docs/form.json +378 -0
  119. package/docs/form.md +235 -0
  120. package/docs/fullscreen.json +395 -0
  121. package/docs/fullscreen.md +225 -0
  122. package/docs/grid.json +176 -0
  123. package/docs/grid.md +74 -0
  124. package/docs/highlight.json +279 -0
  125. package/docs/highlight.md +210 -0
  126. package/docs/hover-card.json +254 -0
  127. package/docs/hover-card.md +213 -0
  128. package/docs/icon.json +173 -0
  129. package/docs/icon.md +101 -0
  130. package/docs/image.json +476 -0
  131. package/docs/image.md +254 -0
  132. package/docs/import-export-center.json +836 -0
  133. package/docs/import-export-center.md +345 -0
  134. package/docs/index.md +141 -0
  135. package/docs/inline-message.json +312 -0
  136. package/docs/inline-message.md +191 -0
  137. package/docs/inline.json +149 -0
  138. package/docs/inline.md +72 -0
  139. package/docs/kbd.json +350 -0
  140. package/docs/kbd.md +210 -0
  141. package/docs/link.json +264 -0
  142. package/docs/link.md +167 -0
  143. package/docs/list-item.json +463 -0
  144. package/docs/list-item.md +236 -0
  145. package/docs/list.json +321 -0
  146. package/docs/list.md +185 -0
  147. package/docs/listbox.json +807 -0
  148. package/docs/listbox.md +413 -0
  149. package/docs/loading-overlay.json +440 -0
  150. package/docs/loading-overlay.md +248 -0
  151. package/docs/markdown.json +461 -0
  152. package/docs/markdown.md +266 -0
  153. package/docs/menu.examples.md +1651 -0
  154. package/docs/menu.json +922 -0
  155. package/docs/menu.md +155 -0
  156. package/docs/menubar.json +292 -0
  157. package/docs/menubar.md +173 -0
  158. package/docs/message-scroller.json +401 -0
  159. package/docs/message-scroller.md +212 -0
  160. package/docs/message.json +862 -0
  161. package/docs/message.md +473 -0
  162. package/docs/multi-select.examples.md +1922 -0
  163. package/docs/multi-select.json +1314 -0
  164. package/docs/multi-select.md +213 -0
  165. package/docs/navigation-menu.json +529 -0
  166. package/docs/navigation-menu.md +329 -0
  167. package/docs/notification-center.json +664 -0
  168. package/docs/notification-center.md +372 -0
  169. package/docs/number-field.examples.md +1078 -0
  170. package/docs/number-field.json +668 -0
  171. package/docs/number-field.md +137 -0
  172. package/docs/otp-input.json +479 -0
  173. package/docs/otp-input.md +291 -0
  174. package/docs/page-header.json +574 -0
  175. package/docs/page-header.md +338 -0
  176. package/docs/page.json +332 -0
  177. package/docs/page.md +184 -0
  178. package/docs/pagination.json +434 -0
  179. package/docs/pagination.md +238 -0
  180. package/docs/popover.examples.md +1235 -0
  181. package/docs/popover.json +656 -0
  182. package/docs/popover.md +199 -0
  183. package/docs/progress-indicator.json +501 -0
  184. package/docs/progress-indicator.md +329 -0
  185. package/docs/prompt-composer.json +498 -0
  186. package/docs/prompt-composer.md +278 -0
  187. package/docs/prose.json +357 -0
  188. package/docs/prose.md +226 -0
  189. package/docs/radio-group.examples.md +626 -0
  190. package/docs/radio-group.json +541 -0
  191. package/docs/radio-group.md +112 -0
  192. package/docs/rating.json +1053 -0
  193. package/docs/rating.md +435 -0
  194. package/docs/result-state.json +376 -0
  195. package/docs/result-state.md +286 -0
  196. package/docs/saved-views.json +384 -0
  197. package/docs/saved-views.md +242 -0
  198. package/docs/scroll-area.json +120 -0
  199. package/docs/scroll-area.md +8 -0
  200. package/docs/section.json +344 -0
  201. package/docs/section.md +208 -0
  202. package/docs/segmented-control.json +429 -0
  203. package/docs/segmented-control.md +240 -0
  204. package/docs/select.examples.md +1214 -0
  205. package/docs/select.json +1147 -0
  206. package/docs/select.md +199 -0
  207. package/docs/side-navigation.json +632 -0
  208. package/docs/side-navigation.md +430 -0
  209. package/docs/skeleton.json +358 -0
  210. package/docs/skeleton.md +223 -0
  211. package/docs/slider.json +522 -0
  212. package/docs/slider.md +261 -0
  213. package/docs/sparkline.json +426 -0
  214. package/docs/sparkline.md +206 -0
  215. package/docs/split-button.json +361 -0
  216. package/docs/split-button.md +275 -0
  217. package/docs/splitter.json +142 -0
  218. package/docs/splitter.md +14 -0
  219. package/docs/stack.json +135 -0
  220. package/docs/stack.md +74 -0
  221. package/docs/stat-card.json +529 -0
  222. package/docs/stat-card.md +270 -0
  223. package/docs/status-indicator.json +314 -0
  224. package/docs/status-indicator.md +197 -0
  225. package/docs/stepper.json +451 -0
  226. package/docs/stepper.md +250 -0
  227. package/docs/switch.json +451 -0
  228. package/docs/switch.md +508 -0
  229. package/docs/table-of-contents.json +553 -0
  230. package/docs/table-of-contents.md +289 -0
  231. package/docs/table.examples.md +1981 -0
  232. package/docs/table.json +1059 -0
  233. package/docs/table.md +290 -0
  234. package/docs/tabs.examples.md +1370 -0
  235. package/docs/tabs.json +661 -0
  236. package/docs/tabs.md +211 -0
  237. package/docs/tag.json +813 -0
  238. package/docs/tag.md +241 -0
  239. package/docs/tags-input.json +771 -0
  240. package/docs/tags-input.md +361 -0
  241. package/docs/text-field.examples.md +821 -0
  242. package/docs/text-field.json +604 -0
  243. package/docs/text-field.md +125 -0
  244. package/docs/textarea.examples.md +612 -0
  245. package/docs/textarea.json +440 -0
  246. package/docs/textarea.md +98 -0
  247. package/docs/time-field.json +584 -0
  248. package/docs/time-field.md +291 -0
  249. package/docs/time-picker.json +679 -0
  250. package/docs/time-picker.md +315 -0
  251. package/docs/time-range-picker.examples.md +191 -0
  252. package/docs/time-range-picker.json +924 -0
  253. package/docs/time-range-picker.md +152 -0
  254. package/docs/timeline.json +839 -0
  255. package/docs/timeline.md +401 -0
  256. package/docs/toast.json +642 -0
  257. package/docs/toast.md +311 -0
  258. package/docs/toggle-group.json +417 -0
  259. package/docs/toggle-group.md +255 -0
  260. package/docs/toggle.json +326 -0
  261. package/docs/toggle.md +222 -0
  262. package/docs/toolbar.json +380 -0
  263. package/docs/toolbar.md +240 -0
  264. package/docs/tooltip.examples.md +664 -0
  265. package/docs/tooltip.json +604 -0
  266. package/docs/tooltip.md +146 -0
  267. package/docs/top-navigation.examples.md +287 -0
  268. package/docs/top-navigation.json +648 -0
  269. package/docs/top-navigation.md +138 -0
  270. package/docs/tour.json +759 -0
  271. package/docs/tour.md +337 -0
  272. package/docs/transfer.json +746 -0
  273. package/docs/transfer.md +273 -0
  274. package/docs/tree.json +918 -0
  275. package/docs/tree.md +397 -0
  276. package/docs/typography.json +317 -0
  277. package/docs/typography.md +107 -0
  278. package/docs/upload.examples.md +358 -0
  279. package/docs/upload.json +1103 -0
  280. package/docs/upload.md +166 -0
  281. package/docs/visually-hidden.json +71 -0
  282. package/docs/visually-hidden.md +42 -0
  283. package/docs/wizard.json +724 -0
  284. package/docs/wizard.md +295 -0
  285. package/fesm2022/slotted-angular-accordion.mjs +247 -0
  286. package/fesm2022/slotted-angular-accordion.mjs.map +1 -0
  287. package/fesm2022/slotted-angular-action-bar.mjs +639 -0
  288. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -0
  289. package/fesm2022/slotted-angular-action-sheet.mjs +749 -0
  290. package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -0
  291. package/fesm2022/slotted-angular-alert.mjs +427 -0
  292. package/fesm2022/slotted-angular-alert.mjs.map +1 -0
  293. package/fesm2022/slotted-angular-app-shell.mjs +1334 -0
  294. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -0
  295. package/fesm2022/slotted-angular-aspect-ratio.mjs +63 -0
  296. package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -0
  297. package/fesm2022/slotted-angular-attachment.mjs +595 -0
  298. package/fesm2022/slotted-angular-attachment.mjs.map +1 -0
  299. package/fesm2022/slotted-angular-avatar-group.mjs +230 -0
  300. package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -0
  301. package/fesm2022/slotted-angular-avatar.mjs +330 -0
  302. package/fesm2022/slotted-angular-avatar.mjs.map +1 -0
  303. package/fesm2022/slotted-angular-badge.mjs +255 -0
  304. package/fesm2022/slotted-angular-badge.mjs.map +1 -0
  305. package/fesm2022/slotted-angular-breadcrumb.mjs +544 -0
  306. package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -0
  307. package/fesm2022/slotted-angular-button-group.mjs +146 -0
  308. package/fesm2022/slotted-angular-button-group.mjs.map +1 -0
  309. package/fesm2022/slotted-angular-button.mjs +692 -0
  310. package/fesm2022/slotted-angular-button.mjs.map +1 -0
  311. package/fesm2022/slotted-angular-calendar.mjs +916 -0
  312. package/fesm2022/slotted-angular-calendar.mjs.map +1 -0
  313. package/fesm2022/slotted-angular-card.mjs +225 -0
  314. package/fesm2022/slotted-angular-card.mjs.map +1 -0
  315. package/fesm2022/slotted-angular-carousel.mjs +840 -0
  316. package/fesm2022/slotted-angular-carousel.mjs.map +1 -0
  317. package/fesm2022/slotted-angular-cascader.mjs +1839 -0
  318. package/fesm2022/slotted-angular-cascader.mjs.map +1 -0
  319. package/fesm2022/slotted-angular-chart.mjs +974 -0
  320. package/fesm2022/slotted-angular-chart.mjs.map +1 -0
  321. package/fesm2022/slotted-angular-checkbox-group.mjs +283 -0
  322. package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -0
  323. package/fesm2022/slotted-angular-checkbox.mjs +468 -0
  324. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -0
  325. package/fesm2022/slotted-angular-code-block.mjs +476 -0
  326. package/fesm2022/slotted-angular-code-block.mjs.map +1 -0
  327. package/fesm2022/slotted-angular-collapsible.mjs +479 -0
  328. package/fesm2022/slotted-angular-collapsible.mjs.map +1 -0
  329. package/fesm2022/slotted-angular-color-picker.mjs +910 -0
  330. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -0
  331. package/fesm2022/slotted-angular-column-manager.mjs +1037 -0
  332. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -0
  333. package/fesm2022/slotted-angular-combobox.mjs +1480 -0
  334. package/fesm2022/slotted-angular-combobox.mjs.map +1 -0
  335. package/fesm2022/slotted-angular-command-palette.mjs +1283 -0
  336. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -0
  337. package/fesm2022/slotted-angular-container.mjs +105 -0
  338. package/fesm2022/slotted-angular-container.mjs.map +1 -0
  339. package/fesm2022/slotted-angular-context-menu.mjs +221 -0
  340. package/fesm2022/slotted-angular-context-menu.mjs.map +1 -0
  341. package/fesm2022/slotted-angular-currency-field.mjs +1131 -0
  342. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -0
  343. package/fesm2022/slotted-angular-dashboard-grid.mjs +1928 -0
  344. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -0
  345. package/fesm2022/slotted-angular-data-grid.mjs +6697 -0
  346. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -0
  347. package/fesm2022/slotted-angular-data-list.mjs +1418 -0
  348. package/fesm2022/slotted-angular-data-list.mjs.map +1 -0
  349. package/fesm2022/slotted-angular-date-field.mjs +772 -0
  350. package/fesm2022/slotted-angular-date-field.mjs.map +1 -0
  351. package/fesm2022/slotted-angular-date-picker.mjs +690 -0
  352. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -0
  353. package/fesm2022/slotted-angular-date-range-picker.mjs +1150 -0
  354. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -0
  355. package/fesm2022/slotted-angular-datetime-field.mjs +1058 -0
  356. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -0
  357. package/fesm2022/slotted-angular-datetime-picker.mjs +1362 -0
  358. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -0
  359. package/fesm2022/slotted-angular-datetime-range-picker.mjs +1872 -0
  360. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -0
  361. package/fesm2022/slotted-angular-description-list.mjs +545 -0
  362. package/fesm2022/slotted-angular-description-list.mjs.map +1 -0
  363. package/fesm2022/slotted-angular-detail-panel.mjs +754 -0
  364. package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -0
  365. package/fesm2022/slotted-angular-dialog.mjs +980 -0
  366. package/fesm2022/slotted-angular-dialog.mjs.map +1 -0
  367. package/fesm2022/slotted-angular-divider.mjs +76 -0
  368. package/fesm2022/slotted-angular-divider.mjs.map +1 -0
  369. package/fesm2022/slotted-angular-drawer.mjs +1397 -0
  370. package/fesm2022/slotted-angular-drawer.mjs.map +1 -0
  371. package/fesm2022/slotted-angular-entity-picker.mjs +1987 -0
  372. package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -0
  373. package/fesm2022/slotted-angular-event-calendar.mjs +2934 -0
  374. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -0
  375. package/fesm2022/slotted-angular-field-group.mjs +301 -0
  376. package/fesm2022/slotted-angular-field-group.mjs.map +1 -0
  377. package/fesm2022/slotted-angular-field.mjs +928 -0
  378. package/fesm2022/slotted-angular-field.mjs.map +1 -0
  379. package/fesm2022/slotted-angular-filter-bar.mjs +3107 -0
  380. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -0
  381. package/fesm2022/slotted-angular-form.mjs +592 -0
  382. package/fesm2022/slotted-angular-form.mjs.map +1 -0
  383. package/fesm2022/slotted-angular-fullscreen.mjs +314 -0
  384. package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -0
  385. package/fesm2022/slotted-angular-grid.mjs +58 -0
  386. package/fesm2022/slotted-angular-grid.mjs.map +1 -0
  387. package/fesm2022/slotted-angular-highlight.mjs +123 -0
  388. package/fesm2022/slotted-angular-highlight.mjs.map +1 -0
  389. package/fesm2022/slotted-angular-hover-card.mjs +326 -0
  390. package/fesm2022/slotted-angular-hover-card.mjs.map +1 -0
  391. package/fesm2022/slotted-angular-i18n.mjs +75 -0
  392. package/fesm2022/slotted-angular-i18n.mjs.map +1 -0
  393. package/fesm2022/slotted-angular-icon.mjs +232 -0
  394. package/fesm2022/slotted-angular-icon.mjs.map +1 -0
  395. package/fesm2022/slotted-angular-image.mjs +442 -0
  396. package/fesm2022/slotted-angular-image.mjs.map +1 -0
  397. package/fesm2022/slotted-angular-import-export-center.mjs +1792 -0
  398. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -0
  399. package/fesm2022/slotted-angular-inline-message.mjs +280 -0
  400. package/fesm2022/slotted-angular-inline-message.mjs.map +1 -0
  401. package/fesm2022/slotted-angular-inline.mjs +52 -0
  402. package/fesm2022/slotted-angular-inline.mjs.map +1 -0
  403. package/fesm2022/slotted-angular-kbd.mjs +284 -0
  404. package/fesm2022/slotted-angular-kbd.mjs.map +1 -0
  405. package/fesm2022/slotted-angular-link.mjs +182 -0
  406. package/fesm2022/slotted-angular-link.mjs.map +1 -0
  407. package/fesm2022/slotted-angular-list-item.mjs +367 -0
  408. package/fesm2022/slotted-angular-list-item.mjs.map +1 -0
  409. package/fesm2022/slotted-angular-list.mjs +256 -0
  410. package/fesm2022/slotted-angular-list.mjs.map +1 -0
  411. package/fesm2022/slotted-angular-listbox.mjs +1274 -0
  412. package/fesm2022/slotted-angular-listbox.mjs.map +1 -0
  413. package/fesm2022/slotted-angular-loading-overlay.mjs +451 -0
  414. package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -0
  415. package/fesm2022/slotted-angular-markdown.mjs +914 -0
  416. package/fesm2022/slotted-angular-markdown.mjs.map +1 -0
  417. package/fesm2022/slotted-angular-menu.mjs +1211 -0
  418. package/fesm2022/slotted-angular-menu.mjs.map +1 -0
  419. package/fesm2022/slotted-angular-menubar.mjs +230 -0
  420. package/fesm2022/slotted-angular-menubar.mjs.map +1 -0
  421. package/fesm2022/slotted-angular-message-scroller.mjs +378 -0
  422. package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -0
  423. package/fesm2022/slotted-angular-message.mjs +866 -0
  424. package/fesm2022/slotted-angular-message.mjs.map +1 -0
  425. package/fesm2022/slotted-angular-multi-select.mjs +1939 -0
  426. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -0
  427. package/fesm2022/slotted-angular-navigation-menu.mjs +770 -0
  428. package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -0
  429. package/fesm2022/slotted-angular-notification-center.mjs +1172 -0
  430. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -0
  431. package/fesm2022/slotted-angular-number-field.mjs +966 -0
  432. package/fesm2022/slotted-angular-number-field.mjs.map +1 -0
  433. package/fesm2022/slotted-angular-otp-input.mjs +629 -0
  434. package/fesm2022/slotted-angular-otp-input.mjs.map +1 -0
  435. package/fesm2022/slotted-angular-page-header.mjs +788 -0
  436. package/fesm2022/slotted-angular-page-header.mjs.map +1 -0
  437. package/fesm2022/slotted-angular-page.mjs +255 -0
  438. package/fesm2022/slotted-angular-page.mjs.map +1 -0
  439. package/fesm2022/slotted-angular-pagination.mjs +562 -0
  440. package/fesm2022/slotted-angular-pagination.mjs.map +1 -0
  441. package/fesm2022/slotted-angular-popover.mjs +799 -0
  442. package/fesm2022/slotted-angular-popover.mjs.map +1 -0
  443. package/fesm2022/slotted-angular-progress-indicator.mjs +572 -0
  444. package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -0
  445. package/fesm2022/slotted-angular-prompt-composer.mjs +596 -0
  446. package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -0
  447. package/fesm2022/slotted-angular-prose.mjs +314 -0
  448. package/fesm2022/slotted-angular-prose.mjs.map +1 -0
  449. package/fesm2022/slotted-angular-radio-group.mjs +469 -0
  450. package/fesm2022/slotted-angular-radio-group.mjs.map +1 -0
  451. package/fesm2022/slotted-angular-rating.mjs +1174 -0
  452. package/fesm2022/slotted-angular-rating.mjs.map +1 -0
  453. package/fesm2022/slotted-angular-result-state.mjs +330 -0
  454. package/fesm2022/slotted-angular-result-state.mjs.map +1 -0
  455. package/fesm2022/slotted-angular-saved-views.mjs +877 -0
  456. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -0
  457. package/fesm2022/slotted-angular-scroll-area.mjs +294 -0
  458. package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -0
  459. package/fesm2022/slotted-angular-section.mjs +266 -0
  460. package/fesm2022/slotted-angular-section.mjs.map +1 -0
  461. package/fesm2022/slotted-angular-segmented-control.mjs +454 -0
  462. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -0
  463. package/fesm2022/slotted-angular-select.mjs +1899 -0
  464. package/fesm2022/slotted-angular-select.mjs.map +1 -0
  465. package/fesm2022/slotted-angular-side-navigation.mjs +1042 -0
  466. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -0
  467. package/fesm2022/slotted-angular-skeleton.mjs +316 -0
  468. package/fesm2022/slotted-angular-skeleton.mjs.map +1 -0
  469. package/fesm2022/slotted-angular-slider.mjs +586 -0
  470. package/fesm2022/slotted-angular-slider.mjs.map +1 -0
  471. package/fesm2022/slotted-angular-sparkline.mjs +235 -0
  472. package/fesm2022/slotted-angular-sparkline.mjs.map +1 -0
  473. package/fesm2022/slotted-angular-split-button.mjs +331 -0
  474. package/fesm2022/slotted-angular-split-button.mjs.map +1 -0
  475. package/fesm2022/slotted-angular-splitter.mjs +516 -0
  476. package/fesm2022/slotted-angular-splitter.mjs.map +1 -0
  477. package/fesm2022/slotted-angular-stack.mjs +48 -0
  478. package/fesm2022/slotted-angular-stack.mjs.map +1 -0
  479. package/fesm2022/slotted-angular-stat-card.mjs +478 -0
  480. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -0
  481. package/fesm2022/slotted-angular-status-indicator.mjs +155 -0
  482. package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -0
  483. package/fesm2022/slotted-angular-stepper.mjs +536 -0
  484. package/fesm2022/slotted-angular-stepper.mjs.map +1 -0
  485. package/fesm2022/slotted-angular-switch.mjs +447 -0
  486. package/fesm2022/slotted-angular-switch.mjs.map +1 -0
  487. package/fesm2022/slotted-angular-table-of-contents.mjs +750 -0
  488. package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -0
  489. package/fesm2022/slotted-angular-table.mjs +2518 -0
  490. package/fesm2022/slotted-angular-table.mjs.map +1 -0
  491. package/fesm2022/slotted-angular-tabs.mjs +829 -0
  492. package/fesm2022/slotted-angular-tabs.mjs.map +1 -0
  493. package/fesm2022/slotted-angular-tag.mjs +595 -0
  494. package/fesm2022/slotted-angular-tag.mjs.map +1 -0
  495. package/fesm2022/slotted-angular-tags-input.mjs +1211 -0
  496. package/fesm2022/slotted-angular-tags-input.mjs.map +1 -0
  497. package/fesm2022/slotted-angular-text-field.mjs +674 -0
  498. package/fesm2022/slotted-angular-text-field.mjs.map +1 -0
  499. package/fesm2022/slotted-angular-textarea.mjs +275 -0
  500. package/fesm2022/slotted-angular-textarea.mjs.map +1 -0
  501. package/fesm2022/slotted-angular-theme.mjs +45 -0
  502. package/fesm2022/slotted-angular-theme.mjs.map +1 -0
  503. package/fesm2022/slotted-angular-time-field.mjs +895 -0
  504. package/fesm2022/slotted-angular-time-field.mjs.map +1 -0
  505. package/fesm2022/slotted-angular-time-picker.mjs +856 -0
  506. package/fesm2022/slotted-angular-time-picker.mjs.map +1 -0
  507. package/fesm2022/slotted-angular-time-range-picker.mjs +1534 -0
  508. package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -0
  509. package/fesm2022/slotted-angular-timeline.mjs +928 -0
  510. package/fesm2022/slotted-angular-timeline.mjs.map +1 -0
  511. package/fesm2022/slotted-angular-toast.mjs +917 -0
  512. package/fesm2022/slotted-angular-toast.mjs.map +1 -0
  513. package/fesm2022/slotted-angular-toggle-group.mjs +311 -0
  514. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -0
  515. package/fesm2022/slotted-angular-toggle.mjs +162 -0
  516. package/fesm2022/slotted-angular-toggle.mjs.map +1 -0
  517. package/fesm2022/slotted-angular-toolbar.mjs +536 -0
  518. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -0
  519. package/fesm2022/slotted-angular-tooltip.mjs +798 -0
  520. package/fesm2022/slotted-angular-tooltip.mjs.map +1 -0
  521. package/fesm2022/slotted-angular-top-navigation.mjs +1308 -0
  522. package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -0
  523. package/fesm2022/slotted-angular-tour.mjs +1330 -0
  524. package/fesm2022/slotted-angular-tour.mjs.map +1 -0
  525. package/fesm2022/slotted-angular-transfer.mjs +1406 -0
  526. package/fesm2022/slotted-angular-transfer.mjs.map +1 -0
  527. package/fesm2022/slotted-angular-tree.mjs +1448 -0
  528. package/fesm2022/slotted-angular-tree.mjs.map +1 -0
  529. package/fesm2022/slotted-angular-typography.mjs +184 -0
  530. package/fesm2022/slotted-angular-typography.mjs.map +1 -0
  531. package/fesm2022/slotted-angular-upload.mjs +1523 -0
  532. package/fesm2022/slotted-angular-upload.mjs.map +1 -0
  533. package/fesm2022/slotted-angular-visually-hidden.mjs +32 -0
  534. package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -0
  535. package/fesm2022/slotted-angular-wizard.mjs +1715 -0
  536. package/fesm2022/slotted-angular-wizard.mjs.map +1 -0
  537. package/fesm2022/slotted-angular.mjs +4 -0
  538. package/fesm2022/slotted-angular.mjs.map +1 -0
  539. package/package.json +537 -3
  540. package/types/slotted-angular-accordion.d.ts +156 -0
  541. package/types/slotted-angular-accordion.d.ts.map +1 -0
  542. package/types/slotted-angular-action-bar.d.ts +291 -0
  543. package/types/slotted-angular-action-bar.d.ts.map +1 -0
  544. package/types/slotted-angular-action-sheet.d.ts +294 -0
  545. package/types/slotted-angular-action-sheet.d.ts.map +1 -0
  546. package/types/slotted-angular-alert.d.ts +214 -0
  547. package/types/slotted-angular-alert.d.ts.map +1 -0
  548. package/types/slotted-angular-app-shell.d.ts +549 -0
  549. package/types/slotted-angular-app-shell.d.ts.map +1 -0
  550. package/types/slotted-angular-aspect-ratio.d.ts +57 -0
  551. package/types/slotted-angular-aspect-ratio.d.ts.map +1 -0
  552. package/types/slotted-angular-attachment.d.ts +294 -0
  553. package/types/slotted-angular-attachment.d.ts.map +1 -0
  554. package/types/slotted-angular-avatar-group.d.ts +119 -0
  555. package/types/slotted-angular-avatar-group.d.ts.map +1 -0
  556. package/types/slotted-angular-avatar.d.ts +202 -0
  557. package/types/slotted-angular-avatar.d.ts.map +1 -0
  558. package/types/slotted-angular-badge.d.ts +166 -0
  559. package/types/slotted-angular-badge.d.ts.map +1 -0
  560. package/types/slotted-angular-breadcrumb.d.ts +251 -0
  561. package/types/slotted-angular-breadcrumb.d.ts.map +1 -0
  562. package/types/slotted-angular-button-group.d.ts +89 -0
  563. package/types/slotted-angular-button-group.d.ts.map +1 -0
  564. package/types/slotted-angular-button.d.ts +390 -0
  565. package/types/slotted-angular-button.d.ts.map +1 -0
  566. package/types/slotted-angular-calendar.d.ts +280 -0
  567. package/types/slotted-angular-calendar.d.ts.map +1 -0
  568. package/types/slotted-angular-card.d.ts +140 -0
  569. package/types/slotted-angular-card.d.ts.map +1 -0
  570. package/types/slotted-angular-carousel.d.ts +288 -0
  571. package/types/slotted-angular-carousel.d.ts.map +1 -0
  572. package/types/slotted-angular-cascader.d.ts +351 -0
  573. package/types/slotted-angular-cascader.d.ts.map +1 -0
  574. package/types/slotted-angular-chart.d.ts +319 -0
  575. package/types/slotted-angular-chart.d.ts.map +1 -0
  576. package/types/slotted-angular-checkbox-group.d.ts +156 -0
  577. package/types/slotted-angular-checkbox-group.d.ts.map +1 -0
  578. package/types/slotted-angular-checkbox.d.ts +197 -0
  579. package/types/slotted-angular-checkbox.d.ts.map +1 -0
  580. package/types/slotted-angular-code-block.d.ts +158 -0
  581. package/types/slotted-angular-code-block.d.ts.map +1 -0
  582. package/types/slotted-angular-collapsible.d.ts +272 -0
  583. package/types/slotted-angular-collapsible.d.ts.map +1 -0
  584. package/types/slotted-angular-color-picker.d.ts +181 -0
  585. package/types/slotted-angular-color-picker.d.ts.map +1 -0
  586. package/types/slotted-angular-column-manager.d.ts +200 -0
  587. package/types/slotted-angular-column-manager.d.ts.map +1 -0
  588. package/types/slotted-angular-combobox.d.ts +449 -0
  589. package/types/slotted-angular-combobox.d.ts.map +1 -0
  590. package/types/slotted-angular-command-palette.d.ts +256 -0
  591. package/types/slotted-angular-command-palette.d.ts.map +1 -0
  592. package/types/slotted-angular-container.d.ts +84 -0
  593. package/types/slotted-angular-container.d.ts.map +1 -0
  594. package/types/slotted-angular-context-menu.d.ts +84 -0
  595. package/types/slotted-angular-context-menu.d.ts.map +1 -0
  596. package/types/slotted-angular-currency-field.d.ts +480 -0
  597. package/types/slotted-angular-currency-field.d.ts.map +1 -0
  598. package/types/slotted-angular-dashboard-grid.d.ts +341 -0
  599. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -0
  600. package/types/slotted-angular-data-grid.d.ts +1077 -0
  601. package/types/slotted-angular-data-grid.d.ts.map +1 -0
  602. package/types/slotted-angular-data-list.d.ts +272 -0
  603. package/types/slotted-angular-data-list.d.ts.map +1 -0
  604. package/types/slotted-angular-date-field.d.ts +320 -0
  605. package/types/slotted-angular-date-field.d.ts.map +1 -0
  606. package/types/slotted-angular-date-picker.d.ts +224 -0
  607. package/types/slotted-angular-date-picker.d.ts.map +1 -0
  608. package/types/slotted-angular-date-range-picker.d.ts +310 -0
  609. package/types/slotted-angular-date-range-picker.d.ts.map +1 -0
  610. package/types/slotted-angular-datetime-field.d.ts +362 -0
  611. package/types/slotted-angular-datetime-field.d.ts.map +1 -0
  612. package/types/slotted-angular-datetime-picker.d.ts +370 -0
  613. package/types/slotted-angular-datetime-picker.d.ts.map +1 -0
  614. package/types/slotted-angular-datetime-range-picker.d.ts +459 -0
  615. package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -0
  616. package/types/slotted-angular-description-list.d.ts +281 -0
  617. package/types/slotted-angular-description-list.d.ts.map +1 -0
  618. package/types/slotted-angular-detail-panel.d.ts +240 -0
  619. package/types/slotted-angular-detail-panel.d.ts.map +1 -0
  620. package/types/slotted-angular-dialog.d.ts +497 -0
  621. package/types/slotted-angular-dialog.d.ts.map +1 -0
  622. package/types/slotted-angular-divider.d.ts +40 -0
  623. package/types/slotted-angular-divider.d.ts.map +1 -0
  624. package/types/slotted-angular-drawer.d.ts +532 -0
  625. package/types/slotted-angular-drawer.d.ts.map +1 -0
  626. package/types/slotted-angular-entity-picker.d.ts +338 -0
  627. package/types/slotted-angular-entity-picker.d.ts.map +1 -0
  628. package/types/slotted-angular-event-calendar.d.ts +574 -0
  629. package/types/slotted-angular-event-calendar.d.ts.map +1 -0
  630. package/types/slotted-angular-field-group.d.ts +152 -0
  631. package/types/slotted-angular-field-group.d.ts.map +1 -0
  632. package/types/slotted-angular-field.d.ts +535 -0
  633. package/types/slotted-angular-field.d.ts.map +1 -0
  634. package/types/slotted-angular-filter-bar.d.ts +573 -0
  635. package/types/slotted-angular-filter-bar.d.ts.map +1 -0
  636. package/types/slotted-angular-form.d.ts +298 -0
  637. package/types/slotted-angular-form.d.ts.map +1 -0
  638. package/types/slotted-angular-fullscreen.d.ts +145 -0
  639. package/types/slotted-angular-fullscreen.d.ts.map +1 -0
  640. package/types/slotted-angular-grid.d.ts +50 -0
  641. package/types/slotted-angular-grid.d.ts.map +1 -0
  642. package/types/slotted-angular-highlight.d.ts +93 -0
  643. package/types/slotted-angular-highlight.d.ts.map +1 -0
  644. package/types/slotted-angular-hover-card.d.ts +140 -0
  645. package/types/slotted-angular-hover-card.d.ts.map +1 -0
  646. package/types/slotted-angular-i18n.d.ts +46 -0
  647. package/types/slotted-angular-i18n.d.ts.map +1 -0
  648. package/types/slotted-angular-icon.d.ts +94 -0
  649. package/types/slotted-angular-icon.d.ts.map +1 -0
  650. package/types/slotted-angular-image.d.ts +251 -0
  651. package/types/slotted-angular-image.d.ts.map +1 -0
  652. package/types/slotted-angular-import-export-center.d.ts +351 -0
  653. package/types/slotted-angular-import-export-center.d.ts.map +1 -0
  654. package/types/slotted-angular-inline-message.d.ts +195 -0
  655. package/types/slotted-angular-inline-message.d.ts.map +1 -0
  656. package/types/slotted-angular-inline.d.ts +41 -0
  657. package/types/slotted-angular-inline.d.ts.map +1 -0
  658. package/types/slotted-angular-kbd.d.ts +174 -0
  659. package/types/slotted-angular-kbd.d.ts.map +1 -0
  660. package/types/slotted-angular-link.d.ts +94 -0
  661. package/types/slotted-angular-link.d.ts.map +1 -0
  662. package/types/slotted-angular-list-item.d.ts +210 -0
  663. package/types/slotted-angular-list-item.d.ts.map +1 -0
  664. package/types/slotted-angular-list.d.ts +176 -0
  665. package/types/slotted-angular-list.d.ts.map +1 -0
  666. package/types/slotted-angular-listbox.d.ts +470 -0
  667. package/types/slotted-angular-listbox.d.ts.map +1 -0
  668. package/types/slotted-angular-loading-overlay.d.ts +219 -0
  669. package/types/slotted-angular-loading-overlay.d.ts.map +1 -0
  670. package/types/slotted-angular-markdown.d.ts +172 -0
  671. package/types/slotted-angular-markdown.d.ts.map +1 -0
  672. package/types/slotted-angular-menu.d.ts +448 -0
  673. package/types/slotted-angular-menu.d.ts.map +1 -0
  674. package/types/slotted-angular-menubar.d.ts +90 -0
  675. package/types/slotted-angular-menubar.d.ts.map +1 -0
  676. package/types/slotted-angular-message-scroller.d.ts +151 -0
  677. package/types/slotted-angular-message-scroller.d.ts.map +1 -0
  678. package/types/slotted-angular-message.d.ts +348 -0
  679. package/types/slotted-angular-message.d.ts.map +1 -0
  680. package/types/slotted-angular-multi-select.d.ts +462 -0
  681. package/types/slotted-angular-multi-select.d.ts.map +1 -0
  682. package/types/slotted-angular-navigation-menu.d.ts +309 -0
  683. package/types/slotted-angular-navigation-menu.d.ts.map +1 -0
  684. package/types/slotted-angular-notification-center.d.ts +318 -0
  685. package/types/slotted-angular-notification-center.d.ts.map +1 -0
  686. package/types/slotted-angular-number-field.d.ts +402 -0
  687. package/types/slotted-angular-number-field.d.ts.map +1 -0
  688. package/types/slotted-angular-otp-input.d.ts +286 -0
  689. package/types/slotted-angular-otp-input.d.ts.map +1 -0
  690. package/types/slotted-angular-page-header.d.ts +334 -0
  691. package/types/slotted-angular-page-header.d.ts.map +1 -0
  692. package/types/slotted-angular-page.d.ts +141 -0
  693. package/types/slotted-angular-page.d.ts.map +1 -0
  694. package/types/slotted-angular-pagination.d.ts +213 -0
  695. package/types/slotted-angular-pagination.d.ts.map +1 -0
  696. package/types/slotted-angular-popover.d.ts +366 -0
  697. package/types/slotted-angular-popover.d.ts.map +1 -0
  698. package/types/slotted-angular-progress-indicator.d.ts +312 -0
  699. package/types/slotted-angular-progress-indicator.d.ts.map +1 -0
  700. package/types/slotted-angular-prompt-composer.d.ts +242 -0
  701. package/types/slotted-angular-prompt-composer.d.ts.map +1 -0
  702. package/types/slotted-angular-prose.d.ts +171 -0
  703. package/types/slotted-angular-prose.d.ts.map +1 -0
  704. package/types/slotted-angular-radio-group.d.ts +268 -0
  705. package/types/slotted-angular-radio-group.d.ts.map +1 -0
  706. package/types/slotted-angular-rating.d.ts +374 -0
  707. package/types/slotted-angular-rating.d.ts.map +1 -0
  708. package/types/slotted-angular-result-state.d.ts +217 -0
  709. package/types/slotted-angular-result-state.d.ts.map +1 -0
  710. package/types/slotted-angular-saved-views.d.ts +198 -0
  711. package/types/slotted-angular-saved-views.d.ts.map +1 -0
  712. package/types/slotted-angular-scroll-area.d.ts +186 -0
  713. package/types/slotted-angular-scroll-area.d.ts.map +1 -0
  714. package/types/slotted-angular-section.d.ts +143 -0
  715. package/types/slotted-angular-section.d.ts.map +1 -0
  716. package/types/slotted-angular-segmented-control.d.ts +251 -0
  717. package/types/slotted-angular-segmented-control.d.ts.map +1 -0
  718. package/types/slotted-angular-select.d.ts +507 -0
  719. package/types/slotted-angular-select.d.ts.map +1 -0
  720. package/types/slotted-angular-side-navigation.d.ts +373 -0
  721. package/types/slotted-angular-side-navigation.d.ts.map +1 -0
  722. package/types/slotted-angular-skeleton.d.ts +198 -0
  723. package/types/slotted-angular-skeleton.d.ts.map +1 -0
  724. package/types/slotted-angular-slider.d.ts +216 -0
  725. package/types/slotted-angular-slider.d.ts.map +1 -0
  726. package/types/slotted-angular-sparkline.d.ts +106 -0
  727. package/types/slotted-angular-sparkline.d.ts.map +1 -0
  728. package/types/slotted-angular-split-button.d.ts +180 -0
  729. package/types/slotted-angular-split-button.d.ts.map +1 -0
  730. package/types/slotted-angular-splitter.d.ts +206 -0
  731. package/types/slotted-angular-splitter.d.ts.map +1 -0
  732. package/types/slotted-angular-stack.d.ts +38 -0
  733. package/types/slotted-angular-stack.d.ts.map +1 -0
  734. package/types/slotted-angular-stat-card.d.ts +232 -0
  735. package/types/slotted-angular-stat-card.d.ts.map +1 -0
  736. package/types/slotted-angular-status-indicator.d.ts +106 -0
  737. package/types/slotted-angular-status-indicator.d.ts.map +1 -0
  738. package/types/slotted-angular-stepper.d.ts +198 -0
  739. package/types/slotted-angular-stepper.d.ts.map +1 -0
  740. package/types/slotted-angular-switch.d.ts +243 -0
  741. package/types/slotted-angular-switch.d.ts.map +1 -0
  742. package/types/slotted-angular-table-of-contents.d.ts +210 -0
  743. package/types/slotted-angular-table-of-contents.d.ts.map +1 -0
  744. package/types/slotted-angular-table.d.ts +888 -0
  745. package/types/slotted-angular-table.d.ts.map +1 -0
  746. package/types/slotted-angular-tabs.d.ts +340 -0
  747. package/types/slotted-angular-tabs.d.ts.map +1 -0
  748. package/types/slotted-angular-tag.d.ts +279 -0
  749. package/types/slotted-angular-tag.d.ts.map +1 -0
  750. package/types/slotted-angular-tags-input.d.ts +302 -0
  751. package/types/slotted-angular-tags-input.d.ts.map +1 -0
  752. package/types/slotted-angular-text-field.d.ts +334 -0
  753. package/types/slotted-angular-text-field.d.ts.map +1 -0
  754. package/types/slotted-angular-textarea.d.ts +150 -0
  755. package/types/slotted-angular-textarea.d.ts.map +1 -0
  756. package/types/slotted-angular-theme.d.ts +26 -0
  757. package/types/slotted-angular-theme.d.ts.map +1 -0
  758. package/types/slotted-angular-time-field.d.ts +300 -0
  759. package/types/slotted-angular-time-field.d.ts.map +1 -0
  760. package/types/slotted-angular-time-picker.d.ts +260 -0
  761. package/types/slotted-angular-time-picker.d.ts.map +1 -0
  762. package/types/slotted-angular-time-range-picker.d.ts +401 -0
  763. package/types/slotted-angular-time-range-picker.d.ts.map +1 -0
  764. package/types/slotted-angular-timeline.d.ts +329 -0
  765. package/types/slotted-angular-timeline.d.ts.map +1 -0
  766. package/types/slotted-angular-toast.d.ts +340 -0
  767. package/types/slotted-angular-toast.d.ts.map +1 -0
  768. package/types/slotted-angular-toggle-group.d.ts +167 -0
  769. package/types/slotted-angular-toggle-group.d.ts.map +1 -0
  770. package/types/slotted-angular-toggle.d.ts +106 -0
  771. package/types/slotted-angular-toggle.d.ts.map +1 -0
  772. package/types/slotted-angular-toolbar.d.ts +252 -0
  773. package/types/slotted-angular-toolbar.d.ts.map +1 -0
  774. package/types/slotted-angular-tooltip.d.ts +388 -0
  775. package/types/slotted-angular-tooltip.d.ts.map +1 -0
  776. package/types/slotted-angular-top-navigation.d.ts +442 -0
  777. package/types/slotted-angular-top-navigation.d.ts.map +1 -0
  778. package/types/slotted-angular-tour.d.ts +440 -0
  779. package/types/slotted-angular-tour.d.ts.map +1 -0
  780. package/types/slotted-angular-transfer.d.ts +296 -0
  781. package/types/slotted-angular-transfer.d.ts.map +1 -0
  782. package/types/slotted-angular-tree.d.ts +499 -0
  783. package/types/slotted-angular-tree.d.ts.map +1 -0
  784. package/types/slotted-angular-typography.d.ts +89 -0
  785. package/types/slotted-angular-typography.d.ts.map +1 -0
  786. package/types/slotted-angular-upload.d.ts +365 -0
  787. package/types/slotted-angular-upload.d.ts.map +1 -0
  788. package/types/slotted-angular-visually-hidden.d.ts +19 -0
  789. package/types/slotted-angular-visually-hidden.d.ts.map +1 -0
  790. package/types/slotted-angular-wizard.d.ts +441 -0
  791. package/types/slotted-angular-wizard.d.ts.map +1 -0
  792. package/types/slotted-angular.d.ts +3 -0
  793. package/types/slotted-angular.d.ts.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slotted-angular-import-export-center.mjs","sources":["../../import-export-center/src/import-export-center-defaults.ts","../../import-export-center/src/import-export-control.ts","../../import-export-center/src/import-export-center.ts","../../import-export-center/src/job-toasts.ts","../../import-export-center/src/slotted-angular-import-export-center.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\nimport type { JobFileRole } from '@slotted/core/import-export-center';\n\nexport type ImportExportCenterSize = 'sm' | 'md';\n\nexport type ImportExportCenterLevel = '2' | '3' | '4';\n\nexport type ImportExportCenterGrowing = 'none' | 'button';\n\nexport type ImportExportCenterTimeFormat = 'relative' | 'absolute';\n\nexport type ImportExportCenterStatus = 'ready' | 'error';\n\n/** A press on one of the family's own controls: a pointer, or a key on a focused control. */\nexport type ImportExportPressReason = 'pointer' | 'keyboard';\n\nexport type ImportExportRemoveReason = ImportExportPressReason | 'clear';\n\n/**\n * A request over one of the consumer's facts, carrying the reason and the\n * originating event; `cancel()` refuses it, and a cancelled download or open\n * does not navigate.\n */\nexport interface ImportExportRequest<Reason extends string> {\n readonly reason: Reason;\n readonly event?: Event | undefined;\n readonly cancelled: boolean;\n cancel(): void;\n}\n\nexport interface ImportExportJobRequest extends ImportExportRequest<ImportExportPressReason> {\n readonly key: string;\n}\n\nexport interface ImportExportRemoveRequest extends ImportExportRequest<ImportExportRemoveReason> {\n readonly keys: readonly string[];\n}\n\nexport interface ImportExportDownloadRequest extends ImportExportRequest<ImportExportPressReason> {\n readonly key: string;\n /** Which of the job's files: the original, the result, or the report of failed rows. */\n readonly file: JobFileRole;\n}\n\nexport interface ImportExportView {\n readonly value: string;\n readonly label: string;\n}\n\nexport interface ImportExportCenterDefaults {\n growing: ImportExportCenterGrowing;\n level: ImportExportCenterLevel;\n size: ImportExportCenterSize;\n timeFormat: ImportExportCenterTimeFormat;\n timeZone?: string | undefined;\n}\n\nconst FALLBACK: ImportExportCenterDefaults = {\n growing: 'none',\n level: '2',\n size: 'md',\n timeFormat: 'relative',\n};\n\nexport const IMPORT_EXPORT_CENTER_DEFAULTS = new InjectionToken<ImportExportCenterDefaults>(\n 'slotted import-export-center defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once how its job centre reads — the size, the rank,\n * how history loads, how time is written and in which zone. A centre that\n * states any of them still wins. Its words and the locale come from the\n * language in force (`provideSlotted`).\n */\nexport function provideImportExportCenterDefaults(defaults: Partial<ImportExportCenterDefaults>) {\n return {\n provide: IMPORT_EXPORT_CENTER_DEFAULTS,\n useFactory: (): ImportExportCenterDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectImportExportCenterDefaults(): ImportExportCenterDefaults {\n return inject(IMPORT_EXPORT_CENTER_DEFAULTS);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SlImportExportCenterIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-import-export-center-${this.count}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n provideTooltipDefaults,\n SlTooltip,\n SlTooltipContent,\n SlTooltipLayer,\n} from '@slotted/angular/tooltip';\n\n/**\n * The family's one icon control, named by a tooltip with the words its\n * accessible name carries: a cross with no words beside it is a control\n * nobody can tell apart until it is named. The job's title describes it, and\n * the tooltip's own content joins that description while it is open.\n */\n@Component({\n selector: 'button[slImportExportControl]',\n standalone: true,\n imports: [SlTooltipLayer, SlTooltipContent],\n template: `<ng-content /><ng-template slTooltipLayer>\n <div slTooltipContent>{{ text() }}</div>\n </ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n hostDirectives: [SlTooltip],\n providers: [provideTooltipDefaults({ openOn: 'hover', side: 'bottom' })],\n host: {\n type: 'button',\n '[attr.aria-label]': 'text()',\n '[attr.aria-describedby]': 'describedByValue()',\n '(pointerenter)': 'onPointerEnter($event)',\n '(pointerleave)': 'onPointerLeave($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointerup)': 'onPointerUp()',\n '(pointercancel)': 'onPointerUp()',\n '(focus)': 'onFocus($event)',\n '(blur)': 'onBlur($event)',\n },\n})\nexport class SlImportExportControl {\n readonly text = input.required<string>();\n /** The id of the element that says which job the control acts on. */\n readonly describedBy = input<string | undefined>(undefined);\n\n private readonly tooltip = inject(SlTooltip);\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n\n constructor() {\n this.tooltip.triggerNode.set(this.native);\n inject(DestroyRef).onDestroy(() => this.tooltip.triggerNode.set(null));\n }\n\n protected readonly describedByValue = computed(() => {\n const ids = [this.describedBy(), this.tooltip.isOpen() ? this.tooltip.contentId : undefined];\n const joined = ids.filter((id): id is string => id !== undefined).join(' ');\n return joined === '' ? null : joined;\n });\n\n protected onPointerEnter(event: PointerEvent) {\n if (event.pointerType === 'touch') return;\n this.tooltip.openAfterDelay(event);\n }\n\n protected onPointerLeave(event: PointerEvent) {\n this.tooltip.closeAfterDelay(event);\n }\n\n protected onPointerDown(event: PointerEvent) {\n if (event.pointerType === 'touch') this.tooltip.pressAndHold(event);\n else if (this.tooltip.isOpen()) this.tooltip.toggle(false, 'pointer', event);\n }\n\n protected onPointerUp() {\n this.tooltip.cancelPending();\n }\n\n protected onFocus(event: FocusEvent) {\n if (!this.native.matches(':focus-visible')) return;\n this.tooltip.toggle(true, 'keyboard', event);\n }\n\n protected onBlur(event: FocusEvent) {\n if (this.tooltip.isOpen()) this.tooltip.toggle(false, 'blur', event);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n model,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SlButton, SlButtonEnd, SlButtonLink } from '@slotted/angular/button';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport type { GlyphName } from '@slotted/angular/icon';\nimport { SlProgressBar } from '@slotted/angular/progress-indicator';\nimport {\n SlResultState,\n SlResultStateActions,\n SlResultStateContent,\n SlResultStateDescription,\n SlResultStateTitle,\n} from '@slotted/angular/result-state';\nimport { SlSkeleton, SlSkeletonText } from '@slotted/angular/skeleton';\nimport {\n SlTable,\n SlTableBody,\n SlTableCaption,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n} from '@slotted/angular/table';\nimport { SlTab, SlTabList, SlTabs } from '@slotted/angular/tabs';\nimport {\n activeJobCount,\n fileAvailability,\n filterJobs,\n focusDestination,\n hasDetails,\n isFinishedJob,\n jobAnnouncement,\n jobControls,\n jobGlyph,\n jobOutcome,\n jobProgressText,\n jobStatusText,\n jobSummaryText,\n jobTransition,\n remainingSeconds,\n} from '@slotted/core/import-export-center';\nimport type {\n FocusableJob,\n FocusMemory,\n ImportExportJob,\n JobControls,\n JobCounts,\n JobFile,\n JobFileRole,\n ProgressSample,\n} from '@slotted/core/import-export-center';\nimport {\n importExportCenterMessages,\n type ImportExportCenterMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\nimport { formatTimestamp } from '@slotted/core/timeline';\nimport type { FormattedTimestamp, TimestampValue } from '@slotted/core/timeline';\nimport { fileKind, formatBytes, splitName } from '@slotted/core/upload';\nimport type { FileKind } from '@slotted/core/upload';\n\nimport {\n injectImportExportCenterDefaults,\n SlImportExportCenterIdFactory,\n type ImportExportCenterGrowing,\n type ImportExportCenterLevel,\n type ImportExportCenterSize,\n type ImportExportCenterStatus,\n type ImportExportCenterTimeFormat,\n type ImportExportDownloadRequest,\n type ImportExportJobRequest,\n type ImportExportPressReason,\n type ImportExportRemoveRequest,\n type ImportExportRequest,\n type ImportExportView,\n} from './import-export-center-defaults';\nimport { SlImportExportControl } from './import-export-control';\n\n/** The mark of a file's kind, the drawing `upload` puts in the same tile. */\nconst KIND_GLYPH: Record<FileKind, GlyphName> = {\n pdf: 'file-text',\n document: 'file-type',\n spreadsheet: 'file-spreadsheet',\n presentation: 'presentation',\n image: 'file-image',\n video: 'file-video',\n audio: 'file-audio',\n archive: 'file-archive',\n other: 'file',\n};\n\n/** The parts focus can rest on in a job, in the order they are drawn. */\nconst FOCUSABLE_PARTS = ['job-title', 'download', 'retry', 'cancel', 'toggle', 'remove'] as const;\n\nconst WAITING_ROWS = [0, 1, 2];\n\nconst SAMPLE_LIMIT = 12;\n\nconst COUNT_KEYS = ['total', 'processed', 'created', 'updated', 'skipped', 'failed'] as const;\n\n/** A deadline is a date: day, month and time, in every time format. */\nconst DEADLINE: Intl.DateTimeFormatOptions = {\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n};\n\nfunction createRequest<Reason extends string>(\n reason: Reason,\n event: Event | undefined,\n): ImportExportRequest<Reason> {\n let cancelled = false;\n return {\n reason,\n event,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n };\n}\n\n/** A click with no coordinates is a key. */\nfunction pressReason(event: Event): ImportExportPressReason {\n return (event as MouseEvent).detail === 0 ? 'keyboard' : 'pointer';\n}\n\nfunction escapeKey(key: string): string {\n return key.replace(/[^\\w-]/g, (character) => `-${character.charCodeAt(0).toString(16)}-`);\n}\n\nfunction sameKeys(a: readonly string[], b: readonly string[]): boolean {\n return a.length === b.length && a.every((key, index) => key === b[index]);\n}\n\n/** What a job's own actions template is handed. */\nexport interface ImportExportJobContext {\n $implicit: ImportExportJob;\n}\n\n/** One row of a job's files, resolved for the template. */\ninterface FileRow {\n role: JobFileRole;\n label: string;\n file: JobFile;\n stem: string;\n extension: string;\n size: string | null;\n note: string | null;\n downloadable: boolean;\n availability: string;\n}\n\n/** Everything the template draws for one job, resolved once per render. */\ninterface JobView {\n job: ImportExportJob;\n ids: {\n title: string;\n status: string;\n toggle: string;\n details: string;\n control: (part: string) => string;\n };\n outcome: string | null;\n controls: JobControls;\n ordered: readonly string[];\n removable: boolean;\n expanded: boolean;\n kind: FileKind;\n kindGlyph: GlyphName;\n directionText: string;\n mark: GlyphName | 'spinner';\n file: { stem: string; extension: string; size: string | null } | null;\n time: FormattedTimestamp | null;\n statusText: string;\n progressText: readonly string[];\n summary: readonly string[];\n message: string | null;\n downloadFile: JobFile | null;\n downloadLabel: string;\n retryLabel: string;\n counts: readonly { key: string; label: string; value: string }[];\n files: readonly FileRow[];\n errorNote: string | null;\n}\n\n/**\n * The consumer's own controls for one job, after the family's.\n *\n * ```html\n * <ng-template slImportExportJobActions let-job>\n * <a slButtonLink size=\"sm\" variant=\"ghost\" [href]=\"'/jobs/' + job.key\">Abrir</a>\n * </ng-template>\n * ```\n */\n@Directive({ selector: 'ng-template[slImportExportJobActions]', standalone: true })\nexport class SlImportExportJobActions {\n readonly template = inject(TemplateRef<ImportExportJobContext>);\n}\n\n/** The consumer's controls in the header: an import dialog's trigger, an export button. */\n@Directive({\n selector: '[slImportExportCenterActions]',\n standalone: true,\n host: { 'data-part': 'actions' },\n})\nexport class SlImportExportCenterActions {}\n\n/** Replaces the view's empty page. */\n@Directive({ selector: '[slImportExportCenterEmpty]', standalone: true })\nexport class SlImportExportCenterEmpty {}\n\n/** The consumer's footer: the link from a popover to the whole page. */\n@Directive({\n selector: '[slImportExportCenterFooter]',\n standalone: true,\n host: { 'data-part': 'footer' },\n})\nexport class SlImportExportCenterFooter {}\n\n/**\n * The jobs an application runs away from the page — imports and exports —\n * and what the reader can do about each.\n *\n * **It holds none of the facts.** `jobs` is the consumer's array. Cancelling,\n * retrying, removing, downloading, opening and loading are outputs with a\n * reason, and the store answers by changing the array. The family never\n * opens a connection and never transfers a byte: `upload` does, in the\n * import dialog the consumer projects into the actions slot.\n *\n * **Two values move:** `[(view)]` and `[(expanded)]`, each with a request\n * output that carries the reason and can be cancelled.\n *\n * **What a job offers is one table,** `jobControls` in\n * `@slotted/core/import-export-center`, which the React binding renders too.\n *\n * **Focus never falls to the body.** A job that finishes while focus is on\n * Cancel keeps focus in the job; a job that leaves takes focus to the same\n * control of the job in its place.\n */\n@Component({\n selector: 'section[slImportExportCenter]',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlButtonEnd,\n SlButtonLink,\n SlGlyph,\n SlIcon,\n SlImportExportControl,\n SlProgressBar,\n SlResultState,\n SlResultStateActions,\n SlResultStateContent,\n SlResultStateDescription,\n SlResultStateTitle,\n SlSkeleton,\n SlSkeletonText,\n SlTab,\n SlTabList,\n SlTable,\n SlTableBody,\n SlTableCaption,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTabs,\n ],\n template: `\n <div data-part=\"header\">\n @switch (levelValue()) {\n @case ('3') {\n <h3 data-part=\"title\" [id]=\"titleId\">\n {{ t('title') }}\n @if (active() > 0) {\n <span data-part=\"count\">{{ t('active', { count: active() }) }}</span>\n }\n </h3>\n }\n @case ('4') {\n <h4 data-part=\"title\" [id]=\"titleId\">\n {{ t('title') }}\n @if (active() > 0) {\n <span data-part=\"count\">{{ t('active', { count: active() }) }}</span>\n }\n </h4>\n }\n @default {\n <h2 data-part=\"title\" [id]=\"titleId\">\n {{ t('title') }}\n @if (active() > 0) {\n <span data-part=\"count\">{{ t('active', { count: active() }) }}</span>\n }\n </h2>\n }\n }\n <div data-part=\"tools\">\n @if (finished().length > 0) {\n <span data-part=\"clear\">\n <button\n slButton\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n type=\"button\"\n (click)=\"clear($event)\"\n >\n {{ t('clear') }}\n </button>\n </span>\n }\n <ng-content select=\"[slImportExportCenterActions]\" />\n </div>\n </div>\n @if (viewList().length > 1) {\n <div data-part=\"views\">\n <div\n slTabs\n track=\"none\"\n [size]=\"sizeValue()\"\n [value]=\"currentView()\"\n (valueChange)=\"forwardView($event)\"\n >\n <div slTabList [attr.aria-label]=\"t('views')\">\n @for (entry of viewList(); track entry.value) {\n <div slTab [value]=\"entry.value\" [controls]=\"listId\">{{ entry.label }}</div>\n }\n </div>\n </div>\n </div>\n }\n @if (status() === 'error') {\n <div data-part=\"error\">\n <section slResultState reach=\"section\" status=\"error\" live=\"off\">\n <div slResultStateContent>\n <div slResultStateTitle>{{ t('loadError') }}</div>\n <p slResultStateDescription>{{ t('loadErrorDescription') }}</p>\n </div>\n <div slResultStateActions>\n <button\n slButton\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n type=\"button\"\n (click)=\"reload($event)\"\n >\n {{ t('reload') }}\n </button>\n </div>\n </section>\n </div>\n } @else if (showEmpty()) {\n <div data-part=\"empty\">\n <ng-content select=\"[slImportExportCenterEmpty]\">\n <section slResultState reach=\"section\" status=\"empty\" live=\"off\">\n <div slResultStateContent>\n <div slResultStateTitle>{{ emptyTitle() }}</div>\n <p slResultStateDescription>{{ t('emptyDescription') }}</p>\n </div>\n </section>\n </ng-content>\n </div>\n } @else {\n <ul\n #list\n data-part=\"list\"\n tabindex=\"-1\"\n [id]=\"listId\"\n [attr.aria-labelledby]=\"titleId\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n (focusin)=\"rememberFocus($event)\"\n >\n @if (waiting()) {\n @for (row of waitingRows; track row) {\n <li data-part=\"job\" aria-hidden=\"true\">\n <span data-part=\"visual\"><span slSkeleton shape=\"block\"></span></span>\n <div data-part=\"body\">\n <span slSkeletonText [lines]=\"2\"></span>\n <span slSkeletonText [lines]=\"1\"></span>\n </div>\n </li>\n }\n } @else {\n @for (view of jobViews(); track view.job.key) {\n <ng-container\n [ngTemplateOutlet]=\"jobTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: view }\"\n />\n }\n }\n </ul>\n }\n @if (status() !== 'error' && growingValue() === 'button' && hasMore() && !waiting()) {\n <button\n data-part=\"more\"\n type=\"button\"\n [attr.aria-disabled]=\"loading() ? 'true' : null\"\n [attr.data-loading]=\"loading() ? '' : null\"\n (click)=\"loadMore($event)\"\n >\n {{ loading() ? t('loading') : t('loadMore') }}\n </button>\n }\n <ng-content select=\"[slImportExportCenterFooter]\" />\n\n <ng-template #fileName let-stem=\"stem\" let-extension=\"extension\">\n <span data-part=\"file-name\" dir=\"auto\"\n ><span data-part=\"name\">{{ stem }}</span>\n @if (extension !== '') {\n <span data-part=\"extension\">{{ extension }}</span>\n }\n </span>\n </ng-template>\n\n <ng-template\n #download\n let-view=\"view\"\n let-file=\"file\"\n let-role=\"role\"\n let-label=\"label\"\n let-primary=\"primary\"\n >\n <span data-part=\"download\">\n @if (file.href === undefined) {\n <button\n slButton\n size=\"sm\"\n tone=\"secondary\"\n type=\"button\"\n [variant]=\"primary ? 'outline' : 'ghost'\"\n [attr.id]=\"primary ? view.ids.control('download') : null\"\n [attr.aria-labelledby]=\"\n primary ? view.ids.control('download') + ' ' + view.ids.title : null\n \"\n [attr.aria-describedby]=\"primary ? view.ids.status : null\"\n (click)=\"askDownload(view.job.key, role, $event)\"\n >\n {{ label }}\n </button>\n } @else {\n <a\n slButtonLink\n size=\"sm\"\n tone=\"secondary\"\n [variant]=\"primary ? 'outline' : 'ghost'\"\n [href]=\"file.href\"\n [attr.download]=\"file.name\"\n [attr.id]=\"primary ? view.ids.control('download') : null\"\n [attr.aria-labelledby]=\"\n primary ? view.ids.control('download') + ' ' + view.ids.title : null\n \"\n [attr.aria-describedby]=\"primary ? view.ids.status : null\"\n (click)=\"askDownload(view.job.key, role, $event)\"\n >{{ label }}</a\n >\n }\n </span>\n </ng-template>\n\n <ng-template #jobTemplate let-view>\n <li\n data-part=\"job\"\n [attr.data-key]=\"view.job.key\"\n [attr.data-direction]=\"view.job.direction\"\n [attr.data-status]=\"view.job.status\"\n [attr.data-outcome]=\"view.outcome\"\n [attr.data-expired]=\"view.controls.expired ? '' : null\"\n [attr.data-expanded]=\"view.expanded ? '' : null\"\n >\n <span data-part=\"visual\" aria-hidden=\"true\" [attr.data-kind]=\"view.kind\"\n ><span slIcon><svg slGlyph [name]=\"view.kindGlyph\"></svg></span\n ></span>\n <div data-part=\"body\">\n <div data-part=\"heading\">\n @if (view.job.href === undefined) {\n <span data-part=\"job-title\" tabindex=\"-1\" [id]=\"view.ids.title\">{{\n view.job.title\n }}</span>\n } @else {\n <a\n data-part=\"job-title\"\n [id]=\"view.ids.title\"\n [attr.href]=\"view.job.href\"\n (click)=\"open(view.job.key, $event)\"\n >{{ view.job.title }}</a\n >\n }\n <p data-part=\"meta\">\n <span>{{ view.directionText }}</span>\n @if (view.job.format !== undefined) {\n <span>{{ view.job.format }}</span>\n }\n @if (view.file !== null) {\n <span\n ><ng-container\n [ngTemplateOutlet]=\"fileName\"\n [ngTemplateOutletContext]=\"{\n stem: view.file.stem,\n extension: view.file.extension,\n }\"\n /></span>\n @if (view.file.size !== null) {\n <span>{{ view.file.size }}</span>\n }\n }\n @if (view.job.actor !== undefined) {\n <span>{{ view.job.actor }}</span>\n }\n @if (view.time !== null) {\n <time\n data-part=\"time\"\n [attr.datetime]=\"view.time.dateTime\"\n [attr.title]=\"view.time.title\"\n >{{ view.time.text }}</time\n >\n }\n </p>\n </div>\n <div data-part=\"status\" [id]=\"view.ids.status\">\n <span data-part=\"mark\" aria-hidden=\"true\">\n @if (view.mark === 'spinner') {\n <span data-ui=\"spinner\"></span>\n } @else {\n <span slIcon><svg slGlyph [name]=\"view.mark\"></svg></span>\n }\n </span>\n <span data-part=\"status-label\"\n ><span>{{ view.statusText }}</span>\n @if (view.job.stage) {\n <span data-part=\"stage\" [attr.title]=\"view.job.stage\">{{ view.job.stage }}</span>\n }\n </span>\n </div>\n @if (view.job.status === 'running') {\n <div data-part=\"progress\">\n <div\n slProgressBar\n hideLabel\n size=\"sm\"\n tone=\"accent\"\n [delay]=\"0\"\n [label]=\"view.job.title\"\n [max]=\"view.job.progress?.max ?? 100\"\n [value]=\"view.job.progress?.value ?? null\"\n [valueText]=\"\n view.progressText.length > 0 ? view.progressText.join(', ') : undefined\n \"\n ></div>\n @if (view.progressText.length > 0) {\n <span data-part=\"progress-text\">\n @for (item of view.progressText; track item) {\n <span>{{ item }}</span>\n }\n </span>\n }\n </div>\n }\n @if (view.summary.length > 0) {\n <p data-part=\"summary\">\n @for (item of view.summary; track item) {\n <span>{{ item }}</span>\n }\n </p>\n }\n @if (view.message !== null) {\n <p data-part=\"message\">{{ view.message }}</p>\n }\n </div>\n @if (view.ordered.length > 0 || view.removable || jobActionsTemplate()) {\n <div data-part=\"controls\">\n @for (part of view.ordered; track part) {\n @switch (part) {\n @case ('download') {\n @if (view.downloadFile !== null) {\n <ng-container\n [ngTemplateOutlet]=\"download\"\n [ngTemplateOutletContext]=\"{\n view,\n file: view.downloadFile,\n role: view.controls.download,\n label: view.downloadLabel,\n primary: true,\n }\"\n />\n }\n }\n @case ('toggle') {\n <span data-part=\"toggle\" [attr.data-expanded]=\"view.expanded ? '' : null\">\n <button\n slButton\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n type=\"button\"\n [id]=\"view.ids.toggle\"\n [attr.aria-expanded]=\"view.expanded ? 'true' : 'false'\"\n [attr.aria-controls]=\"view.ids.details\"\n [attr.aria-labelledby]=\"view.ids.toggle + ' ' + view.ids.title\"\n (click)=\"toggle(view.job.key, pressReason($event), $event)\"\n >\n {{ t('details') }}\n <span slButtonEnd\n ><span data-part=\"chevron\"\n ><span slIcon><svg slGlyph name=\"chevron-down\"></svg></span></span\n ></span>\n </button>\n </span>\n }\n @default {\n <span [attr.data-part]=\"part\">\n <button\n slButton\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n type=\"button\"\n [id]=\"view.ids.control(part)\"\n [attr.aria-labelledby]=\"view.ids.control(part) + ' ' + view.ids.title\"\n [attr.aria-describedby]=\"view.ids.status\"\n (click)=\"press(part, view.job.key, $event)\"\n >\n {{ part === 'cancel' ? t('cancel') : view.retryLabel }}\n </button>\n </span>\n }\n }\n }\n @if (jobActionsTemplate(); as own) {\n <span data-part=\"job-actions\"\n ><ng-container\n [ngTemplateOutlet]=\"own.template\"\n [ngTemplateOutletContext]=\"{ $implicit: view.job }\"\n /></span>\n }\n @if (view.removable) {\n <button\n slImportExportControl\n data-part=\"remove\"\n [text]=\"t('remove')\"\n [describedBy]=\"view.ids.title\"\n (click)=\"removeOne(view.job.key, $event)\"\n >\n <span slIcon><svg slGlyph name=\"x\"></svg></span>\n </button>\n }\n </div>\n }\n @if (view.expanded) {\n <div\n data-part=\"details\"\n role=\"region\"\n [id]=\"view.ids.details\"\n [attr.aria-labelledby]=\"view.ids.toggle\"\n >\n @if (view.counts.length > 0) {\n <dl data-part=\"counts\">\n @for (count of view.counts; track count.key) {\n <div [attr.data-count]=\"count.key\">\n <dt>{{ count.label }}</dt>\n <dd>{{ count.value }}</dd>\n </div>\n }\n </dl>\n }\n @if (view.files.length > 0) {\n <ul data-part=\"files\">\n @for (row of view.files; track row.role) {\n <li data-part=\"file\" [attr.data-availability]=\"row.availability\">\n <span data-part=\"meta\">\n <strong>{{ row.label }}</strong>\n <span\n ><ng-container\n [ngTemplateOutlet]=\"fileName\"\n [ngTemplateOutletContext]=\"{ stem: row.stem, extension: row.extension }\"\n /></span>\n @if (row.size !== null) {\n <span>{{ row.size }}</span>\n }\n @if (row.note !== null) {\n <span>{{ row.note }}</span>\n }\n </span>\n @if (row.downloadable) {\n <ng-container\n [ngTemplateOutlet]=\"download\"\n [ngTemplateOutletContext]=\"{\n view,\n file: row.file,\n role: row.role,\n label: t('download'),\n primary: false,\n }\"\n />\n }\n </li>\n }\n </ul>\n }\n @if ((view.job.errors?.length ?? 0) > 0) {\n <div data-part=\"errors\">\n <div slTable variant=\"framed\" [columns]=\"4\">\n <div slTableContent>\n <caption slTableCaption>\n {{\n t('errorsCaption')\n }}\n </caption>\n <thead slTableHead>\n <tr slTableRow>\n <th slTableColumnHeader numeric>{{ t('errorColumns.row') }}</th>\n <th slTableColumnHeader>{{ t('errorColumns.message') }}</th>\n <th slTableColumnHeader>{{ t('errorColumns.column') }}</th>\n <th slTableColumnHeader>{{ t('errorColumns.value') }}</th>\n </tr>\n </thead>\n <tbody slTableBody>\n @for (error of view.job.errors; track $index) {\n <tr slTableRow>\n <td slTableCell numeric>{{ formatCount(error.row) }}</td>\n <td slTableCell>{{ error.message }}</td>\n <td slTableCell>{{ error.column ?? '' }}</td>\n <td slTableCell>{{ error.value ?? '' }}</td>\n </tr>\n }\n </tbody>\n </div>\n </div>\n @if (view.errorNote !== null) {\n <p data-part=\"errors-note\">\n <span>{{ view.errorNote }}</span>\n </p>\n }\n </div>\n }\n </div>\n }\n </li>\n </ng-template>\n `,\n styleUrl: '../../../styles/src/import-export-center/import-export-center.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'slImportExportCenter',\n host: {\n 'data-ui': 'import-export-center',\n 'data-part': 'root',\n '[attr.data-size]': 'sizeValue()',\n '[attr.data-level]': 'levelValue()',\n '[attr.data-growing]': 'growingValue()',\n '[attr.data-time-format]': 'timeFormatValue()',\n '[attr.data-view]': 'currentView()',\n '[attr.data-loading]': \"loading() ? '' : null\",\n '[attr.data-status]': \"status() === 'error' ? 'error' : null\",\n '[attr.aria-labelledby]': 'labelledBy()',\n },\n})\nexport class SlImportExportCenter {\n /** The consumer's jobs, in the order they are drawn. The family changes none of them. */\n readonly jobs = input.required<readonly ImportExportJob[]>();\n /** The strip's entries. `all`, `import` and `export` when unstated; one entry draws no strip. */\n readonly views = input<readonly ImportExportView[] | undefined>(undefined);\n readonly size = input<ImportExportCenterSize | undefined>(undefined);\n readonly level = input<ImportExportCenterLevel | undefined>(undefined);\n readonly growing = input<ImportExportCenterGrowing | undefined>(undefined);\n readonly timeFormat = input<ImportExportCenterTimeFormat | undefined>(undefined);\n /** What numbers, sizes, times and deadlines are written in. Absent, the language in force. */\n readonly locale = input<string | undefined>(undefined);\n readonly timeZone = input<string | undefined>(undefined);\n /** The moment a relative reading and a deadline count from. State it for a stable server render. */\n readonly now = input<number | undefined>(undefined);\n readonly loading = input(false, { transform: booleanAttribute });\n readonly status = input<ImportExportCenterStatus>('ready');\n /** Whether the history has another page; `growing=\"button\"` draws `more` while it has. */\n readonly hasMore = input(false, { transform: booleanAttribute });\n /** Words laid over the catalog of the language in force, key by key. */\n readonly messages = input<PartialMessages<ImportExportCenterMessages> | undefined>(undefined);\n /** The view an unbound centre starts on, read once. */\n readonly defaultView = input<string | undefined>(undefined);\n /** The keys an unbound centre starts with shown, read once. */\n readonly defaultExpanded = input<readonly string[] | undefined>(undefined);\n /** The current view. Two-way. */\n readonly view = model<string | undefined>(undefined);\n /** The keys whose details are shown. Two-way. */\n readonly expanded = model<readonly string[] | undefined>(undefined);\n\n readonly viewRequest = output<ChangeRequest<string | undefined>>();\n readonly expandedRequest = output<ChangeRequest<readonly string[] | undefined>>();\n readonly cancelRequest = output<ImportExportJobRequest>();\n readonly retryRequest = output<ImportExportJobRequest>();\n readonly removeRequest = output<ImportExportRemoveRequest>();\n /** Asked before a download. With an `href` the link navigates unless cancelled; without one the consumer produces the file. */\n readonly downloadRequest = output<ImportExportDownloadRequest>();\n /** Asked before the title's link navigates to the job's page; cancellable. */\n readonly openRequest = output<ImportExportJobRequest>();\n readonly loadMoreRequest = output<ImportExportRequest<ImportExportPressReason>>();\n readonly reloadRequest = output<ImportExportRequest<ImportExportPressReason>>();\n\n private readonly defaults = injectImportExportCenterDefaults();\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n private readonly writtenLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n private readonly writtenLabelledBy = inject(new HostAttributeToken('aria-labelledby'), {\n optional: true,\n });\n private readonly listElement = viewChild<ElementRef<HTMLUListElement>>('list');\n protected readonly jobActionsTemplate = contentChild(SlImportExportJobActions);\n\n readonly id = inject(SlImportExportCenterIdFactory).next();\n readonly titleId = `${this.id}-title`;\n readonly listId = `${this.id}-list`;\n protected readonly waitingRows = WAITING_ROWS;\n protected readonly pressReason = pressReason;\n\n readonly sizeValue = computed(() => this.size() ?? this.defaults.size);\n readonly levelValue = computed(() => this.level() ?? this.defaults.level);\n readonly growingValue = computed(() => this.growing() ?? this.defaults.growing);\n readonly timeFormatValue = computed(() => this.timeFormat() ?? this.defaults.timeFormat);\n private readonly contextLocale = injectLocale();\n readonly localeValue = computed(() => this.locale() ?? this.contextLocale());\n readonly timeZoneValue = computed(() => this.timeZone() ?? this.defaults.timeZone);\n /** The family's words in the language in force, with this centre's `messages` laid over them. */\n readonly t = injectMessages(importExportCenterMessages, this.messages);\n\n protected readonly labelledBy = computed(() =>\n this.writtenLabel !== null ? null : (this.writtenLabelledBy ?? this.titleId),\n );\n\n readonly viewList = computed<readonly ImportExportView[]>(\n () =>\n this.views() ?? [\n { label: this.t('all'), value: 'all' },\n { label: this.t('imports'), value: 'import' },\n { label: this.t('exports'), value: 'export' },\n ],\n );\n\n /** The view: the model, then defaultView, then the first entry. */\n readonly currentView = computed(\n () => this.view() ?? this.defaultView() ?? this.viewList()[0]?.value ?? 'all',\n );\n\n /** The shown keys: the model, then defaultExpanded. */\n readonly currentExpanded = computed<readonly string[]>(\n () => this.expanded() ?? this.defaultExpanded() ?? [],\n );\n\n readonly visibleJobs = computed(() => filterJobs(this.jobs(), this.currentView()));\n readonly active = computed(() => activeJobCount(this.jobs()));\n readonly finished = computed(() =>\n this.visibleJobs().filter((job) => isFinishedJob(job) && job.removable !== false),\n );\n readonly waiting = computed(() => this.loading() && this.visibleJobs().length === 0);\n readonly showEmpty = computed(() => !this.waiting() && this.visibleJobs().length === 0);\n readonly emptyTitle = computed(() => {\n const view = this.currentView();\n return view === 'import'\n ? this.t('emptyImports')\n : view === 'export'\n ? this.t('emptyExports')\n : this.t('empty');\n });\n\n private readonly remaining = signal<ReadonlyMap<string, number | null>>(new Map());\n private readonly samples = new Map<string, ProgressSample[]>();\n\n readonly jobViews = computed<readonly JobView[]>(() => {\n const expanded = new Set(this.currentExpanded());\n return this.visibleJobs().map((job) => this.viewOf(job, expanded));\n });\n\n private memory: (FocusMemory & { element: HTMLElement }) | null = null;\n private revealing: string | null = null;\n private previous: ReadonlyMap<string, ImportExportJob> | null = null;\n\n constructor() {\n /* A transition of a shown job is announced once; the first render is not. */\n effect(() => {\n const jobs = this.jobs();\n untracked(() => {\n const seen = this.previous;\n this.previous = new Map(jobs.map((job) => [job.key, job]));\n if (seen === null) return;\n for (const job of jobs) {\n const transition = jobTransition(seen.get(job.key), job);\n if (transition !== null) {\n getLiveAnnouncer().announce(jobAnnouncement(transition, job, this.t));\n }\n }\n });\n });\n\n /* The time left: samples of the progress the family has seen, and the server's eta first. */\n effect(() => {\n const jobs = this.jobs();\n const now = this.now() ?? Date.now();\n const timeZone = this.timeZoneValue();\n untracked(() => {\n const next = new Map<string, number | null>();\n for (const job of jobs) {\n if (job.status !== 'running') {\n this.samples.delete(job.key);\n continue;\n }\n const value = job.progress?.value;\n const max = job.progress?.max;\n const list = this.samples.get(job.key) ?? [];\n if (value !== undefined && max !== undefined && list.at(-1)?.value !== value) {\n list.push({ at: Date.now(), max, value });\n if (list.length > SAMPLE_LIMIT) list.shift();\n this.samples.set(job.key, list);\n }\n next.set(job.key, remainingSeconds(job, list, { now, timeZone }));\n }\n this.remaining.set(next);\n });\n });\n\n /* A key that left the jobs leaves the set. */\n effect(() => {\n const present = new Set(this.jobs().map((job) => job.key));\n untracked(() => {\n const own = this.expanded();\n if (own === undefined) return;\n const kept = own.filter((key) => present.has(key));\n if (kept.length !== own.length) this.expanded.set(kept);\n });\n });\n\n /* After every render: focus that lost its element, and a job being revealed. */\n afterRenderEffect(() => {\n this.jobViews();\n untracked(() => {\n this.restoreFocus();\n this.finishReveal();\n });\n });\n }\n\n /** Focuses the first job's first control, or the list when there is none. */\n focus(): void {\n const list = this.listElement()?.nativeElement;\n const first = list?.querySelector<HTMLElement>(\n ':scope > [data-part=\"job\"] :is(a[data-part=\"job-title\"], [data-part=\"controls\"] button, [data-part=\"controls\"] a)',\n );\n (first ?? list)?.focus();\n }\n\n /** Shows a job's details, scrolls it into view and focuses its title: where a toast's View takes the reader. */\n reveal(key: string): void {\n const job = this.jobs().find((each) => each.key === key);\n if (job === undefined) return;\n const keys = this.currentExpanded();\n if (!keys.includes(key)) this.requestExpanded([...keys, key], 'programmatic', undefined);\n if (filterJobs([job], this.currentView()).length === 0) {\n this.selectView('all', 'programmatic', undefined);\n }\n this.revealing = key;\n }\n\n protected formatCount(value: number): string {\n return new Intl.NumberFormat(this.localeValue()).format(value);\n }\n\n private deadline(value: TimestampValue): string {\n return formatTimestamp(value, {\n absolute: DEADLINE,\n format: 'absolute',\n locale: this.localeValue(),\n timeZone: this.timeZoneValue(),\n }).text;\n }\n\n private viewOf(job: ImportExportJob, expandedKeys: ReadonlySet<string>): JobView {\n const t = this.t;\n const locale = this.localeValue();\n const clock = { now: this.now(), timeZone: this.timeZoneValue() };\n const prefix = `${this.id}-${escapeKey(job.key)}`;\n const ids = {\n control: (part: string) => `${prefix}-${part}`,\n details: `${prefix}-details`,\n status: `${prefix}-status`,\n title: `${prefix}-title`,\n toggle: `${prefix}-toggle`,\n };\n const controls = jobControls(job, clock);\n const kindFile = job.result ?? job.source;\n const kind: FileKind =\n kindFile !== undefined\n ? fileKind({ name: kindFile.name, type: kindFile.type ?? '' })\n : job.format !== undefined\n ? fileKind({ name: `job.${job.format.toLowerCase()}`, type: '' })\n : 'other';\n const shown =\n job.direction === 'export' ? (job.result ?? job.source) : (job.source ?? job.result);\n const when =\n job.status === 'succeeded' || job.status === 'failed'\n ? (job.finishedAt ?? job.createdAt)\n : job.createdAt;\n const counts: JobCounts = job.counts ?? {};\n const count = new Intl.NumberFormat(locale);\n const errors = job.errors ?? [];\n const total = Math.max(job.errorCount ?? 0, errors.length);\n const files: FileRow[] = (\n [\n ['source', job.source],\n ['result', job.result],\n ['errors', job.errorsFile],\n ] as const\n )\n .filter((entry): entry is readonly [JobFileRole, JobFile] => entry[1] !== undefined)\n .map(([role, file]) => {\n const availability = fileAvailability(file, clock);\n const { stem, extension } = splitName(file.name);\n return {\n availability,\n downloadable: availability === 'available' || availability === 'expires',\n extension,\n file,\n label: t(`fileLabels.${role}`),\n note:\n availability === 'denied'\n ? (file.denied ?? null)\n : file.expiresAt === undefined\n ? null\n : availability === 'expired'\n ? t('expired', { date: this.deadline(file.expiresAt) })\n : t('expires', { date: this.deadline(file.expiresAt) }),\n role,\n size: file.size === undefined ? null : formatBytes(file.size, locale),\n stem,\n };\n });\n\n const downloadFile =\n controls.download === 'errors'\n ? (job.errorsFile ?? null)\n : controls.download === 'result'\n ? (job.result ?? null)\n : null;\n const mark = jobGlyph(job);\n\n return {\n controls,\n counts: COUNT_KEYS.filter((name) => typeof counts[name] === 'number').map((name) => ({\n key: name,\n label: t(`countLabels.${name}`),\n value: count.format(counts[name] ?? 0),\n })),\n downloadFile,\n downloadLabel: controls.download === 'errors' ? t('downloadErrors') : t('download'),\n errorNote:\n total > errors.length && errors.length > 0\n ? t('sample', { shown: errors.length, total })\n : null,\n expanded:\n expandedKeys.has(job.key) && controls.controls.includes('toggle') && hasDetails(job),\n file:\n shown === undefined\n ? null\n : {\n ...splitName(shown.name),\n size: shown.size === undefined ? null : formatBytes(shown.size, locale),\n },\n files,\n ids,\n job,\n directionText: t(job.direction),\n kind,\n kindGlyph: KIND_GLYPH[kind],\n mark,\n message: this.messageOf(job, clock),\n ordered: controls.controls.filter((part) => part !== 'remove'),\n outcome: jobOutcome(job),\n progressText:\n job.status === 'running'\n ? jobProgressText(job, {\n locale,\n t,\n remaining: this.remaining().get(job.key),\n })\n : [],\n removable: controls.controls.includes('remove'),\n retryLabel: controls.retry === 'regenerate' ? t('regenerate') : t('retry'),\n statusText: jobStatusText(job, t),\n summary: jobSummaryText(job, { locale, t }),\n time:\n when === undefined\n ? null\n : formatTimestamp(when, {\n format: this.timeFormatValue(),\n locale,\n now: this.now(),\n timeZone: this.timeZoneValue(),\n }),\n };\n }\n\n private messageOf(\n job: ImportExportJob,\n clock: { now: number | undefined; timeZone: string | undefined },\n ): string | null {\n if (job.message !== undefined && job.message !== '') return job.message;\n const result = job.result;\n if (result === undefined) return null;\n const availability = fileAvailability(result, clock);\n if (availability === 'denied') return result.denied ?? null;\n if (result.expiresAt === undefined) return null;\n if (availability === 'expired')\n return this.t('expired', { date: this.deadline(result.expiresAt) });\n if (availability === 'expires')\n return this.t('expires', { date: this.deadline(result.expiresAt) });\n return null;\n }\n\n /* ── The two models ────────────────────────────────────────────────── */\n\n protected forwardView(request: ChangeRequest<string | undefined>) {\n if (request.value === undefined) return;\n this.selectView(request.value, request.reason, request.source);\n }\n\n private selectView(next: string, reason: ChangeReason, source: unknown) {\n if (next === this.currentView()) return;\n let cancelled = false;\n const state = createControllable<string | undefined>({\n initial: this.currentView(),\n onRequest: (request) => {\n this.viewRequest.emit(request);\n cancelled = request.cancelled;\n },\n });\n const moved = state.request(next, reason, source);\n /* The model is the state: written once the request is accepted, which is\n what `[(view)]` binds and what an unbound centre keeps. */\n if (!cancelled && moved) this.view.set(next);\n }\n\n private requestExpanded(next: readonly string[], reason: ChangeReason, source: unknown) {\n if (sameKeys(next, this.currentExpanded())) return;\n let cancelled = false;\n const state = createControllable<readonly string[] | undefined>({\n equals: (a, b) => sameKeys(a ?? [], b ?? []),\n initial: this.currentExpanded(),\n onRequest: (request) => {\n this.expandedRequest.emit(request);\n cancelled = request.cancelled;\n },\n });\n const moved = state.request(next, reason, source);\n if (!cancelled && moved) this.expanded.set(next);\n }\n\n protected toggle(key: string, reason: ImportExportPressReason, event: Event) {\n const keys = this.currentExpanded();\n this.requestExpanded(\n keys.includes(key) ? keys.filter((each) => each !== key) : [...keys, key],\n reason,\n event,\n );\n }\n\n /* ── Requests ──────────────────────────────────────────────────────── */\n\n protected press(part: string, key: string, event: Event) {\n const request = Object.assign(createRequest(pressReason(event), event), { key });\n (part === 'cancel' ? this.cancelRequest : this.retryRequest).emit(request);\n }\n\n protected removeOne(key: string, event: Event) {\n this.removeRequest.emit(\n Object.assign(createRequest(pressReason(event), event), { keys: [key] }),\n );\n }\n\n protected clear(event: Event) {\n this.removeRequest.emit(\n Object.assign(createRequest('clear' as const, event), {\n keys: this.finished().map((job) => job.key),\n }),\n );\n }\n\n protected askDownload(key: string, file: JobFileRole, event: Event) {\n const request = Object.assign(createRequest(pressReason(event), event), { file, key });\n this.downloadRequest.emit(request);\n if (request.cancelled) event.preventDefault();\n }\n\n protected open(key: string, event: Event) {\n const request = Object.assign(createRequest(pressReason(event), event), { key });\n this.openRequest.emit(request);\n if (request.cancelled) event.preventDefault();\n }\n\n protected loadMore(event: Event) {\n if (this.loading()) return;\n this.loadMoreRequest.emit(createRequest(pressReason(event), event));\n }\n\n protected reload(event: Event) {\n this.reloadRequest.emit(createRequest(pressReason(event), event));\n }\n\n /* ── Focus ─────────────────────────────────────────────────────────── */\n\n protected rememberFocus(event: FocusEvent) {\n const list = this.listElement()?.nativeElement;\n const target = event.target as HTMLElement | null;\n const job = target?.closest<HTMLElement>('[data-part=\"job\"]') ?? null;\n if (list === undefined || target === null || job === null || !list.contains(job)) {\n this.memory = null;\n return;\n }\n const all = [...list.querySelectorAll<HTMLElement>(':scope > [data-part=\"job\"]')];\n let part = 'job-title';\n for (\n let node: HTMLElement | null = target;\n node !== null && node !== job;\n node = node.parentElement\n ) {\n const name = node.dataset['part'];\n if (name !== undefined && (FOCUSABLE_PARTS as readonly string[]).includes(name)) {\n part = name;\n break;\n }\n }\n this.memory = { element: target, index: all.indexOf(job), key: job.dataset['key'] ?? '', part };\n }\n\n private focusPart(list: HTMLElement, key: string, part: string) {\n const job = list.querySelector<HTMLElement>(\n `:scope > [data-part=\"job\"][data-key=\"${CSS.escape(key)}\"]`,\n );\n const holder = job?.querySelector<HTMLElement>(`[data-part=\"${part}\"]`) ?? null;\n const target =\n holder === null\n ? null\n : holder.matches('button, a, [tabindex]')\n ? holder\n : holder.querySelector<HTMLElement>('button, a');\n target?.focus();\n }\n\n private restoreFocus() {\n const kept = this.memory;\n const list = this.listElement()?.nativeElement;\n if (kept === null || list === undefined || kept.element.isConnected) return;\n const active = list.ownerDocument.activeElement;\n if (active !== null && active !== list.ownerDocument.body) return;\n const drawn: FocusableJob[] = [\n ...list.querySelectorAll<HTMLElement>(':scope > [data-part=\"job\"][data-key]'),\n ].map((job) => ({\n key: job.dataset['key'] ?? '',\n parts: FOCUSABLE_PARTS.filter(\n (part) => part !== 'job-title' && job.querySelector(`[data-part=\"${part}\"]`) !== null,\n ),\n }));\n const destination = focusDestination(kept, drawn);\n this.memory = null;\n if ('list' in destination) list.focus();\n else this.focusPart(list, destination.key, destination.part);\n }\n\n private finishReveal() {\n const key = this.revealing;\n const list = this.listElement()?.nativeElement;\n if (key === null || list === undefined) return;\n this.revealing = null;\n const job = list.querySelector<HTMLElement>(\n `:scope > [data-part=\"job\"][data-key=\"${CSS.escape(key)}\"]`,\n );\n if (job === null) return;\n job.scrollIntoView?.({ block: 'nearest' });\n job.querySelector<HTMLElement>('[data-part=\"job-title\"]')?.focus({ preventScroll: true });\n }\n\n /** The element the family renders on: the region a consumer's ref reaches. */\n get element(): HTMLElement {\n return this.native;\n }\n}\n","import { effect, inject, signal, untracked } from '@angular/core';\nimport type { Signal, TemplateRef } from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlToastService } from '@slotted/angular/toast';\nimport type { ToastContent, ToastMessage } from '@slotted/angular/toast';\nimport {\n importExportCenterMessages,\n type ImportExportCenterMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { jobNotice } from '@slotted/core/import-export-center';\nimport type { ImportExportJob } from '@slotted/core/import-export-center';\n\nexport interface JobToastsOptions {\n /**\n * The toast's View control, written by the consumer and rendered per\n * message. A function — a `viewChild` signal — is read when a toast is\n * shown, so a template that exists only after the view is created still\n * reaches it. The message's `data` carries `{ key }`, and `noticeKey(message.id)`\n * from `@slotted/core/import-export-center` reads the same key back.\n */\n actions?:\n | TemplateRef<{ $implicit: ToastMessage<ToastContent> }>\n | (() => TemplateRef<{ $implicit: ToastMessage<ToastContent> }> | undefined)\n | undefined;\n /** Words laid over the catalog of the language in force: the announcement a toast carries. */\n messages?: PartialMessages<ImportExportCenterMessages> | undefined;\n}\n\n/** What a notice's toast carries in `data`: the job it points at. */\nexport interface JobToastData {\n readonly key: string;\n}\n\n/**\n * A toast that points at a job, for a page that is not the centre: the job\n * started, finished, finished with failed rows, failed. Called once in an\n * injection context where the application keeps its jobs — the shell — so\n * the reader hears of a job that finishes while they work elsewhere.\n *\n * The toast only points. It carries no progress, no cancel and no download;\n * its one action is the consumer's View, which takes the reader to the centre\n * and calls its `reveal(key)`. Its id is the job's key under\n * `import-export-center:`, so the finishing notice replaces the starting one\n * in place. Its announcement is the sentence the centre says for the same\n * transition, which the shared announcer does not repeat when both are\n * mounted. The jobs present the first time the signal is read made no move\n * the reader saw, and get no toast.\n */\nexport function jobToasts(\n jobs: Signal<readonly ImportExportJob[]>,\n { actions, messages }: JobToastsOptions = {},\n): void {\n const toasts = inject(SlToastService);\n const t = injectMessages(importExportCenterMessages, signal(messages));\n let previous: ReadonlyMap<string, ImportExportJob> | null = null;\n\n effect(() => {\n const current = jobs();\n untracked(() => {\n const seen = previous;\n previous = new Map(current.map((job) => [job.key, job]));\n if (seen === null) return;\n for (const job of current) {\n const notice = jobNotice(seen.get(job.key), job, t);\n if (notice === null) continue;\n const template = typeof actions === 'function' ? actions() : actions;\n toasts.show({\n ...(template === undefined ? {} : { actions: template }),\n announcement: notice.title,\n data: { key: notice.key } satisfies JobToastData,\n description: notice.description,\n id: notice.id,\n loading: notice.loading,\n title: notice.title,\n tone: notice.tone,\n });\n }\n });\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,280 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, inject, Injectable, input, booleanAttribute, HostAttributeToken, computed, ViewEncapsulation, ChangeDetectionStrategy, Component, Directive } from '@angular/core';
3
+ import { SlGlyph, SlIcon } from '@slotted/angular/icon';
4
+
5
+ /**
6
+ * The word a reader hears before the message, per tone.
7
+ *
8
+ * GOV.UK's Error message component publishes the idea and hard-codes the word;
9
+ * this table generalises it to every tone that is a severity and puts it behind
10
+ * the token below, which is the only translation surface this library has
11
+ * today. `accent` and `secondary` carry none: information and help announce
12
+ * themselves by their sentence, and a reader told “Information:” before every
13
+ * hint hears one more word per field for nothing.
14
+ */
15
+ const INLINE_MESSAGE_PREFIXES = {
16
+ accent: null,
17
+ secondary: null,
18
+ success: 'Success:',
19
+ warning: 'Warning:',
20
+ danger: 'Error:',
21
+ };
22
+ const FALLBACK = {
23
+ live: 'off',
24
+ mark: 'glyph',
25
+ prefixes: INLINE_MESSAGE_PREFIXES,
26
+ size: 'sm',
27
+ tone: 'secondary',
28
+ };
29
+ const INLINE_MESSAGE_DEFAULTS = new InjectionToken('slotted inline message defaults', { providedIn: 'root', factory: () => FALLBACK });
30
+ /**
31
+ * An application decides once what its messages are painted like and — the one
32
+ * that matters — what its severities are called, rather than repeating the same
33
+ * inputs on every field in a form. A message that states any of them itself
34
+ * still wins: an explicit input is never overridden by the token.
35
+ *
36
+ * `prefixes` is merged over the shipped table rather than replacing it, so a
37
+ * Portuguese application writes the three words it has and inherits the shape.
38
+ */
39
+ function provideInlineMessageDefaults(defaults) {
40
+ return {
41
+ provide: INLINE_MESSAGE_DEFAULTS,
42
+ useFactory: () => ({
43
+ live: defaults.live ?? FALLBACK.live,
44
+ mark: defaults.mark ?? FALLBACK.mark,
45
+ prefixes: { ...FALLBACK.prefixes, ...defaults.prefixes },
46
+ size: defaults.size ?? FALLBACK.size,
47
+ tone: defaults.tone ?? FALLBACK.tone,
48
+ }),
49
+ };
50
+ }
51
+ /** What a message renders as here, before it states anything of its own. */
52
+ function injectInlineMessageDefaults() {
53
+ return inject(INLINE_MESSAGE_DEFAULTS);
54
+ }
55
+ /**
56
+ * Application-scoped rather than module-scoped, for the reason `tag` records: a
57
+ * module-level counter produces colliding sequences when two applications
58
+ * render in one server process, and the server and the client sequences must
59
+ * match for hydration.
60
+ */
61
+ class SlInlineMessageIdFactory {
62
+ count = 0;
63
+ next() {
64
+ this.count += 1;
65
+ return `slotted-inline-message-${this.count}`;
66
+ }
67
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlInlineMessageIdFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
68
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlInlineMessageIdFactory, providedIn: 'root' });
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlInlineMessageIdFactory, decorators: [{
71
+ type: Injectable,
72
+ args: [{ providedIn: 'root' }]
73
+ }] });
74
+
75
+ /**
76
+ * The glyph each tone draws: `specs/components/inline-message/contract.json`
77
+ * holds the map. Help is not a severity and draws none.
78
+ */
79
+ const TONE_GLYPH = {
80
+ accent: 'circle-info',
81
+ secondary: null,
82
+ success: 'circle-check',
83
+ warning: 'triangle-alert',
84
+ danger: 'circle-alert',
85
+ };
86
+ /**
87
+ * The two roles that announce, and the value that does not. Both roles imply
88
+ * `aria-live` and `aria-atomic`, so the whole message is read rather than the
89
+ * word that changed, and nothing here writes either attribute by hand.
90
+ */
91
+ const LIVE_ROLE = {
92
+ off: null,
93
+ polite: 'status',
94
+ assertive: 'alert',
95
+ };
96
+ /**
97
+ * One sentence about something else: a field, a section, an action. Help, an
98
+ * error, a warning, a confirmation, or a wait.
99
+ *
100
+ * The directive is written on the consumer's own element, and the element it
101
+ * belongs on is a `p`: the message is a sentence of prose about something else,
102
+ * and a paragraph is the box a screen reader reads as one unit.
103
+ *
104
+ * **The severity is a word as well as a colour.** A reader who cannot see the
105
+ * message hears the sentence and nothing else — neither the red ink nor the
106
+ * crossed circle reaches the accessibility tree — so the family writes the
107
+ * severity in clipped text before the message, which is GOV.UK's answer
108
+ * generalised to every tone and to a table an application replaces once.
109
+ *
110
+ * **The role goes on this element, not on an inner one.** `slAlert` puts its
111
+ * live role on the text part because it has a dismiss button beside the text,
112
+ * and MDN's `alert` role reference is explicit that the role is for text
113
+ * content alone. This family has no controls, so there is nothing to keep out.
114
+ */
115
+ class SlInlineMessage {
116
+ /** Defaults to the token, then to `secondary` — help text. */
117
+ tone = input(undefined, /* @ts-ignore */
118
+ ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
119
+ /** Defaults to the token, then to `sm`. */
120
+ size = input(undefined, /* @ts-ignore */
121
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
122
+ /** Defaults to the token, then to `off`. */
123
+ live = input(undefined, /* @ts-ignore */
124
+ ...(ngDevMode ? [{ debugName: "live" }] : /* istanbul ignore next */ []));
125
+ /**
126
+ * Which mark is drawn. Defaults to the token, then to `glyph`. `slField` and
127
+ * `slFieldGroup` ask for `none` instead, because a form reads a column of
128
+ * sentences rather than a column of silhouettes.
129
+ */
130
+ mark = input(undefined, /* @ts-ignore */
131
+ ...(ngDevMode ? [{ debugName: "mark" }] : /* istanbul ignore next */ []));
132
+ /**
133
+ * The word read before the message. Unstated is the tone's own — `Error:`,
134
+ * `Warning:`, `Success:` — and the empty string removes it, for a message
135
+ * whose sentence already names the severity.
136
+ */
137
+ prefix = input(undefined, /* @ts-ignore */
138
+ ...(ngDevMode ? [{ debugName: "prefix" }] : /* istanbul ignore next */ []));
139
+ /**
140
+ * Removes the mark's box from the markup, for a message that carries its own
141
+ * artwork beside it. `mark='none'` is the other way to draw nothing: it is an
142
+ * axis a provider can set for every message under it, and it leaves the box
143
+ * in place for `reserve` to hold a line open with.
144
+ */
145
+ hideIcon = input(false, { ...(ngDevMode ? { debugName: "hideIcon" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
146
+ /** The message is waiting for something: the mark becomes a turning ring. */
147
+ loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
148
+ /**
149
+ * Unstated rather than `false`, so a `field` can answer it once this family
150
+ * is inside one. Stated, it wins.
151
+ */
152
+ disabled = input(undefined, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
153
+ /**
154
+ * Holds one line box open whether or not there is a message, so the form
155
+ * below does not move when the error arrives.
156
+ */
157
+ reserve = input(false, { ...(ngDevMode ? { debugName: "reserve" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
158
+ defaults = injectInlineMessageDefaults();
159
+ /**
160
+ * An identifier bound by whatever renders the message. It is what a family
161
+ * that composes with this one — `field`, whose description and error *are*
162
+ * inline messages — uses to give the message an identifier derived from its
163
+ * own base, which a static attribute cannot express and a directive on the
164
+ * same element cannot write.
165
+ */
166
+ id = input(undefined, /* @ts-ignore */
167
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
168
+ writtenId = inject(new HostAttributeToken('id'), { optional: true });
169
+ generatedId = inject(SlInlineMessageIdFactory).next();
170
+ /**
171
+ * The identifier an `aria-describedby` or an `aria-errormessage` points at.
172
+ * A consumer's own is never replaced, and the generated one is reachable from
173
+ * a template through `exportAs` — which is the reach an Angular template has
174
+ * and a React consumer answers with `useId` in their own component.
175
+ *
176
+ * A getter rather than a signal, so `message.messageId` keeps reading as a
177
+ * value in every template that already writes it. The host binding below
178
+ * calls it in a reactive context, so the `id` input above is tracked.
179
+ */
180
+ get messageId() {
181
+ return this.id() ?? this.writtenId ?? this.generatedId;
182
+ }
183
+ /**
184
+ * A role the consumer wrote is never replaced by the family's. A host binding
185
+ * wins over a static attribute in Angular, so the written value has to be
186
+ * read before the binding is computed rather than after — the asymmetry with
187
+ * React, where a consumer's prop simply spreads over the family's.
188
+ */
189
+ writtenRole = inject(new HostAttributeToken('role'), { optional: true });
190
+ resolvedTone = computed(() => this.tone() ?? this.defaults.tone, /* @ts-ignore */
191
+ ...(ngDevMode ? [{ debugName: "resolvedTone" }] : /* istanbul ignore next */ []));
192
+ resolvedSize = computed(() => this.size() ?? this.defaults.size, /* @ts-ignore */
193
+ ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
194
+ resolvedLive = computed(() => this.live() ?? this.defaults.live, /* @ts-ignore */
195
+ ...(ngDevMode ? [{ debugName: "resolvedLive" }] : /* istanbul ignore next */ []));
196
+ resolvedMark = computed(() => this.mark() ?? this.defaults.mark, /* @ts-ignore */
197
+ ...(ngDevMode ? [{ debugName: "resolvedMark" }] : /* istanbul ignore next */ []));
198
+ /* The glyph the family draws when the page supplies none. A message that is
199
+ waiting draws a ring instead, and one that asked for no mark draws none. */
200
+ glyph = computed(() => {
201
+ const mark = this.resolvedMark();
202
+ if (this.loading() || mark === 'none')
203
+ return null;
204
+ return mark === 'dot' ? 'dot' : TONE_GLYPH[this.resolvedTone()];
205
+ }, /* @ts-ignore */
206
+ ...(ngDevMode ? [{ debugName: "glyph" }] : /* istanbul ignore next */ []));
207
+ role = computed(() => this.writtenRole ?? LIVE_ROLE[this.resolvedLive()], /* @ts-ignore */
208
+ ...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
209
+ /* Unstated asks the table; the empty string is a consumer removing the word. */
210
+ prefixWord = computed(() => this.prefix() ?? this.defaults.prefixes[this.resolvedTone()] ?? '', /* @ts-ignore */
211
+ ...(ngDevMode ? [{ debugName: "prefixWord" }] : /* istanbul ignore next */ []));
212
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlInlineMessage, deps: [], target: i0.ɵɵFactoryTarget.Component });
213
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlInlineMessage, isStandalone: true, selector: "[slInlineMessage]", inputs: { tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, live: { classPropertyName: "live", publicName: "live", isSignal: true, isRequired: false, transformFunction: null }, mark: { classPropertyName: "mark", publicName: "mark", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, hideIcon: { classPropertyName: "hideIcon", publicName: "hideIcon", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, reserve: { classPropertyName: "reserve", publicName: "reserve", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "inline-message", "data-part": "root" }, properties: { "attr.data-tone": "resolvedTone()", "attr.data-size": "resolvedSize()", "attr.data-live": "resolvedLive()", "attr.data-mark": "resolvedMark()", "attr.data-loading": "loading() ? '' : null", "attr.data-disabled": "disabled() === true ? '' : null", "attr.data-reserve": "reserve() ? '' : null", "attr.role": "role()", "attr.id": "messageId" } }, exportAs: ["slInlineMessage"], ngImport: i0, template: `@if (prefixWord() !== '') {
214
+ <span data-part="prefix">{{ prefixWord() }}</span>
215
+ }
216
+ @if (!hideIcon()) {
217
+ <span aria-hidden="true" data-part="icon"
218
+ ><ng-content select="[slInlineMessageIcon]">
219
+ @if (glyph(); as name) {
220
+ <span slIcon><svg slGlyph [name]="name"></svg></span>
221
+ }</ng-content
222
+ ></span>
223
+ }
224
+ <span data-part="text"><ng-content /></span>`, isInline: true, styles: ["@layer slotted.components{[data-ui=inline-message][data-part=root]{--_text: var(--slotted-text-muted);--_font-size: var(--slotted-control-font-size-sm, 12px);--_mark-size: 1em;--_column-gap: var(--slotted-inline-message-column-gap, var(--slotted-space-4, .5rem));color:var(--_text);display:grid;font-family:var( --slotted-inline-message-font-family, var(--slotted-control-font-family, sans-serif) );font-size:var(--_font-size);grid-template-columns:auto minmax(0,1fr);line-height:var(--slotted-inline-message-line-height, var(--slotted-line-height-md, 1.5));margin:0;position:relative}[data-ui=inline-message][data-part=root][data-tone=accent]{--_text: var(--slotted-tone-accent-text)}[data-ui=inline-message][data-part=root][data-tone=secondary]{--_text: var(--slotted-text-muted)}[data-ui=inline-message][data-part=root][data-tone=success]{--_text: var(--slotted-tone-success-text)}[data-ui=inline-message][data-part=root][data-tone=warning]{--_text: var(--slotted-tone-warning-text)}[data-ui=inline-message][data-part=root][data-tone=danger]{--_text: var(--slotted-tone-danger-text)}[data-ui=inline-message][data-part=root][data-size=sm]{--_font-size: var(--slotted-control-font-size-sm, 12px)}[data-ui=inline-message][data-part=root][data-size=md]{--_font-size: var(--slotted-control-font-size-md, 13px)}[data-ui=inline-message][data-part=root][data-reserve]{min-block-size:1lh}[data-ui=inline-message]>[data-part=prefix]{block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui=inline-message]>[data-part=icon]{--slotted-icon-size: var(--_mark-size);align-items:center;align-self:start;block-size:var(--_mark-size);box-sizing:border-box;display:flex;grid-column:1;grid-row:1;inline-size:var(--_mark-size);justify-content:center;margin-block-start:calc((1lh - var(--_mark-size)) / 2);margin-inline-end:var(--_column-gap)}[data-ui=inline-message][data-part=root][data-mark=dot]{--_dot-size: calc(var(--_mark-size) / 3)}[data-ui=inline-message][data-mark=dot]>[data-part=icon]:has(>[data-ui=icon]>[data-glyph=dot]){--slotted-icon-size: calc(var(--_dot-size) * 2);inline-size:var(--_dot-size)}[data-ui=inline-message][data-tone=secondary]:not([data-loading]):not([data-mark=dot])>[data-part=icon]:empty{display:none}[data-ui=inline-message][data-mark=none]:not([data-loading])>[data-part=icon]:empty{display:none}[data-ui=inline-message]>[data-part=text]{grid-column:2;grid-row:1;min-inline-size:0;overflow-wrap:anywhere}[data-ui=inline-message]:has([data-part=text]:empty)>[data-part=icon],[data-ui=inline-message]:has([data-part=text]:empty)>[data-part=prefix]{display:none}[data-ui=inline-message][data-loading]>[data-part=icon]{animation:slotted-inline-message-spin var(--slotted-duration-loop-fast) linear infinite;block-size:var(--_mark-size);border:max(var(--slotted-border-width-thin, 1px),calc(var(--_mark-size) / 8)) solid currentcolor;border-inline-end-color:transparent;border-radius:var(--slotted-radius-full, 9999px);display:block;inline-size:var(--_mark-size);margin-block-start:calc((1lh - var(--_mark-size)) / 2)}[data-ui=inline-message][data-loading]>[data-part=icon]>*{display:none}[data-ui=inline-message][data-part=root][data-disabled]{color:var(--slotted-disabled-foreground)}[data-ui=inline-message][data-disabled]>[data-part=icon]{animation:none}@media(prefers-reduced-motion:reduce){[data-ui=inline-message][data-loading]>[data-part=icon]{animation:none}}@media(forced-colors:active){[data-ui=inline-message]>[data-part=icon]{color:CanvasText}[data-ui=inline-message][data-part=root][data-disabled]>[data-part=icon]{color:GrayText}[data-ui=inline-message][data-loading]>[data-part=icon]{border-color:CanvasText;border-inline-end-color:Canvas}}}@keyframes slotted-inline-message-spin{to{transform:rotate(1turn)}}\n"], dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
225
+ }
226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlInlineMessage, decorators: [{
227
+ type: Component,
228
+ args: [{ selector: '[slInlineMessage]', standalone: true, exportAs: 'slInlineMessage', imports: [SlGlyph, SlIcon], template: `@if (prefixWord() !== '') {
229
+ <span data-part="prefix">{{ prefixWord() }}</span>
230
+ }
231
+ @if (!hideIcon()) {
232
+ <span aria-hidden="true" data-part="icon"
233
+ ><ng-content select="[slInlineMessageIcon]">
234
+ @if (glyph(); as name) {
235
+ <span slIcon><svg slGlyph [name]="name"></svg></span>
236
+ }</ng-content
237
+ ></span>
238
+ }
239
+ <span data-part="text"><ng-content /></span>`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
240
+ 'data-ui': 'inline-message',
241
+ 'data-part': 'root',
242
+ '[attr.data-tone]': 'resolvedTone()',
243
+ '[attr.data-size]': 'resolvedSize()',
244
+ '[attr.data-live]': 'resolvedLive()',
245
+ '[attr.data-mark]': 'resolvedMark()',
246
+ '[attr.data-loading]': "loading() ? '' : null",
247
+ '[attr.data-disabled]': "disabled() === true ? '' : null",
248
+ '[attr.data-reserve]': "reserve() ? '' : null",
249
+ '[attr.role]': 'role()',
250
+ '[attr.id]': 'messageId',
251
+ }, styles: ["@layer slotted.components{[data-ui=inline-message][data-part=root]{--_text: var(--slotted-text-muted);--_font-size: var(--slotted-control-font-size-sm, 12px);--_mark-size: 1em;--_column-gap: var(--slotted-inline-message-column-gap, var(--slotted-space-4, .5rem));color:var(--_text);display:grid;font-family:var( --slotted-inline-message-font-family, var(--slotted-control-font-family, sans-serif) );font-size:var(--_font-size);grid-template-columns:auto minmax(0,1fr);line-height:var(--slotted-inline-message-line-height, var(--slotted-line-height-md, 1.5));margin:0;position:relative}[data-ui=inline-message][data-part=root][data-tone=accent]{--_text: var(--slotted-tone-accent-text)}[data-ui=inline-message][data-part=root][data-tone=secondary]{--_text: var(--slotted-text-muted)}[data-ui=inline-message][data-part=root][data-tone=success]{--_text: var(--slotted-tone-success-text)}[data-ui=inline-message][data-part=root][data-tone=warning]{--_text: var(--slotted-tone-warning-text)}[data-ui=inline-message][data-part=root][data-tone=danger]{--_text: var(--slotted-tone-danger-text)}[data-ui=inline-message][data-part=root][data-size=sm]{--_font-size: var(--slotted-control-font-size-sm, 12px)}[data-ui=inline-message][data-part=root][data-size=md]{--_font-size: var(--slotted-control-font-size-md, 13px)}[data-ui=inline-message][data-part=root][data-reserve]{min-block-size:1lh}[data-ui=inline-message]>[data-part=prefix]{block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui=inline-message]>[data-part=icon]{--slotted-icon-size: var(--_mark-size);align-items:center;align-self:start;block-size:var(--_mark-size);box-sizing:border-box;display:flex;grid-column:1;grid-row:1;inline-size:var(--_mark-size);justify-content:center;margin-block-start:calc((1lh - var(--_mark-size)) / 2);margin-inline-end:var(--_column-gap)}[data-ui=inline-message][data-part=root][data-mark=dot]{--_dot-size: calc(var(--_mark-size) / 3)}[data-ui=inline-message][data-mark=dot]>[data-part=icon]:has(>[data-ui=icon]>[data-glyph=dot]){--slotted-icon-size: calc(var(--_dot-size) * 2);inline-size:var(--_dot-size)}[data-ui=inline-message][data-tone=secondary]:not([data-loading]):not([data-mark=dot])>[data-part=icon]:empty{display:none}[data-ui=inline-message][data-mark=none]:not([data-loading])>[data-part=icon]:empty{display:none}[data-ui=inline-message]>[data-part=text]{grid-column:2;grid-row:1;min-inline-size:0;overflow-wrap:anywhere}[data-ui=inline-message]:has([data-part=text]:empty)>[data-part=icon],[data-ui=inline-message]:has([data-part=text]:empty)>[data-part=prefix]{display:none}[data-ui=inline-message][data-loading]>[data-part=icon]{animation:slotted-inline-message-spin var(--slotted-duration-loop-fast) linear infinite;block-size:var(--_mark-size);border:max(var(--slotted-border-width-thin, 1px),calc(var(--_mark-size) / 8)) solid currentcolor;border-inline-end-color:transparent;border-radius:var(--slotted-radius-full, 9999px);display:block;inline-size:var(--_mark-size);margin-block-start:calc((1lh - var(--_mark-size)) / 2)}[data-ui=inline-message][data-loading]>[data-part=icon]>*{display:none}[data-ui=inline-message][data-part=root][data-disabled]{color:var(--slotted-disabled-foreground)}[data-ui=inline-message][data-disabled]>[data-part=icon]{animation:none}@media(prefers-reduced-motion:reduce){[data-ui=inline-message][data-loading]>[data-part=icon]{animation:none}}@media(forced-colors:active){[data-ui=inline-message]>[data-part=icon]{color:CanvasText}[data-ui=inline-message][data-part=root][data-disabled]>[data-part=icon]{color:GrayText}[data-ui=inline-message][data-loading]>[data-part=icon]{border-color:CanvasText;border-inline-end-color:Canvas}}}@keyframes slotted-inline-message-spin{to{transform:rotate(1turn)}}\n"] }]
252
+ }], propDecorators: { tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], live: [{ type: i0.Input, args: [{ isSignal: true, alias: "live", required: false }] }], mark: [{ type: i0.Input, args: [{ isSignal: true, alias: "mark", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], hideIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideIcon", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], reserve: [{ type: i0.Input, args: [{ isSignal: true, alias: "reserve", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }] } });
253
+
254
+ /**
255
+ * A mark the page supplies instead of the tone's own. It is projected into the
256
+ * box the family draws, so it keeps the size, the colour and the place on the
257
+ * message's first line the tone's mark would have had.
258
+ *
259
+ * It is a marker rather than a component: what goes inside is the page's own
260
+ * artwork, and the family has nothing to add to it beyond where it sits.
261
+ */
262
+ class SlInlineMessageIcon {
263
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlInlineMessageIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
264
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlInlineMessageIcon, isStandalone: true, selector: "[slInlineMessageIcon]", exportAs: ["slInlineMessageIcon"], ngImport: i0 });
265
+ }
266
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlInlineMessageIcon, decorators: [{
267
+ type: Directive,
268
+ args: [{
269
+ selector: '[slInlineMessageIcon]',
270
+ standalone: true,
271
+ exportAs: 'slInlineMessageIcon',
272
+ }]
273
+ }] });
274
+
275
+ /**
276
+ * Generated bundle index. Do not edit.
277
+ */
278
+
279
+ export { INLINE_MESSAGE_DEFAULTS, INLINE_MESSAGE_PREFIXES, SlInlineMessage, SlInlineMessageIcon, SlInlineMessageIdFactory, injectInlineMessageDefaults, provideInlineMessageDefaults };
280
+ //# sourceMappingURL=slotted-angular-inline-message.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slotted-angular-inline-message.mjs","sources":["../../inline-message/src/inline-message-defaults.ts","../../inline-message/src/inline-message.ts","../../inline-message/src/inline-message-parts.ts","../../inline-message/src/slotted-angular-inline-message.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\n\n/** Which of the five semantic colours the message speaks in. */\nexport type InlineMessageTone = 'accent' | 'secondary' | 'success' | 'warning' | 'danger';\n\n/**\n * The type step the message sits at. `sm` is the message of a field; `md` is\n * the message of a section. Both read the control scales, which the theme\n * restates per density.\n */\nexport type InlineMessageSize = 'sm' | 'md';\n\n/**\n * Which mark the message draws. `glyph` is the tone's own silhouette — the\n * circled information, check, triangle and circled exclamation. `dot` is a\n * neutral bullet in the tone's ink, the same shape for every tone including\n * the help tone that draws no silhouette at all, so a column of messages under\n * one field starts on one left edge. `none` draws nothing, and the tone is\n * then said by the ink and by the weight of the sentence: it is what `field`\n * and `field-group` ask for, because a silhouette repeated under every control\n * of a form is texture rather than a warning (F2).\n */\nexport type InlineMessageMark = 'glyph' | 'dot' | 'none';\n\n/**\n * Whether the message announces itself, and how loudly. `off` is the default,\n * because the WAI-ARIA APG records that a message already present when the page\n * finishes loading is not announced whatever role it carries.\n */\nexport type InlineMessageLive = 'off' | 'polite' | 'assertive';\n\n/**\n * The word a reader hears before the message. `null` is a tone that is not a\n * severity — help and information announce themselves by their sentence.\n */\nexport type InlineMessagePrefixes = Record<InlineMessageTone, string | null>;\n\n/**\n * The word a reader hears before the message, per tone.\n *\n * GOV.UK's Error message component publishes the idea and hard-codes the word;\n * this table generalises it to every tone that is a severity and puts it behind\n * the token below, which is the only translation surface this library has\n * today. `accent` and `secondary` carry none: information and help announce\n * themselves by their sentence, and a reader told “Information:” before every\n * hint hears one more word per field for nothing.\n */\nexport const INLINE_MESSAGE_PREFIXES: InlineMessagePrefixes = {\n accent: null,\n secondary: null,\n success: 'Success:',\n warning: 'Warning:',\n danger: 'Error:',\n};\n\nexport interface InlineMessageDefaults {\n live: InlineMessageLive;\n mark: InlineMessageMark;\n prefixes: InlineMessagePrefixes;\n size: InlineMessageSize;\n tone: InlineMessageTone;\n}\n\nconst FALLBACK: InlineMessageDefaults = {\n live: 'off',\n mark: 'glyph',\n prefixes: INLINE_MESSAGE_PREFIXES,\n size: 'sm',\n tone: 'secondary',\n};\n\nexport const INLINE_MESSAGE_DEFAULTS = new InjectionToken<InlineMessageDefaults>(\n 'slotted inline message defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once what its messages are painted like and — the one\n * that matters — what its severities are called, rather than repeating the same\n * inputs on every field in a form. A message that states any of them itself\n * still wins: an explicit input is never overridden by the token.\n *\n * `prefixes` is merged over the shipped table rather than replacing it, so a\n * Portuguese application writes the three words it has and inherits the shape.\n */\nexport function provideInlineMessageDefaults(\n defaults: Partial<Omit<InlineMessageDefaults, 'prefixes'>> & {\n prefixes?: Partial<InlineMessagePrefixes>;\n },\n) {\n return {\n provide: INLINE_MESSAGE_DEFAULTS,\n useFactory: (): InlineMessageDefaults => ({\n live: defaults.live ?? FALLBACK.live,\n mark: defaults.mark ?? FALLBACK.mark,\n prefixes: { ...FALLBACK.prefixes, ...defaults.prefixes },\n size: defaults.size ?? FALLBACK.size,\n tone: defaults.tone ?? FALLBACK.tone,\n }),\n };\n}\n\n/** What a message renders as here, before it states anything of its own. */\nexport function injectInlineMessageDefaults(): InlineMessageDefaults {\n return inject(INLINE_MESSAGE_DEFAULTS);\n}\n\n/**\n * Application-scoped rather than module-scoped, for the reason `tag` records: a\n * module-level counter produces colliding sequences when two applications\n * render in one server process, and the server and the client sequences must\n * match for hydration.\n */\n@Injectable({ providedIn: 'root' })\nexport class SlInlineMessageIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-inline-message-${this.count}`;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n HostAttributeToken,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport type { GlyphName } from '@slotted/angular/icon';\n\nimport { injectInlineMessageDefaults, SlInlineMessageIdFactory } from './inline-message-defaults';\nimport type {\n InlineMessageLive,\n InlineMessageMark,\n InlineMessageSize,\n InlineMessageTone,\n} from './inline-message-defaults';\n\nexport type {\n InlineMessageLive,\n InlineMessageMark,\n InlineMessagePrefixes,\n InlineMessageSize,\n InlineMessageTone,\n} from './inline-message-defaults';\n\n/**\n * The glyph each tone draws: `specs/components/inline-message/contract.json`\n * holds the map. Help is not a severity and draws none.\n */\nconst TONE_GLYPH: Record<InlineMessageTone, GlyphName | null> = {\n accent: 'circle-info',\n secondary: null,\n success: 'circle-check',\n warning: 'triangle-alert',\n danger: 'circle-alert',\n};\n\n/**\n * The two roles that announce, and the value that does not. Both roles imply\n * `aria-live` and `aria-atomic`, so the whole message is read rather than the\n * word that changed, and nothing here writes either attribute by hand.\n */\nconst LIVE_ROLE: Record<InlineMessageLive, string | null> = {\n off: null,\n polite: 'status',\n assertive: 'alert',\n};\n\n/**\n * One sentence about something else: a field, a section, an action. Help, an\n * error, a warning, a confirmation, or a wait.\n *\n * The directive is written on the consumer's own element, and the element it\n * belongs on is a `p`: the message is a sentence of prose about something else,\n * and a paragraph is the box a screen reader reads as one unit.\n *\n * **The severity is a word as well as a colour.** A reader who cannot see the\n * message hears the sentence and nothing else — neither the red ink nor the\n * crossed circle reaches the accessibility tree — so the family writes the\n * severity in clipped text before the message, which is GOV.UK's answer\n * generalised to every tone and to a table an application replaces once.\n *\n * **The role goes on this element, not on an inner one.** `slAlert` puts its\n * live role on the text part because it has a dismiss button beside the text,\n * and MDN's `alert` role reference is explicit that the role is for text\n * content alone. This family has no controls, so there is nothing to keep out.\n */\n@Component({\n selector: '[slInlineMessage]',\n standalone: true,\n exportAs: 'slInlineMessage',\n imports: [SlGlyph, SlIcon],\n template: `@if (prefixWord() !== '') {\n <span data-part=\"prefix\">{{ prefixWord() }}</span>\n }\n @if (!hideIcon()) {\n <span aria-hidden=\"true\" data-part=\"icon\"\n ><ng-content select=\"[slInlineMessageIcon]\">\n @if (glyph(); as name) {\n <span slIcon><svg slGlyph [name]=\"name\"></svg></span>\n }</ng-content\n ></span>\n }\n <span data-part=\"text\"><ng-content /></span>`,\n styleUrl: '../../../styles/src/inline-message/inline-message.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'inline-message',\n 'data-part': 'root',\n '[attr.data-tone]': 'resolvedTone()',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-live]': 'resolvedLive()',\n '[attr.data-mark]': 'resolvedMark()',\n '[attr.data-loading]': \"loading() ? '' : null\",\n '[attr.data-disabled]': \"disabled() === true ? '' : null\",\n '[attr.data-reserve]': \"reserve() ? '' : null\",\n '[attr.role]': 'role()',\n '[attr.id]': 'messageId',\n },\n})\nexport class SlInlineMessage {\n /** Defaults to the token, then to `secondary` — help text. */\n readonly tone = input<InlineMessageTone | undefined>(undefined);\n /** Defaults to the token, then to `sm`. */\n readonly size = input<InlineMessageSize | undefined>(undefined);\n /** Defaults to the token, then to `off`. */\n readonly live = input<InlineMessageLive | undefined>(undefined);\n /**\n * Which mark is drawn. Defaults to the token, then to `glyph`. `slField` and\n * `slFieldGroup` ask for `none` instead, because a form reads a column of\n * sentences rather than a column of silhouettes.\n */\n readonly mark = input<InlineMessageMark | undefined>(undefined);\n /**\n * The word read before the message. Unstated is the tone's own — `Error:`,\n * `Warning:`, `Success:` — and the empty string removes it, for a message\n * whose sentence already names the severity.\n */\n readonly prefix = input<string | undefined>(undefined);\n /**\n * Removes the mark's box from the markup, for a message that carries its own\n * artwork beside it. `mark='none'` is the other way to draw nothing: it is an\n * axis a provider can set for every message under it, and it leaves the box\n * in place for `reserve` to hold a line open with.\n */\n readonly hideIcon = input(false, { transform: booleanAttribute });\n /** The message is waiting for something: the mark becomes a turning ring. */\n readonly loading = input(false, { transform: booleanAttribute });\n /**\n * Unstated rather than `false`, so a `field` can answer it once this family\n * is inside one. Stated, it wins.\n */\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /**\n * Holds one line box open whether or not there is a message, so the form\n * below does not move when the error arrives.\n */\n readonly reserve = input(false, { transform: booleanAttribute });\n\n private readonly defaults = injectInlineMessageDefaults();\n\n /**\n * An identifier bound by whatever renders the message. It is what a family\n * that composes with this one — `field`, whose description and error *are*\n * inline messages — uses to give the message an identifier derived from its\n * own base, which a static attribute cannot express and a directive on the\n * same element cannot write.\n */\n readonly id = input<string | undefined>(undefined);\n\n private readonly writtenId = inject(new HostAttributeToken('id'), { optional: true });\n private readonly generatedId = inject(SlInlineMessageIdFactory).next();\n\n /**\n * The identifier an `aria-describedby` or an `aria-errormessage` points at.\n * A consumer's own is never replaced, and the generated one is reachable from\n * a template through `exportAs` — which is the reach an Angular template has\n * and a React consumer answers with `useId` in their own component.\n *\n * A getter rather than a signal, so `message.messageId` keeps reading as a\n * value in every template that already writes it. The host binding below\n * calls it in a reactive context, so the `id` input above is tracked.\n */\n get messageId(): string {\n return this.id() ?? this.writtenId ?? this.generatedId;\n }\n\n /**\n * A role the consumer wrote is never replaced by the family's. A host binding\n * wins over a static attribute in Angular, so the written value has to be\n * read before the binding is computed rather than after — the asymmetry with\n * React, where a consumer's prop simply spreads over the family's.\n */\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n\n protected readonly resolvedTone = computed(() => this.tone() ?? this.defaults.tone);\n protected readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n protected readonly resolvedLive = computed(() => this.live() ?? this.defaults.live);\n protected readonly resolvedMark = computed(() => this.mark() ?? this.defaults.mark);\n /* The glyph the family draws when the page supplies none. A message that is\n waiting draws a ring instead, and one that asked for no mark draws none. */\n protected readonly glyph = computed<GlyphName | null>(() => {\n const mark = this.resolvedMark();\n if (this.loading() || mark === 'none') return null;\n return mark === 'dot' ? 'dot' : TONE_GLYPH[this.resolvedTone()];\n });\n protected readonly role = computed(() => this.writtenRole ?? LIVE_ROLE[this.resolvedLive()]);\n\n /* Unstated asks the table; the empty string is a consumer removing the word. */\n protected readonly prefixWord = computed(\n () => this.prefix() ?? this.defaults.prefixes[this.resolvedTone()] ?? '',\n );\n}\n","import { Directive } from '@angular/core';\n\n/**\n * A mark the page supplies instead of the tone's own. It is projected into the\n * box the family draws, so it keeps the size, the colour and the place on the\n * message's first line the tone's mark would have had.\n *\n * It is a marker rather than a component: what goes inside is the page's own\n * artwork, and the family has nothing to add to it beyond where it sits.\n */\n@Directive({\n selector: '[slInlineMessageIcon]',\n standalone: true,\n exportAs: 'slInlineMessageIcon',\n})\nexport class SlInlineMessageIcon {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}