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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (793) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -2
  3. package/docs/AGENTS.snippet.md +10 -0
  4. package/docs/accordion.json +345 -0
  5. package/docs/accordion.md +207 -0
  6. package/docs/action-bar.json +421 -0
  7. package/docs/action-bar.md +364 -0
  8. package/docs/action-sheet.json +210 -0
  9. package/docs/action-sheet.md +19 -0
  10. package/docs/alert.json +407 -0
  11. package/docs/alert.md +239 -0
  12. package/docs/app-shell.examples.md +349 -0
  13. package/docs/app-shell.json +835 -0
  14. package/docs/app-shell.md +214 -0
  15. package/docs/aspect-ratio.json +159 -0
  16. package/docs/aspect-ratio.md +134 -0
  17. package/docs/attachment.json +486 -0
  18. package/docs/attachment.md +253 -0
  19. package/docs/avatar-group.json +208 -0
  20. package/docs/avatar-group.md +130 -0
  21. package/docs/avatar.json +342 -0
  22. package/docs/avatar.md +142 -0
  23. package/docs/badge.json +334 -0
  24. package/docs/badge.md +138 -0
  25. package/docs/breadcrumb.json +368 -0
  26. package/docs/breadcrumb.md +237 -0
  27. package/docs/button-group.json +158 -0
  28. package/docs/button-group.md +72 -0
  29. package/docs/button.examples.md +621 -0
  30. package/docs/button.json +977 -0
  31. package/docs/button.md +200 -0
  32. package/docs/calendar.json +592 -0
  33. package/docs/calendar.md +242 -0
  34. package/docs/card.json +283 -0
  35. package/docs/card.md +130 -0
  36. package/docs/carousel.json +560 -0
  37. package/docs/carousel.md +357 -0
  38. package/docs/cascader.json +933 -0
  39. package/docs/cascader.md +379 -0
  40. package/docs/chart.examples.md +582 -0
  41. package/docs/chart.json +1359 -0
  42. package/docs/chart.md +187 -0
  43. package/docs/checkbox-group.examples.md +612 -0
  44. package/docs/checkbox-group.json +395 -0
  45. package/docs/checkbox-group.md +106 -0
  46. package/docs/checkbox.examples.md +546 -0
  47. package/docs/checkbox.json +506 -0
  48. package/docs/checkbox.md +104 -0
  49. package/docs/code-block.json +616 -0
  50. package/docs/code-block.md +303 -0
  51. package/docs/collapsible.json +456 -0
  52. package/docs/collapsible.md +261 -0
  53. package/docs/color-picker.json +523 -0
  54. package/docs/color-picker.md +201 -0
  55. package/docs/column-manager.json +486 -0
  56. package/docs/column-manager.md +277 -0
  57. package/docs/combobox.examples.md +1732 -0
  58. package/docs/combobox.json +1250 -0
  59. package/docs/combobox.md +209 -0
  60. package/docs/command-palette.json +800 -0
  61. package/docs/command-palette.md +419 -0
  62. package/docs/container.json +156 -0
  63. package/docs/container.md +92 -0
  64. package/docs/context-menu.json +231 -0
  65. package/docs/context-menu.md +176 -0
  66. package/docs/currency-field.examples.md +321 -0
  67. package/docs/currency-field.json +649 -0
  68. package/docs/currency-field.md +128 -0
  69. package/docs/dashboard-grid.json +680 -0
  70. package/docs/dashboard-grid.md +265 -0
  71. package/docs/data-grid.examples.md +3064 -0
  72. package/docs/data-grid.json +1577 -0
  73. package/docs/data-grid.md +237 -0
  74. package/docs/data-grid.props.md +81 -0
  75. package/docs/data-list.json +685 -0
  76. package/docs/data-list.md +327 -0
  77. package/docs/date-field.json +490 -0
  78. package/docs/date-field.md +235 -0
  79. package/docs/date-picker.examples.md +1226 -0
  80. package/docs/date-picker.json +696 -0
  81. package/docs/date-picker.md +121 -0
  82. package/docs/date-range-picker.examples.md +1300 -0
  83. package/docs/date-range-picker.json +903 -0
  84. package/docs/date-range-picker.md +142 -0
  85. package/docs/datetime-field.json +665 -0
  86. package/docs/datetime-field.md +337 -0
  87. package/docs/datetime-picker.examples.md +1269 -0
  88. package/docs/datetime-picker.json +928 -0
  89. package/docs/datetime-picker.md +150 -0
  90. package/docs/datetime-range-picker.examples.md +225 -0
  91. package/docs/datetime-range-picker.json +1015 -0
  92. package/docs/datetime-range-picker.md +162 -0
  93. package/docs/description-list.json +471 -0
  94. package/docs/description-list.md +268 -0
  95. package/docs/detail-panel.json +530 -0
  96. package/docs/detail-panel.md +361 -0
  97. package/docs/dialog.examples.md +2467 -0
  98. package/docs/dialog.json +1141 -0
  99. package/docs/dialog.md +217 -0
  100. package/docs/dialog.props.md +63 -0
  101. package/docs/divider.json +148 -0
  102. package/docs/divider.md +83 -0
  103. package/docs/drawer.examples.md +1929 -0
  104. package/docs/drawer.json +753 -0
  105. package/docs/drawer.md +199 -0
  106. package/docs/entity-picker.json +946 -0
  107. package/docs/entity-picker.md +365 -0
  108. package/docs/event-calendar.examples.md +308 -0
  109. package/docs/event-calendar.json +1202 -0
  110. package/docs/event-calendar.md +201 -0
  111. package/docs/field-group.json +333 -0
  112. package/docs/field-group.md +181 -0
  113. package/docs/field.examples.md +676 -0
  114. package/docs/field.json +528 -0
  115. package/docs/field.md +127 -0
  116. package/docs/filter-bar.json +817 -0
  117. package/docs/filter-bar.md +380 -0
  118. package/docs/form.json +378 -0
  119. package/docs/form.md +235 -0
  120. package/docs/fullscreen.json +395 -0
  121. package/docs/fullscreen.md +225 -0
  122. package/docs/grid.json +176 -0
  123. package/docs/grid.md +74 -0
  124. package/docs/highlight.json +279 -0
  125. package/docs/highlight.md +210 -0
  126. package/docs/hover-card.json +254 -0
  127. package/docs/hover-card.md +213 -0
  128. package/docs/icon.json +173 -0
  129. package/docs/icon.md +101 -0
  130. package/docs/image.json +476 -0
  131. package/docs/image.md +254 -0
  132. package/docs/import-export-center.json +836 -0
  133. package/docs/import-export-center.md +345 -0
  134. package/docs/index.md +141 -0
  135. package/docs/inline-message.json +312 -0
  136. package/docs/inline-message.md +191 -0
  137. package/docs/inline.json +149 -0
  138. package/docs/inline.md +72 -0
  139. package/docs/kbd.json +350 -0
  140. package/docs/kbd.md +210 -0
  141. package/docs/link.json +264 -0
  142. package/docs/link.md +167 -0
  143. package/docs/list-item.json +463 -0
  144. package/docs/list-item.md +236 -0
  145. package/docs/list.json +321 -0
  146. package/docs/list.md +185 -0
  147. package/docs/listbox.json +807 -0
  148. package/docs/listbox.md +413 -0
  149. package/docs/loading-overlay.json +440 -0
  150. package/docs/loading-overlay.md +248 -0
  151. package/docs/markdown.json +461 -0
  152. package/docs/markdown.md +266 -0
  153. package/docs/menu.examples.md +1651 -0
  154. package/docs/menu.json +922 -0
  155. package/docs/menu.md +155 -0
  156. package/docs/menubar.json +292 -0
  157. package/docs/menubar.md +173 -0
  158. package/docs/message-scroller.json +401 -0
  159. package/docs/message-scroller.md +212 -0
  160. package/docs/message.json +862 -0
  161. package/docs/message.md +473 -0
  162. package/docs/multi-select.examples.md +1922 -0
  163. package/docs/multi-select.json +1314 -0
  164. package/docs/multi-select.md +213 -0
  165. package/docs/navigation-menu.json +529 -0
  166. package/docs/navigation-menu.md +329 -0
  167. package/docs/notification-center.json +664 -0
  168. package/docs/notification-center.md +372 -0
  169. package/docs/number-field.examples.md +1078 -0
  170. package/docs/number-field.json +668 -0
  171. package/docs/number-field.md +137 -0
  172. package/docs/otp-input.json +479 -0
  173. package/docs/otp-input.md +291 -0
  174. package/docs/page-header.json +574 -0
  175. package/docs/page-header.md +338 -0
  176. package/docs/page.json +332 -0
  177. package/docs/page.md +184 -0
  178. package/docs/pagination.json +434 -0
  179. package/docs/pagination.md +238 -0
  180. package/docs/popover.examples.md +1235 -0
  181. package/docs/popover.json +656 -0
  182. package/docs/popover.md +199 -0
  183. package/docs/progress-indicator.json +501 -0
  184. package/docs/progress-indicator.md +329 -0
  185. package/docs/prompt-composer.json +498 -0
  186. package/docs/prompt-composer.md +278 -0
  187. package/docs/prose.json +357 -0
  188. package/docs/prose.md +226 -0
  189. package/docs/radio-group.examples.md +626 -0
  190. package/docs/radio-group.json +541 -0
  191. package/docs/radio-group.md +112 -0
  192. package/docs/rating.json +1053 -0
  193. package/docs/rating.md +435 -0
  194. package/docs/result-state.json +376 -0
  195. package/docs/result-state.md +286 -0
  196. package/docs/saved-views.json +384 -0
  197. package/docs/saved-views.md +242 -0
  198. package/docs/scroll-area.json +120 -0
  199. package/docs/scroll-area.md +8 -0
  200. package/docs/section.json +344 -0
  201. package/docs/section.md +208 -0
  202. package/docs/segmented-control.json +429 -0
  203. package/docs/segmented-control.md +240 -0
  204. package/docs/select.examples.md +1214 -0
  205. package/docs/select.json +1147 -0
  206. package/docs/select.md +199 -0
  207. package/docs/side-navigation.json +632 -0
  208. package/docs/side-navigation.md +430 -0
  209. package/docs/skeleton.json +358 -0
  210. package/docs/skeleton.md +223 -0
  211. package/docs/slider.json +522 -0
  212. package/docs/slider.md +261 -0
  213. package/docs/sparkline.json +426 -0
  214. package/docs/sparkline.md +206 -0
  215. package/docs/split-button.json +361 -0
  216. package/docs/split-button.md +275 -0
  217. package/docs/splitter.json +142 -0
  218. package/docs/splitter.md +14 -0
  219. package/docs/stack.json +135 -0
  220. package/docs/stack.md +74 -0
  221. package/docs/stat-card.json +529 -0
  222. package/docs/stat-card.md +270 -0
  223. package/docs/status-indicator.json +314 -0
  224. package/docs/status-indicator.md +197 -0
  225. package/docs/stepper.json +451 -0
  226. package/docs/stepper.md +250 -0
  227. package/docs/switch.json +451 -0
  228. package/docs/switch.md +508 -0
  229. package/docs/table-of-contents.json +553 -0
  230. package/docs/table-of-contents.md +289 -0
  231. package/docs/table.examples.md +1981 -0
  232. package/docs/table.json +1059 -0
  233. package/docs/table.md +290 -0
  234. package/docs/tabs.examples.md +1370 -0
  235. package/docs/tabs.json +661 -0
  236. package/docs/tabs.md +211 -0
  237. package/docs/tag.json +813 -0
  238. package/docs/tag.md +241 -0
  239. package/docs/tags-input.json +771 -0
  240. package/docs/tags-input.md +361 -0
  241. package/docs/text-field.examples.md +821 -0
  242. package/docs/text-field.json +604 -0
  243. package/docs/text-field.md +125 -0
  244. package/docs/textarea.examples.md +612 -0
  245. package/docs/textarea.json +440 -0
  246. package/docs/textarea.md +98 -0
  247. package/docs/time-field.json +584 -0
  248. package/docs/time-field.md +291 -0
  249. package/docs/time-picker.json +679 -0
  250. package/docs/time-picker.md +315 -0
  251. package/docs/time-range-picker.examples.md +191 -0
  252. package/docs/time-range-picker.json +924 -0
  253. package/docs/time-range-picker.md +152 -0
  254. package/docs/timeline.json +839 -0
  255. package/docs/timeline.md +401 -0
  256. package/docs/toast.json +642 -0
  257. package/docs/toast.md +311 -0
  258. package/docs/toggle-group.json +417 -0
  259. package/docs/toggle-group.md +255 -0
  260. package/docs/toggle.json +326 -0
  261. package/docs/toggle.md +222 -0
  262. package/docs/toolbar.json +380 -0
  263. package/docs/toolbar.md +240 -0
  264. package/docs/tooltip.examples.md +664 -0
  265. package/docs/tooltip.json +604 -0
  266. package/docs/tooltip.md +146 -0
  267. package/docs/top-navigation.examples.md +287 -0
  268. package/docs/top-navigation.json +648 -0
  269. package/docs/top-navigation.md +138 -0
  270. package/docs/tour.json +759 -0
  271. package/docs/tour.md +337 -0
  272. package/docs/transfer.json +746 -0
  273. package/docs/transfer.md +273 -0
  274. package/docs/tree.json +918 -0
  275. package/docs/tree.md +397 -0
  276. package/docs/typography.json +317 -0
  277. package/docs/typography.md +107 -0
  278. package/docs/upload.examples.md +358 -0
  279. package/docs/upload.json +1103 -0
  280. package/docs/upload.md +166 -0
  281. package/docs/visually-hidden.json +71 -0
  282. package/docs/visually-hidden.md +42 -0
  283. package/docs/wizard.json +724 -0
  284. package/docs/wizard.md +295 -0
  285. package/fesm2022/slotted-angular-accordion.mjs +247 -0
  286. package/fesm2022/slotted-angular-accordion.mjs.map +1 -0
  287. package/fesm2022/slotted-angular-action-bar.mjs +639 -0
  288. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -0
  289. package/fesm2022/slotted-angular-action-sheet.mjs +749 -0
  290. package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -0
  291. package/fesm2022/slotted-angular-alert.mjs +427 -0
  292. package/fesm2022/slotted-angular-alert.mjs.map +1 -0
  293. package/fesm2022/slotted-angular-app-shell.mjs +1334 -0
  294. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -0
  295. package/fesm2022/slotted-angular-aspect-ratio.mjs +63 -0
  296. package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -0
  297. package/fesm2022/slotted-angular-attachment.mjs +595 -0
  298. package/fesm2022/slotted-angular-attachment.mjs.map +1 -0
  299. package/fesm2022/slotted-angular-avatar-group.mjs +230 -0
  300. package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -0
  301. package/fesm2022/slotted-angular-avatar.mjs +330 -0
  302. package/fesm2022/slotted-angular-avatar.mjs.map +1 -0
  303. package/fesm2022/slotted-angular-badge.mjs +255 -0
  304. package/fesm2022/slotted-angular-badge.mjs.map +1 -0
  305. package/fesm2022/slotted-angular-breadcrumb.mjs +544 -0
  306. package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -0
  307. package/fesm2022/slotted-angular-button-group.mjs +146 -0
  308. package/fesm2022/slotted-angular-button-group.mjs.map +1 -0
  309. package/fesm2022/slotted-angular-button.mjs +692 -0
  310. package/fesm2022/slotted-angular-button.mjs.map +1 -0
  311. package/fesm2022/slotted-angular-calendar.mjs +916 -0
  312. package/fesm2022/slotted-angular-calendar.mjs.map +1 -0
  313. package/fesm2022/slotted-angular-card.mjs +225 -0
  314. package/fesm2022/slotted-angular-card.mjs.map +1 -0
  315. package/fesm2022/slotted-angular-carousel.mjs +840 -0
  316. package/fesm2022/slotted-angular-carousel.mjs.map +1 -0
  317. package/fesm2022/slotted-angular-cascader.mjs +1839 -0
  318. package/fesm2022/slotted-angular-cascader.mjs.map +1 -0
  319. package/fesm2022/slotted-angular-chart.mjs +974 -0
  320. package/fesm2022/slotted-angular-chart.mjs.map +1 -0
  321. package/fesm2022/slotted-angular-checkbox-group.mjs +283 -0
  322. package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -0
  323. package/fesm2022/slotted-angular-checkbox.mjs +468 -0
  324. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -0
  325. package/fesm2022/slotted-angular-code-block.mjs +476 -0
  326. package/fesm2022/slotted-angular-code-block.mjs.map +1 -0
  327. package/fesm2022/slotted-angular-collapsible.mjs +479 -0
  328. package/fesm2022/slotted-angular-collapsible.mjs.map +1 -0
  329. package/fesm2022/slotted-angular-color-picker.mjs +910 -0
  330. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -0
  331. package/fesm2022/slotted-angular-column-manager.mjs +1037 -0
  332. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -0
  333. package/fesm2022/slotted-angular-combobox.mjs +1480 -0
  334. package/fesm2022/slotted-angular-combobox.mjs.map +1 -0
  335. package/fesm2022/slotted-angular-command-palette.mjs +1283 -0
  336. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -0
  337. package/fesm2022/slotted-angular-container.mjs +105 -0
  338. package/fesm2022/slotted-angular-container.mjs.map +1 -0
  339. package/fesm2022/slotted-angular-context-menu.mjs +221 -0
  340. package/fesm2022/slotted-angular-context-menu.mjs.map +1 -0
  341. package/fesm2022/slotted-angular-currency-field.mjs +1131 -0
  342. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -0
  343. package/fesm2022/slotted-angular-dashboard-grid.mjs +1928 -0
  344. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -0
  345. package/fesm2022/slotted-angular-data-grid.mjs +6697 -0
  346. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -0
  347. package/fesm2022/slotted-angular-data-list.mjs +1418 -0
  348. package/fesm2022/slotted-angular-data-list.mjs.map +1 -0
  349. package/fesm2022/slotted-angular-date-field.mjs +772 -0
  350. package/fesm2022/slotted-angular-date-field.mjs.map +1 -0
  351. package/fesm2022/slotted-angular-date-picker.mjs +690 -0
  352. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -0
  353. package/fesm2022/slotted-angular-date-range-picker.mjs +1150 -0
  354. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -0
  355. package/fesm2022/slotted-angular-datetime-field.mjs +1058 -0
  356. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -0
  357. package/fesm2022/slotted-angular-datetime-picker.mjs +1362 -0
  358. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -0
  359. package/fesm2022/slotted-angular-datetime-range-picker.mjs +1872 -0
  360. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -0
  361. package/fesm2022/slotted-angular-description-list.mjs +545 -0
  362. package/fesm2022/slotted-angular-description-list.mjs.map +1 -0
  363. package/fesm2022/slotted-angular-detail-panel.mjs +754 -0
  364. package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -0
  365. package/fesm2022/slotted-angular-dialog.mjs +980 -0
  366. package/fesm2022/slotted-angular-dialog.mjs.map +1 -0
  367. package/fesm2022/slotted-angular-divider.mjs +76 -0
  368. package/fesm2022/slotted-angular-divider.mjs.map +1 -0
  369. package/fesm2022/slotted-angular-drawer.mjs +1397 -0
  370. package/fesm2022/slotted-angular-drawer.mjs.map +1 -0
  371. package/fesm2022/slotted-angular-entity-picker.mjs +1987 -0
  372. package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -0
  373. package/fesm2022/slotted-angular-event-calendar.mjs +2934 -0
  374. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -0
  375. package/fesm2022/slotted-angular-field-group.mjs +301 -0
  376. package/fesm2022/slotted-angular-field-group.mjs.map +1 -0
  377. package/fesm2022/slotted-angular-field.mjs +928 -0
  378. package/fesm2022/slotted-angular-field.mjs.map +1 -0
  379. package/fesm2022/slotted-angular-filter-bar.mjs +3107 -0
  380. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -0
  381. package/fesm2022/slotted-angular-form.mjs +592 -0
  382. package/fesm2022/slotted-angular-form.mjs.map +1 -0
  383. package/fesm2022/slotted-angular-fullscreen.mjs +314 -0
  384. package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -0
  385. package/fesm2022/slotted-angular-grid.mjs +58 -0
  386. package/fesm2022/slotted-angular-grid.mjs.map +1 -0
  387. package/fesm2022/slotted-angular-highlight.mjs +123 -0
  388. package/fesm2022/slotted-angular-highlight.mjs.map +1 -0
  389. package/fesm2022/slotted-angular-hover-card.mjs +326 -0
  390. package/fesm2022/slotted-angular-hover-card.mjs.map +1 -0
  391. package/fesm2022/slotted-angular-i18n.mjs +75 -0
  392. package/fesm2022/slotted-angular-i18n.mjs.map +1 -0
  393. package/fesm2022/slotted-angular-icon.mjs +232 -0
  394. package/fesm2022/slotted-angular-icon.mjs.map +1 -0
  395. package/fesm2022/slotted-angular-image.mjs +442 -0
  396. package/fesm2022/slotted-angular-image.mjs.map +1 -0
  397. package/fesm2022/slotted-angular-import-export-center.mjs +1792 -0
  398. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -0
  399. package/fesm2022/slotted-angular-inline-message.mjs +280 -0
  400. package/fesm2022/slotted-angular-inline-message.mjs.map +1 -0
  401. package/fesm2022/slotted-angular-inline.mjs +52 -0
  402. package/fesm2022/slotted-angular-inline.mjs.map +1 -0
  403. package/fesm2022/slotted-angular-kbd.mjs +284 -0
  404. package/fesm2022/slotted-angular-kbd.mjs.map +1 -0
  405. package/fesm2022/slotted-angular-link.mjs +182 -0
  406. package/fesm2022/slotted-angular-link.mjs.map +1 -0
  407. package/fesm2022/slotted-angular-list-item.mjs +367 -0
  408. package/fesm2022/slotted-angular-list-item.mjs.map +1 -0
  409. package/fesm2022/slotted-angular-list.mjs +256 -0
  410. package/fesm2022/slotted-angular-list.mjs.map +1 -0
  411. package/fesm2022/slotted-angular-listbox.mjs +1274 -0
  412. package/fesm2022/slotted-angular-listbox.mjs.map +1 -0
  413. package/fesm2022/slotted-angular-loading-overlay.mjs +451 -0
  414. package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -0
  415. package/fesm2022/slotted-angular-markdown.mjs +914 -0
  416. package/fesm2022/slotted-angular-markdown.mjs.map +1 -0
  417. package/fesm2022/slotted-angular-menu.mjs +1211 -0
  418. package/fesm2022/slotted-angular-menu.mjs.map +1 -0
  419. package/fesm2022/slotted-angular-menubar.mjs +230 -0
  420. package/fesm2022/slotted-angular-menubar.mjs.map +1 -0
  421. package/fesm2022/slotted-angular-message-scroller.mjs +378 -0
  422. package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -0
  423. package/fesm2022/slotted-angular-message.mjs +866 -0
  424. package/fesm2022/slotted-angular-message.mjs.map +1 -0
  425. package/fesm2022/slotted-angular-multi-select.mjs +1939 -0
  426. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -0
  427. package/fesm2022/slotted-angular-navigation-menu.mjs +770 -0
  428. package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -0
  429. package/fesm2022/slotted-angular-notification-center.mjs +1172 -0
  430. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -0
  431. package/fesm2022/slotted-angular-number-field.mjs +966 -0
  432. package/fesm2022/slotted-angular-number-field.mjs.map +1 -0
  433. package/fesm2022/slotted-angular-otp-input.mjs +629 -0
  434. package/fesm2022/slotted-angular-otp-input.mjs.map +1 -0
  435. package/fesm2022/slotted-angular-page-header.mjs +788 -0
  436. package/fesm2022/slotted-angular-page-header.mjs.map +1 -0
  437. package/fesm2022/slotted-angular-page.mjs +255 -0
  438. package/fesm2022/slotted-angular-page.mjs.map +1 -0
  439. package/fesm2022/slotted-angular-pagination.mjs +562 -0
  440. package/fesm2022/slotted-angular-pagination.mjs.map +1 -0
  441. package/fesm2022/slotted-angular-popover.mjs +799 -0
  442. package/fesm2022/slotted-angular-popover.mjs.map +1 -0
  443. package/fesm2022/slotted-angular-progress-indicator.mjs +572 -0
  444. package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -0
  445. package/fesm2022/slotted-angular-prompt-composer.mjs +596 -0
  446. package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -0
  447. package/fesm2022/slotted-angular-prose.mjs +314 -0
  448. package/fesm2022/slotted-angular-prose.mjs.map +1 -0
  449. package/fesm2022/slotted-angular-radio-group.mjs +469 -0
  450. package/fesm2022/slotted-angular-radio-group.mjs.map +1 -0
  451. package/fesm2022/slotted-angular-rating.mjs +1174 -0
  452. package/fesm2022/slotted-angular-rating.mjs.map +1 -0
  453. package/fesm2022/slotted-angular-result-state.mjs +330 -0
  454. package/fesm2022/slotted-angular-result-state.mjs.map +1 -0
  455. package/fesm2022/slotted-angular-saved-views.mjs +877 -0
  456. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -0
  457. package/fesm2022/slotted-angular-scroll-area.mjs +294 -0
  458. package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -0
  459. package/fesm2022/slotted-angular-section.mjs +266 -0
  460. package/fesm2022/slotted-angular-section.mjs.map +1 -0
  461. package/fesm2022/slotted-angular-segmented-control.mjs +454 -0
  462. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -0
  463. package/fesm2022/slotted-angular-select.mjs +1899 -0
  464. package/fesm2022/slotted-angular-select.mjs.map +1 -0
  465. package/fesm2022/slotted-angular-side-navigation.mjs +1042 -0
  466. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -0
  467. package/fesm2022/slotted-angular-skeleton.mjs +316 -0
  468. package/fesm2022/slotted-angular-skeleton.mjs.map +1 -0
  469. package/fesm2022/slotted-angular-slider.mjs +586 -0
  470. package/fesm2022/slotted-angular-slider.mjs.map +1 -0
  471. package/fesm2022/slotted-angular-sparkline.mjs +235 -0
  472. package/fesm2022/slotted-angular-sparkline.mjs.map +1 -0
  473. package/fesm2022/slotted-angular-split-button.mjs +331 -0
  474. package/fesm2022/slotted-angular-split-button.mjs.map +1 -0
  475. package/fesm2022/slotted-angular-splitter.mjs +516 -0
  476. package/fesm2022/slotted-angular-splitter.mjs.map +1 -0
  477. package/fesm2022/slotted-angular-stack.mjs +48 -0
  478. package/fesm2022/slotted-angular-stack.mjs.map +1 -0
  479. package/fesm2022/slotted-angular-stat-card.mjs +478 -0
  480. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -0
  481. package/fesm2022/slotted-angular-status-indicator.mjs +155 -0
  482. package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -0
  483. package/fesm2022/slotted-angular-stepper.mjs +536 -0
  484. package/fesm2022/slotted-angular-stepper.mjs.map +1 -0
  485. package/fesm2022/slotted-angular-switch.mjs +447 -0
  486. package/fesm2022/slotted-angular-switch.mjs.map +1 -0
  487. package/fesm2022/slotted-angular-table-of-contents.mjs +750 -0
  488. package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -0
  489. package/fesm2022/slotted-angular-table.mjs +2518 -0
  490. package/fesm2022/slotted-angular-table.mjs.map +1 -0
  491. package/fesm2022/slotted-angular-tabs.mjs +829 -0
  492. package/fesm2022/slotted-angular-tabs.mjs.map +1 -0
  493. package/fesm2022/slotted-angular-tag.mjs +595 -0
  494. package/fesm2022/slotted-angular-tag.mjs.map +1 -0
  495. package/fesm2022/slotted-angular-tags-input.mjs +1211 -0
  496. package/fesm2022/slotted-angular-tags-input.mjs.map +1 -0
  497. package/fesm2022/slotted-angular-text-field.mjs +674 -0
  498. package/fesm2022/slotted-angular-text-field.mjs.map +1 -0
  499. package/fesm2022/slotted-angular-textarea.mjs +275 -0
  500. package/fesm2022/slotted-angular-textarea.mjs.map +1 -0
  501. package/fesm2022/slotted-angular-theme.mjs +45 -0
  502. package/fesm2022/slotted-angular-theme.mjs.map +1 -0
  503. package/fesm2022/slotted-angular-time-field.mjs +895 -0
  504. package/fesm2022/slotted-angular-time-field.mjs.map +1 -0
  505. package/fesm2022/slotted-angular-time-picker.mjs +856 -0
  506. package/fesm2022/slotted-angular-time-picker.mjs.map +1 -0
  507. package/fesm2022/slotted-angular-time-range-picker.mjs +1534 -0
  508. package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -0
  509. package/fesm2022/slotted-angular-timeline.mjs +928 -0
  510. package/fesm2022/slotted-angular-timeline.mjs.map +1 -0
  511. package/fesm2022/slotted-angular-toast.mjs +917 -0
  512. package/fesm2022/slotted-angular-toast.mjs.map +1 -0
  513. package/fesm2022/slotted-angular-toggle-group.mjs +311 -0
  514. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -0
  515. package/fesm2022/slotted-angular-toggle.mjs +162 -0
  516. package/fesm2022/slotted-angular-toggle.mjs.map +1 -0
  517. package/fesm2022/slotted-angular-toolbar.mjs +536 -0
  518. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -0
  519. package/fesm2022/slotted-angular-tooltip.mjs +798 -0
  520. package/fesm2022/slotted-angular-tooltip.mjs.map +1 -0
  521. package/fesm2022/slotted-angular-top-navigation.mjs +1308 -0
  522. package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -0
  523. package/fesm2022/slotted-angular-tour.mjs +1330 -0
  524. package/fesm2022/slotted-angular-tour.mjs.map +1 -0
  525. package/fesm2022/slotted-angular-transfer.mjs +1406 -0
  526. package/fesm2022/slotted-angular-transfer.mjs.map +1 -0
  527. package/fesm2022/slotted-angular-tree.mjs +1448 -0
  528. package/fesm2022/slotted-angular-tree.mjs.map +1 -0
  529. package/fesm2022/slotted-angular-typography.mjs +184 -0
  530. package/fesm2022/slotted-angular-typography.mjs.map +1 -0
  531. package/fesm2022/slotted-angular-upload.mjs +1523 -0
  532. package/fesm2022/slotted-angular-upload.mjs.map +1 -0
  533. package/fesm2022/slotted-angular-visually-hidden.mjs +32 -0
  534. package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -0
  535. package/fesm2022/slotted-angular-wizard.mjs +1715 -0
  536. package/fesm2022/slotted-angular-wizard.mjs.map +1 -0
  537. package/fesm2022/slotted-angular.mjs +4 -0
  538. package/fesm2022/slotted-angular.mjs.map +1 -0
  539. package/package.json +537 -3
  540. package/types/slotted-angular-accordion.d.ts +156 -0
  541. package/types/slotted-angular-accordion.d.ts.map +1 -0
  542. package/types/slotted-angular-action-bar.d.ts +291 -0
  543. package/types/slotted-angular-action-bar.d.ts.map +1 -0
  544. package/types/slotted-angular-action-sheet.d.ts +294 -0
  545. package/types/slotted-angular-action-sheet.d.ts.map +1 -0
  546. package/types/slotted-angular-alert.d.ts +214 -0
  547. package/types/slotted-angular-alert.d.ts.map +1 -0
  548. package/types/slotted-angular-app-shell.d.ts +549 -0
  549. package/types/slotted-angular-app-shell.d.ts.map +1 -0
  550. package/types/slotted-angular-aspect-ratio.d.ts +57 -0
  551. package/types/slotted-angular-aspect-ratio.d.ts.map +1 -0
  552. package/types/slotted-angular-attachment.d.ts +294 -0
  553. package/types/slotted-angular-attachment.d.ts.map +1 -0
  554. package/types/slotted-angular-avatar-group.d.ts +119 -0
  555. package/types/slotted-angular-avatar-group.d.ts.map +1 -0
  556. package/types/slotted-angular-avatar.d.ts +202 -0
  557. package/types/slotted-angular-avatar.d.ts.map +1 -0
  558. package/types/slotted-angular-badge.d.ts +166 -0
  559. package/types/slotted-angular-badge.d.ts.map +1 -0
  560. package/types/slotted-angular-breadcrumb.d.ts +251 -0
  561. package/types/slotted-angular-breadcrumb.d.ts.map +1 -0
  562. package/types/slotted-angular-button-group.d.ts +89 -0
  563. package/types/slotted-angular-button-group.d.ts.map +1 -0
  564. package/types/slotted-angular-button.d.ts +390 -0
  565. package/types/slotted-angular-button.d.ts.map +1 -0
  566. package/types/slotted-angular-calendar.d.ts +280 -0
  567. package/types/slotted-angular-calendar.d.ts.map +1 -0
  568. package/types/slotted-angular-card.d.ts +140 -0
  569. package/types/slotted-angular-card.d.ts.map +1 -0
  570. package/types/slotted-angular-carousel.d.ts +288 -0
  571. package/types/slotted-angular-carousel.d.ts.map +1 -0
  572. package/types/slotted-angular-cascader.d.ts +351 -0
  573. package/types/slotted-angular-cascader.d.ts.map +1 -0
  574. package/types/slotted-angular-chart.d.ts +319 -0
  575. package/types/slotted-angular-chart.d.ts.map +1 -0
  576. package/types/slotted-angular-checkbox-group.d.ts +156 -0
  577. package/types/slotted-angular-checkbox-group.d.ts.map +1 -0
  578. package/types/slotted-angular-checkbox.d.ts +197 -0
  579. package/types/slotted-angular-checkbox.d.ts.map +1 -0
  580. package/types/slotted-angular-code-block.d.ts +158 -0
  581. package/types/slotted-angular-code-block.d.ts.map +1 -0
  582. package/types/slotted-angular-collapsible.d.ts +272 -0
  583. package/types/slotted-angular-collapsible.d.ts.map +1 -0
  584. package/types/slotted-angular-color-picker.d.ts +181 -0
  585. package/types/slotted-angular-color-picker.d.ts.map +1 -0
  586. package/types/slotted-angular-column-manager.d.ts +200 -0
  587. package/types/slotted-angular-column-manager.d.ts.map +1 -0
  588. package/types/slotted-angular-combobox.d.ts +449 -0
  589. package/types/slotted-angular-combobox.d.ts.map +1 -0
  590. package/types/slotted-angular-command-palette.d.ts +256 -0
  591. package/types/slotted-angular-command-palette.d.ts.map +1 -0
  592. package/types/slotted-angular-container.d.ts +84 -0
  593. package/types/slotted-angular-container.d.ts.map +1 -0
  594. package/types/slotted-angular-context-menu.d.ts +84 -0
  595. package/types/slotted-angular-context-menu.d.ts.map +1 -0
  596. package/types/slotted-angular-currency-field.d.ts +480 -0
  597. package/types/slotted-angular-currency-field.d.ts.map +1 -0
  598. package/types/slotted-angular-dashboard-grid.d.ts +341 -0
  599. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -0
  600. package/types/slotted-angular-data-grid.d.ts +1077 -0
  601. package/types/slotted-angular-data-grid.d.ts.map +1 -0
  602. package/types/slotted-angular-data-list.d.ts +272 -0
  603. package/types/slotted-angular-data-list.d.ts.map +1 -0
  604. package/types/slotted-angular-date-field.d.ts +320 -0
  605. package/types/slotted-angular-date-field.d.ts.map +1 -0
  606. package/types/slotted-angular-date-picker.d.ts +224 -0
  607. package/types/slotted-angular-date-picker.d.ts.map +1 -0
  608. package/types/slotted-angular-date-range-picker.d.ts +310 -0
  609. package/types/slotted-angular-date-range-picker.d.ts.map +1 -0
  610. package/types/slotted-angular-datetime-field.d.ts +362 -0
  611. package/types/slotted-angular-datetime-field.d.ts.map +1 -0
  612. package/types/slotted-angular-datetime-picker.d.ts +370 -0
  613. package/types/slotted-angular-datetime-picker.d.ts.map +1 -0
  614. package/types/slotted-angular-datetime-range-picker.d.ts +459 -0
  615. package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -0
  616. package/types/slotted-angular-description-list.d.ts +281 -0
  617. package/types/slotted-angular-description-list.d.ts.map +1 -0
  618. package/types/slotted-angular-detail-panel.d.ts +240 -0
  619. package/types/slotted-angular-detail-panel.d.ts.map +1 -0
  620. package/types/slotted-angular-dialog.d.ts +497 -0
  621. package/types/slotted-angular-dialog.d.ts.map +1 -0
  622. package/types/slotted-angular-divider.d.ts +40 -0
  623. package/types/slotted-angular-divider.d.ts.map +1 -0
  624. package/types/slotted-angular-drawer.d.ts +532 -0
  625. package/types/slotted-angular-drawer.d.ts.map +1 -0
  626. package/types/slotted-angular-entity-picker.d.ts +338 -0
  627. package/types/slotted-angular-entity-picker.d.ts.map +1 -0
  628. package/types/slotted-angular-event-calendar.d.ts +574 -0
  629. package/types/slotted-angular-event-calendar.d.ts.map +1 -0
  630. package/types/slotted-angular-field-group.d.ts +152 -0
  631. package/types/slotted-angular-field-group.d.ts.map +1 -0
  632. package/types/slotted-angular-field.d.ts +535 -0
  633. package/types/slotted-angular-field.d.ts.map +1 -0
  634. package/types/slotted-angular-filter-bar.d.ts +573 -0
  635. package/types/slotted-angular-filter-bar.d.ts.map +1 -0
  636. package/types/slotted-angular-form.d.ts +298 -0
  637. package/types/slotted-angular-form.d.ts.map +1 -0
  638. package/types/slotted-angular-fullscreen.d.ts +145 -0
  639. package/types/slotted-angular-fullscreen.d.ts.map +1 -0
  640. package/types/slotted-angular-grid.d.ts +50 -0
  641. package/types/slotted-angular-grid.d.ts.map +1 -0
  642. package/types/slotted-angular-highlight.d.ts +93 -0
  643. package/types/slotted-angular-highlight.d.ts.map +1 -0
  644. package/types/slotted-angular-hover-card.d.ts +140 -0
  645. package/types/slotted-angular-hover-card.d.ts.map +1 -0
  646. package/types/slotted-angular-i18n.d.ts +46 -0
  647. package/types/slotted-angular-i18n.d.ts.map +1 -0
  648. package/types/slotted-angular-icon.d.ts +94 -0
  649. package/types/slotted-angular-icon.d.ts.map +1 -0
  650. package/types/slotted-angular-image.d.ts +251 -0
  651. package/types/slotted-angular-image.d.ts.map +1 -0
  652. package/types/slotted-angular-import-export-center.d.ts +351 -0
  653. package/types/slotted-angular-import-export-center.d.ts.map +1 -0
  654. package/types/slotted-angular-inline-message.d.ts +195 -0
  655. package/types/slotted-angular-inline-message.d.ts.map +1 -0
  656. package/types/slotted-angular-inline.d.ts +41 -0
  657. package/types/slotted-angular-inline.d.ts.map +1 -0
  658. package/types/slotted-angular-kbd.d.ts +174 -0
  659. package/types/slotted-angular-kbd.d.ts.map +1 -0
  660. package/types/slotted-angular-link.d.ts +94 -0
  661. package/types/slotted-angular-link.d.ts.map +1 -0
  662. package/types/slotted-angular-list-item.d.ts +210 -0
  663. package/types/slotted-angular-list-item.d.ts.map +1 -0
  664. package/types/slotted-angular-list.d.ts +176 -0
  665. package/types/slotted-angular-list.d.ts.map +1 -0
  666. package/types/slotted-angular-listbox.d.ts +470 -0
  667. package/types/slotted-angular-listbox.d.ts.map +1 -0
  668. package/types/slotted-angular-loading-overlay.d.ts +219 -0
  669. package/types/slotted-angular-loading-overlay.d.ts.map +1 -0
  670. package/types/slotted-angular-markdown.d.ts +172 -0
  671. package/types/slotted-angular-markdown.d.ts.map +1 -0
  672. package/types/slotted-angular-menu.d.ts +448 -0
  673. package/types/slotted-angular-menu.d.ts.map +1 -0
  674. package/types/slotted-angular-menubar.d.ts +90 -0
  675. package/types/slotted-angular-menubar.d.ts.map +1 -0
  676. package/types/slotted-angular-message-scroller.d.ts +151 -0
  677. package/types/slotted-angular-message-scroller.d.ts.map +1 -0
  678. package/types/slotted-angular-message.d.ts +348 -0
  679. package/types/slotted-angular-message.d.ts.map +1 -0
  680. package/types/slotted-angular-multi-select.d.ts +462 -0
  681. package/types/slotted-angular-multi-select.d.ts.map +1 -0
  682. package/types/slotted-angular-navigation-menu.d.ts +309 -0
  683. package/types/slotted-angular-navigation-menu.d.ts.map +1 -0
  684. package/types/slotted-angular-notification-center.d.ts +318 -0
  685. package/types/slotted-angular-notification-center.d.ts.map +1 -0
  686. package/types/slotted-angular-number-field.d.ts +402 -0
  687. package/types/slotted-angular-number-field.d.ts.map +1 -0
  688. package/types/slotted-angular-otp-input.d.ts +286 -0
  689. package/types/slotted-angular-otp-input.d.ts.map +1 -0
  690. package/types/slotted-angular-page-header.d.ts +334 -0
  691. package/types/slotted-angular-page-header.d.ts.map +1 -0
  692. package/types/slotted-angular-page.d.ts +141 -0
  693. package/types/slotted-angular-page.d.ts.map +1 -0
  694. package/types/slotted-angular-pagination.d.ts +213 -0
  695. package/types/slotted-angular-pagination.d.ts.map +1 -0
  696. package/types/slotted-angular-popover.d.ts +366 -0
  697. package/types/slotted-angular-popover.d.ts.map +1 -0
  698. package/types/slotted-angular-progress-indicator.d.ts +312 -0
  699. package/types/slotted-angular-progress-indicator.d.ts.map +1 -0
  700. package/types/slotted-angular-prompt-composer.d.ts +242 -0
  701. package/types/slotted-angular-prompt-composer.d.ts.map +1 -0
  702. package/types/slotted-angular-prose.d.ts +171 -0
  703. package/types/slotted-angular-prose.d.ts.map +1 -0
  704. package/types/slotted-angular-radio-group.d.ts +268 -0
  705. package/types/slotted-angular-radio-group.d.ts.map +1 -0
  706. package/types/slotted-angular-rating.d.ts +374 -0
  707. package/types/slotted-angular-rating.d.ts.map +1 -0
  708. package/types/slotted-angular-result-state.d.ts +217 -0
  709. package/types/slotted-angular-result-state.d.ts.map +1 -0
  710. package/types/slotted-angular-saved-views.d.ts +198 -0
  711. package/types/slotted-angular-saved-views.d.ts.map +1 -0
  712. package/types/slotted-angular-scroll-area.d.ts +186 -0
  713. package/types/slotted-angular-scroll-area.d.ts.map +1 -0
  714. package/types/slotted-angular-section.d.ts +143 -0
  715. package/types/slotted-angular-section.d.ts.map +1 -0
  716. package/types/slotted-angular-segmented-control.d.ts +251 -0
  717. package/types/slotted-angular-segmented-control.d.ts.map +1 -0
  718. package/types/slotted-angular-select.d.ts +507 -0
  719. package/types/slotted-angular-select.d.ts.map +1 -0
  720. package/types/slotted-angular-side-navigation.d.ts +373 -0
  721. package/types/slotted-angular-side-navigation.d.ts.map +1 -0
  722. package/types/slotted-angular-skeleton.d.ts +198 -0
  723. package/types/slotted-angular-skeleton.d.ts.map +1 -0
  724. package/types/slotted-angular-slider.d.ts +216 -0
  725. package/types/slotted-angular-slider.d.ts.map +1 -0
  726. package/types/slotted-angular-sparkline.d.ts +106 -0
  727. package/types/slotted-angular-sparkline.d.ts.map +1 -0
  728. package/types/slotted-angular-split-button.d.ts +180 -0
  729. package/types/slotted-angular-split-button.d.ts.map +1 -0
  730. package/types/slotted-angular-splitter.d.ts +206 -0
  731. package/types/slotted-angular-splitter.d.ts.map +1 -0
  732. package/types/slotted-angular-stack.d.ts +38 -0
  733. package/types/slotted-angular-stack.d.ts.map +1 -0
  734. package/types/slotted-angular-stat-card.d.ts +232 -0
  735. package/types/slotted-angular-stat-card.d.ts.map +1 -0
  736. package/types/slotted-angular-status-indicator.d.ts +106 -0
  737. package/types/slotted-angular-status-indicator.d.ts.map +1 -0
  738. package/types/slotted-angular-stepper.d.ts +198 -0
  739. package/types/slotted-angular-stepper.d.ts.map +1 -0
  740. package/types/slotted-angular-switch.d.ts +243 -0
  741. package/types/slotted-angular-switch.d.ts.map +1 -0
  742. package/types/slotted-angular-table-of-contents.d.ts +210 -0
  743. package/types/slotted-angular-table-of-contents.d.ts.map +1 -0
  744. package/types/slotted-angular-table.d.ts +888 -0
  745. package/types/slotted-angular-table.d.ts.map +1 -0
  746. package/types/slotted-angular-tabs.d.ts +340 -0
  747. package/types/slotted-angular-tabs.d.ts.map +1 -0
  748. package/types/slotted-angular-tag.d.ts +279 -0
  749. package/types/slotted-angular-tag.d.ts.map +1 -0
  750. package/types/slotted-angular-tags-input.d.ts +302 -0
  751. package/types/slotted-angular-tags-input.d.ts.map +1 -0
  752. package/types/slotted-angular-text-field.d.ts +334 -0
  753. package/types/slotted-angular-text-field.d.ts.map +1 -0
  754. package/types/slotted-angular-textarea.d.ts +150 -0
  755. package/types/slotted-angular-textarea.d.ts.map +1 -0
  756. package/types/slotted-angular-theme.d.ts +26 -0
  757. package/types/slotted-angular-theme.d.ts.map +1 -0
  758. package/types/slotted-angular-time-field.d.ts +300 -0
  759. package/types/slotted-angular-time-field.d.ts.map +1 -0
  760. package/types/slotted-angular-time-picker.d.ts +260 -0
  761. package/types/slotted-angular-time-picker.d.ts.map +1 -0
  762. package/types/slotted-angular-time-range-picker.d.ts +401 -0
  763. package/types/slotted-angular-time-range-picker.d.ts.map +1 -0
  764. package/types/slotted-angular-timeline.d.ts +329 -0
  765. package/types/slotted-angular-timeline.d.ts.map +1 -0
  766. package/types/slotted-angular-toast.d.ts +340 -0
  767. package/types/slotted-angular-toast.d.ts.map +1 -0
  768. package/types/slotted-angular-toggle-group.d.ts +167 -0
  769. package/types/slotted-angular-toggle-group.d.ts.map +1 -0
  770. package/types/slotted-angular-toggle.d.ts +106 -0
  771. package/types/slotted-angular-toggle.d.ts.map +1 -0
  772. package/types/slotted-angular-toolbar.d.ts +252 -0
  773. package/types/slotted-angular-toolbar.d.ts.map +1 -0
  774. package/types/slotted-angular-tooltip.d.ts +388 -0
  775. package/types/slotted-angular-tooltip.d.ts.map +1 -0
  776. package/types/slotted-angular-top-navigation.d.ts +442 -0
  777. package/types/slotted-angular-top-navigation.d.ts.map +1 -0
  778. package/types/slotted-angular-tour.d.ts +440 -0
  779. package/types/slotted-angular-tour.d.ts.map +1 -0
  780. package/types/slotted-angular-transfer.d.ts +296 -0
  781. package/types/slotted-angular-transfer.d.ts.map +1 -0
  782. package/types/slotted-angular-tree.d.ts +499 -0
  783. package/types/slotted-angular-tree.d.ts.map +1 -0
  784. package/types/slotted-angular-typography.d.ts +89 -0
  785. package/types/slotted-angular-typography.d.ts.map +1 -0
  786. package/types/slotted-angular-upload.d.ts +365 -0
  787. package/types/slotted-angular-upload.d.ts.map +1 -0
  788. package/types/slotted-angular-visually-hidden.d.ts +19 -0
  789. package/types/slotted-angular-visually-hidden.d.ts.map +1 -0
  790. package/types/slotted-angular-wizard.d.ts +441 -0
  791. package/types/slotted-angular-wizard.d.ts.map +1 -0
  792. package/types/slotted-angular.d.ts +3 -0
  793. package/types/slotted-angular.d.ts.map +1 -0
@@ -0,0 +1,2518 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, inject, Injectable, model, input, booleanAttribute, numberAttribute, output, ElementRef, signal, computed, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component, HostAttributeToken, afterNextRender, DestroyRef, Directive } from '@angular/core';
3
+ import { nextSelection, createFilter } from '@slotted/core/collection';
4
+ import { getLiveAnnouncer } from '@slotted/core/live-announcer';
5
+ import { createControllable } from '@slotted/core/state';
6
+ import { injectMessages } from '@slotted/angular/i18n';
7
+ import { tableMessages } from '@slotted/core/i18n';
8
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
9
+ import { createScrollAffordance } from '@slotted/core/overflow';
10
+ import { parseISODate, isPlainDate, toISODate, parseISOTime, parseISODateTime, isPlainTime, toISOTime, isPlainDateTime } from '@slotted/core/date';
11
+ import { emptyFilter, defaultOperator, operatorsFor, isFilterActive, describeFilter, isConditionActive, operandCount, withCondition, withJoin, normalizeFilter, serializeFilter } from '@slotted/core/filter';
12
+ import { NgTemplateOutlet } from '@angular/common';
13
+ import { SlButton } from '@slotted/angular/button';
14
+ import { SlCheckbox } from '@slotted/angular/checkbox';
15
+ import { SlDatePicker } from '@slotted/angular/date-picker';
16
+ import { SlDateRangePicker, SlDateRangePickerPresets } from '@slotted/angular/date-range-picker';
17
+ import { SlDateTimePicker } from '@slotted/angular/datetime-picker';
18
+ import { SlDateTimeRangePicker, SlDateTimeRangePickerPresets } from '@slotted/angular/datetime-range-picker';
19
+ import { SlNumberField, SlNumberFieldInput } from '@slotted/angular/number-field';
20
+ import { SlPopover, SlPopoverContent, SlPopoverLayer, SlPopoverTrigger } from '@slotted/angular/popover';
21
+ import { SlRadio, SlRadioGroup } from '@slotted/angular/radio-group';
22
+ import { SlSelect, SlSelectItem } from '@slotted/angular/select';
23
+ import { SlTagsInput } from '@slotted/angular/tags-input';
24
+ import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
25
+ import { SlTimePicker } from '@slotted/angular/time-picker';
26
+ import { SlTimeRangePicker, SlTimeRangePickerPresets } from '@slotted/angular/time-range-picker';
27
+ import { SlGlyph, SlIcon } from '@slotted/angular/icon';
28
+ import { SlSkeleton } from '@slotted/angular/skeleton';
29
+ import * as i1 from '@slotted/angular/tooltip';
30
+ import { SlTooltip, SlTooltipContent, SlTooltipLayer, provideTooltipDefaults, SlTooltipTrigger } from '@slotted/angular/tooltip';
31
+
32
+ const FALLBACK = {
33
+ cellAlign: 'center',
34
+ columns: 1,
35
+ layout: 'auto',
36
+ selectionMode: 'none',
37
+ stickyFooter: false,
38
+ stickyHeader: false,
39
+ stickyTo: 'scroll',
40
+ striped: false,
41
+ variant: 'ruled',
42
+ };
43
+ const TABLE_DEFAULTS = new InjectionToken('slotted table defaults', {
44
+ providedIn: 'root',
45
+ factory: () => FALLBACK,
46
+ });
47
+ /**
48
+ * An application decides once how its tables are framed and how they select,
49
+ * rather than repeating the same inputs on every listing screen. A table that
50
+ * states any of them itself still wins. Its words come from the language in
51
+ * force (`provideSlotted`).
52
+ */
53
+ function provideTableDefaults(defaults) {
54
+ return {
55
+ provide: TABLE_DEFAULTS,
56
+ useFactory: () => ({ ...FALLBACK, ...defaults }),
57
+ };
58
+ }
59
+ function injectTableDefaults() {
60
+ return inject(TABLE_DEFAULTS);
61
+ }
62
+ /**
63
+ * Application-scoped rather than module-scoped, for the reason `field` records:
64
+ * a module-level counter produces colliding sequences when two applications
65
+ * render in one server process, and the server and the client sequences must
66
+ * match for hydration.
67
+ */
68
+ class SlTableIdFactory {
69
+ count = 0;
70
+ next() {
71
+ this.count += 1;
72
+ return `slotted-table-${this.count}`;
73
+ }
74
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableIdFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
75
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableIdFactory, providedIn: 'root' });
76
+ }
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableIdFactory, decorators: [{
78
+ type: Injectable,
79
+ args: [{ providedIn: 'root' }]
80
+ }] });
81
+
82
+ /** Every selectable row, in the order the body renders them. */
83
+ const TABLE_ROW_SELECTOR = '[data-part="body"] > [data-part="row"][data-value]';
84
+ /**
85
+ * A table of moderate data: the platform's own structure, with sorting,
86
+ * selection, expansion and a place for a paging control.
87
+ *
88
+ * **The role is `table`, not `grid`.** The APG is explicit — a table "is not an
89
+ * interactive widget. Thus, its cells are not focusable or selectable" — so
90
+ * every control inside it is its own tab stop and the family binds no key of
91
+ * its own. `data-grid` is the composite widget with a cell cursor.
92
+ *
93
+ * **The family holds the sort and reorders nothing.** The rows are the
94
+ * consumer's own, written with `@for` over their own array; reordering them
95
+ * would mean owning the data, which is the line between this family and
96
+ * `data-grid`.
97
+ *
98
+ * **The selection is a form value.** A bulk-action screen is a reactive form
99
+ * rather than a component with a callback, which no surveyed Angular table
100
+ * offers.
101
+ */
102
+ class SlTable {
103
+ /** Which column the rows are ordered by. Two-way, so a template binds it. */
104
+ sort = model(null, /* @ts-ignore */
105
+ ...(ngDevMode ? [{ debugName: "sort" }] : /* istanbul ignore next */ []));
106
+ /** The chosen rows, in the collection's own order. */
107
+ value = model([], /* @ts-ignore */
108
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
109
+ /** The rows whose detail is open. */
110
+ expanded = model([], /* @ts-ignore */
111
+ ...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
112
+ variant = input(undefined, /* @ts-ignore */
113
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
114
+ layout = input(undefined, /* @ts-ignore */
115
+ ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
116
+ selectionMode = input(undefined, /* @ts-ignore */
117
+ ...(ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []));
118
+ /**
119
+ * Where every cell's content sits in a row as tall as its tallest cell. A
120
+ * cell states `blockAlign` to answer differently.
121
+ */
122
+ cellAlign = input(undefined, /* @ts-ignore */
123
+ ...(ngDevMode ? [{ debugName: "cellAlign" }] : /* istanbul ignore next */ []));
124
+ striped = input(undefined, { ...(ngDevMode ? { debugName: "striped" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
125
+ stickyHeader = input(undefined, { ...(ngDevMode ? { debugName: "stickyHeader" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
126
+ /**
127
+ * Holds the summary rows against the bottom of the same box the header is
128
+ * held against the top of, so a total does not scroll out of the view that
129
+ * exists to show it. It pins the `tfoot` and not the footer bar, which is
130
+ * outside the scroller and never leaves.
131
+ */
132
+ stickyFooter = input(undefined, { ...(ngDevMode ? { debugName: "stickyFooter" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
133
+ /**
134
+ * What the sticky header stays inside. `page` releases the family's own
135
+ * scroll container, so the table can no longer scroll sideways in its frame.
136
+ */
137
+ stickyTo = input(undefined, /* @ts-ignore */
138
+ ...(ngDevMode ? [{ debugName: "stickyTo" }] : /* istanbul ignore next */ []));
139
+ /**
140
+ * How many columns the table renders. The spanning parts — the detail row,
141
+ * the empty cell, the skeleton rows — need the number, and reading it from
142
+ * the DOM would be nothing on the server and a count on the client.
143
+ */
144
+ columns = input(undefined, { ...(ngDevMode ? { debugName: "columns" } : /* istanbul ignore next */ {}), transform: (count) => (count === undefined ? undefined : numberAttribute(count)) });
145
+ /** A refresh over rows already shown: `aria-busy`, and nothing moves. */
146
+ loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
147
+ /**
148
+ * Words laid over the catalog of the language in force, key by key: the
149
+ * selection, expansion and sort words, the scrolling region's name and every
150
+ * word of the column filters.
151
+ */
152
+ messages = input(undefined, /* @ts-ignore */
153
+ ...(ngDevMode ? [{ debugName: "messages" }] : /* istanbul ignore next */ []));
154
+ /** One output per transition, each carrying the reason and the event. */
155
+ sortChangeRequest = output();
156
+ valueChangeRequest = output();
157
+ expandedChangeRequest = output();
158
+ defaults = injectTableDefaults();
159
+ host = inject(ElementRef);
160
+ id = inject(SlTableIdFactory).next();
161
+ /** Where a range starts: the row of the last press that held no modifier. */
162
+ anchor = undefined;
163
+ touched = undefined;
164
+ notify = undefined;
165
+ formDisabled = signal(false, /* @ts-ignore */
166
+ ...(ngDevMode ? [{ debugName: "formDisabled" }] : /* istanbul ignore next */ []));
167
+ resolvedVariant = computed(() => this.variant() ?? this.defaults.variant, /* @ts-ignore */
168
+ ...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
169
+ resolvedLayout = computed(() => this.layout() ?? this.defaults.layout, /* @ts-ignore */
170
+ ...(ngDevMode ? [{ debugName: "resolvedLayout" }] : /* istanbul ignore next */ []));
171
+ resolvedCellAlign = computed(() => this.cellAlign() ?? this.defaults.cellAlign, /* @ts-ignore */
172
+ ...(ngDevMode ? [{ debugName: "resolvedCellAlign" }] : /* istanbul ignore next */ []));
173
+ resolvedMode = computed(() => this.selectionMode() ?? this.defaults.selectionMode, /* @ts-ignore */
174
+ ...(ngDevMode ? [{ debugName: "resolvedMode" }] : /* istanbul ignore next */ []));
175
+ resolvedStriped = computed(() => this.striped() ?? this.defaults.striped, /* @ts-ignore */
176
+ ...(ngDevMode ? [{ debugName: "resolvedStriped" }] : /* istanbul ignore next */ []));
177
+ resolvedStickyHeader = computed(() => this.stickyHeader() ?? this.defaults.stickyHeader, /* @ts-ignore */
178
+ ...(ngDevMode ? [{ debugName: "resolvedStickyHeader" }] : /* istanbul ignore next */ []));
179
+ resolvedStickyFooter = computed(() => this.stickyFooter() ?? this.defaults.stickyFooter, /* @ts-ignore */
180
+ ...(ngDevMode ? [{ debugName: "resolvedStickyFooter" }] : /* istanbul ignore next */ []));
181
+ resolvedStickyTo = computed(() => this.stickyTo() ?? this.defaults.stickyTo, /* @ts-ignore */
182
+ ...(ngDevMode ? [{ debugName: "resolvedStickyTo" }] : /* istanbul ignore next */ []));
183
+ resolvedColumns = computed(() => this.columns() ?? this.defaults.columns, /* @ts-ignore */
184
+ ...(ngDevMode ? [{ debugName: "resolvedColumns" }] : /* istanbul ignore next */ []));
185
+ /** The family's words in the language in force, with this table's `messages` laid over them. */
186
+ t = injectMessages(tableMessages, this.messages);
187
+ isSelected(key) {
188
+ return this.value().includes(key);
189
+ }
190
+ isExpanded(key) {
191
+ return this.expanded().includes(key);
192
+ }
193
+ /**
194
+ * Every selectable row's value, read out of the DOM at the moment it is
195
+ * needed rather than kept in a registry. A registry holds the order rows were
196
+ * created in, and a sorted table renders the same rows in a new order without
197
+ * destroying one of them — so the range and the select-all would run against
198
+ * the order before the sort.
199
+ */
200
+ rows() {
201
+ return [...this.host.nativeElement.querySelectorAll(TABLE_ROW_SELECTOR)]
202
+ .filter((row) => !row.hasAttribute('data-disabled'))
203
+ .map((row) => row.getAttribute('data-value') ?? '');
204
+ }
205
+ requestSort(column, source) {
206
+ /**
207
+ * Ascending, descending, then none — the third state Material and Ant both
208
+ * ship and Carbon does not. A reader who sorted a column by accident has no
209
+ * other way back.
210
+ */
211
+ const held = this.sort();
212
+ const next = held?.column !== column
213
+ ? { column, direction: 'ascending' }
214
+ : held.direction === 'ascending'
215
+ ? { column, direction: 'descending' }
216
+ : null;
217
+ const state = createControllable({
218
+ initial: held,
219
+ equals: (a, b) => a?.column === b?.column && a?.direction === b?.direction,
220
+ onRequest: (request) => this.sortChangeRequest.emit(request),
221
+ });
222
+ const moved = state.request(next, next === null ? 'clear' : 'pointer', source);
223
+ /**
224
+ * `aria-sort` is a property, and a property that changes silently is a
225
+ * change no reader hears. None of the six surveyed implementations says it.
226
+ */
227
+ const heading = source?.currentTarget?.textContent?.trim() ?? column;
228
+ const said = next === null
229
+ ? this.t('sortCleared', { column: heading })
230
+ : next.direction === 'ascending'
231
+ ? this.t('sortedAscending', { column: heading })
232
+ : this.t('sortedDescending', { column: heading });
233
+ getLiveAnnouncer(this.host.nativeElement.ownerDocument).announce(said);
234
+ if (moved)
235
+ this.sort.set(next);
236
+ }
237
+ toggleSelected(key, options) {
238
+ const result = nextSelection({
239
+ action: options.range && this.resolvedMode() === 'multiple' ? 'range' : 'toggle',
240
+ anchor: this.anchor,
241
+ behavior: 'toggle',
242
+ key,
243
+ keys: this.rows(),
244
+ mode: this.resolvedMode(),
245
+ selected: this.value(),
246
+ });
247
+ if (!options.range)
248
+ this.anchor = key;
249
+ this.requestValue(result.selected, options.range ? 'select' : 'pointer', options.source);
250
+ }
251
+ toggleSelectAll(source) {
252
+ const result = nextSelection({
253
+ action: 'all',
254
+ keys: this.rows(),
255
+ mode: this.resolvedMode(),
256
+ selected: this.value(),
257
+ });
258
+ this.requestValue(result.selected, result.selected.length === 0 ? 'clear' : 'select', source);
259
+ }
260
+ toggleExpanded(key, source) {
261
+ const held = this.expanded();
262
+ const next = held.includes(key) ? held.filter((open) => open !== key) : [...held, key];
263
+ const state = createControllable({
264
+ initial: held,
265
+ equals: (a, b) => a.length === b.length && a.every((open, index) => open === b[index]),
266
+ onRequest: (request) => this.expandedChangeRequest.emit(request),
267
+ });
268
+ if (state.request(next, 'pointer', source))
269
+ this.expanded.set(next);
270
+ }
271
+ /** The form's own value is the selection, which is what a bulk action acts on. */
272
+ writeValue(value) {
273
+ this.value.set(value ?? []);
274
+ }
275
+ registerOnChange(fn) {
276
+ this.notify = fn;
277
+ }
278
+ registerOnTouched(fn) {
279
+ this.touched = fn;
280
+ }
281
+ setDisabledState(isDisabled) {
282
+ this.formDisabled.set(isDisabled);
283
+ }
284
+ disabledByForm = computed(() => this.formDisabled(), /* @ts-ignore */
285
+ ...(ngDevMode ? [{ debugName: "disabledByForm" }] : /* istanbul ignore next */ []));
286
+ requestValue(next, reason, source) {
287
+ const state = createControllable({
288
+ initial: this.value(),
289
+ equals: (a, b) => a.length === b.length && a.every((key, index) => key === b[index]),
290
+ onRequest: (request) => this.valueChangeRequest.emit(request),
291
+ });
292
+ if (!state.request(next, reason, source))
293
+ return;
294
+ this.value.set(next);
295
+ this.notify?.(next);
296
+ this.touched?.();
297
+ }
298
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
299
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlTable, isStandalone: true, selector: "div[slTable]", inputs: { sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, cellAlign: { classPropertyName: "cellAlign", publicName: "cellAlign", isSignal: true, isRequired: false, transformFunction: null }, striped: { classPropertyName: "striped", publicName: "striped", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null }, stickyFooter: { classPropertyName: "stickyFooter", publicName: "stickyFooter", isSignal: true, isRequired: false, transformFunction: null }, stickyTo: { classPropertyName: "stickyTo", publicName: "stickyTo", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sort: "sortChange", value: "valueChange", expanded: "expandedChange", sortChangeRequest: "sortChangeRequest", valueChangeRequest: "valueChangeRequest", expandedChangeRequest: "expandedChangeRequest" }, host: { attributes: { "data-ui": "table", "data-part": "root" }, properties: { "attr.data-variant": "resolvedVariant()", "attr.data-layout": "resolvedLayout()", "attr.data-cell-align": "resolvedCellAlign()", "attr.data-striped": "resolvedStriped() ? '' : null", "attr.data-sticky-header": "resolvedStickyHeader() ? '' : null", "attr.data-sticky-footer": "resolvedStickyFooter() ? '' : null", "attr.data-sticky-to": "resolvedStickyTo()", "attr.data-loading": "loading() ? '' : null" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlTable), multi: true }], exportAs: ["slTable"], ngImport: i0, template: '<ng-content />', isInline: true, styles: ["@layer slotted.components{[data-ui=table][data-part=root]{--_row-min-block: var( --slotted-table-row-min-block-size, var(--slotted-control-height-md, 34px) );--_font-size: var(--slotted-table-font-size, var(--slotted-control-font-size-md, 13px));--_icon-size: var(--slotted-table-icon-size, var(--slotted-control-icon-size-md, 16px));--_gap: var(--slotted-table-gap, var(--slotted-control-gap-md, 8px));--_pad-inline: var( --slotted-table-cell-padding-inline, var(--slotted-control-padding-inline-md, 13px) );--_pad-block: var( --slotted-table-cell-padding-block, max( var(--slotted-space-2, .25rem), calc((var(--_row-min-block) - var(--_font-size) * var(--slotted-line-height-md, 1.5)) / 2) ) );--_line: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));--_radius: var(--slotted-table-radius, var(--slotted-radius-md, 6px));--_rule: var(--slotted-table-border-color, var(--slotted-border-subtle, ButtonBorder));--_rule-strong: var( --slotted-table-border-color-strong, var(--slotted-border-strong, ButtonBorder) );--_rule-width: var(--slotted-table-border-width, var(--slotted-border-width-thin, 1px));--_text: var(--slotted-table-color, var(--slotted-text, CanvasText));--_muted: var(--slotted-table-color-muted, var(--slotted-text-muted, GrayText));--_surface: var(--slotted-table-surface, var(--slotted-ground, var(--slotted-surface, Canvas)));--_head-surface: var( --slotted-table-header-surface, color-mix(in oklab, var(--slotted-text, CanvasText) 8%, var(--_surface)) );--_stripe: var( --slotted-table-row-surface-stripe, color-mix(in oklab, var(--slotted-text, CanvasText) 5%, var(--_surface)) );--_hover: var( --slotted-table-row-surface-hover, var(--slotted-tone-secondary-subtle-hover, ButtonFace) );--_selected: var( --slotted-table-row-surface-selected, var(--slotted-tone-accent-surface, Canvas) );--_selected-hover: var( --slotted-table-row-surface-selected-hover, var(--slotted-tone-accent-subtle-hover, ButtonFace) );--_selected-text: var( --slotted-table-row-color-selected, var(--slotted-tone-accent-text, CanvasText) );background-color:var(--_surface);box-sizing:border-box;color:var(--_text);display:block;isolation:isolate;font-family:var(--slotted-table-font-family, var(--slotted-control-font-family));font-size:var(--_font-size);line-height:var(--slotted-line-height-md, 1.5);max-inline-size:100%}[data-ui=table][data-variant=framed]{border:var(--_rule-width) solid var(--_rule);border-radius:var(--_radius);box-shadow:var(--slotted-table-shadow, var(--slotted-shadow-xs, none));overflow:clip}[data-ui=table] [data-part=scroll]{overflow:auto;overscroll-behavior-inline:contain}[data-ui=table] [data-part=scroll]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=table] [data-part=table]{border-collapse:separate;border-spacing:0;inline-size:max-content;min-inline-size:100%;text-align:start}[data-ui=table][data-layout=fixed] [data-part=table]{inline-size:100%;table-layout:fixed}[data-ui=table] [data-part=caption]{caption-side:block-start;color:var(--_muted);font-size:var(--slotted-font-size-xs, .75rem);padding-block:var(--_pad-block);padding-inline:var(--_pad-inline);text-align:start}[data-ui=table] [data-part=column-header],[data-ui=table] [data-part=head] [data-part=selection]{background-color:var(--_head-surface);border-block-end:var(--_rule-width) solid var(--_rule-strong);color:var(--_text);font-weight:var(--slotted-font-weight-semibold, 600);padding-block:var(--_pad-block);padding-inline:var(--_pad-inline);position:relative;text-align:start;vertical-align:bottom}[data-ui=table][data-variant=plain] [data-part=column-header]{background-color:transparent}[data-ui=table] [data-part=row]{background-color:var(--_surface)}[data-ui=table]{--_cell-align: middle}[data-ui=table][data-cell-align=start]{--_cell-align: top}[data-ui=table][data-cell-align=end]{--_cell-align: bottom}[data-ui=table] [data-part=cell],[data-ui=table] [data-part=row-header]{padding-block:var(--_pad-block);padding-inline:var(--_pad-inline);text-align:start;vertical-align:var(--_cell-align)}[data-ui=table] [data-block-align=start]{vertical-align:top}[data-ui=table] [data-block-align=center]{vertical-align:middle}[data-ui=table] [data-block-align=end]{vertical-align:bottom}[data-ui=table] :is([data-part=cell],[data-part=row-header]):has(>[data-part=root][data-variant=plain]:is([data-ui=select],[data-ui=combobox],[data-ui=multi-select],[data-ui=text-field],[data-ui=textarea],[data-ui=number-field],[data-ui=currency-field],[data-ui=date-field],[data-ui=time-field],[data-ui=datetime-field],[data-ui=tags-input],[data-ui=date-range-picker],[data-ui=time-range-picker],[data-ui=datetime-range-picker],[data-ui=entity-picker])){--slotted-control-padding-inline-sm: var(--_pad-inline);--slotted-control-padding-inline-md: var(--_pad-inline);--slotted-control-padding-inline-lg: var(--_pad-inline);--slotted-control-height-sm: var(--_row-min-block);--slotted-control-height-md: var(--_row-min-block);--slotted-control-height-lg: var(--_row-min-block);padding:0}[data-ui=table] [data-part=row-header]{font-weight:var(--slotted-font-weight-medium, 500)}[data-ui=table]:is([data-variant=ruled],[data-variant=framed]) [data-part=body]>[data-part=row]>*{border-block-end:var(--_rule-width) solid var(--_rule)}[data-ui=table]:is([data-variant=ruled],[data-variant=framed]) [data-part=body]>[data-part=row]:last-child>*{border-block-end-color:transparent}[data-ui=table][data-striped] [data-part=body]>[data-part=row]:nth-child(2n){background-color:var(--_stripe)}[data-ui=table] [data-part=body]>[data-part=row]:not([data-disabled]):hover{background-color:var(--_hover)}[data-ui=table] [data-part=body]>[data-part=row][data-selected]{background-color:var(--_selected);color:var(--_selected-text)}[data-ui=table] [data-part=body]>[data-part=row][data-selected]:not([data-disabled]):hover{background-color:var(--_selected-hover)}[data-ui=table] [data-part=row][data-disabled]{color:var(--slotted-disabled-foreground, GrayText)}[data-ui=table] [data-align=start]{text-align:start}[data-ui=table] [data-align=center]{text-align:center}[data-ui=table] [data-align=end]{text-align:end}[data-ui=table] [data-numeric]{font-variant-numeric:tabular-nums}[data-ui=table] [data-numeric]:not([data-align]){text-align:end}[data-ui=table] [data-text=wrap]{overflow-wrap:anywhere}[data-ui=table] [data-text=nowrap]{white-space:nowrap}[data-ui=table] [data-text=truncate]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui=table][data-sticky-header] [data-part=column-header],[data-ui=table][data-sticky-header] [data-part=head] [data-part=selection]{inset-block-start:var(--slotted-table-sticky-offset, 0);position:sticky;z-index:calc(var(--slotted-z-index-sticky, 100) + 1)}[data-ui=table][data-sticky-to=page] [data-part=scroll]{overflow:visible}[data-ui=table][data-sticky-footer] [data-part=summary]>[data-part=row]>*{inset-block-end:var(--slotted-table-sticky-offset-end, 0);position:sticky;z-index:calc(var(--slotted-z-index-sticky, 100) + 1)}[data-ui=table][data-sticky-footer] [data-part=summary] [data-sticky]{z-index:calc(var(--slotted-z-index-sticky, 100) + 2)}[data-ui=table] [data-sticky=start]{background-color:inherit;inset-inline-start:var(--slotted-table-sticky-inset, 0);position:sticky;z-index:var(--slotted-z-index-sticky, 100)}[data-ui=table] [data-sticky=end]{background-color:inherit;inset-inline-end:var(--slotted-table-sticky-inset, 0);position:sticky;z-index:var(--slotted-z-index-sticky, 100)}[data-ui=table][data-sticky-header] [data-part=column-header][data-sticky],[data-ui=table][data-sticky-header] [data-part=head] [data-part=selection][data-sticky]{background-color:var(--_head-surface);z-index:calc(var(--slotted-z-index-sticky, 100) + 2)}[data-ui=table] [data-sticky]:after{background-color:var(--slotted-table-border-color, var(--slotted-border-subtle));content:\"\";inline-size:var(--_rule-width);inset-block:calc(var(--_rule-width) * -1) 0;position:absolute;z-index:1}[data-ui=table] [data-sticky=start]:after{inset-inline-end:0}[data-ui=table] [data-sticky=end]:after{inset-inline-start:0}[data-ui=table] [data-part=column-header]:has(>[data-part=sort]){padding:0}[data-ui=table] [data-part=column-header]:has(>[data-part=column-actions]){--_actions-room: var( --slotted-table-column-actions-size, calc(var(--_pad-inline) + var(--slotted-target-min, 24px) + var(--_gap)) );padding-inline-end:var(--_actions-room)}[data-ui=table] [data-part=column-actions]{align-items:center;display:inline-flex;gap:var(--_gap);inset-block:0;inset-inline-end:var(--_pad-inline);position:absolute}[data-ui=table] [data-part=sort]{align-items:center;background-color:transparent;border:0;color:inherit;cursor:pointer;display:flex;font:inherit;gap:var(--_gap);inline-size:100%;justify-content:space-between;min-block-size:var(--slotted-target-min, 24px);min-inline-size:0;padding-block:var(--_pad-block);padding-inline:var(--_pad-inline);text-align:inherit}[data-ui=table] [data-align=center]>[data-part=sort]{justify-content:center}[data-ui=table] :is([data-align=end],[data-numeric]:not([data-align]))>[data-part=sort]{justify-content:end}[data-ui=table] [data-part=column-header]:has(>[data-part=sort]:not(:disabled)):hover{background-color:var( --slotted-table-header-surface-hover, color-mix(in oklab, var(--slotted-text, CanvasText) 7%, var(--_head-surface)) )}[data-ui=table] [data-part=column-header]{transition:background-color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=table] [data-part=sort]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=table] [data-part=sort]>[data-ui=icon]{--slotted-icon-size: var(--_icon-size);opacity:0;transition:opacity var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard)),rotate var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=table] [data-part=sort]:not(:disabled):hover>[data-ui=icon],[data-ui=table] [data-part=sort]:focus-visible>[data-ui=icon]{opacity:.55}[data-ui=table] [aria-sort]>[data-part=sort]>[data-ui=icon]{opacity:1}[data-ui=table] [aria-sort=ascending]>[data-part=sort]>[data-ui=icon]{rotate:180deg}[data-ui=table] [data-part=selection]{inline-size:var(--slotted-table-selection-size, 3rem);padding-block:var(--_pad-block);padding-inline:var(--_pad-inline);text-align:center;vertical-align:var(--_cell-align);white-space:nowrap}[data-ui=table] [data-part=selection]>[data-ui=checkbox]{block-size:var(--_line)}[data-ui=table] [data-part=selection]{--slotted-selection-halo-opacity: 0}[data-ui=table] [data-part=cell]:has(>[data-part=expander]){inline-size:1%;padding-inline-end:0;white-space:nowrap}[data-ui=table] [data-part=column-actions] *:has([data-part=filter]){display:contents}[data-ui=table] [data-part=expander],[data-ui=table] [data-part=column-actions]>button,[data-ui=table] button[data-part=column-actions],[data-ui=table] [data-part=filter]{background-color:transparent;border:0;border-radius:var(--slotted-table-control-radius, var(--slotted-radius-sm, 4px));color:var(--_muted);cursor:pointer;display:inline-flex;block-size:var(--slotted-target-min, 24px);inline-size:var(--slotted-target-min, 24px);margin-block:calc((var(--_line) - var(--slotted-target-min, 24px)) / 2);padding:0;align-items:center;justify-content:center;transition:background-color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}@media(pointer:coarse){[data-ui=table] [data-part=expander],[data-ui=table] [data-part=column-actions]>button,[data-ui=table] button[data-part=column-actions],[data-ui=table] [data-part=filter]{position:relative}[data-ui=table] [data-part=expander]:after,[data-ui=table] [data-part=column-actions]>button:after,[data-ui=table] button[data-part=column-actions]:after,[data-ui=table] [data-part=filter]:after{content:\"\";inset:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2));position:absolute}[data-ui=table] [data-part=column-actions]>button:after,[data-ui=table] button[data-part=column-actions]:after,[data-ui=table] [data-part=filter]:after{inset-inline-start:0}}[data-ui=table] [data-part=expander]:not(:disabled):hover{background-color:var(--_hover);color:var(--_text)}[data-ui=table] [data-part=column-actions]>button:not(:disabled):hover,[data-ui=table] button[data-part=column-actions]:not(:disabled):hover,[data-ui=table] [data-part=filter]:not(:disabled):hover{background-color:var( --slotted-table-header-surface-hover, color-mix(in oklab, var(--slotted-text, CanvasText) 7%, var(--_head-surface)) );color:var(--_text)}[data-ui=table] [data-part=expander]:focus-visible,[data-ui=table] [data-part=column-actions]>button:focus-visible,[data-ui=table] button[data-part=column-actions]:focus-visible,[data-ui=table] [data-part=filter]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:0}[data-ui=table] :is([data-part=column-actions],[data-part=filter]) :is(svg,img){block-size:var(--_icon-size);inline-size:var(--_icon-size)}[data-ui=table] [data-part=filter][data-filtered],[data-ui=table] [data-part=filter][data-filtered]:not(:disabled):hover{color:var(--slotted-tone-accent-text, LinkText)}[data-ui=table][data-part=filter-panel]{--_gap: var(--slotted-table-gap, var(--slotted-control-gap-md, 8px));--_font-size: var(--slotted-table-font-size, var(--slotted-control-font-size-md, 13px));--_line: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));--_pad-block: var(--slotted-space-2, 4px);--_text: var(--slotted-table-color, var(--slotted-text, CanvasText));--_muted: var(--slotted-table-color-muted, var(--slotted-text-muted, GrayText));--_rule: var(--slotted-table-border-color, var(--slotted-border-subtle, ButtonBorder));--_rule-width: var(--slotted-table-border-width, var(--slotted-border-width-thin, 1px));--_hover: var( --slotted-table-row-surface-hover, var(--slotted-tone-secondary-subtle-hover, ButtonFace) );box-sizing:border-box;display:grid;gap:var(--_gap);color:var(--_text);font-size:var(--_font-size);font-weight:var(--slotted-font-weight-regular, 400);line-height:var(--slotted-line-height-md, 1.5);padding:var(--slotted-space-5, 12px);min-inline-size:min(17rem,var(--slotted-positioner-available-width, 100%));max-inline-size:100%}[data-ui=table][data-part=filter-panel] [data-part=filter-condition]{display:grid;gap:calc(var(--_gap) / 2)}[data-ui=table][data-part=filter-panel] [data-part=filter-operator],[data-ui=table][data-part=filter-panel] [data-part=filter-search]{display:block}[data-ui=table][data-part=filter-panel] [data-part=filter-operand]{display:grid;gap:calc(var(--_gap) / 2);grid-template-columns:repeat(auto-fit,minmax(7rem,1fr))}[data-ui=table][data-part=filter-panel] [data-part=filter-operand][data-kind=set]{grid-template-columns:1fr;gap:var(--_gap)}[data-ui=table][data-part=filter-panel] [data-part=filter-operand][data-range],[data-ui=table][data-part=filter-panel] [data-part=filter-operand][data-kind=datetime],[data-ui=table][data-part=filter-panel] [data-part=filter-operand][data-operand=tags]{grid-template-columns:1fr}[data-ui=table][data-part=filter-panel] [data-part=filter-operand][data-kind=time]:not([data-range]){grid-template-columns:repeat(auto-fit,minmax(8rem,1fr))}[data-ui=table][data-part=filter-panel] [data-part=filter-join]{align-items:center;border-block-start:var(--_rule-width) solid var(--_rule);display:flex;flex-wrap:wrap;gap:var(--_gap);padding-block-start:var(--_gap)}[data-ui=table][data-part=filter-panel] [data-part=filter-join]>[data-label]{color:var(--_muted)}[data-ui=table][data-part=filter-panel] [data-part=filter-list]{display:grid;gap:var(--_gap);max-block-size:calc(var(--_line) * 9);overflow-y:auto;padding-inline-end:var(--_gap)}[data-ui=table][data-part=filter-panel] [data-part=filter-option]{--slotted-selection-halo-opacity: 0;align-items:center;border-radius:var(--slotted-table-control-radius, var(--slotted-radius-sm, 4px));display:flex;gap:var(--_gap);justify-content:space-between;margin-inline:calc(var(--_gap) * -1);padding-inline:var(--_gap)}[data-ui=table][data-part=filter-panel] [data-part=filter-option]:not([data-disabled]):hover{background-color:var(--_hover)}[data-ui=table][data-part=filter-panel] [data-part=filter-option]>[data-count]{color:var(--_muted);font-variant-numeric:tabular-nums}[data-ui=table][data-part=filter-panel] [data-part=filter-option][data-covering]{border-block-end:var(--_rule-width) solid var(--_rule);padding-block-end:var(--_gap)}[data-ui=table][data-part=filter-panel] [data-part=filter-empty]{color:var(--_muted);padding-block:var(--_pad-block);text-align:center}[data-ui=table][data-part=filter-panel] [data-part=filter-actions]{border-block-start:var(--_rule-width) solid var(--_rule);display:flex;gap:var(--_gap);justify-content:space-between;padding-block-start:var(--_gap)}[data-ui=table] [data-part=expander]>[data-ui=icon]{--slotted-icon-size: var(--_icon-size);rotate:0deg;transition:rotate var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=table] [data-part=expander][aria-expanded=true]>[data-ui=icon]{rotate:90deg}[data-ui=table]:dir(rtl) [data-part=expander]>[data-ui=icon]{scale:-1 1}[data-ui=table]:dir(rtl) [data-part=expander][aria-expanded=true]>[data-ui=icon]{rotate:-90deg}[data-ui=table] [data-part=detail]{background-color:var(--_stripe)}[data-ui=table] [data-part=detail]>[data-part=cell]{padding-block:var(--_pad-block);padding-inline:var(--_pad-inline)}[data-ui=table][data-striped] [data-part=body]>[data-part=detail]{background-color:var(--_stripe)}[data-ui=table] [data-part=empty]{color:var(--_muted);padding-block:var(--slotted-space-9, 2rem);padding-inline:var(--_pad-inline);text-align:center}[data-ui=table] [data-part=loader]>[data-part=row]>*{padding-block:var(--_pad-block);padding-inline:var(--_pad-inline)}[data-ui=table][data-loading] [data-part=body]{opacity:.55;transition:opacity var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=table] [data-part=summary]>[data-part=row]>*{background-color:var(--_head-surface);border-block-start:var(--_rule-width) solid var(--_rule-strong);font-weight:var(--slotted-font-weight-medium, 500);padding-block:var(--_pad-block);padding-inline:var(--_pad-inline)}[data-ui=table][data-variant=plain] [data-part=summary]>[data-part=row]>*{background-color:transparent}[data-ui=table] [data-part=footer]{align-items:center;border-block-start:var(--_rule-width) solid var(--_rule);display:flex;flex-wrap:wrap;gap:var(--_gap);padding-block:var(--_pad-block);padding-inline:var(--_pad-inline)}[data-ui=table] [data-part=footer]>:last-child{flex:1 1 auto;justify-content:end}@media print{[data-ui=table] [data-part=scroll]{max-block-size:none;overflow:visible}[data-ui=table][data-sticky-header] [data-part=column-header],[data-ui=table][data-sticky-header] [data-part=head] [data-part=selection],[data-ui=table][data-sticky-footer] [data-part=summary]>[data-part=row]>*,[data-ui=table] [data-sticky]{position:static}}}\n", "@layer slotted.components{[data-ui=checkbox][data-part=root]{--_size: var(--slotted-checkbox-size, var(--slotted-selection-size-md, 16px));--_font-size: var(--slotted-control-font-size-md, 13px);--_gap: var(--slotted-control-label-gap-md, 12px);--_line-height: var(--slotted-checkbox-line-height, var(--slotted-line-height-md, 1.5));--_mark-inset: var(--slotted-checkbox-mark-inset, 2px);--_mark-size: calc(var(--_size) - 2 * var(--_mark-inset));--_halo-spread: calc(var(--_gap) / 2);--_target: var(--slotted-target-min, 24px);--_lift: calc((var(--_font-size) * var(--_line-height) - var(--_size)) / 2);--_description-gap: var(--slotted-space-3, .375rem);align-content:start;color:var(--slotted-checkbox-color, var(--slotted-text, CanvasText));display:grid;font-family:var(--slotted-control-font-family, system-ui, sans-serif);font-size:var(--_font-size);grid-template-columns:auto minmax(0,1fr);isolation:isolate;line-height:var(--_line-height);position:relative}[data-ui=checkbox][data-part=root]{--_direction: ltr}[data-ui=checkbox][data-part=root]:dir(rtl){--_direction: rtl}[data-ui=checkbox][data-part=root][data-size=sm]{--_size: var(--slotted-checkbox-size, var(--slotted-selection-size-sm, 14px));--_font-size: var(--slotted-control-font-size-sm, 12px);--_gap: var(--slotted-control-label-gap-sm, 8px);--_tile-inset: var( --slotted-checkbox-tile-inset, var(--slotted-control-padding-inline-sm, 10px) )}[data-ui=checkbox][data-part=root][data-size=md]{--_size: var(--slotted-checkbox-size, var(--slotted-selection-size-md, 16px));--_font-size: var(--slotted-control-font-size-md, 13px);--_gap: var(--slotted-control-label-gap-md, 12px);--_tile-inset: var( --slotted-checkbox-tile-inset, var(--slotted-control-padding-inline-md, 13px) )}[data-ui=checkbox][data-part=root][data-size=lg]{--_size: var(--slotted-checkbox-size, var(--slotted-selection-size-lg, 18px));--_font-size: var(--slotted-control-font-size-lg, 14px);--_gap: var(--slotted-control-label-gap-lg, 12px);--_tile-inset: var( --slotted-checkbox-tile-inset, var(--slotted-control-padding-inline-lg, 16px) )}[data-ui=checkbox] [data-part=control]{appearance:none;background-color:var(--slotted-checkbox-background, var(--slotted-surface, Canvas));border:var(--slotted-checkbox-border-width, var(--slotted-border-width-medium, 1.5px)) solid var(--slotted-checkbox-border-color, var(--slotted-border-strong, ButtonBorder));border-radius:var(--slotted-checkbox-radius, var(--slotted-radius-xs, 2px));block-size:var(--_size);box-sizing:border-box;cursor:pointer;grid-area:1 / 1;inline-size:var(--_size);margin:0;margin-block-start:var(--_lift);margin-block-end:var(--_lift);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=checkbox] [data-part=indicator]{--slotted-icon-size: var(--_mark-size);block-size:var(--_mark-size);clip-path:inset(0% 100% 0% 0%);color:var(--slotted-checkbox-mark-color, var(--slotted-tone-accent-on-solid));display:flex;grid-area:1 / 1;inline-size:var(--_mark-size);margin-block-start:calc(var(--_lift) + var(--_mark-inset));margin-inline-start:var(--_mark-inset);opacity:0;pointer-events:none;transition:clip-path var(--slotted-duration-medium) var(--slotted-control-transition-easing),opacity var(--slotted-duration-medium) var(--slotted-control-transition-easing)}[data-ui=checkbox] [data-part=control]:checked+[data-part=indicator],[data-ui=checkbox] [data-part=control]:indeterminate+[data-part=indicator]{clip-path:inset(0% 0% 0% 0%);opacity:1}@media(prefers-reduced-motion:reduce){[data-ui=checkbox] [data-part=indicator],[data-ui=checkbox] [data-part=control]:checked+[data-part=indicator],[data-ui=checkbox] [data-part=control]:indeterminate+[data-part=indicator]{clip-path:none;transition:opacity var(--slotted-duration-medium) var(--slotted-control-transition-easing)}}[data-ui=checkbox] [data-part=label]{cursor:pointer;grid-column:2;grid-row:1;overflow-wrap:anywhere}[data-ui=checkbox][data-part=root]:has(>[data-part=label]){column-gap:var(--_gap)}[data-ui=checkbox][data-part=root]:not([data-variant=tile]) [data-part=label]{justify-self:start;position:relative}[data-ui=checkbox][data-part=root]:not([data-variant=tile]) [data-part=label]:before{block-size:var(--_target);content:\"\";direction:var(--_direction);inline-size:var(--_target);inset-block-start:calc(var(--_lift) + var(--_size) - var(--_target));inset-inline-start:calc((var(--_size) - var(--_target)) / 2 - var(--_size) - var(--_gap));position:absolute;z-index:-1}[data-ui=checkbox][data-part=root]:not([data-variant=tile]) [data-part=label]:after{background-color:var(--slotted-checkbox-halo-color, var(--slotted-tone-accent-text));border-radius:calc(var(--slotted-checkbox-radius, var(--slotted-radius-xs, 2px)) + var(--_halo-spread));content:\"\";direction:var(--_direction);inset-block:calc(var(--_lift) - var(--_halo-spread));inset-inline-end:calc(-1.5 * var(--_halo-spread));inset-inline-start:calc(-1 * (var(--_size) + var(--_gap) + var(--_halo-spread)));opacity:0;position:absolute;transition:opacity var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);z-index:-1}[data-ui=checkbox][data-part=root]:is([data-label-hidden],:has(>[data-part=label]:empty)):not([data-label-placement=start]){column-gap:0}[data-ui=checkbox][data-part=root]:is([data-label-hidden],:has(>[data-part=label]:empty)):not([data-label-placement=start],[data-variant=tile]) [data-part=label]:before{inset-inline-start:calc(-1 * var(--_target))}[data-ui=checkbox][data-part=root]:is([data-label-hidden],:has(>[data-part=label]:empty)):not([data-label-placement=start],[data-variant=tile]) [data-part=label]:after{inset-inline-end:calc(-1 * var(--_halo-spread));inset-inline-start:calc(-1 * (var(--_size) + var(--_halo-spread)))}[data-ui=checkbox] [data-part=description]{color:var(--slotted-checkbox-description-color, var(--slotted-text-muted, GrayText));font-size:var(--slotted-checkbox-description-font-size, var(--slotted-font-size-xs, .75rem));grid-column:2;grid-row:2;line-height:var(--slotted-line-height-xs, 1.4);margin:0;overflow-wrap:anywhere;padding-block-start:var(--_description-gap)}[data-ui=checkbox][data-part=root][data-label-placement=start]{grid-template-columns:minmax(0,1fr) auto}[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=control],[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=indicator]{grid-area:1 / 2}[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=label],[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=description]{grid-column:1}[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=label]{justify-self:stretch}[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=label]:before{inset-inline-end:calc(-1 * (var(--_size) + var(--_gap)));inset-inline-start:auto}[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=label]:after{inset-inline-end:calc(-1 * (var(--_size) + var(--_gap) + var(--_halo-spread)));inset-inline-start:calc(-1.5 * var(--_halo-spread))}[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:hover:not(:disabled){border-color:var(--slotted-checkbox-hover-border-color, var(--slotted-tone-accent-border))}[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:hover:not(:disabled)~[data-part=label]:after,[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:not(:disabled)~[data-part=label]:hover:after{opacity:var(--slotted-selection-halo-opacity, .12)}[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:active:not(:disabled){background-color:var( --slotted-checkbox-active-background, var(--slotted-tone-accent-subtle-active) )}[data-ui=checkbox] [data-part=control]:checked,[data-ui=checkbox] [data-part=control]:indeterminate{background-color:var(--slotted-checkbox-checked-background, var(--slotted-tone-accent-solid));border-color:var(--slotted-checkbox-checked-border-color, var(--slotted-tone-accent-solid))}[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:checked:hover:not(:disabled),[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:indeterminate:hover:not(:disabled){background-color:var( --slotted-checkbox-checked-hover-background, var(--slotted-tone-accent-solid-hover) );border-color:var( --slotted-checkbox-checked-hover-background, var(--slotted-tone-accent-solid-hover) )}[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:checked:active:not(:disabled),[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:indeterminate:active:not(:disabled){background-color:var( --slotted-checkbox-checked-active-background, var(--slotted-tone-accent-solid-active) );border-color:var( --slotted-checkbox-checked-active-background, var(--slotted-tone-accent-solid-active) )}[data-ui=checkbox] [data-part=control]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=checkbox][data-part=root][data-invalid]{--slotted-focus-ring-color: var( --slotted-checkbox-invalid-focus-ring-color, var(--slotted-focus-ring-color-invalid, Highlight) )}[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]{border-width:calc(var(--slotted-checkbox-border-width, var(--slotted-border-width-medium, 1.5px)) + var(--slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px)));border-color:var(--slotted-checkbox-invalid-border-color, var(--slotted-tone-danger-border))}[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:checked,[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:indeterminate{background-color:var( --slotted-checkbox-invalid-checked-background, var(--slotted-tone-danger-solid) );border-color:var( --slotted-checkbox-invalid-checked-background, var(--slotted-tone-danger-solid) );box-shadow:inset 0 0 0 var(--slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px)) var(--slotted-surface, Canvas)}[data-ui=checkbox][data-part=root][data-readonly] [data-part=control],[data-ui=checkbox][data-part=root][data-readonly] [data-part=label]{cursor:default}[data-ui=checkbox][data-part=root][data-readonly] [data-part=control]:not(:checked):not(:indeterminate){background-color:var( --slotted-checkbox-readonly-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=checkbox][data-part=root][data-disabled] [data-part=control],[data-ui=checkbox] [data-part=control]:disabled{background-color:var( --slotted-checkbox-disabled-background, var(--slotted-disabled-background) );border-color:var(--slotted-checkbox-disabled-border-color, var(--slotted-disabled-border));cursor:not-allowed}[data-ui=checkbox] [data-part=control]:disabled+[data-part=indicator]{color:var(--slotted-checkbox-disabled-mark-color, var(--slotted-disabled-foreground))}[data-ui=checkbox][data-part=root][data-disabled] [data-part=label],[data-ui=checkbox][data-part=root][data-disabled] [data-part=description],[data-ui=checkbox] [data-part=control]:disabled~[data-part=label],[data-ui=checkbox] [data-part=control]:disabled~[data-part=description]{color:var(--slotted-checkbox-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=checkbox][data-part=root][data-variant=tile]{--_description-gap: var( --slotted-checkbox-tile-description-gap, var(--slotted-space-2, .25rem) );--_tile-surface: var(--slotted-checkbox-tile-background, var(--slotted-surface, Canvas));--_tile-edge: var( --slotted-checkbox-tile-border-color, var(--slotted-control-border-color, ButtonBorder) );--_tile-edge-width: var(--slotted-control-border-width, 1px);background-color:var(--_tile-surface);border-radius:var(--slotted-checkbox-tile-radius, var(--slotted-radius-md, 6px));box-shadow:var(--slotted-control-shadow, none);cursor:pointer;padding:var(--_tile-inset);position:relative;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=checkbox][data-part=root][data-variant=tile]:before{border:calc(var(--_tile-edge-width) + var(--_tile-invalid-edge, 0px)) solid var(--_tile-edge);border-radius:inherit;content:\"\";inset:0;pointer-events:none;position:absolute;transition:border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=checkbox][data-part=root][data-variant=tile] [data-part=label]:after{content:\"\";inset:0;position:absolute}[data-ui=checkbox][data-part=root][data-variant=tile]:not([data-readonly]):not([data-disabled]):has([data-part=control]:not(:disabled)):not(:has([data-part=control]:is(:checked,:indeterminate))):hover{--_tile-surface: var( --slotted-checkbox-tile-hover-background, var(--slotted-tone-accent-subtle-hover) );--_tile-edge: var( --slotted-checkbox-tile-hover-border-color, var(--slotted-tone-accent-border) )}[data-ui=checkbox][data-part=root][data-variant=tile]:not([data-readonly]):not([data-disabled]):has([data-part=control]:not(:disabled)):not(:has([data-part=control]:is(:checked,:indeterminate))):active{--_tile-surface: var( --slotted-checkbox-tile-active-background, var(--slotted-tone-accent-subtle-active) )}[data-ui=checkbox][data-part=root][data-variant=tile]:not([data-readonly]):has([data-part=control]:is(:checked,:indeterminate)){--_tile-edge: var( --slotted-checkbox-tile-checked-border-color, var(--slotted-tone-accent-solid) );--_tile-edge-width: var(--slotted-border-width-thick, 2px)}[data-ui=checkbox][data-part=root][data-variant=tile]:not([data-readonly]):has([data-part=control]:is(:checked,:indeterminate)){--_tile-surface: var( --slotted-checkbox-tile-checked-background, var(--slotted-tone-accent-surface) )}[data-ui=checkbox][data-part=root][data-variant=tile]:not([data-readonly]):not([data-disabled]):has([data-part=control]:is(:checked,:indeterminate):not(:disabled)):hover{--_tile-edge: var( --slotted-checkbox-tile-checked-hover-border-color, var(--slotted-tone-accent-solid-hover) )}[data-ui=checkbox][data-part=root][data-variant=tile][data-invalid]{--_tile-edge: var( --slotted-checkbox-tile-invalid-border-color, var(--slotted-tone-danger-border) );--_tile-invalid-edge: var( --slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) )}[data-ui=checkbox][data-part=root][data-variant=tile][data-invalid]:has([data-part=control]:is(:checked,:indeterminate)){--_tile-surface: var( --slotted-checkbox-tile-invalid-checked-background, var(--slotted-tone-danger-surface) );--_tile-edge: var( --slotted-checkbox-tile-invalid-checked-border-color, var(--slotted-tone-danger-solid) )}[data-ui=checkbox][data-part=root][data-variant=tile][data-readonly]{--_tile-surface: var( --slotted-checkbox-tile-readonly-background, var(--slotted-tone-secondary-subtle-hover) );--_tile-edge: var(--slotted-checkbox-tile-readonly-border-color, var(--slotted-border-strong));cursor:default}[data-ui=checkbox][data-part=root][data-variant=tile][data-disabled],[data-ui=checkbox][data-part=root][data-variant=tile]:has([data-part=control]:disabled){--_tile-surface: var( --slotted-checkbox-tile-disabled-background, var(--slotted-disabled-background) );--_tile-edge: var( --slotted-checkbox-tile-disabled-border-color, var(--slotted-disabled-border) );box-shadow:none;cursor:not-allowed}[data-ui=checkbox][data-part=root][data-variant=tile]:has([data-part=control]:focus-visible){outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=checkbox][data-part=root][data-variant=tile] [data-part=control]:focus-visible{outline:none}@media(forced-colors:active){[data-ui=checkbox] [data-part=control]{background-color:Field;border-color:FieldText}[data-ui=checkbox] [data-part=control]:checked,[data-ui=checkbox] [data-part=control]:indeterminate{background-color:Highlight;border-color:Highlight}[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:checked,[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:indeterminate{background-color:Highlight;border-color:CanvasText;outline:var( --slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) ) solid Canvas;outline-offset:calc(-1 * (var(--slotted-checkbox-border-width, var(--slotted-border-width-medium, 1.5px)) + var( --slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) ) + var( --slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) )))}[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:checked:focus-visible,[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:indeterminate:focus-visible{outline:calc(var(--slotted-focus-ring-width, 2px) + var( --slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) )) double var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=checkbox] [data-part=control]:checked+[data-part=indicator],[data-ui=checkbox] [data-part=control]:indeterminate+[data-part=indicator]{color:HighlightText}[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:checked+[data-part=indicator],[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:indeterminate+[data-part=indicator]{color:HighlightText}[data-ui=checkbox][data-part=root][data-variant=tile][data-invalid],[data-ui=checkbox][data-part=root][data-variant=tile][data-invalid]:has([data-part=control]:is(:checked,:indeterminate)){--_tile-edge: CanvasText}[data-ui=checkbox] [data-part=control]:disabled{background-color:Field;border-color:GrayText}[data-ui=checkbox] [data-part=control]:disabled+[data-part=indicator]{color:GrayText}}}\n", "@layer slotted.components{[data-ui=visually-hidden]:not([data-focusable]:focus-within){block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;inset-block-start:0;inset-inline-start:0;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
300
+ }
301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTable, decorators: [{
302
+ type: Component,
303
+ args: [{ selector: 'div[slTable]', standalone: true, exportAs: 'slTable', template: '<ng-content />', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlTable), multi: true }], host: {
304
+ 'data-ui': 'table',
305
+ 'data-part': 'root',
306
+ '[attr.data-variant]': 'resolvedVariant()',
307
+ '[attr.data-layout]': 'resolvedLayout()',
308
+ '[attr.data-cell-align]': 'resolvedCellAlign()',
309
+ '[attr.data-striped]': "resolvedStriped() ? '' : null",
310
+ '[attr.data-sticky-header]': "resolvedStickyHeader() ? '' : null",
311
+ '[attr.data-sticky-footer]': "resolvedStickyFooter() ? '' : null",
312
+ '[attr.data-sticky-to]': 'resolvedStickyTo()',
313
+ '[attr.data-loading]': "loading() ? '' : null",
314
+ }, styles: ["@layer slotted.components{[data-ui=table][data-part=root]{--_row-min-block: var( --slotted-table-row-min-block-size, var(--slotted-control-height-md, 34px) );--_font-size: var(--slotted-table-font-size, var(--slotted-control-font-size-md, 13px));--_icon-size: var(--slotted-table-icon-size, var(--slotted-control-icon-size-md, 16px));--_gap: var(--slotted-table-gap, var(--slotted-control-gap-md, 8px));--_pad-inline: var( --slotted-table-cell-padding-inline, var(--slotted-control-padding-inline-md, 13px) );--_pad-block: var( --slotted-table-cell-padding-block, max( var(--slotted-space-2, .25rem), calc((var(--_row-min-block) - var(--_font-size) * var(--slotted-line-height-md, 1.5)) / 2) ) );--_line: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));--_radius: var(--slotted-table-radius, var(--slotted-radius-md, 6px));--_rule: var(--slotted-table-border-color, var(--slotted-border-subtle, ButtonBorder));--_rule-strong: var( --slotted-table-border-color-strong, var(--slotted-border-strong, ButtonBorder) );--_rule-width: var(--slotted-table-border-width, var(--slotted-border-width-thin, 1px));--_text: var(--slotted-table-color, var(--slotted-text, CanvasText));--_muted: var(--slotted-table-color-muted, var(--slotted-text-muted, GrayText));--_surface: var(--slotted-table-surface, var(--slotted-ground, var(--slotted-surface, Canvas)));--_head-surface: var( --slotted-table-header-surface, color-mix(in oklab, var(--slotted-text, CanvasText) 8%, var(--_surface)) );--_stripe: var( --slotted-table-row-surface-stripe, color-mix(in oklab, var(--slotted-text, CanvasText) 5%, var(--_surface)) );--_hover: var( --slotted-table-row-surface-hover, var(--slotted-tone-secondary-subtle-hover, ButtonFace) );--_selected: var( --slotted-table-row-surface-selected, var(--slotted-tone-accent-surface, Canvas) );--_selected-hover: var( --slotted-table-row-surface-selected-hover, var(--slotted-tone-accent-subtle-hover, ButtonFace) );--_selected-text: var( --slotted-table-row-color-selected, var(--slotted-tone-accent-text, CanvasText) );background-color:var(--_surface);box-sizing:border-box;color:var(--_text);display:block;isolation:isolate;font-family:var(--slotted-table-font-family, var(--slotted-control-font-family));font-size:var(--_font-size);line-height:var(--slotted-line-height-md, 1.5);max-inline-size:100%}[data-ui=table][data-variant=framed]{border:var(--_rule-width) solid var(--_rule);border-radius:var(--_radius);box-shadow:var(--slotted-table-shadow, var(--slotted-shadow-xs, none));overflow:clip}[data-ui=table] [data-part=scroll]{overflow:auto;overscroll-behavior-inline:contain}[data-ui=table] [data-part=scroll]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=table] [data-part=table]{border-collapse:separate;border-spacing:0;inline-size:max-content;min-inline-size:100%;text-align:start}[data-ui=table][data-layout=fixed] [data-part=table]{inline-size:100%;table-layout:fixed}[data-ui=table] [data-part=caption]{caption-side:block-start;color:var(--_muted);font-size:var(--slotted-font-size-xs, .75rem);padding-block:var(--_pad-block);padding-inline:var(--_pad-inline);text-align:start}[data-ui=table] [data-part=column-header],[data-ui=table] [data-part=head] [data-part=selection]{background-color:var(--_head-surface);border-block-end:var(--_rule-width) solid var(--_rule-strong);color:var(--_text);font-weight:var(--slotted-font-weight-semibold, 600);padding-block:var(--_pad-block);padding-inline:var(--_pad-inline);position:relative;text-align:start;vertical-align:bottom}[data-ui=table][data-variant=plain] [data-part=column-header]{background-color:transparent}[data-ui=table] [data-part=row]{background-color:var(--_surface)}[data-ui=table]{--_cell-align: middle}[data-ui=table][data-cell-align=start]{--_cell-align: top}[data-ui=table][data-cell-align=end]{--_cell-align: bottom}[data-ui=table] [data-part=cell],[data-ui=table] [data-part=row-header]{padding-block:var(--_pad-block);padding-inline:var(--_pad-inline);text-align:start;vertical-align:var(--_cell-align)}[data-ui=table] [data-block-align=start]{vertical-align:top}[data-ui=table] [data-block-align=center]{vertical-align:middle}[data-ui=table] [data-block-align=end]{vertical-align:bottom}[data-ui=table] :is([data-part=cell],[data-part=row-header]):has(>[data-part=root][data-variant=plain]:is([data-ui=select],[data-ui=combobox],[data-ui=multi-select],[data-ui=text-field],[data-ui=textarea],[data-ui=number-field],[data-ui=currency-field],[data-ui=date-field],[data-ui=time-field],[data-ui=datetime-field],[data-ui=tags-input],[data-ui=date-range-picker],[data-ui=time-range-picker],[data-ui=datetime-range-picker],[data-ui=entity-picker])){--slotted-control-padding-inline-sm: var(--_pad-inline);--slotted-control-padding-inline-md: var(--_pad-inline);--slotted-control-padding-inline-lg: var(--_pad-inline);--slotted-control-height-sm: var(--_row-min-block);--slotted-control-height-md: var(--_row-min-block);--slotted-control-height-lg: var(--_row-min-block);padding:0}[data-ui=table] [data-part=row-header]{font-weight:var(--slotted-font-weight-medium, 500)}[data-ui=table]:is([data-variant=ruled],[data-variant=framed]) [data-part=body]>[data-part=row]>*{border-block-end:var(--_rule-width) solid var(--_rule)}[data-ui=table]:is([data-variant=ruled],[data-variant=framed]) [data-part=body]>[data-part=row]:last-child>*{border-block-end-color:transparent}[data-ui=table][data-striped] [data-part=body]>[data-part=row]:nth-child(2n){background-color:var(--_stripe)}[data-ui=table] [data-part=body]>[data-part=row]:not([data-disabled]):hover{background-color:var(--_hover)}[data-ui=table] [data-part=body]>[data-part=row][data-selected]{background-color:var(--_selected);color:var(--_selected-text)}[data-ui=table] [data-part=body]>[data-part=row][data-selected]:not([data-disabled]):hover{background-color:var(--_selected-hover)}[data-ui=table] [data-part=row][data-disabled]{color:var(--slotted-disabled-foreground, GrayText)}[data-ui=table] [data-align=start]{text-align:start}[data-ui=table] [data-align=center]{text-align:center}[data-ui=table] [data-align=end]{text-align:end}[data-ui=table] [data-numeric]{font-variant-numeric:tabular-nums}[data-ui=table] [data-numeric]:not([data-align]){text-align:end}[data-ui=table] [data-text=wrap]{overflow-wrap:anywhere}[data-ui=table] [data-text=nowrap]{white-space:nowrap}[data-ui=table] [data-text=truncate]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui=table][data-sticky-header] [data-part=column-header],[data-ui=table][data-sticky-header] [data-part=head] [data-part=selection]{inset-block-start:var(--slotted-table-sticky-offset, 0);position:sticky;z-index:calc(var(--slotted-z-index-sticky, 100) + 1)}[data-ui=table][data-sticky-to=page] [data-part=scroll]{overflow:visible}[data-ui=table][data-sticky-footer] [data-part=summary]>[data-part=row]>*{inset-block-end:var(--slotted-table-sticky-offset-end, 0);position:sticky;z-index:calc(var(--slotted-z-index-sticky, 100) + 1)}[data-ui=table][data-sticky-footer] [data-part=summary] [data-sticky]{z-index:calc(var(--slotted-z-index-sticky, 100) + 2)}[data-ui=table] [data-sticky=start]{background-color:inherit;inset-inline-start:var(--slotted-table-sticky-inset, 0);position:sticky;z-index:var(--slotted-z-index-sticky, 100)}[data-ui=table] [data-sticky=end]{background-color:inherit;inset-inline-end:var(--slotted-table-sticky-inset, 0);position:sticky;z-index:var(--slotted-z-index-sticky, 100)}[data-ui=table][data-sticky-header] [data-part=column-header][data-sticky],[data-ui=table][data-sticky-header] [data-part=head] [data-part=selection][data-sticky]{background-color:var(--_head-surface);z-index:calc(var(--slotted-z-index-sticky, 100) + 2)}[data-ui=table] [data-sticky]:after{background-color:var(--slotted-table-border-color, var(--slotted-border-subtle));content:\"\";inline-size:var(--_rule-width);inset-block:calc(var(--_rule-width) * -1) 0;position:absolute;z-index:1}[data-ui=table] [data-sticky=start]:after{inset-inline-end:0}[data-ui=table] [data-sticky=end]:after{inset-inline-start:0}[data-ui=table] [data-part=column-header]:has(>[data-part=sort]){padding:0}[data-ui=table] [data-part=column-header]:has(>[data-part=column-actions]){--_actions-room: var( --slotted-table-column-actions-size, calc(var(--_pad-inline) + var(--slotted-target-min, 24px) + var(--_gap)) );padding-inline-end:var(--_actions-room)}[data-ui=table] [data-part=column-actions]{align-items:center;display:inline-flex;gap:var(--_gap);inset-block:0;inset-inline-end:var(--_pad-inline);position:absolute}[data-ui=table] [data-part=sort]{align-items:center;background-color:transparent;border:0;color:inherit;cursor:pointer;display:flex;font:inherit;gap:var(--_gap);inline-size:100%;justify-content:space-between;min-block-size:var(--slotted-target-min, 24px);min-inline-size:0;padding-block:var(--_pad-block);padding-inline:var(--_pad-inline);text-align:inherit}[data-ui=table] [data-align=center]>[data-part=sort]{justify-content:center}[data-ui=table] :is([data-align=end],[data-numeric]:not([data-align]))>[data-part=sort]{justify-content:end}[data-ui=table] [data-part=column-header]:has(>[data-part=sort]:not(:disabled)):hover{background-color:var( --slotted-table-header-surface-hover, color-mix(in oklab, var(--slotted-text, CanvasText) 7%, var(--_head-surface)) )}[data-ui=table] [data-part=column-header]{transition:background-color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=table] [data-part=sort]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=table] [data-part=sort]>[data-ui=icon]{--slotted-icon-size: var(--_icon-size);opacity:0;transition:opacity var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard)),rotate var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=table] [data-part=sort]:not(:disabled):hover>[data-ui=icon],[data-ui=table] [data-part=sort]:focus-visible>[data-ui=icon]{opacity:.55}[data-ui=table] [aria-sort]>[data-part=sort]>[data-ui=icon]{opacity:1}[data-ui=table] [aria-sort=ascending]>[data-part=sort]>[data-ui=icon]{rotate:180deg}[data-ui=table] [data-part=selection]{inline-size:var(--slotted-table-selection-size, 3rem);padding-block:var(--_pad-block);padding-inline:var(--_pad-inline);text-align:center;vertical-align:var(--_cell-align);white-space:nowrap}[data-ui=table] [data-part=selection]>[data-ui=checkbox]{block-size:var(--_line)}[data-ui=table] [data-part=selection]{--slotted-selection-halo-opacity: 0}[data-ui=table] [data-part=cell]:has(>[data-part=expander]){inline-size:1%;padding-inline-end:0;white-space:nowrap}[data-ui=table] [data-part=column-actions] *:has([data-part=filter]){display:contents}[data-ui=table] [data-part=expander],[data-ui=table] [data-part=column-actions]>button,[data-ui=table] button[data-part=column-actions],[data-ui=table] [data-part=filter]{background-color:transparent;border:0;border-radius:var(--slotted-table-control-radius, var(--slotted-radius-sm, 4px));color:var(--_muted);cursor:pointer;display:inline-flex;block-size:var(--slotted-target-min, 24px);inline-size:var(--slotted-target-min, 24px);margin-block:calc((var(--_line) - var(--slotted-target-min, 24px)) / 2);padding:0;align-items:center;justify-content:center;transition:background-color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}@media(pointer:coarse){[data-ui=table] [data-part=expander],[data-ui=table] [data-part=column-actions]>button,[data-ui=table] button[data-part=column-actions],[data-ui=table] [data-part=filter]{position:relative}[data-ui=table] [data-part=expander]:after,[data-ui=table] [data-part=column-actions]>button:after,[data-ui=table] button[data-part=column-actions]:after,[data-ui=table] [data-part=filter]:after{content:\"\";inset:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2));position:absolute}[data-ui=table] [data-part=column-actions]>button:after,[data-ui=table] button[data-part=column-actions]:after,[data-ui=table] [data-part=filter]:after{inset-inline-start:0}}[data-ui=table] [data-part=expander]:not(:disabled):hover{background-color:var(--_hover);color:var(--_text)}[data-ui=table] [data-part=column-actions]>button:not(:disabled):hover,[data-ui=table] button[data-part=column-actions]:not(:disabled):hover,[data-ui=table] [data-part=filter]:not(:disabled):hover{background-color:var( --slotted-table-header-surface-hover, color-mix(in oklab, var(--slotted-text, CanvasText) 7%, var(--_head-surface)) );color:var(--_text)}[data-ui=table] [data-part=expander]:focus-visible,[data-ui=table] [data-part=column-actions]>button:focus-visible,[data-ui=table] button[data-part=column-actions]:focus-visible,[data-ui=table] [data-part=filter]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:0}[data-ui=table] :is([data-part=column-actions],[data-part=filter]) :is(svg,img){block-size:var(--_icon-size);inline-size:var(--_icon-size)}[data-ui=table] [data-part=filter][data-filtered],[data-ui=table] [data-part=filter][data-filtered]:not(:disabled):hover{color:var(--slotted-tone-accent-text, LinkText)}[data-ui=table][data-part=filter-panel]{--_gap: var(--slotted-table-gap, var(--slotted-control-gap-md, 8px));--_font-size: var(--slotted-table-font-size, var(--slotted-control-font-size-md, 13px));--_line: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));--_pad-block: var(--slotted-space-2, 4px);--_text: var(--slotted-table-color, var(--slotted-text, CanvasText));--_muted: var(--slotted-table-color-muted, var(--slotted-text-muted, GrayText));--_rule: var(--slotted-table-border-color, var(--slotted-border-subtle, ButtonBorder));--_rule-width: var(--slotted-table-border-width, var(--slotted-border-width-thin, 1px));--_hover: var( --slotted-table-row-surface-hover, var(--slotted-tone-secondary-subtle-hover, ButtonFace) );box-sizing:border-box;display:grid;gap:var(--_gap);color:var(--_text);font-size:var(--_font-size);font-weight:var(--slotted-font-weight-regular, 400);line-height:var(--slotted-line-height-md, 1.5);padding:var(--slotted-space-5, 12px);min-inline-size:min(17rem,var(--slotted-positioner-available-width, 100%));max-inline-size:100%}[data-ui=table][data-part=filter-panel] [data-part=filter-condition]{display:grid;gap:calc(var(--_gap) / 2)}[data-ui=table][data-part=filter-panel] [data-part=filter-operator],[data-ui=table][data-part=filter-panel] [data-part=filter-search]{display:block}[data-ui=table][data-part=filter-panel] [data-part=filter-operand]{display:grid;gap:calc(var(--_gap) / 2);grid-template-columns:repeat(auto-fit,minmax(7rem,1fr))}[data-ui=table][data-part=filter-panel] [data-part=filter-operand][data-kind=set]{grid-template-columns:1fr;gap:var(--_gap)}[data-ui=table][data-part=filter-panel] [data-part=filter-operand][data-range],[data-ui=table][data-part=filter-panel] [data-part=filter-operand][data-kind=datetime],[data-ui=table][data-part=filter-panel] [data-part=filter-operand][data-operand=tags]{grid-template-columns:1fr}[data-ui=table][data-part=filter-panel] [data-part=filter-operand][data-kind=time]:not([data-range]){grid-template-columns:repeat(auto-fit,minmax(8rem,1fr))}[data-ui=table][data-part=filter-panel] [data-part=filter-join]{align-items:center;border-block-start:var(--_rule-width) solid var(--_rule);display:flex;flex-wrap:wrap;gap:var(--_gap);padding-block-start:var(--_gap)}[data-ui=table][data-part=filter-panel] [data-part=filter-join]>[data-label]{color:var(--_muted)}[data-ui=table][data-part=filter-panel] [data-part=filter-list]{display:grid;gap:var(--_gap);max-block-size:calc(var(--_line) * 9);overflow-y:auto;padding-inline-end:var(--_gap)}[data-ui=table][data-part=filter-panel] [data-part=filter-option]{--slotted-selection-halo-opacity: 0;align-items:center;border-radius:var(--slotted-table-control-radius, var(--slotted-radius-sm, 4px));display:flex;gap:var(--_gap);justify-content:space-between;margin-inline:calc(var(--_gap) * -1);padding-inline:var(--_gap)}[data-ui=table][data-part=filter-panel] [data-part=filter-option]:not([data-disabled]):hover{background-color:var(--_hover)}[data-ui=table][data-part=filter-panel] [data-part=filter-option]>[data-count]{color:var(--_muted);font-variant-numeric:tabular-nums}[data-ui=table][data-part=filter-panel] [data-part=filter-option][data-covering]{border-block-end:var(--_rule-width) solid var(--_rule);padding-block-end:var(--_gap)}[data-ui=table][data-part=filter-panel] [data-part=filter-empty]{color:var(--_muted);padding-block:var(--_pad-block);text-align:center}[data-ui=table][data-part=filter-panel] [data-part=filter-actions]{border-block-start:var(--_rule-width) solid var(--_rule);display:flex;gap:var(--_gap);justify-content:space-between;padding-block-start:var(--_gap)}[data-ui=table] [data-part=expander]>[data-ui=icon]{--slotted-icon-size: var(--_icon-size);rotate:0deg;transition:rotate var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=table] [data-part=expander][aria-expanded=true]>[data-ui=icon]{rotate:90deg}[data-ui=table]:dir(rtl) [data-part=expander]>[data-ui=icon]{scale:-1 1}[data-ui=table]:dir(rtl) [data-part=expander][aria-expanded=true]>[data-ui=icon]{rotate:-90deg}[data-ui=table] [data-part=detail]{background-color:var(--_stripe)}[data-ui=table] [data-part=detail]>[data-part=cell]{padding-block:var(--_pad-block);padding-inline:var(--_pad-inline)}[data-ui=table][data-striped] [data-part=body]>[data-part=detail]{background-color:var(--_stripe)}[data-ui=table] [data-part=empty]{color:var(--_muted);padding-block:var(--slotted-space-9, 2rem);padding-inline:var(--_pad-inline);text-align:center}[data-ui=table] [data-part=loader]>[data-part=row]>*{padding-block:var(--_pad-block);padding-inline:var(--_pad-inline)}[data-ui=table][data-loading] [data-part=body]{opacity:.55;transition:opacity var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=table] [data-part=summary]>[data-part=row]>*{background-color:var(--_head-surface);border-block-start:var(--_rule-width) solid var(--_rule-strong);font-weight:var(--slotted-font-weight-medium, 500);padding-block:var(--_pad-block);padding-inline:var(--_pad-inline)}[data-ui=table][data-variant=plain] [data-part=summary]>[data-part=row]>*{background-color:transparent}[data-ui=table] [data-part=footer]{align-items:center;border-block-start:var(--_rule-width) solid var(--_rule);display:flex;flex-wrap:wrap;gap:var(--_gap);padding-block:var(--_pad-block);padding-inline:var(--_pad-inline)}[data-ui=table] [data-part=footer]>:last-child{flex:1 1 auto;justify-content:end}@media print{[data-ui=table] [data-part=scroll]{max-block-size:none;overflow:visible}[data-ui=table][data-sticky-header] [data-part=column-header],[data-ui=table][data-sticky-header] [data-part=head] [data-part=selection],[data-ui=table][data-sticky-footer] [data-part=summary]>[data-part=row]>*,[data-ui=table] [data-sticky]{position:static}}}\n", "@layer slotted.components{[data-ui=checkbox][data-part=root]{--_size: var(--slotted-checkbox-size, var(--slotted-selection-size-md, 16px));--_font-size: var(--slotted-control-font-size-md, 13px);--_gap: var(--slotted-control-label-gap-md, 12px);--_line-height: var(--slotted-checkbox-line-height, var(--slotted-line-height-md, 1.5));--_mark-inset: var(--slotted-checkbox-mark-inset, 2px);--_mark-size: calc(var(--_size) - 2 * var(--_mark-inset));--_halo-spread: calc(var(--_gap) / 2);--_target: var(--slotted-target-min, 24px);--_lift: calc((var(--_font-size) * var(--_line-height) - var(--_size)) / 2);--_description-gap: var(--slotted-space-3, .375rem);align-content:start;color:var(--slotted-checkbox-color, var(--slotted-text, CanvasText));display:grid;font-family:var(--slotted-control-font-family, system-ui, sans-serif);font-size:var(--_font-size);grid-template-columns:auto minmax(0,1fr);isolation:isolate;line-height:var(--_line-height);position:relative}[data-ui=checkbox][data-part=root]{--_direction: ltr}[data-ui=checkbox][data-part=root]:dir(rtl){--_direction: rtl}[data-ui=checkbox][data-part=root][data-size=sm]{--_size: var(--slotted-checkbox-size, var(--slotted-selection-size-sm, 14px));--_font-size: var(--slotted-control-font-size-sm, 12px);--_gap: var(--slotted-control-label-gap-sm, 8px);--_tile-inset: var( --slotted-checkbox-tile-inset, var(--slotted-control-padding-inline-sm, 10px) )}[data-ui=checkbox][data-part=root][data-size=md]{--_size: var(--slotted-checkbox-size, var(--slotted-selection-size-md, 16px));--_font-size: var(--slotted-control-font-size-md, 13px);--_gap: var(--slotted-control-label-gap-md, 12px);--_tile-inset: var( --slotted-checkbox-tile-inset, var(--slotted-control-padding-inline-md, 13px) )}[data-ui=checkbox][data-part=root][data-size=lg]{--_size: var(--slotted-checkbox-size, var(--slotted-selection-size-lg, 18px));--_font-size: var(--slotted-control-font-size-lg, 14px);--_gap: var(--slotted-control-label-gap-lg, 12px);--_tile-inset: var( --slotted-checkbox-tile-inset, var(--slotted-control-padding-inline-lg, 16px) )}[data-ui=checkbox] [data-part=control]{appearance:none;background-color:var(--slotted-checkbox-background, var(--slotted-surface, Canvas));border:var(--slotted-checkbox-border-width, var(--slotted-border-width-medium, 1.5px)) solid var(--slotted-checkbox-border-color, var(--slotted-border-strong, ButtonBorder));border-radius:var(--slotted-checkbox-radius, var(--slotted-radius-xs, 2px));block-size:var(--_size);box-sizing:border-box;cursor:pointer;grid-area:1 / 1;inline-size:var(--_size);margin:0;margin-block-start:var(--_lift);margin-block-end:var(--_lift);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=checkbox] [data-part=indicator]{--slotted-icon-size: var(--_mark-size);block-size:var(--_mark-size);clip-path:inset(0% 100% 0% 0%);color:var(--slotted-checkbox-mark-color, var(--slotted-tone-accent-on-solid));display:flex;grid-area:1 / 1;inline-size:var(--_mark-size);margin-block-start:calc(var(--_lift) + var(--_mark-inset));margin-inline-start:var(--_mark-inset);opacity:0;pointer-events:none;transition:clip-path var(--slotted-duration-medium) var(--slotted-control-transition-easing),opacity var(--slotted-duration-medium) var(--slotted-control-transition-easing)}[data-ui=checkbox] [data-part=control]:checked+[data-part=indicator],[data-ui=checkbox] [data-part=control]:indeterminate+[data-part=indicator]{clip-path:inset(0% 0% 0% 0%);opacity:1}@media(prefers-reduced-motion:reduce){[data-ui=checkbox] [data-part=indicator],[data-ui=checkbox] [data-part=control]:checked+[data-part=indicator],[data-ui=checkbox] [data-part=control]:indeterminate+[data-part=indicator]{clip-path:none;transition:opacity var(--slotted-duration-medium) var(--slotted-control-transition-easing)}}[data-ui=checkbox] [data-part=label]{cursor:pointer;grid-column:2;grid-row:1;overflow-wrap:anywhere}[data-ui=checkbox][data-part=root]:has(>[data-part=label]){column-gap:var(--_gap)}[data-ui=checkbox][data-part=root]:not([data-variant=tile]) [data-part=label]{justify-self:start;position:relative}[data-ui=checkbox][data-part=root]:not([data-variant=tile]) [data-part=label]:before{block-size:var(--_target);content:\"\";direction:var(--_direction);inline-size:var(--_target);inset-block-start:calc(var(--_lift) + var(--_size) - var(--_target));inset-inline-start:calc((var(--_size) - var(--_target)) / 2 - var(--_size) - var(--_gap));position:absolute;z-index:-1}[data-ui=checkbox][data-part=root]:not([data-variant=tile]) [data-part=label]:after{background-color:var(--slotted-checkbox-halo-color, var(--slotted-tone-accent-text));border-radius:calc(var(--slotted-checkbox-radius, var(--slotted-radius-xs, 2px)) + var(--_halo-spread));content:\"\";direction:var(--_direction);inset-block:calc(var(--_lift) - var(--_halo-spread));inset-inline-end:calc(-1.5 * var(--_halo-spread));inset-inline-start:calc(-1 * (var(--_size) + var(--_gap) + var(--_halo-spread)));opacity:0;position:absolute;transition:opacity var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);z-index:-1}[data-ui=checkbox][data-part=root]:is([data-label-hidden],:has(>[data-part=label]:empty)):not([data-label-placement=start]){column-gap:0}[data-ui=checkbox][data-part=root]:is([data-label-hidden],:has(>[data-part=label]:empty)):not([data-label-placement=start],[data-variant=tile]) [data-part=label]:before{inset-inline-start:calc(-1 * var(--_target))}[data-ui=checkbox][data-part=root]:is([data-label-hidden],:has(>[data-part=label]:empty)):not([data-label-placement=start],[data-variant=tile]) [data-part=label]:after{inset-inline-end:calc(-1 * var(--_halo-spread));inset-inline-start:calc(-1 * (var(--_size) + var(--_halo-spread)))}[data-ui=checkbox] [data-part=description]{color:var(--slotted-checkbox-description-color, var(--slotted-text-muted, GrayText));font-size:var(--slotted-checkbox-description-font-size, var(--slotted-font-size-xs, .75rem));grid-column:2;grid-row:2;line-height:var(--slotted-line-height-xs, 1.4);margin:0;overflow-wrap:anywhere;padding-block-start:var(--_description-gap)}[data-ui=checkbox][data-part=root][data-label-placement=start]{grid-template-columns:minmax(0,1fr) auto}[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=control],[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=indicator]{grid-area:1 / 2}[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=label],[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=description]{grid-column:1}[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=label]{justify-self:stretch}[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=label]:before{inset-inline-end:calc(-1 * (var(--_size) + var(--_gap)));inset-inline-start:auto}[data-ui=checkbox][data-part=root][data-label-placement=start] [data-part=label]:after{inset-inline-end:calc(-1 * (var(--_size) + var(--_gap) + var(--_halo-spread)));inset-inline-start:calc(-1.5 * var(--_halo-spread))}[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:hover:not(:disabled){border-color:var(--slotted-checkbox-hover-border-color, var(--slotted-tone-accent-border))}[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:hover:not(:disabled)~[data-part=label]:after,[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:not(:disabled)~[data-part=label]:hover:after{opacity:var(--slotted-selection-halo-opacity, .12)}[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:active:not(:disabled){background-color:var( --slotted-checkbox-active-background, var(--slotted-tone-accent-subtle-active) )}[data-ui=checkbox] [data-part=control]:checked,[data-ui=checkbox] [data-part=control]:indeterminate{background-color:var(--slotted-checkbox-checked-background, var(--slotted-tone-accent-solid));border-color:var(--slotted-checkbox-checked-border-color, var(--slotted-tone-accent-solid))}[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:checked:hover:not(:disabled),[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:indeterminate:hover:not(:disabled){background-color:var( --slotted-checkbox-checked-hover-background, var(--slotted-tone-accent-solid-hover) );border-color:var( --slotted-checkbox-checked-hover-background, var(--slotted-tone-accent-solid-hover) )}[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:checked:active:not(:disabled),[data-ui=checkbox][data-part=root]:not([data-readonly]) [data-part=control]:indeterminate:active:not(:disabled){background-color:var( --slotted-checkbox-checked-active-background, var(--slotted-tone-accent-solid-active) );border-color:var( --slotted-checkbox-checked-active-background, var(--slotted-tone-accent-solid-active) )}[data-ui=checkbox] [data-part=control]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=checkbox][data-part=root][data-invalid]{--slotted-focus-ring-color: var( --slotted-checkbox-invalid-focus-ring-color, var(--slotted-focus-ring-color-invalid, Highlight) )}[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]{border-width:calc(var(--slotted-checkbox-border-width, var(--slotted-border-width-medium, 1.5px)) + var(--slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px)));border-color:var(--slotted-checkbox-invalid-border-color, var(--slotted-tone-danger-border))}[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:checked,[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:indeterminate{background-color:var( --slotted-checkbox-invalid-checked-background, var(--slotted-tone-danger-solid) );border-color:var( --slotted-checkbox-invalid-checked-background, var(--slotted-tone-danger-solid) );box-shadow:inset 0 0 0 var(--slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px)) var(--slotted-surface, Canvas)}[data-ui=checkbox][data-part=root][data-readonly] [data-part=control],[data-ui=checkbox][data-part=root][data-readonly] [data-part=label]{cursor:default}[data-ui=checkbox][data-part=root][data-readonly] [data-part=control]:not(:checked):not(:indeterminate){background-color:var( --slotted-checkbox-readonly-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=checkbox][data-part=root][data-disabled] [data-part=control],[data-ui=checkbox] [data-part=control]:disabled{background-color:var( --slotted-checkbox-disabled-background, var(--slotted-disabled-background) );border-color:var(--slotted-checkbox-disabled-border-color, var(--slotted-disabled-border));cursor:not-allowed}[data-ui=checkbox] [data-part=control]:disabled+[data-part=indicator]{color:var(--slotted-checkbox-disabled-mark-color, var(--slotted-disabled-foreground))}[data-ui=checkbox][data-part=root][data-disabled] [data-part=label],[data-ui=checkbox][data-part=root][data-disabled] [data-part=description],[data-ui=checkbox] [data-part=control]:disabled~[data-part=label],[data-ui=checkbox] [data-part=control]:disabled~[data-part=description]{color:var(--slotted-checkbox-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=checkbox][data-part=root][data-variant=tile]{--_description-gap: var( --slotted-checkbox-tile-description-gap, var(--slotted-space-2, .25rem) );--_tile-surface: var(--slotted-checkbox-tile-background, var(--slotted-surface, Canvas));--_tile-edge: var( --slotted-checkbox-tile-border-color, var(--slotted-control-border-color, ButtonBorder) );--_tile-edge-width: var(--slotted-control-border-width, 1px);background-color:var(--_tile-surface);border-radius:var(--slotted-checkbox-tile-radius, var(--slotted-radius-md, 6px));box-shadow:var(--slotted-control-shadow, none);cursor:pointer;padding:var(--_tile-inset);position:relative;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=checkbox][data-part=root][data-variant=tile]:before{border:calc(var(--_tile-edge-width) + var(--_tile-invalid-edge, 0px)) solid var(--_tile-edge);border-radius:inherit;content:\"\";inset:0;pointer-events:none;position:absolute;transition:border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=checkbox][data-part=root][data-variant=tile] [data-part=label]:after{content:\"\";inset:0;position:absolute}[data-ui=checkbox][data-part=root][data-variant=tile]:not([data-readonly]):not([data-disabled]):has([data-part=control]:not(:disabled)):not(:has([data-part=control]:is(:checked,:indeterminate))):hover{--_tile-surface: var( --slotted-checkbox-tile-hover-background, var(--slotted-tone-accent-subtle-hover) );--_tile-edge: var( --slotted-checkbox-tile-hover-border-color, var(--slotted-tone-accent-border) )}[data-ui=checkbox][data-part=root][data-variant=tile]:not([data-readonly]):not([data-disabled]):has([data-part=control]:not(:disabled)):not(:has([data-part=control]:is(:checked,:indeterminate))):active{--_tile-surface: var( --slotted-checkbox-tile-active-background, var(--slotted-tone-accent-subtle-active) )}[data-ui=checkbox][data-part=root][data-variant=tile]:not([data-readonly]):has([data-part=control]:is(:checked,:indeterminate)){--_tile-edge: var( --slotted-checkbox-tile-checked-border-color, var(--slotted-tone-accent-solid) );--_tile-edge-width: var(--slotted-border-width-thick, 2px)}[data-ui=checkbox][data-part=root][data-variant=tile]:not([data-readonly]):has([data-part=control]:is(:checked,:indeterminate)){--_tile-surface: var( --slotted-checkbox-tile-checked-background, var(--slotted-tone-accent-surface) )}[data-ui=checkbox][data-part=root][data-variant=tile]:not([data-readonly]):not([data-disabled]):has([data-part=control]:is(:checked,:indeterminate):not(:disabled)):hover{--_tile-edge: var( --slotted-checkbox-tile-checked-hover-border-color, var(--slotted-tone-accent-solid-hover) )}[data-ui=checkbox][data-part=root][data-variant=tile][data-invalid]{--_tile-edge: var( --slotted-checkbox-tile-invalid-border-color, var(--slotted-tone-danger-border) );--_tile-invalid-edge: var( --slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) )}[data-ui=checkbox][data-part=root][data-variant=tile][data-invalid]:has([data-part=control]:is(:checked,:indeterminate)){--_tile-surface: var( --slotted-checkbox-tile-invalid-checked-background, var(--slotted-tone-danger-surface) );--_tile-edge: var( --slotted-checkbox-tile-invalid-checked-border-color, var(--slotted-tone-danger-solid) )}[data-ui=checkbox][data-part=root][data-variant=tile][data-readonly]{--_tile-surface: var( --slotted-checkbox-tile-readonly-background, var(--slotted-tone-secondary-subtle-hover) );--_tile-edge: var(--slotted-checkbox-tile-readonly-border-color, var(--slotted-border-strong));cursor:default}[data-ui=checkbox][data-part=root][data-variant=tile][data-disabled],[data-ui=checkbox][data-part=root][data-variant=tile]:has([data-part=control]:disabled){--_tile-surface: var( --slotted-checkbox-tile-disabled-background, var(--slotted-disabled-background) );--_tile-edge: var( --slotted-checkbox-tile-disabled-border-color, var(--slotted-disabled-border) );box-shadow:none;cursor:not-allowed}[data-ui=checkbox][data-part=root][data-variant=tile]:has([data-part=control]:focus-visible){outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=checkbox][data-part=root][data-variant=tile] [data-part=control]:focus-visible{outline:none}@media(forced-colors:active){[data-ui=checkbox] [data-part=control]{background-color:Field;border-color:FieldText}[data-ui=checkbox] [data-part=control]:checked,[data-ui=checkbox] [data-part=control]:indeterminate{background-color:Highlight;border-color:Highlight}[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:checked,[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:indeterminate{background-color:Highlight;border-color:CanvasText;outline:var( --slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) ) solid Canvas;outline-offset:calc(-1 * (var(--slotted-checkbox-border-width, var(--slotted-border-width-medium, 1.5px)) + var( --slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) ) + var( --slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) )))}[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:checked:focus-visible,[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:indeterminate:focus-visible{outline:calc(var(--slotted-focus-ring-width, 2px) + var( --slotted-checkbox-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) )) double var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=checkbox] [data-part=control]:checked+[data-part=indicator],[data-ui=checkbox] [data-part=control]:indeterminate+[data-part=indicator]{color:HighlightText}[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:checked+[data-part=indicator],[data-ui=checkbox][data-part=root][data-invalid] [data-part=control]:indeterminate+[data-part=indicator]{color:HighlightText}[data-ui=checkbox][data-part=root][data-variant=tile][data-invalid],[data-ui=checkbox][data-part=root][data-variant=tile][data-invalid]:has([data-part=control]:is(:checked,:indeterminate)){--_tile-edge: CanvasText}[data-ui=checkbox] [data-part=control]:disabled{background-color:Field;border-color:GrayText}[data-ui=checkbox] [data-part=control]:disabled+[data-part=indicator]{color:GrayText}}}\n", "@layer slotted.components{[data-ui=visually-hidden]:not([data-focusable]:focus-within){block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;inset-block-start:0;inset-inline-start:0;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}}\n"] }]
315
+ }], propDecorators: { sort: [{ type: i0.Input, args: [{ isSignal: true, alias: "sort", required: false }] }, { type: i0.Output, args: ["sortChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], expanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "expanded", required: false }] }, { type: i0.Output, args: ["expandedChange"] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], cellAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "cellAlign", required: false }] }], striped: [{ type: i0.Input, args: [{ isSignal: true, alias: "striped", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyHeader", required: false }] }], stickyFooter: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyFooter", required: false }] }], stickyTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyTo", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], sortChangeRequest: [{ type: i0.Output, args: ["sortChangeRequest"] }], valueChangeRequest: [{ type: i0.Output, args: ["valueChangeRequest"] }], expandedChangeRequest: [{ type: i0.Output, args: ["expandedChangeRequest"] }] } });
316
+
317
+ /**
318
+ * The scroller and the table it holds.
319
+ *
320
+ * Two elements and one component, because neither is a decision a consumer
321
+ * makes: the `table` carries the semantics and the host carries the overflow.
322
+ * Angular pays one element for the host and draws the other in its template,
323
+ * which is the same division `checkbox` records.
324
+ *
325
+ * **The region wiring is written only while the table overflows.** `role`,
326
+ * `tabindex` and a name arrive together, measured by `@slotted/core/overflow` —
327
+ * the rule `prose` set. A tab stop on a table that fits makes a reader press Tab
328
+ * for nothing, and a wide table with no tab stop is unreachable without a
329
+ * pointer. Nothing is measured until the first render after mount, so the
330
+ * server renders a plain scroller and hydration finds the same DOM.
331
+ *
332
+ * **The host's `aria-label` names the table.** An instance with no caption
333
+ * names itself with it, and the template writes it on the `table`, the
334
+ * element whose name it is. The region takes the catalog's name, or
335
+ * `scrollLabel`.
336
+ */
337
+ class SlTableContent {
338
+ /**
339
+ * The total number of rows behind a paged or filtered table. Written as
340
+ * `aria-rowcount`, with `aria-rowindex` on every row, and only then: the
341
+ * practice requires the pair exactly when the DOM is not the whole set.
342
+ */
343
+ totalRowCount = input(undefined, { ...(ngDevMode ? { debugName: "totalRowCount" } : /* istanbul ignore next */ {}), transform: (count) => (count === undefined ? undefined : numberAttribute(count)) });
344
+ /** The name the region takes while it overflows, over the catalog's. */
345
+ scrollLabel = input(undefined, /* @ts-ignore */
346
+ ...(ngDevMode ? [{ debugName: "scrollLabel" }] : /* istanbul ignore next */ []));
347
+ /** The element that names it instead, which is usually the caption. */
348
+ scrollLabelledBy = input(undefined, /* @ts-ignore */
349
+ ...(ngDevMode ? [{ debugName: "scrollLabelledBy" }] : /* istanbul ignore next */ []));
350
+ table = inject(SlTable);
351
+ host = inject(ElementRef);
352
+ /** The host's own `aria-label`: the table's name, moved onto the `table`. */
353
+ tableLabel = inject(new HostAttributeToken('aria-label'), { optional: true });
354
+ affordance = null;
355
+ state = signal({ overflowing: false, atStart: true, atEnd: true }, /* @ts-ignore */
356
+ ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
357
+ regionLabel = computed(() => this.state().overflowing && this.scrollLabelledBy() === undefined
358
+ ? (this.scrollLabel() ?? this.table.t('scroll'))
359
+ : null, /* @ts-ignore */
360
+ ...(ngDevMode ? [{ debugName: "regionLabel" }] : /* istanbul ignore next */ []));
361
+ regionLabelledBy = computed(() => this.state().overflowing ? (this.scrollLabelledBy() ?? null) : null, /* @ts-ignore */
362
+ ...(ngDevMode ? [{ debugName: "regionLabelledBy" }] : /* istanbul ignore next */ []));
363
+ constructor() {
364
+ afterNextRender(() => {
365
+ /**
366
+ * Nothing is measured under `stickyTo="page"`: the family has released its
367
+ * own scroll container so the header can stick to what scrolls outside it,
368
+ * and a box that does not scroll has no overflow to answer and no tab stop
369
+ * to earn.
370
+ */
371
+ if (this.table.resolvedStickyTo() === 'page')
372
+ return;
373
+ const handle = createScrollAffordance(this.host.nativeElement, {
374
+ onChange: (next) => this.state.set(next),
375
+ });
376
+ this.affordance = handle;
377
+ this.state.set(handle.state());
378
+ });
379
+ inject(DestroyRef).onDestroy(() => {
380
+ this.affordance?.destroy();
381
+ this.affordance = null;
382
+ });
383
+ }
384
+ /** Brings one row into view by the shortest movement that does it. */
385
+ scrollToRow(value) {
386
+ const row = this.host.nativeElement.querySelector(`[data-part="row"][data-value="${CSS.escape(value)}"]`);
387
+ if (row !== null)
388
+ this.affordance?.reveal(row);
389
+ }
390
+ /** Measures again, after rows arrive or a column changes width. */
391
+ refresh() {
392
+ this.affordance?.refresh();
393
+ }
394
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
395
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlTableContent, isStandalone: true, selector: "div[slTableContent]", inputs: { totalRowCount: { classPropertyName: "totalRowCount", publicName: "totalRowCount", isSignal: true, isRequired: false, transformFunction: null }, scrollLabel: { classPropertyName: "scrollLabel", publicName: "scrollLabel", isSignal: true, isRequired: false, transformFunction: null }, scrollLabelledBy: { classPropertyName: "scrollLabelledBy", publicName: "scrollLabelledBy", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "scroll" }, properties: { "attr.data-overflowing": "state().overflowing ? '' : null", "attr.data-at-start": "state().overflowing && state().atStart ? '' : null", "attr.data-at-end": "state().overflowing && state().atEnd ? '' : null", "attr.role": "state().overflowing ? 'region' : null", "attr.tabindex": "state().overflowing ? '0' : null", "attr.aria-label": "regionLabel()", "attr.aria-labelledby": "regionLabelledBy()" } }, exportAs: ["slTableContent"], ngImport: i0, template: `<table
396
+ data-part="table"
397
+ [attr.aria-label]="tableLabel"
398
+ [attr.aria-busy]="table.loading() ? 'true' : null"
399
+ [attr.aria-rowcount]="totalRowCount() ?? null"
400
+ >
401
+ <ng-content />
402
+ </table>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
403
+ }
404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableContent, decorators: [{
405
+ type: Component,
406
+ args: [{
407
+ selector: 'div[slTableContent]',
408
+ standalone: true,
409
+ exportAs: 'slTableContent',
410
+ template: `<table
411
+ data-part="table"
412
+ [attr.aria-label]="tableLabel"
413
+ [attr.aria-busy]="table.loading() ? 'true' : null"
414
+ [attr.aria-rowcount]="totalRowCount() ?? null"
415
+ >
416
+ <ng-content />
417
+ </table>`,
418
+ changeDetection: ChangeDetectionStrategy.OnPush,
419
+ encapsulation: ViewEncapsulation.None,
420
+ host: {
421
+ 'data-part': 'scroll',
422
+ '[attr.data-overflowing]': "state().overflowing ? '' : null",
423
+ '[attr.data-at-start]': "state().overflowing && state().atStart ? '' : null",
424
+ '[attr.data-at-end]': "state().overflowing && state().atEnd ? '' : null",
425
+ '[attr.role]': "state().overflowing ? 'region' : null",
426
+ '[attr.tabindex]': "state().overflowing ? '0' : null",
427
+ '[attr.aria-label]': 'regionLabel()',
428
+ '[attr.aria-labelledby]': 'regionLabelledBy()',
429
+ },
430
+ }]
431
+ }], ctorParameters: () => [], propDecorators: { totalRowCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalRowCount", required: false }] }], scrollLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollLabel", required: false }] }], scrollLabelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollLabelledBy", required: false }] }] } });
432
+
433
+ /**
434
+ * The axes every cell answers, written once. `numeric` and `align` are two facts
435
+ * rather than one axis: a number is set in tabular figures whichever way it is
436
+ * aligned, and a right-aligned label is not a number.
437
+ */
438
+ class SlTableCellAxes {
439
+ align = input(undefined, /* @ts-ignore */
440
+ ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
441
+ /**
442
+ * Where this cell's content sits in a row as tall as its tallest cell. The
443
+ * table states it once through `cellAlign`; this overrides it for the one
444
+ * cell that wants the other answer.
445
+ */
446
+ blockAlign = input(undefined, /* @ts-ignore */
447
+ ...(ngDevMode ? [{ debugName: "blockAlign" }] : /* istanbul ignore next */ []));
448
+ numeric = input(false, { ...(ngDevMode ? { debugName: "numeric" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
449
+ text = input(undefined, /* @ts-ignore */
450
+ ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
451
+ sticky = input(undefined, /* @ts-ignore */
452
+ ...(ngDevMode ? [{ debugName: "sticky" }] : /* istanbul ignore next */ []));
453
+ /**
454
+ * Where a pinned column stops, as a CSS length. Nought unless stated: two
455
+ * columns pinned to the same edge need the second to know how wide the first
456
+ * is, and the family states that rather than measuring it — measuring would
457
+ * mean reading the layout during change detection.
458
+ */
459
+ stickyOffset = input(undefined, /* @ts-ignore */
460
+ ...(ngDevMode ? [{ debugName: "stickyOffset" }] : /* istanbul ignore next */ []));
461
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableCellAxes, deps: [], target: i0.ɵɵFactoryTarget.Directive });
462
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlTableCellAxes, isStandalone: true, inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, blockAlign: { classPropertyName: "blockAlign", publicName: "blockAlign", isSignal: true, isRequired: false, transformFunction: null }, numeric: { classPropertyName: "numeric", publicName: "numeric", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, stickyOffset: { classPropertyName: "stickyOffset", publicName: "stickyOffset", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-align": "align() ?? null", "attr.data-block-align": "blockAlign() ?? null", "attr.data-numeric": "numeric() ? '' : null", "attr.data-text": "text() ?? null", "attr.data-sticky": "sticky() ?? null", "style.--slotted-table-sticky-inset": "stickyOffset() ?? null" } }, ngImport: i0 });
463
+ }
464
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableCellAxes, decorators: [{
465
+ type: Directive,
466
+ args: [{
467
+ standalone: true,
468
+ host: {
469
+ '[attr.data-align]': 'align() ?? null',
470
+ '[attr.data-block-align]': 'blockAlign() ?? null',
471
+ '[attr.data-numeric]': "numeric() ? '' : null",
472
+ '[attr.data-text]': 'text() ?? null',
473
+ '[attr.data-sticky]': 'sticky() ?? null',
474
+ '[style.--slotted-table-sticky-inset]': 'stickyOffset() ?? null',
475
+ },
476
+ }]
477
+ }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], blockAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "blockAlign", required: false }] }], numeric: [{ type: i0.Input, args: [{ isSignal: true, alias: "numeric", required: false }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }], stickyOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyOffset", required: false }] }] } });
478
+ /**
479
+ * The table's name, and the element the platform already associates with it. A
480
+ * `caption` is the accessible name whether it is read or hidden, so the family
481
+ * writes no `aria-labelledby` restating what the browser states.
482
+ */
483
+ class SlTableCaption {
484
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableCaption, deps: [], target: i0.ɵɵFactoryTarget.Directive });
485
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlTableCaption, isStandalone: true, selector: "caption[slTableCaption]", host: { attributes: { "data-part": "caption" } }, exportAs: ["slTableCaption"], ngImport: i0 });
486
+ }
487
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableCaption, decorators: [{
488
+ type: Directive,
489
+ args: [{
490
+ selector: 'caption[slTableCaption]',
491
+ standalone: true,
492
+ exportAs: 'slTableCaption',
493
+ host: { 'data-part': 'caption' },
494
+ }]
495
+ }] });
496
+ class SlTableHead {
497
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableHead, deps: [], target: i0.ɵɵFactoryTarget.Directive });
498
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlTableHead, isStandalone: true, selector: "thead[slTableHead]", host: { attributes: { "data-part": "head" } }, exportAs: ["slTableHead"], ngImport: i0 });
499
+ }
500
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableHead, decorators: [{
501
+ type: Directive,
502
+ args: [{
503
+ selector: 'thead[slTableHead]',
504
+ standalone: true,
505
+ exportAs: 'slTableHead',
506
+ host: { 'data-part': 'head' },
507
+ }]
508
+ }] });
509
+ class SlTableBody {
510
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableBody, deps: [], target: i0.ɵɵFactoryTarget.Directive });
511
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlTableBody, isStandalone: true, selector: "tbody[slTableBody]", host: { attributes: { "data-part": "body" } }, exportAs: ["slTableBody"], ngImport: i0 });
512
+ }
513
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableBody, decorators: [{
514
+ type: Directive,
515
+ args: [{
516
+ selector: 'tbody[slTableBody]',
517
+ standalone: true,
518
+ exportAs: 'slTableBody',
519
+ host: { 'data-part': 'body' },
520
+ }]
521
+ }] });
522
+ /**
523
+ * The `tfoot`, which the HTML Standard calls the column summaries of the table.
524
+ * It is not `slTableFooter`, which is the bar outside the table holding the
525
+ * consumer's own controls.
526
+ */
527
+ class SlTableSummary {
528
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableSummary, deps: [], target: i0.ɵɵFactoryTarget.Directive });
529
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlTableSummary, isStandalone: true, selector: "tfoot[slTableSummary]", host: { attributes: { "data-part": "summary" } }, exportAs: ["slTableSummary"], ngImport: i0 });
530
+ }
531
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableSummary, decorators: [{
532
+ type: Directive,
533
+ args: [{
534
+ selector: 'tfoot[slTableSummary]',
535
+ standalone: true,
536
+ exportAs: 'slTableSummary',
537
+ host: { 'data-part': 'summary' },
538
+ }]
539
+ }] });
540
+ /**
541
+ * The bar under the table and inside its frame, where a paged listing puts its
542
+ * control. It is a sibling of the scroller rather than a child, so a table
543
+ * scrolled sideways does not take its pagination with it.
544
+ */
545
+ class SlTableFooter {
546
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableFooter, deps: [], target: i0.ɵɵFactoryTarget.Directive });
547
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlTableFooter, isStandalone: true, selector: "div[slTableFooter]", host: { attributes: { "data-part": "footer" } }, exportAs: ["slTableFooter"], ngImport: i0 });
548
+ }
549
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableFooter, decorators: [{
550
+ type: Directive,
551
+ args: [{
552
+ selector: 'div[slTableFooter]',
553
+ standalone: true,
554
+ exportAs: 'slTableFooter',
555
+ host: { 'data-part': 'footer' },
556
+ }]
557
+ }] });
558
+ /**
559
+ * One record. It carries `data-selected` and `data-expanded` for the stylesheet
560
+ * and `data-value` for the range and the select-all, which read the rows out of
561
+ * the DOM at the moment they act.
562
+ *
563
+ * A row is not selectable under the `table` role, so it carries no
564
+ * `aria-selected`: the state is painted here and announced by the checkbox.
565
+ */
566
+ class SlTableRow {
567
+ /** The row's key, required wherever selection or expansion is on. */
568
+ value = input(undefined, /* @ts-ignore */
569
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
570
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
571
+ /**
572
+ * The row's position in the whole set, one-based, written only where the
573
+ * table states a total: the practice warns that setting `aria-rowindex` on
574
+ * some rows and not others has devastating effects on assistive technology.
575
+ */
576
+ rowIndex = input(undefined, { ...(ngDevMode ? { debugName: "rowIndex" } : /* istanbul ignore next */ {}), transform: (index) => (index === undefined ? undefined : numberAttribute(index)) });
577
+ table = inject(SlTable);
578
+ selected = computed(() => {
579
+ const key = this.value();
580
+ return key !== undefined && this.table.isSelected(key);
581
+ }, /* @ts-ignore */
582
+ ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
583
+ expanded = computed(() => {
584
+ const key = this.value();
585
+ return key !== undefined && this.table.isExpanded(key);
586
+ }, /* @ts-ignore */
587
+ ...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
588
+ detailId = computed(() => `${this.table.id}-detail-${this.value() ?? ''}`, /* @ts-ignore */
589
+ ...(ngDevMode ? [{ debugName: "detailId" }] : /* istanbul ignore next */ []));
590
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableRow, deps: [], target: i0.ɵɵFactoryTarget.Directive });
591
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlTableRow, isStandalone: true, selector: "tr[slTableRow]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, rowIndex: { classPropertyName: "rowIndex", publicName: "rowIndex", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "row" }, properties: { "attr.data-value": "value() ?? null", "attr.data-selected": "selected() ? '' : null", "attr.data-expanded": "expanded() ? '' : null", "attr.data-disabled": "disabled() ? '' : null", "attr.aria-rowindex": "rowIndex() ?? null" } }, exportAs: ["slTableRow"], ngImport: i0 });
592
+ }
593
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableRow, decorators: [{
594
+ type: Directive,
595
+ args: [{
596
+ selector: 'tr[slTableRow]',
597
+ standalone: true,
598
+ exportAs: 'slTableRow',
599
+ host: {
600
+ 'data-part': 'row',
601
+ '[attr.data-value]': 'value() ?? null',
602
+ '[attr.data-selected]': "selected() ? '' : null",
603
+ '[attr.data-expanded]': "expanded() ? '' : null",
604
+ '[attr.data-disabled]': "disabled() ? '' : null",
605
+ '[attr.aria-rowindex]': 'rowIndex() ?? null',
606
+ },
607
+ }]
608
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], rowIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowIndex", required: false }] }] } });
609
+ /**
610
+ * A column's name. `scope="col"` is what makes a screen reader repeat it for
611
+ * every cell under it, and `aria-sort` is written here and on no other header.
612
+ *
613
+ * A name cut by its own box — `text="truncate"` on a column with no room —
614
+ * reads `Op…` to the eye while the whole of it is still what a screen reader
615
+ * repeats under every cell. The hint closes that gap: it opens only while the
616
+ * name is measured as cut, which a header that wraps or fits never is, and it
617
+ * is shown rather than read — `describes="none"`, because the header already
618
+ * states the words.
619
+ */
620
+ class SlTableColumnHeader {
621
+ /** The column's own key, which the sort descriptor names. */
622
+ column = input(undefined, /* @ts-ignore */
623
+ ...(ngDevMode ? [{ debugName: "column" }] : /* istanbul ignore next */ []));
624
+ scope = input(undefined, /* @ts-ignore */
625
+ ...(ngDevMode ? [{ debugName: "scope" }] : /* istanbul ignore next */ []));
626
+ table = inject(SlTable);
627
+ tooltip = inject(SlTooltip);
628
+ native = inject(ElementRef).nativeElement;
629
+ ariaSort = computed(() => {
630
+ const sort = this.table.sort();
631
+ return sort !== null && sort.column === this.column() ? sort.direction : null;
632
+ }, /* @ts-ignore */
633
+ ...(ngDevMode ? [{ debugName: "ariaSort" }] : /* istanbul ignore next */ []));
634
+ /** The words the header itself holds, read when the hint is about to show them. */
635
+ hint = computed(() => this.tooltip.isOpen() ? (this.native.textContent ?? '').trim() : '', /* @ts-ignore */
636
+ ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
637
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableColumnHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
638
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlTableColumnHeader, isStandalone: true, selector: "th[slTableColumnHeader]", inputs: { column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: false, transformFunction: null }, scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "column-header" }, properties: { "attr.scope": "scope() ?? 'col'", "attr.aria-sort": "ariaSort()" } }, providers: [
639
+ provideTooltipDefaults({
640
+ describes: 'none',
641
+ openOn: 'hover',
642
+ side: 'bottom',
643
+ whenClipped: true,
644
+ }),
645
+ ], exportAs: ["slTableColumnHeader"], hostDirectives: [{ directive: SlTableCellAxes, inputs: ["align", "align", "blockAlign", "blockAlign", "numeric", "numeric", "text", "text", "sticky", "sticky", "stickyOffset", "stickyOffset"] }, { directive: i1.SlTooltip }, { directive: i1.SlTooltipTrigger }], ngImport: i0, template: `<ng-content />
646
+ <ng-template slTooltipLayer>
647
+ <div slTooltipContent>{{ hint() }}</div>
648
+ </ng-template>`, isInline: true, dependencies: [{ kind: "component", type: SlTooltipContent, selector: "[slTooltipContent]", exportAs: ["slTooltipContent"] }, { kind: "directive", type: SlTooltipLayer, selector: "ng-template[slTooltipLayer]", exportAs: ["slTooltipLayer"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
649
+ }
650
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableColumnHeader, decorators: [{
651
+ type: Component,
652
+ args: [{
653
+ selector: 'th[slTableColumnHeader]',
654
+ standalone: true,
655
+ exportAs: 'slTableColumnHeader',
656
+ imports: [SlTooltipContent, SlTooltipLayer],
657
+ template: `<ng-content />
658
+ <ng-template slTooltipLayer>
659
+ <div slTooltipContent>{{ hint() }}</div>
660
+ </ng-template>`,
661
+ changeDetection: ChangeDetectionStrategy.OnPush,
662
+ encapsulation: ViewEncapsulation.None,
663
+ hostDirectives: [
664
+ {
665
+ directive: SlTableCellAxes,
666
+ inputs: ['align', 'blockAlign', 'numeric', 'text', 'sticky', 'stickyOffset'],
667
+ },
668
+ SlTooltip,
669
+ SlTooltipTrigger,
670
+ ],
671
+ providers: [
672
+ provideTooltipDefaults({
673
+ describes: 'none',
674
+ openOn: 'hover',
675
+ side: 'bottom',
676
+ whenClipped: true,
677
+ }),
678
+ ],
679
+ host: {
680
+ 'data-part': 'column-header',
681
+ '[attr.scope]': "scope() ?? 'col'",
682
+ '[attr.aria-sort]': 'ariaSort()',
683
+ },
684
+ }]
685
+ }], propDecorators: { column: [{ type: i0.Input, args: [{ isSignal: true, alias: "column", required: false }] }], scope: [{ type: i0.Input, args: [{ isSignal: true, alias: "scope", required: false }] }] } });
686
+ /**
687
+ * The cell that identifies the record, which a screen reader repeats in each of
688
+ * the cells beside it. It states no colour of its own, so a selected record's
689
+ * name turns with the row and a disabled one dims with it.
690
+ */
691
+ class SlTableRowHeader {
692
+ scope = input(undefined, /* @ts-ignore */
693
+ ...(ngDevMode ? [{ debugName: "scope" }] : /* istanbul ignore next */ []));
694
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableRowHeader, deps: [], target: i0.ɵɵFactoryTarget.Directive });
695
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlTableRowHeader, isStandalone: true, selector: "th[slTableRowHeader]", inputs: { scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "row-header" }, properties: { "attr.scope": "scope() ?? 'row'" } }, exportAs: ["slTableRowHeader"], hostDirectives: [{ directive: SlTableCellAxes, inputs: ["align", "align", "blockAlign", "blockAlign", "numeric", "numeric", "text", "text", "sticky", "sticky", "stickyOffset", "stickyOffset"] }], ngImport: i0 });
696
+ }
697
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableRowHeader, decorators: [{
698
+ type: Directive,
699
+ args: [{
700
+ selector: 'th[slTableRowHeader]',
701
+ standalone: true,
702
+ exportAs: 'slTableRowHeader',
703
+ hostDirectives: [
704
+ {
705
+ directive: SlTableCellAxes,
706
+ inputs: ['align', 'blockAlign', 'numeric', 'text', 'sticky', 'stickyOffset'],
707
+ },
708
+ ],
709
+ host: { 'data-part': 'row-header', '[attr.scope]': "scope() ?? 'row'" },
710
+ }]
711
+ }], propDecorators: { scope: [{ type: i0.Input, args: [{ isSignal: true, alias: "scope", required: false }] }] } });
712
+ class SlTableCell {
713
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableCell, deps: [], target: i0.ɵɵFactoryTarget.Directive });
714
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlTableCell, isStandalone: true, selector: "td[slTableCell]", host: { attributes: { "data-part": "cell" } }, exportAs: ["slTableCell"], hostDirectives: [{ directive: SlTableCellAxes, inputs: ["align", "align", "blockAlign", "blockAlign", "numeric", "numeric", "text", "text", "sticky", "sticky", "stickyOffset", "stickyOffset"] }], ngImport: i0 });
715
+ }
716
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableCell, decorators: [{
717
+ type: Directive,
718
+ args: [{
719
+ selector: 'td[slTableCell]',
720
+ standalone: true,
721
+ exportAs: 'slTableCell',
722
+ hostDirectives: [
723
+ {
724
+ directive: SlTableCellAxes,
725
+ inputs: ['align', 'blockAlign', 'numeric', 'text', 'sticky', 'stickyOffset'],
726
+ },
727
+ ],
728
+ host: { 'data-part': 'cell' },
729
+ }]
730
+ }] });
731
+ /**
732
+ * The column's name wrapped in a button, which is what the APG's own sortable
733
+ * example does. The cycle is ascending, descending, then none.
734
+ *
735
+ * The consumer's own listener runs as well: this is a listener on the host, so
736
+ * both fire and a consumer who calls `preventDefault()` keeps the sort still.
737
+ */
738
+ class SlTableSort {
739
+ /** Overrides the column the header states, where a header holds two. */
740
+ column = input(undefined, /* @ts-ignore */
741
+ ...(ngDevMode ? [{ debugName: "column" }] : /* istanbul ignore next */ []));
742
+ table = inject(SlTable);
743
+ header = inject(SlTableColumnHeader, { optional: true });
744
+ press(event) {
745
+ if (event.defaultPrevented)
746
+ return;
747
+ const key = this.column() ?? this.header?.column();
748
+ if (key === undefined)
749
+ return;
750
+ this.table.requestSort(key, event);
751
+ }
752
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableSort, deps: [], target: i0.ɵɵFactoryTarget.Component });
753
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlTableSort, isStandalone: true, selector: "button[slTableSort]", inputs: { column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "sort", "type": "button" }, listeners: { "click": "press($event)" } }, exportAs: ["slTableSort"], ngImport: i0, template: `<ng-content /><span slIcon><svg slGlyph name="chevron-down"></svg></span>`, isInline: true, dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
754
+ }
755
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableSort, decorators: [{
756
+ type: Component,
757
+ args: [{
758
+ selector: 'button[slTableSort]',
759
+ standalone: true,
760
+ exportAs: 'slTableSort',
761
+ imports: [SlGlyph, SlIcon],
762
+ /* The direction mark follows the name: one chevron the stylesheet turns over
763
+ for ascending and shows, muted, under the pointer on an unsorted column. */
764
+ template: `<ng-content /><span slIcon><svg slGlyph name="chevron-down"></svg></span>`,
765
+ changeDetection: ChangeDetectionStrategy.OnPush,
766
+ host: {
767
+ 'data-part': 'sort',
768
+ type: 'button',
769
+ '(click)': 'press($event)',
770
+ },
771
+ }]
772
+ }], propDecorators: { column: [{ type: i0.Input, args: [{ isSignal: true, alias: "column", required: false }] }] } });
773
+ /**
774
+ * The slot beside a column's name for the controls it carries: a filter
775
+ * trigger, a column menu, a help hint. The family holds the place and the
776
+ * geometry; what a filter means is the consumer's query.
777
+ */
778
+ class SlTableColumnActions {
779
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableColumnActions, deps: [], target: i0.ɵɵFactoryTarget.Directive });
780
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlTableColumnActions, isStandalone: true, selector: "span[slTableColumnActions]", host: { attributes: { "data-part": "column-actions" } }, exportAs: ["slTableColumnActions"], ngImport: i0 });
781
+ }
782
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableColumnActions, decorators: [{
783
+ type: Directive,
784
+ args: [{
785
+ selector: 'span[slTableColumnActions]',
786
+ standalone: true,
787
+ exportAs: 'slTableColumnActions',
788
+ host: { 'data-part': 'column-actions' },
789
+ }]
790
+ }] });
791
+ /**
792
+ * A row's own checkbox, in the cell the family lays out. The control is
793
+ * `checkbox`'s: the cell is this family's and the chooser is not, which is the
794
+ * division `list-item` recorded. Its name is a visually hidden label rather
795
+ * than an `aria-label` on the wrapper, because the wrapper is not the control.
796
+ *
797
+ * `Shift` while pressing selects every row from the anchor to this one.
798
+ */
799
+ class SlTableSelect {
800
+ /** The row this checkbox chooses. Read from the row when it is not stated. */
801
+ value = input(undefined, /* @ts-ignore */
802
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
803
+ table = inject(SlTable);
804
+ row = inject(SlTableRow);
805
+ key = computed(() => this.value() ?? this.row.value(), /* @ts-ignore */
806
+ ...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
807
+ checked = computed(() => {
808
+ const key = this.key();
809
+ return key !== undefined && this.table.isSelected(key);
810
+ }, /* @ts-ignore */
811
+ ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
812
+ name = computed(() => {
813
+ const key = this.key();
814
+ return this.table.t('selectRow', { row: key ?? '' }).trim();
815
+ }, /* @ts-ignore */
816
+ ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
817
+ press(event) {
818
+ const key = this.key();
819
+ if (key === undefined || this.row.disabled())
820
+ return;
821
+ this.table.toggleSelected(key, { range: event.shiftKey, source: event });
822
+ }
823
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableSelect, deps: [], target: i0.ɵɵFactoryTarget.Component });
824
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlTableSelect, isStandalone: true, selector: "td[slTableSelect]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "selection" } }, exportAs: ["slTableSelect"], hostDirectives: [{ directive: SlTableCellAxes, inputs: ["align", "align", "blockAlign", "blockAlign", "numeric", "numeric", "text", "text", "sticky", "sticky", "stickyOffset", "stickyOffset"] }], ngImport: i0, template: `<span
825
+ slCheckbox
826
+ [checked]="checked()"
827
+ [disabled]="row.disabled()"
828
+ (click)="press($event)"
829
+ >
830
+ <span data-ui="visually-hidden" data-part="root">{{ name() }}</span>
831
+ </span>`, isInline: true, dependencies: [{ kind: "component", type: SlCheckbox, selector: "[slCheckbox]", inputs: ["checked", "defaultChecked", "indeterminate", "parent", "value", "name", "size", "labelPlacement", "variant", "disabled", "readOnly", "invalid"], outputs: ["checkedChange"], exportAs: ["slCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
832
+ }
833
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableSelect, decorators: [{
834
+ type: Component,
835
+ args: [{
836
+ selector: 'td[slTableSelect]',
837
+ standalone: true,
838
+ exportAs: 'slTableSelect',
839
+ imports: [SlCheckbox],
840
+ template: `<span
841
+ slCheckbox
842
+ [checked]="checked()"
843
+ [disabled]="row.disabled()"
844
+ (click)="press($event)"
845
+ >
846
+ <span data-ui="visually-hidden" data-part="root">{{ name() }}</span>
847
+ </span>`,
848
+ changeDetection: ChangeDetectionStrategy.OnPush,
849
+ encapsulation: ViewEncapsulation.None,
850
+ hostDirectives: [
851
+ {
852
+ directive: SlTableCellAxes,
853
+ inputs: ['align', 'blockAlign', 'numeric', 'text', 'sticky', 'stickyOffset'],
854
+ },
855
+ ],
856
+ host: { 'data-part': 'selection' },
857
+ }]
858
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }] } });
859
+ /**
860
+ * The header's checkbox. It covers the rows in the DOM, is indeterminate while
861
+ * some of them are selected, and states the count it covers in its own name — a
862
+ * selection over a whole result set is a decision only the consumer's query can
863
+ * make.
864
+ */
865
+ class SlTableSelectAll {
866
+ table = inject(SlTable);
867
+ checked = computed(() => {
868
+ const chosen = this.table.value().length;
869
+ return chosen > 0 && chosen === this.table.rows().length;
870
+ }, /* @ts-ignore */
871
+ ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
872
+ indeterminate = computed(() => {
873
+ const chosen = this.table.value().length;
874
+ return chosen > 0 && chosen < this.table.rows().length;
875
+ }, /* @ts-ignore */
876
+ ...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
877
+ name = computed(() => {
878
+ return this.table.t('selectAll', { count: this.table.value().length });
879
+ }, /* @ts-ignore */
880
+ ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
881
+ press(event) {
882
+ this.table.toggleSelectAll(event);
883
+ }
884
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableSelectAll, deps: [], target: i0.ɵɵFactoryTarget.Component });
885
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.7", type: SlTableSelectAll, isStandalone: true, selector: "th[slTableSelectAll]", host: { attributes: { "data-part": "selection", "scope": "col" } }, exportAs: ["slTableSelectAll"], hostDirectives: [{ directive: SlTableCellAxes, inputs: ["align", "align", "blockAlign", "blockAlign", "numeric", "numeric", "text", "text", "sticky", "sticky", "stickyOffset", "stickyOffset"] }], ngImport: i0, template: `<span
886
+ slCheckbox
887
+ [checked]="checked()"
888
+ [indeterminate]="indeterminate()"
889
+ (click)="press($event)"
890
+ >
891
+ <span data-ui="visually-hidden" data-part="root">{{ name() }}</span>
892
+ </span>`, isInline: true, dependencies: [{ kind: "component", type: SlCheckbox, selector: "[slCheckbox]", inputs: ["checked", "defaultChecked", "indeterminate", "parent", "value", "name", "size", "labelPlacement", "variant", "disabled", "readOnly", "invalid"], outputs: ["checkedChange"], exportAs: ["slCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
893
+ }
894
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableSelectAll, decorators: [{
895
+ type: Component,
896
+ args: [{
897
+ selector: 'th[slTableSelectAll]',
898
+ standalone: true,
899
+ exportAs: 'slTableSelectAll',
900
+ imports: [SlCheckbox],
901
+ template: `<span
902
+ slCheckbox
903
+ [checked]="checked()"
904
+ [indeterminate]="indeterminate()"
905
+ (click)="press($event)"
906
+ >
907
+ <span data-ui="visually-hidden" data-part="root">{{ name() }}</span>
908
+ </span>`,
909
+ changeDetection: ChangeDetectionStrategy.OnPush,
910
+ encapsulation: ViewEncapsulation.None,
911
+ hostDirectives: [
912
+ {
913
+ directive: SlTableCellAxes,
914
+ inputs: ['align', 'blockAlign', 'numeric', 'text', 'sticky', 'stickyOffset'],
915
+ },
916
+ ],
917
+ host: { 'data-part': 'selection', scope: 'col' },
918
+ }]
919
+ }] });
920
+ /**
921
+ * The Disclosure pattern, borrowed whole: a `button` carrying `aria-expanded`
922
+ * and naming the row it opens.
923
+ */
924
+ class SlTableExpander {
925
+ value = input(undefined, /* @ts-ignore */
926
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
927
+ table = inject(SlTable);
928
+ row = inject(SlTableRow);
929
+ name = computed(() => {
930
+ return this.row.expanded() ? this.table.t('collapse') : this.table.t('expand');
931
+ }, /* @ts-ignore */
932
+ ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
933
+ press(event) {
934
+ if (event.defaultPrevented)
935
+ return;
936
+ const key = this.value() ?? this.row.value();
937
+ if (key === undefined)
938
+ return;
939
+ this.table.toggleExpanded(key, event);
940
+ }
941
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableExpander, deps: [], target: i0.ɵɵFactoryTarget.Component });
942
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlTableExpander, isStandalone: true, selector: "button[slTableExpander]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "expander", "type": "button" }, listeners: { "click": "press($event)" }, properties: { "attr.aria-expanded": "row.expanded()", "attr.aria-controls": "row.expanded() ? row.detailId() : null", "attr.aria-label": "name()" } }, exportAs: ["slTableExpander"], ngImport: i0, template: `<ng-content
943
+ ><span slIcon><svg slGlyph name="chevron-right"></svg></span
944
+ ></ng-content>`, isInline: true, dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
945
+ }
946
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableExpander, decorators: [{
947
+ type: Component,
948
+ args: [{
949
+ selector: 'button[slTableExpander]',
950
+ standalone: true,
951
+ exportAs: 'slTableExpander',
952
+ imports: [SlGlyph, SlIcon],
953
+ /* The chevron is drawn unless the consumer wrote content of their own. */
954
+ template: `<ng-content
955
+ ><span slIcon><svg slGlyph name="chevron-right"></svg></span
956
+ ></ng-content>`,
957
+ changeDetection: ChangeDetectionStrategy.OnPush,
958
+ host: {
959
+ 'data-part': 'expander',
960
+ type: 'button',
961
+ '[attr.aria-expanded]': 'row.expanded()',
962
+ '[attr.aria-controls]': 'row.expanded() ? row.detailId() : null',
963
+ '[attr.aria-label]': 'name()',
964
+ '(click)': 'press($event)',
965
+ },
966
+ }]
967
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }] } });
968
+ /**
969
+ * One row holding one cell that spans the table.
970
+ *
971
+ * **The consumer writes the `@if`.** Angular's own control flow is what keeps a
972
+ * closed detail out of the DOM entirely, and a component whose host is the `tr`
973
+ * cannot remove that `tr` from inside itself — an empty row is a row a screen
974
+ * reader still counts. React returns `null` from the component instead, and the
975
+ * two reach the same DOM; the asymmetry is the frameworks', not the family's.
976
+ */
977
+ class SlTableDetail {
978
+ /** The row the detail belongs to. */
979
+ value = input.required(/* @ts-ignore */
980
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
981
+ /** How many columns the detail spans. Defaults to the table's own count. */
982
+ colSpan = input(undefined, { ...(ngDevMode ? { debugName: "colSpan" } : /* istanbul ignore next */ {}), transform: (count) => (count === undefined ? undefined : numberAttribute(count)) });
983
+ table = inject(SlTable);
984
+ span = computed(() => this.colSpan() ?? this.table.resolvedColumns(), /* @ts-ignore */
985
+ ...(ngDevMode ? [{ debugName: "span" }] : /* istanbul ignore next */ []));
986
+ detailId = computed(() => `${this.table.id}-detail-${this.value()}`, /* @ts-ignore */
987
+ ...(ngDevMode ? [{ debugName: "detailId" }] : /* istanbul ignore next */ []));
988
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
989
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlTableDetail, isStandalone: true, selector: "tr[slTableDetail]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, colSpan: { classPropertyName: "colSpan", publicName: "colSpan", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "detail" }, properties: { "attr.id": "detailId()" } }, exportAs: ["slTableDetail"], ngImport: i0, template: `<td [attr.colspan]="span()" data-part="cell"><ng-content /></td>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
990
+ }
991
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableDetail, decorators: [{
992
+ type: Component,
993
+ args: [{
994
+ selector: 'tr[slTableDetail]',
995
+ standalone: true,
996
+ exportAs: 'slTableDetail',
997
+ template: `<td [attr.colspan]="span()" data-part="cell"><ng-content /></td>`,
998
+ changeDetection: ChangeDetectionStrategy.OnPush,
999
+ encapsulation: ViewEncapsulation.None,
1000
+ host: { 'data-part': 'detail', '[attr.id]': 'detailId()' },
1001
+ }]
1002
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], colSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colSpan", required: false }] }] } });
1003
+ /**
1004
+ * What is shown when there is nothing. It takes a `result-state`, whose status
1005
+ * axis already separates an empty set from a set a filter emptied.
1006
+ */
1007
+ class SlTableEmpty {
1008
+ colSpan = input(undefined, { ...(ngDevMode ? { debugName: "colSpan" } : /* istanbul ignore next */ {}), transform: (count) => (count === undefined ? undefined : numberAttribute(count)) });
1009
+ table = inject(SlTable);
1010
+ span = computed(() => this.colSpan() ?? this.table.resolvedColumns(), /* @ts-ignore */
1011
+ ...(ngDevMode ? [{ debugName: "span" }] : /* istanbul ignore next */ []));
1012
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableEmpty, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1013
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlTableEmpty, isStandalone: true, selector: "td[slTableEmpty]", inputs: { colSpan: { classPropertyName: "colSpan", publicName: "colSpan", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "empty" }, properties: { "attr.colspan": "span()" } }, exportAs: ["slTableEmpty"], ngImport: i0 });
1014
+ }
1015
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableEmpty, decorators: [{
1016
+ type: Directive,
1017
+ args: [{
1018
+ selector: 'td[slTableEmpty]',
1019
+ standalone: true,
1020
+ exportAs: 'slTableEmpty',
1021
+ host: { 'data-part': 'empty', '[attr.colspan]': 'span()' },
1022
+ }]
1023
+ }], propDecorators: { colSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colSpan", required: false }] }] } });
1024
+ /**
1025
+ * The skeleton rows of a first load: the table's shape before its content. A
1026
+ * refresh over rows already read is the other state and is not this one —
1027
+ * `loading` on the table dims the body and moves nothing.
1028
+ */
1029
+ class SlTableLoader {
1030
+ /** How many skeleton rows a first load draws. */
1031
+ skeletonRows = input(5, { ...(ngDevMode ? { debugName: "skeletonRows" } : /* istanbul ignore next */ {}), transform: numberAttribute });
1032
+ table = inject(SlTable);
1033
+ skeleton = computed(() => Array.from({ length: this.skeletonRows() }, (_row, index) => index), /* @ts-ignore */
1034
+ ...(ngDevMode ? [{ debugName: "skeleton" }] : /* istanbul ignore next */ []));
1035
+ cells = computed(() => Array.from({ length: this.table.resolvedColumns() }, (_cell, index) => index), /* @ts-ignore */
1036
+ ...(ngDevMode ? [{ debugName: "cells" }] : /* istanbul ignore next */ []));
1037
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableLoader, deps: [], target: i0.ɵɵFactoryTarget.Component });
1038
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlTableLoader, isStandalone: true, selector: "tbody[slTableLoader]", inputs: { skeletonRows: { classPropertyName: "skeletonRows", publicName: "skeletonRows", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "loader", "aria-hidden": "true" } }, exportAs: ["slTableLoader"], ngImport: i0, template: `@for (row of skeleton(); track row) {
1039
+ <tr data-part="row">
1040
+ @for (cell of cells(); track cell) {
1041
+ <td data-part="cell">
1042
+ <span slSkeleton loading inlineSize="100%"></span>
1043
+ </td>
1044
+ }
1045
+ </tr>
1046
+ }`, isInline: true, dependencies: [{ kind: "component", type: SlSkeleton, selector: "[slSkeleton]", inputs: ["shape", "size", "animation", "loading", "inlineSize", "blockSize"], exportAs: ["slSkeleton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1047
+ }
1048
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableLoader, decorators: [{
1049
+ type: Component,
1050
+ args: [{
1051
+ selector: 'tbody[slTableLoader]',
1052
+ standalone: true,
1053
+ exportAs: 'slTableLoader',
1054
+ imports: [SlSkeleton],
1055
+ template: `@for (row of skeleton(); track row) {
1056
+ <tr data-part="row">
1057
+ @for (cell of cells(); track cell) {
1058
+ <td data-part="cell">
1059
+ <span slSkeleton loading inlineSize="100%"></span>
1060
+ </td>
1061
+ }
1062
+ </tr>
1063
+ }`,
1064
+ changeDetection: ChangeDetectionStrategy.OnPush,
1065
+ encapsulation: ViewEncapsulation.None,
1066
+ host: { 'data-part': 'loader', 'aria-hidden': 'true' },
1067
+ }]
1068
+ }], propDecorators: { skeletonRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "skeletonRows", required: false }] }] } });
1069
+ /** Every part of the family, for a template that imports the set at once. */
1070
+ const SL_TABLE_PARTS = [
1071
+ SlTableBody,
1072
+ SlTableCaption,
1073
+ SlTableCell,
1074
+ SlTableColumnActions,
1075
+ SlTableColumnHeader,
1076
+ SlTableDetail,
1077
+ SlTableEmpty,
1078
+ SlTableExpander,
1079
+ SlTableFooter,
1080
+ SlTableHead,
1081
+ SlTableLoader,
1082
+ SlTableRow,
1083
+ SlTableRowHeader,
1084
+ SlTableSelect,
1085
+ SlTableSelectAll,
1086
+ SlTableSort,
1087
+ SlTableSummary,
1088
+ ];
1089
+
1090
+ /**
1091
+ * Everything the five filters share: the draft, the conditions, the join, the
1092
+ * announcements and the request that carries a reason. What each of them adds
1093
+ * is its kind, its own typed `value`, and the control inside `filter-operand`.
1094
+ *
1095
+ * The panel edits a **draft**. Nothing reaches the consumer until Apply, and
1096
+ * Escape or a press outside restores the descriptor the panel opened with. The
1097
+ * family applies nothing: it reports the descriptor, and
1098
+ * `createFilterPredicate` in `@slotted/core/filter` is what a consumer applies
1099
+ * to its own rows.
1100
+ */
1101
+ class SlTableFilterBase {
1102
+ /**
1103
+ * The operators this column offers, narrowing the kind's own list. Declared
1104
+ * once here rather than per component: the narrow operator type is the one
1105
+ * thing a shared base cannot keep, and the value — which is what a consumer
1106
+ * reads — stays exact on each of the five.
1107
+ */
1108
+ operators = input(undefined, /* @ts-ignore */
1109
+ ...(ngDevMode ? [{ debugName: "operators" }] : /* istanbul ignore next */ []));
1110
+ /** Which one the panel opens on. The kind's own default unless stated. */
1111
+ defaultOperator = input(undefined, /* @ts-ignore */
1112
+ ...(ngDevMode ? [{ debugName: "defaultOperator" }] : /* istanbul ignore next */ []));
1113
+ /**
1114
+ * How many conditions the panel offers, which is AG Grid's
1115
+ * `maxNumConditions`. The second appears once the first is complete.
1116
+ */
1117
+ conditions = input(2, { ...(ngDevMode ? { debugName: "conditions" } : /* istanbul ignore next */ {}), transform: numberAttribute });
1118
+ /**
1119
+ * The column's name in the trigger's own name. Read from the column header
1120
+ * around it when it is not stated.
1121
+ */
1122
+ columnLabel = input(undefined, /* @ts-ignore */
1123
+ ...(ngDevMode ? [{ debugName: "columnLabel" }] : /* istanbul ignore next */ []));
1124
+ /**
1125
+ * The trigger's whole accessible name, replacing the one the catalog writes.
1126
+ * It is the trigger's `aria-label`, which no other input reaches.
1127
+ */
1128
+ label = input(undefined, /* @ts-ignore */
1129
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1130
+ /**
1131
+ * Whether the panel is drawn at the end of the document. On by default, and
1132
+ * that is not a preference: a framed table clips its own overflow, so an
1133
+ * unportalled panel is cut off at the frame's edge — read on the Angular
1134
+ * reference page, where the join and both actions were simply not there. The
1135
+ * React binding takes `popover`'s own default, which is the same answer.
1136
+ */
1137
+ portal = input(true, { ...(ngDevMode ? { debugName: "portal" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
1138
+ /** The request behind every committed change, with the reason it carries. */
1139
+ valueChangeRequest = output();
1140
+ table = inject(SlTable);
1141
+ header = inject(SlTableColumnHeader, { optional: true });
1142
+ host = inject(ElementRef);
1143
+ open = model(false, /* @ts-ignore */
1144
+ ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
1145
+ draft = signal(emptyFilter('text'), /* @ts-ignore */
1146
+ ...(ngDevMode ? [{ debugName: "draft" }] : /* istanbul ignore next */ []));
1147
+ /** The table's words, which the panel speaks in. */
1148
+ t = this.table.t;
1149
+ start = computed(() => this.defaultOperator() ?? defaultOperator(this.kind), /* @ts-ignore */
1150
+ ...(ngDevMode ? [{ debugName: "start" }] : /* istanbul ignore next */ []));
1151
+ offered = computed(() => this.operators() ?? operatorsFor(this.kind), /* @ts-ignore */
1152
+ ...(ngDevMode ? [{ debugName: "offered" }] : /* istanbul ignore next */ []));
1153
+ format = {
1154
+ join: (join) => this.t(`filterJoins.${join}`),
1155
+ operator: (operator) => this.t(`filterOperators.${operator}`),
1156
+ };
1157
+ operatorName(operator) {
1158
+ return this.format.operator(operator);
1159
+ }
1160
+ /** Every operator as a labelled option, so the closed chooser names its own. */
1161
+ operatorItems = computed(() => this.offered().map((operator) => ({ label: this.operatorName(operator), value: operator })), /* @ts-ignore */
1162
+ ...(ngDevMode ? [{ debugName: "operatorItems" }] : /* istanbul ignore next */ []));
1163
+ joinName(join) {
1164
+ return this.format.join(join);
1165
+ }
1166
+ filtered = computed(() => isFilterActive(this.readValue()), /* @ts-ignore */
1167
+ ...(ngDevMode ? [{ debugName: "filtered" }] : /* istanbul ignore next */ []));
1168
+ name = computed(() => {
1169
+ const stated = this.label();
1170
+ if (stated !== undefined)
1171
+ return stated;
1172
+ const column = this.columnName();
1173
+ const committed = this.readValue();
1174
+ return isFilterActive(committed)
1175
+ ? this.t('filterApplied', { column, filter: describeFilter(committed, this.format) })
1176
+ : this.t('filterColumn', { column }).trim();
1177
+ }, /* @ts-ignore */
1178
+ ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
1179
+ /** One condition, or the two the panel can hold. */
1180
+ rows = computed(() => {
1181
+ const draft = this.draft();
1182
+ const first = draft.conditions[0] ?? { operator: this.start() };
1183
+ /* AG Grid's own reveal: the second appears once the first is complete. A
1184
+ button would be one more word to translate before the common case, and an
1185
+ empty second row is noise in every panel that never needs it. */
1186
+ if (this.allowed() < 2 || !isConditionActive(this.kind, first))
1187
+ return [first];
1188
+ return [first, draft.conditions[1] ?? { operator: this.start() }];
1189
+ }, /* @ts-ignore */
1190
+ ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
1191
+ allowed() {
1192
+ return this.conditions();
1193
+ }
1194
+ hasSecond = computed(() => this.rows().length === 2, /* @ts-ignore */
1195
+ ...(ngDevMode ? [{ debugName: "hasSecond" }] : /* istanbul ignore next */ []));
1196
+ /**
1197
+ * Whether the operand template draws one control for both ends of a range,
1198
+ * written as `data-range` on `filter-operand` so the two-column operand grid
1199
+ * collapses to one. The date, time and date-time filters say yes.
1200
+ */
1201
+ rangeOperand() {
1202
+ return false;
1203
+ }
1204
+ /** Which of a kind's operands is drawn, written as `data-operand`. */
1205
+ operandName() {
1206
+ return null;
1207
+ }
1208
+ /** `data-range`, for the condition whose operator takes two operands. */
1209
+ rangeMark(condition) {
1210
+ return this.rangeOperand() && this.slotsOf(condition).length === 2 ? '' : null;
1211
+ }
1212
+ slotsOf(condition) {
1213
+ const operands = operandCount(condition.operator);
1214
+ return operands === 0 ? [] : operands === 1 ? [0] : [0, 1];
1215
+ }
1216
+ operandLabel(condition, slot) {
1217
+ if (operandCount(condition.operator) < 2)
1218
+ return this.t('filterValue');
1219
+ return slot === 0 ? this.t('filterFrom') : this.t('filterTo');
1220
+ }
1221
+ context(index) {
1222
+ const condition = this.rows()[index] ?? { operator: this.start() };
1223
+ return {
1224
+ apply: () => this.applyDraft(null, 'keyboard'),
1225
+ condition,
1226
+ label: (slot) => this.operandLabel(condition, slot),
1227
+ set: (slot, value) => this.setOperand(index, slot, value),
1228
+ setBoth: (value, end) => this.setOperands(index, value, end),
1229
+ slots: this.slotsOf(condition),
1230
+ };
1231
+ }
1232
+ announce(message) {
1233
+ getLiveAnnouncer(this.host.nativeElement.ownerDocument).announce(message);
1234
+ }
1235
+ /**
1236
+ * Opens and closes, and resets the draft either way: the draft starts from
1237
+ * what is committed every time the panel opens, and closing puts it back —
1238
+ * closing is cancelling, and Apply closes the panel itself after committing.
1239
+ */
1240
+ toggle(next) {
1241
+ this.open.set(next);
1242
+ this.draft.set(this.readValue() ?? this.blank());
1243
+ }
1244
+ blank() {
1245
+ return emptyFilter(this.kind, this.start());
1246
+ }
1247
+ setOperator(index, operator) {
1248
+ const condition = this.rows()[index] ?? { operator: this.start() };
1249
+ const before = operandCount(condition.operator);
1250
+ const after = operandCount(operator);
1251
+ /* An operand the new operator still takes survives the change: a reader who
1252
+ typed a value and then chose a different comparison meant to keep it. */
1253
+ const next = {
1254
+ operator,
1255
+ ...(after >= 1 && before >= 1 ? { value: condition.value } : {}),
1256
+ ...(after === 2 && before === 2 ? { end: condition.end } : {}),
1257
+ };
1258
+ this.draft.set(withCondition(this.draft(), index, next));
1259
+ /* The panel grows a field or loses two. Announced, because a form that
1260
+ changes shape under a reader who cannot see it says nothing otherwise. */
1261
+ if (after !== before) {
1262
+ this.announce(this.t('filterOperands', { operator: this.operatorName(operator), count: after }));
1263
+ }
1264
+ }
1265
+ setOperand(index, slot, operand) {
1266
+ const condition = this.rows()[index] ?? { operator: this.start() };
1267
+ const wasActive = isConditionActive(this.kind, condition);
1268
+ const next = slot === 0 ? { ...condition, value: operand } : { ...condition, end: operand };
1269
+ this.draft.set(withCondition(this.draft(), index, next));
1270
+ if (index === 0 && this.allowed() >= 2 && !wasActive && isConditionActive(this.kind, next)) {
1271
+ this.announce(this.t('filterConditionAdded'));
1272
+ }
1273
+ }
1274
+ setOperands(index, value, end) {
1275
+ const condition = this.rows()[index] ?? { operator: this.start() };
1276
+ const wasActive = isConditionActive(this.kind, condition);
1277
+ const next = { ...condition, value, end };
1278
+ this.draft.set(withCondition(this.draft(), index, next));
1279
+ if (index === 0 && this.allowed() >= 2 && !wasActive && isConditionActive(this.kind, next)) {
1280
+ this.announce(this.t('filterConditionAdded'));
1281
+ }
1282
+ }
1283
+ setJoin(join) {
1284
+ this.draft.set(withJoin(this.draft(), join));
1285
+ }
1286
+ /**
1287
+ * Named for what it does rather than `apply`, which reads as
1288
+ * `Function.prototype.apply` to a linter and to the next reader after it.
1289
+ */
1290
+ applyDraft(source, reason = 'pointer') {
1291
+ const next = normalizeFilter(this.draft());
1292
+ this.request(next, reason, source);
1293
+ const column = this.columnName();
1294
+ this.announce(next
1295
+ ? this.t('filterApplied', { column, filter: describeFilter(next, this.format) })
1296
+ : this.t('filterCleared', { column }));
1297
+ this.open.set(false);
1298
+ }
1299
+ clear(source) {
1300
+ this.draft.set(this.blank());
1301
+ this.announce(this.t('filterCleared', { column: this.columnName() }));
1302
+ this.request(null, 'clear', source);
1303
+ this.open.set(false);
1304
+ }
1305
+ canClear = computed(() => isFilterActive(this.draft()), /* @ts-ignore */
1306
+ ...(ngDevMode ? [{ debugName: "canClear" }] : /* istanbul ignore next */ []));
1307
+ columnName() {
1308
+ return this.columnLabel() ?? this.header?.column() ?? '';
1309
+ }
1310
+ request(next, reason, source) {
1311
+ const state = createControllable({
1312
+ initial: this.readValue(),
1313
+ /* Two descriptors are the same filter when they serialise the same. */
1314
+ equals: (a, b) => serializeFilter(a) === serializeFilter(b),
1315
+ onRequest: (request) => this.valueChangeRequest.emit(request),
1316
+ });
1317
+ if (state.request(next, reason, source))
1318
+ this.writeValue(next);
1319
+ }
1320
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableFilterBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1321
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlTableFilterBase, isStandalone: true, inputs: { operators: { classPropertyName: "operators", publicName: "operators", isSignal: true, isRequired: false, transformFunction: null }, defaultOperator: { classPropertyName: "defaultOperator", publicName: "defaultOperator", isSignal: true, isRequired: false, transformFunction: null }, conditions: { classPropertyName: "conditions", publicName: "conditions", isSignal: true, isRequired: false, transformFunction: null }, columnLabel: { classPropertyName: "columnLabel", publicName: "columnLabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, portal: { classPropertyName: "portal", publicName: "portal", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChangeRequest: "valueChangeRequest", open: "openChange" }, ngImport: i0 });
1322
+ }
1323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableFilterBase, decorators: [{
1324
+ type: Directive
1325
+ }], propDecorators: { operators: [{ type: i0.Input, args: [{ isSignal: true, alias: "operators", required: false }] }], defaultOperator: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultOperator", required: false }] }], conditions: [{ type: i0.Input, args: [{ isSignal: true, alias: "conditions", required: false }] }], columnLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnLabel", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], portal: [{ type: i0.Input, args: [{ isSignal: true, alias: "portal", required: false }] }], valueChangeRequest: [{ type: i0.Output, args: ["valueChangeRequest"] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }] } });
1326
+ /**
1327
+ * The panel every kind shares, drawn around an operand its owner projects.
1328
+ *
1329
+ * The operand is an `ng-template` rather than projected content, because it is
1330
+ * rendered once per condition: content would be built once and then belong to
1331
+ * whichever condition asked for it first.
1332
+ */
1333
+ class SlTableFilterShell {
1334
+ /** The filter this shell draws for. */
1335
+ owner = input.required({ ...(ngDevMode ? { debugName: "owner" } : /* istanbul ignore next */ {}), alias: 'slTableFilterShell' });
1336
+ /** The control inside `filter-operand`, rendered once per condition. */
1337
+ operand = input.required(/* @ts-ignore */
1338
+ ...(ngDevMode ? [{ debugName: "operand" }] : /* istanbul ignore next */ []));
1339
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableFilterShell, deps: [], target: i0.ɵɵFactoryTarget.Component });
1340
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlTableFilterShell, isStandalone: true, selector: "span[slTableFilterShell]", inputs: { owner: { classPropertyName: "owner", publicName: "slTableFilterShell", isSignal: true, isRequired: true, transformFunction: null }, operand: { classPropertyName: "operand", publicName: "operand", isSignal: true, isRequired: true, transformFunction: null } }, exportAs: ["slTableFilterShell"], ngImport: i0, template: `<ng-container
1341
+ slPopover
1342
+ [portal]="owner().portal()"
1343
+ [open]="owner().open()"
1344
+ (openChange)="owner().toggle($event)"
1345
+ >
1346
+ <button
1347
+ slPopoverTrigger
1348
+ type="button"
1349
+ data-part="filter"
1350
+ [attr.data-filtered]="owner().filtered() ? '' : null"
1351
+ [attr.aria-label]="owner().name()"
1352
+ >
1353
+ <svg
1354
+ aria-hidden="true"
1355
+ viewBox="0 0 24 24"
1356
+ fill="none"
1357
+ stroke="currentColor"
1358
+ stroke-width="2"
1359
+ stroke-linecap="round"
1360
+ stroke-linejoin="round"
1361
+ >
1362
+ <path d="M22 3H2l8 9.46V19l4 2v-8.54L22 3z" />
1363
+ </svg>
1364
+ </button>
1365
+
1366
+ <ng-template slPopoverLayer>
1367
+ <div slPopoverContent [attr.aria-label]="owner().name()">
1368
+ <!-- The parts are on this family's own element rather than on the
1369
+ popover's: slPopoverContent names its own identity, and a second
1370
+ data-ui on the same element is one of them lost — the surface, the
1371
+ radius and the shadow all came off the panel. -->
1372
+ <div data-ui="table" data-part="filter-panel" [attr.data-kind]="owner().kind">
1373
+ @for (row of owner().rows(); track $index) {
1374
+ @if ($index === 1) {
1375
+ <div data-part="filter-join">
1376
+ <span data-label>{{ owner().t('filterJoin') }}</span>
1377
+ <div
1378
+ slRadioGroup
1379
+ orientation="horizontal"
1380
+ size="sm"
1381
+ [attr.aria-label]="owner().t('filterJoin')"
1382
+ [value]="owner().draft().join"
1383
+ (valueChange)="owner().setJoin($event.value ?? 'and')"
1384
+ >
1385
+ <div slRadio value="and">{{ owner().joinName('and') }}</div>
1386
+ <div slRadio value="or">{{ owner().joinName('or') }}</div>
1387
+ </div>
1388
+ </div>
1389
+ }
1390
+
1391
+ <div data-part="filter-condition" [attr.data-operands]="owner().slotsOf(row).length">
1392
+ <div data-part="filter-operator">
1393
+ <!-- items names every operator for the closed control: without
1394
+ it the trigger falls back to the value itself and a reader
1395
+ sees the raw between the engine speaks. -->
1396
+ <sl-select
1397
+ size="sm"
1398
+ [fullWidth]="true"
1399
+ [items]="owner().operatorItems()"
1400
+ [attr.aria-label]="owner().t('filterOperator')"
1401
+ [value]="row.operator"
1402
+ (valueChange)="owner().setOperator($index, $any($event))"
1403
+ >
1404
+ @for (operator of owner().offered(); track operator) {
1405
+ <sl-select-item [value]="operator">
1406
+ {{ owner().operatorName(operator) }}
1407
+ </sl-select-item>
1408
+ }
1409
+ </sl-select>
1410
+ </div>
1411
+
1412
+ @if (owner().slotsOf(row).length > 0) {
1413
+ <div
1414
+ data-part="filter-operand"
1415
+ [attr.data-kind]="owner().kind"
1416
+ [attr.data-operand]="owner().operandName()"
1417
+ [attr.data-range]="owner().rangeMark(row)"
1418
+ >
1419
+ <ng-container
1420
+ [ngTemplateOutlet]="operand()"
1421
+ [ngTemplateOutletContext]="{ $implicit: owner().context($index) }"
1422
+ />
1423
+ </div>
1424
+ }
1425
+ </div>
1426
+ }
1427
+
1428
+ <div data-part="filter-actions">
1429
+ <button
1430
+ slButton
1431
+ type="button"
1432
+ size="sm"
1433
+ tone="secondary"
1434
+ variant="ghost"
1435
+ [disabled]="!owner().canClear()"
1436
+ (click)="owner().clear($event)"
1437
+ >
1438
+ {{ owner().t('filterClear') }}
1439
+ </button>
1440
+ <button slButton type="button" size="sm" (click)="owner().applyDraft($event)">
1441
+ {{ owner().t('filterApply') }}
1442
+ </button>
1443
+ </div>
1444
+ </div>
1445
+ </div>
1446
+ </ng-template>
1447
+ </ng-container>`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SlButton, selector: "button[slButton]", inputs: ["disabled", "focusableWhenDisabled", "fullWidth", "loading", "loadingDelay", "messages", "size", "tone", "type", "variant"], exportAs: ["slButton"] }, { kind: "directive", type: SlPopover, selector: "[slPopover]", inputs: ["open", "defaultOpen", "disabled", "size", "width", "side", "align", "mount", "strategy", "messages", "initialFocus", "finalFocus", "arrow", "autoFocus", "closeOnEscape", "closeOnOutsidePress", "flip", "shift", "hideWhenDetached", "portal", "sideOffset", "alignOffset", "collisionPadding", "arrowPadding"], outputs: ["openChange", "openChangeRequest"], exportAs: ["slPopover"] }, { kind: "component", type: SlPopoverContent, selector: "[slPopoverContent]", exportAs: ["slPopoverContent"] }, { kind: "directive", type: SlPopoverLayer, selector: "ng-template[slPopoverLayer]", exportAs: ["slPopoverLayer"] }, { kind: "directive", type: SlPopoverTrigger, selector: "[slPopoverTrigger]", exportAs: ["slPopoverTrigger"] }, { kind: "component", type: SlRadio, selector: "[slRadio]", inputs: ["value", "disabled"], exportAs: ["slRadio"] }, { kind: "component", type: SlRadioGroup, selector: "[slRadioGroup]", inputs: ["value", "defaultValue", "name", "size", "orientation", "labelPlacement", "variant", "disabled", "readOnly", "invalid", "required"], outputs: ["valueChange"], exportAs: ["slRadioGroup"] }, { kind: "component", type: SlSelect, selector: "sl-select", inputs: ["value", "open", "highlightedValue", "searchValue", "aria-label", "placeholder", "name", "form", "items", "total", "size", "variant", "side", "align", "width", "mount", "strategy", "messages", "filter", "locale", "sideOffset", "alignOffset", "collisionPadding", "typeaheadTimeout", "multiple", "clearable", "loop", "search", "highlightMatch", "typeahead", "closeOnSelect", "closeOnEscape", "closeOnOutsidePress", "flip", "shift", "hideWhenDetached", "portal", "fullWidth", "disabled", "readOnly", "required", "invalid", "loading"], outputs: ["valueChange", "valueChangeRequest", "openChange", "openChangeRequest", "highlightedValueChange", "highlightedValueChangeRequest", "searchValueChange", "searchValueChangeRequest"], exportAs: ["slSelect"] }, { kind: "component", type: SlSelectItem, selector: "sl-select-item", inputs: ["value", "disabled", "description", "icon", "textValue", "label", "position"], exportAs: ["slSelectItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1448
+ }
1449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableFilterShell, decorators: [{
1450
+ type: Component,
1451
+ args: [{
1452
+ selector: 'span[slTableFilterShell]',
1453
+ standalone: true,
1454
+ exportAs: 'slTableFilterShell',
1455
+ imports: [
1456
+ NgTemplateOutlet,
1457
+ SlButton,
1458
+ SlPopover,
1459
+ SlPopoverContent,
1460
+ SlPopoverLayer,
1461
+ SlPopoverTrigger,
1462
+ SlRadio,
1463
+ SlRadioGroup,
1464
+ SlSelect,
1465
+ SlSelectItem,
1466
+ ],
1467
+ template: `<ng-container
1468
+ slPopover
1469
+ [portal]="owner().portal()"
1470
+ [open]="owner().open()"
1471
+ (openChange)="owner().toggle($event)"
1472
+ >
1473
+ <button
1474
+ slPopoverTrigger
1475
+ type="button"
1476
+ data-part="filter"
1477
+ [attr.data-filtered]="owner().filtered() ? '' : null"
1478
+ [attr.aria-label]="owner().name()"
1479
+ >
1480
+ <svg
1481
+ aria-hidden="true"
1482
+ viewBox="0 0 24 24"
1483
+ fill="none"
1484
+ stroke="currentColor"
1485
+ stroke-width="2"
1486
+ stroke-linecap="round"
1487
+ stroke-linejoin="round"
1488
+ >
1489
+ <path d="M22 3H2l8 9.46V19l4 2v-8.54L22 3z" />
1490
+ </svg>
1491
+ </button>
1492
+
1493
+ <ng-template slPopoverLayer>
1494
+ <div slPopoverContent [attr.aria-label]="owner().name()">
1495
+ <!-- The parts are on this family's own element rather than on the
1496
+ popover's: slPopoverContent names its own identity, and a second
1497
+ data-ui on the same element is one of them lost — the surface, the
1498
+ radius and the shadow all came off the panel. -->
1499
+ <div data-ui="table" data-part="filter-panel" [attr.data-kind]="owner().kind">
1500
+ @for (row of owner().rows(); track $index) {
1501
+ @if ($index === 1) {
1502
+ <div data-part="filter-join">
1503
+ <span data-label>{{ owner().t('filterJoin') }}</span>
1504
+ <div
1505
+ slRadioGroup
1506
+ orientation="horizontal"
1507
+ size="sm"
1508
+ [attr.aria-label]="owner().t('filterJoin')"
1509
+ [value]="owner().draft().join"
1510
+ (valueChange)="owner().setJoin($event.value ?? 'and')"
1511
+ >
1512
+ <div slRadio value="and">{{ owner().joinName('and') }}</div>
1513
+ <div slRadio value="or">{{ owner().joinName('or') }}</div>
1514
+ </div>
1515
+ </div>
1516
+ }
1517
+
1518
+ <div data-part="filter-condition" [attr.data-operands]="owner().slotsOf(row).length">
1519
+ <div data-part="filter-operator">
1520
+ <!-- items names every operator for the closed control: without
1521
+ it the trigger falls back to the value itself and a reader
1522
+ sees the raw between the engine speaks. -->
1523
+ <sl-select
1524
+ size="sm"
1525
+ [fullWidth]="true"
1526
+ [items]="owner().operatorItems()"
1527
+ [attr.aria-label]="owner().t('filterOperator')"
1528
+ [value]="row.operator"
1529
+ (valueChange)="owner().setOperator($index, $any($event))"
1530
+ >
1531
+ @for (operator of owner().offered(); track operator) {
1532
+ <sl-select-item [value]="operator">
1533
+ {{ owner().operatorName(operator) }}
1534
+ </sl-select-item>
1535
+ }
1536
+ </sl-select>
1537
+ </div>
1538
+
1539
+ @if (owner().slotsOf(row).length > 0) {
1540
+ <div
1541
+ data-part="filter-operand"
1542
+ [attr.data-kind]="owner().kind"
1543
+ [attr.data-operand]="owner().operandName()"
1544
+ [attr.data-range]="owner().rangeMark(row)"
1545
+ >
1546
+ <ng-container
1547
+ [ngTemplateOutlet]="operand()"
1548
+ [ngTemplateOutletContext]="{ $implicit: owner().context($index) }"
1549
+ />
1550
+ </div>
1551
+ }
1552
+ </div>
1553
+ }
1554
+
1555
+ <div data-part="filter-actions">
1556
+ <button
1557
+ slButton
1558
+ type="button"
1559
+ size="sm"
1560
+ tone="secondary"
1561
+ variant="ghost"
1562
+ [disabled]="!owner().canClear()"
1563
+ (click)="owner().clear($event)"
1564
+ >
1565
+ {{ owner().t('filterClear') }}
1566
+ </button>
1567
+ <button slButton type="button" size="sm" (click)="owner().applyDraft($event)">
1568
+ {{ owner().t('filterApply') }}
1569
+ </button>
1570
+ </div>
1571
+ </div>
1572
+ </div>
1573
+ </ng-template>
1574
+ </ng-container>`,
1575
+ changeDetection: ChangeDetectionStrategy.OnPush,
1576
+ encapsulation: ViewEncapsulation.None,
1577
+ }]
1578
+ }], propDecorators: { owner: [{ type: i0.Input, args: [{ isSignal: true, alias: "slTableFilterShell", required: true }] }], operand: [{ type: i0.Input, args: [{ isSignal: true, alias: "operand", required: true }] }] } });
1579
+ /** A column of words. Its comparisons are the collator's, never a fold. */
1580
+ class SlTableTextFilter extends SlTableFilterBase {
1581
+ kind = 'text';
1582
+ /** The filter the column holds. Two-way, so a template binds it. */
1583
+ value = model(null, /* @ts-ignore */
1584
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1585
+ readValue() {
1586
+ return this.value();
1587
+ }
1588
+ writeValue(next) {
1589
+ this.value.set(next);
1590
+ }
1591
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableTextFilter, deps: null, target: i0.ɵɵFactoryTarget.Component });
1592
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlTableTextFilter, isStandalone: true, selector: "span[slTableTextFilter]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, exportAs: ["slTableTextFilter"], usesInheritance: true, ngImport: i0, template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
1593
+ <ng-template #operand let-context>
1594
+ @for (slot of context.slots; track slot) {
1595
+ <div slTextField size="sm">
1596
+ <input
1597
+ slTextFieldInput
1598
+ [value]="$any(slot === 0 ? context.condition.value : context.condition.end) ?? ''"
1599
+ [attr.aria-label]="context.label(slot)"
1600
+ [attr.placeholder]="context.label(slot)"
1601
+ (input)="context.set(slot, $any($event.target).value)"
1602
+ (keydown.enter)="context.apply()"
1603
+ />
1604
+ </div>
1605
+ }
1606
+ </ng-template>`, isInline: true, dependencies: [{ kind: "component", type: SlTableFilterShell, selector: "span[slTableFilterShell]", inputs: ["slTableFilterShell", "operand"], exportAs: ["slTableFilterShell"] }, { kind: "component", type: SlTextField, selector: "[slTextField]", inputs: ["size", "variant", "mono", "clearable", "revealable", "copyable", "messages", "loading"], outputs: ["valueCopy"], exportAs: ["slTextField"] }, { kind: "directive", type: SlTextFieldInput, selector: "input[slTextFieldInput]", inputs: ["value", "defaultValue", "disabled", "readOnly", "invalid", "showCount", "countMax", "revealed", "defaultRevealed", "type"], outputs: ["valueChange", "revealedChange"], exportAs: ["slTextFieldInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1607
+ }
1608
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableTextFilter, decorators: [{
1609
+ type: Component,
1610
+ args: [{
1611
+ selector: 'span[slTableTextFilter]',
1612
+ exportAs: 'slTableTextFilter',
1613
+ imports: [SlTableFilterShell, SlTextField, SlTextFieldInput],
1614
+ template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
1615
+ <ng-template #operand let-context>
1616
+ @for (slot of context.slots; track slot) {
1617
+ <div slTextField size="sm">
1618
+ <input
1619
+ slTextFieldInput
1620
+ [value]="$any(slot === 0 ? context.condition.value : context.condition.end) ?? ''"
1621
+ [attr.aria-label]="context.label(slot)"
1622
+ [attr.placeholder]="context.label(slot)"
1623
+ (input)="context.set(slot, $any($event.target).value)"
1624
+ (keydown.enter)="context.apply()"
1625
+ />
1626
+ </div>
1627
+ }
1628
+ </ng-template>`,
1629
+ standalone: true,
1630
+ changeDetection: ChangeDetectionStrategy.OnPush,
1631
+ encapsulation: ViewEncapsulation.None,
1632
+ }]
1633
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
1634
+ /** A column of quantities. The operand parses in the reader's own locale. */
1635
+ class SlTableNumberFilter extends SlTableFilterBase {
1636
+ kind = 'number';
1637
+ value = model(null, /* @ts-ignore */
1638
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1639
+ /** BCP 47, for the operand's own parsing. Defaults to the runtime's. */
1640
+ locale = input(undefined, /* @ts-ignore */
1641
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
1642
+ readValue() {
1643
+ return this.value();
1644
+ }
1645
+ writeValue(next) {
1646
+ this.value.set(next);
1647
+ }
1648
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableNumberFilter, deps: null, target: i0.ɵɵFactoryTarget.Component });
1649
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlTableNumberFilter, isStandalone: true, selector: "span[slTableNumberFilter]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, exportAs: ["slTableNumberFilter"], usesInheritance: true, ngImport: i0, template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
1650
+ <ng-template #operand let-context>
1651
+ @for (slot of context.slots; track slot) {
1652
+ <div slNumberField size="sm">
1653
+ <input
1654
+ slNumberFieldInput
1655
+ [value]="$any(slot === 0 ? context.condition.value : context.condition.end) ?? null"
1656
+ [locale]="locale()"
1657
+ [attr.aria-label]="context.label(slot)"
1658
+ [attr.placeholder]="context.label(slot)"
1659
+ (valueChange)="context.set(slot, $event.value)"
1660
+ (keydown.enter)="context.apply()"
1661
+ />
1662
+ </div>
1663
+ }
1664
+ </ng-template>`, isInline: true, dependencies: [{ kind: "component", type: SlTableFilterShell, selector: "span[slTableFilterShell]", inputs: ["slTableFilterShell", "operand"], exportAs: ["slTableFilterShell"] }, { kind: "component", type: SlNumberField, selector: "[slNumberField]", inputs: ["size", "variant", "stepper", "messages"], exportAs: ["slNumberField"] }, { kind: "directive", type: SlNumberFieldInput, selector: "input[slNumberFieldInput]", inputs: ["value", "defaultValue", "min", "max", "step", "largeStep", "smallStep", "stepFrom", "snapToStep", "clamp", "format", "formatOn", "locale", "wheel", "disabled", "readOnly", "invalid"], outputs: ["valueChange"], exportAs: ["slNumberFieldInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1665
+ }
1666
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableNumberFilter, decorators: [{
1667
+ type: Component,
1668
+ args: [{
1669
+ selector: 'span[slTableNumberFilter]',
1670
+ exportAs: 'slTableNumberFilter',
1671
+ imports: [SlTableFilterShell, SlNumberField, SlNumberFieldInput],
1672
+ template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
1673
+ <ng-template #operand let-context>
1674
+ @for (slot of context.slots; track slot) {
1675
+ <div slNumberField size="sm">
1676
+ <input
1677
+ slNumberFieldInput
1678
+ [value]="$any(slot === 0 ? context.condition.value : context.condition.end) ?? null"
1679
+ [locale]="locale()"
1680
+ [attr.aria-label]="context.label(slot)"
1681
+ [attr.placeholder]="context.label(slot)"
1682
+ (valueChange)="context.set(slot, $event.value)"
1683
+ (keydown.enter)="context.apply()"
1684
+ />
1685
+ </div>
1686
+ }
1687
+ </ng-template>`,
1688
+ standalone: true,
1689
+ changeDetection: ChangeDetectionStrategy.OnPush,
1690
+ encapsulation: ViewEncapsulation.None,
1691
+ }]
1692
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }] } });
1693
+ /**
1694
+ * A column of days. The operand is the whole date picker — the segmented field
1695
+ * and the calendar behind it — rather than the field alone: every surveyed
1696
+ * implementation that filters a date column offers a grid to point at, and a
1697
+ * reader who has to type a date they could have pointed at is the one thing a
1698
+ * date filter exists to spare them. The calendar opens a layer inside the
1699
+ * panel's layer, which `dismissable-layer` already stacks for the operator
1700
+ * chooser beside it.
1701
+ *
1702
+ * `between` is one `date-range-picker` rather than two pickers: it says the
1703
+ * run's length while it is drawn, takes the ends in either order and carries
1704
+ * the application's own presets. The descriptor holds the ISO days the
1705
+ * pickers produce, never a `Date`, and is the same object either way.
1706
+ */
1707
+ class SlTableDateFilter extends SlTableFilterBase {
1708
+ kind = 'date';
1709
+ value = model(null, /* @ts-ignore */
1710
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1711
+ /** BCP 47. Decides the operand's field order and separators. */
1712
+ locale = input(undefined, /* @ts-ignore */
1713
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
1714
+ /**
1715
+ * The application's own ranges — this week, this month — as
1716
+ * `slDateRangePickerPreset` buttons in a template, offered inside the range
1717
+ * picker `between` draws. The descriptor still receives two ISO days.
1718
+ */
1719
+ presets = input(undefined, /* @ts-ignore */
1720
+ ...(ngDevMode ? [{ debugName: "presets" }] : /* istanbul ignore next */ []));
1721
+ rangeOperand() {
1722
+ return true;
1723
+ }
1724
+ /** The descriptor's ISO day as the field's own value, and back. */
1725
+ day(value) {
1726
+ return value ? parseISODate(String(value)) : null;
1727
+ }
1728
+ iso(value) {
1729
+ return isPlainDate(value) ? toISODate(value) : null;
1730
+ }
1731
+ range(condition) {
1732
+ return { start: this.day(condition.value), end: this.day(condition.end) };
1733
+ }
1734
+ readValue() {
1735
+ return this.value();
1736
+ }
1737
+ writeValue(next) {
1738
+ this.value.set(next);
1739
+ }
1740
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableDateFilter, deps: null, target: i0.ɵɵFactoryTarget.Component });
1741
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlTableDateFilter, isStandalone: true, selector: "span[slTableDateFilter]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, exportAs: ["slTableDateFilter"], usesInheritance: true, ngImport: i0, template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
1742
+ <ng-template #operand let-context>
1743
+ @if (context.slots.length === 2) {
1744
+ <div
1745
+ slDateRangePicker
1746
+ size="sm"
1747
+ [locale]="locale()"
1748
+ [messages]="{ start: context.label(0), end: context.label(1) }"
1749
+ [value]="range(context.condition)"
1750
+ (valueChange)="context.setBoth(iso($event.value?.start), iso($event.value?.end))"
1751
+ (keydown.enter)="context.apply()"
1752
+ >
1753
+ @if (presets(); as presetsTemplate) {
1754
+ <div slDateRangePickerPresets>
1755
+ <ng-container [ngTemplateOutlet]="presetsTemplate" />
1756
+ </div>
1757
+ }
1758
+ </div>
1759
+ } @else {
1760
+ <div
1761
+ slDatePicker
1762
+ size="sm"
1763
+ [locale]="locale()"
1764
+ [value]="day(context.condition.value)"
1765
+ [attr.aria-label]="context.label(0)"
1766
+ (valueChange)="context.set(0, iso($event.value))"
1767
+ (keydown.enter)="context.apply()"
1768
+ ></div>
1769
+ }
1770
+ </ng-template>`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SlTableFilterShell, selector: "span[slTableFilterShell]", inputs: ["slTableFilterShell", "operand"], exportAs: ["slTableFilterShell"] }, { kind: "component", type: SlDatePicker, selector: "[slDatePicker]", inputs: ["value", "defaultValue", "open", "defaultOpen", "min", "max", "isDateUnavailable", "selectionMode", "months", "defaultView", "weekNumbers", "fixedWeeks", "locale", "timeZone", "firstDayOfWeek", "yearPivot", "calendar", "size", "variant", "placement", "closeOnSelect", "disabled", "readOnly", "invalid", "required", "clearable", "name", "messages"], outputs: ["valueChange", "openChange"], exportAs: ["slDatePicker"] }, { kind: "component", type: SlDateRangePicker, selector: "[slDateRangePicker]", inputs: ["value", "defaultValue", "open", "defaultOpen", "position", "defaultPosition", "min", "max", "isDateUnavailable", "contiguous", "minLength", "maxLength", "count", "months", "weekNumbers", "fixedWeeks", "locale", "timeZone", "firstDayOfWeek", "yearPivot", "calendar", "size", "variant", "placement", "closeOnSelect", "disabled", "readOnly", "invalid", "required", "clearable", "messages", "startName", "endName"], outputs: ["valueChange", "openChange", "positionChange"], exportAs: ["slDateRangePicker"] }, { kind: "directive", type: SlDateRangePickerPresets, selector: "[slDateRangePickerPresets]", exportAs: ["slDateRangePickerPresets"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1771
+ }
1772
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableDateFilter, decorators: [{
1773
+ type: Component,
1774
+ args: [{
1775
+ selector: 'span[slTableDateFilter]',
1776
+ exportAs: 'slTableDateFilter',
1777
+ imports: [
1778
+ NgTemplateOutlet,
1779
+ SlTableFilterShell,
1780
+ SlDatePicker,
1781
+ SlDateRangePicker,
1782
+ SlDateRangePickerPresets,
1783
+ ],
1784
+ template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
1785
+ <ng-template #operand let-context>
1786
+ @if (context.slots.length === 2) {
1787
+ <div
1788
+ slDateRangePicker
1789
+ size="sm"
1790
+ [locale]="locale()"
1791
+ [messages]="{ start: context.label(0), end: context.label(1) }"
1792
+ [value]="range(context.condition)"
1793
+ (valueChange)="context.setBoth(iso($event.value?.start), iso($event.value?.end))"
1794
+ (keydown.enter)="context.apply()"
1795
+ >
1796
+ @if (presets(); as presetsTemplate) {
1797
+ <div slDateRangePickerPresets>
1798
+ <ng-container [ngTemplateOutlet]="presetsTemplate" />
1799
+ </div>
1800
+ }
1801
+ </div>
1802
+ } @else {
1803
+ <div
1804
+ slDatePicker
1805
+ size="sm"
1806
+ [locale]="locale()"
1807
+ [value]="day(context.condition.value)"
1808
+ [attr.aria-label]="context.label(0)"
1809
+ (valueChange)="context.set(0, iso($event.value))"
1810
+ (keydown.enter)="context.apply()"
1811
+ ></div>
1812
+ }
1813
+ </ng-template>`,
1814
+ standalone: true,
1815
+ changeDetection: ChangeDetectionStrategy.OnPush,
1816
+ encapsulation: ViewEncapsulation.None,
1817
+ }]
1818
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], presets: [{ type: i0.Input, args: [{ isSignal: true, alias: "presets", required: false }] }] } });
1819
+ /** `HH` and `HH:MM` are prefixes the engine accepts and the field cannot read. */
1820
+ function timeOf(text) {
1821
+ if (!text)
1822
+ return null;
1823
+ const written = String(text);
1824
+ return parseISOTime(/^\d{2}$/.test(written) ? `${written}:00` : written);
1825
+ }
1826
+ /** A day, or a day and an hour, padded to the `T…:MM` the field reads. */
1827
+ function dateTimeOf(text) {
1828
+ if (!text)
1829
+ return null;
1830
+ const written = String(text);
1831
+ if (/^\d{4}-\d{2}-\d{2}$/.test(written))
1832
+ return parseISODateTime(`${written}T00:00`);
1833
+ if (/^\d{4}-\d{2}-\d{2}T\d{2}$/.test(written))
1834
+ return parseISODateTime(`${written}:00`);
1835
+ return parseISODateTime(written);
1836
+ }
1837
+ /**
1838
+ * A column of times of day. The operand is `time-picker` — the segmented field
1839
+ * and the list behind it — at the column's own granularity, which decides the
1840
+ * precision the descriptor is written at and the engine compares at: a picker
1841
+ * writing minutes produces `09:14`, and `is 09:14` then matches every second
1842
+ * of that minute.
1843
+ *
1844
+ * `between` is one `time-range-picker` rather than two pickers: it says the
1845
+ * run's length while it is drawn, its end list refuses the times before the
1846
+ * start, and it carries the application's presets. The descriptor is
1847
+ * unchanged. A pair whose start is later than its end is the overnight window
1848
+ * to the engine and `order` to the picker; the pair reaches the descriptor
1849
+ * either way, and the picker's `wrap`, pending in `docs/process/build-order.md`, is
1850
+ * what lifts the mark. No `(keydown.enter)` on the range picker: its frame
1851
+ * is a button, and `Enter` on it opens the picker.
1852
+ */
1853
+ class SlTableTimeFilter extends SlTableFilterBase {
1854
+ kind = 'time';
1855
+ value = model(null, /* @ts-ignore */
1856
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1857
+ /** BCP 47. Decides the operand's hour cycle and separators. */
1858
+ locale = input(undefined, /* @ts-ignore */
1859
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
1860
+ /** Twelve or twenty-four hours, overriding what the locale says. */
1861
+ hourCycle = input(undefined, /* @ts-ignore */
1862
+ ...(ngDevMode ? [{ debugName: "hourCycle" }] : /* istanbul ignore next */ []));
1863
+ /** The last unit the operand writes. Minute unless stated. */
1864
+ granularity = input(undefined, /* @ts-ignore */
1865
+ ...(ngDevMode ? [{ debugName: "granularity" }] : /* istanbul ignore next */ []));
1866
+ /** The list's step, in seconds. */
1867
+ step = input(undefined, { ...(ngDevMode ? { debugName: "step" } : /* istanbul ignore next */ {}), transform: (given) => (given === undefined ? undefined : numberAttribute(given)) });
1868
+ /** The list's own entries, replacing the step. */
1869
+ options = input(undefined, /* @ts-ignore */
1870
+ ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
1871
+ /** The earliest time the operand accepts, as ISO time text. */
1872
+ min = input(undefined, /* @ts-ignore */
1873
+ ...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
1874
+ /** The latest, as ISO time text. */
1875
+ max = input(undefined, /* @ts-ignore */
1876
+ ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
1877
+ /**
1878
+ * The application's own windows — the morning shift, the night shift — as
1879
+ * `slTimeRangePickerPreset` buttons in a template, offered inside the range
1880
+ * picker `between` draws. The descriptor still receives two ISO times.
1881
+ */
1882
+ presets = input(undefined, /* @ts-ignore */
1883
+ ...(ngDevMode ? [{ debugName: "presets" }] : /* istanbul ignore next */ []));
1884
+ rangeOperand() {
1885
+ return true;
1886
+ }
1887
+ timeOf(value) {
1888
+ return timeOf(value) ?? undefined;
1889
+ }
1890
+ iso(value) {
1891
+ return isPlainTime(value) ? toISOTime(value, this.granularity() ?? 'minute') : null;
1892
+ }
1893
+ range(condition) {
1894
+ return { start: timeOf(condition.value), end: timeOf(condition.end) };
1895
+ }
1896
+ readValue() {
1897
+ return this.value();
1898
+ }
1899
+ writeValue(next) {
1900
+ this.value.set(next);
1901
+ }
1902
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableTimeFilter, deps: null, target: i0.ɵɵFactoryTarget.Component });
1903
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlTableTimeFilter, isStandalone: true, selector: "span[slTableTimeFilter]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, hourCycle: { classPropertyName: "hourCycle", publicName: "hourCycle", isSignal: true, isRequired: false, transformFunction: null }, granularity: { classPropertyName: "granularity", publicName: "granularity", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, exportAs: ["slTableTimeFilter"], usesInheritance: true, ngImport: i0, template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
1904
+ <ng-template #operand let-context>
1905
+ @if (context.slots.length === 2) {
1906
+ <div
1907
+ slTimeRangePicker
1908
+ size="sm"
1909
+ [locale]="locale()"
1910
+ [hourCycle]="hourCycle()"
1911
+ [granularity]="granularity()"
1912
+ [step]="step()"
1913
+ [options]="options()"
1914
+ [min]="timeOf(min())"
1915
+ [max]="timeOf(max())"
1916
+ [messages]="{ start: context.label(0), end: context.label(1) }"
1917
+ [value]="range(context.condition)"
1918
+ (valueChange)="context.setBoth(iso($event.value?.start), iso($event.value?.end))"
1919
+ >
1920
+ @if (presets(); as presetsTemplate) {
1921
+ <div slTimeRangePickerPresets>
1922
+ <ng-container [ngTemplateOutlet]="presetsTemplate" />
1923
+ </div>
1924
+ }
1925
+ </div>
1926
+ } @else {
1927
+ <div
1928
+ slTimePicker
1929
+ size="sm"
1930
+ [locale]="locale()"
1931
+ [hourCycle]="hourCycle()"
1932
+ [granularity]="granularity()"
1933
+ [step]="step()"
1934
+ [options]="options()"
1935
+ [min]="timeOf(min())"
1936
+ [max]="timeOf(max())"
1937
+ [value]="timeOf(context.condition.value)"
1938
+ [attr.aria-label]="context.label(0)"
1939
+ (valueChange)="context.set(0, iso($event.value))"
1940
+ (keydown.enter)="context.apply()"
1941
+ ></div>
1942
+ }
1943
+ </ng-template>`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SlTableFilterShell, selector: "span[slTableFilterShell]", inputs: ["slTableFilterShell", "operand"], exportAs: ["slTableFilterShell"] }, { kind: "component", type: SlTimePicker, selector: "[slTimePicker]", inputs: ["value", "defaultValue", "open", "defaultOpen", "highlightedValue", "defaultHighlightedValue", "min", "max", "isTimeUnavailable", "step", "options", "maxOptions", "unavailableOptions", "locale", "timeZone", "hourCycle", "granularity", "referenceTime", "size", "variant", "placement", "closeOnSelect", "disabled", "readOnly", "invalid", "required", "clearable", "relative", "name", "messages"], outputs: ["valueChange", "openChange", "highlightedValueChange"], exportAs: ["slTimePicker"] }, { kind: "component", type: SlTimeRangePicker, selector: "[slTimeRangePicker]", inputs: ["value", "defaultValue", "open", "defaultOpen", "position", "defaultPosition", "highlighted", "defaultHighlighted", "min", "max", "isTimeUnavailable", "contiguous", "minLength", "maxLength", "lengthLabel", "step", "options", "maxOptions", "unavailableOptions", "locale", "timeZone", "hourCycle", "granularity", "referenceTime", "size", "variant", "placement", "closeOnSelect", "disabled", "readOnly", "invalid", "required", "clearable", "relative", "messages", "startName", "endName"], outputs: ["valueChange", "openChange", "positionChange", "highlightedChange"], exportAs: ["slTimeRangePicker"] }, { kind: "directive", type: SlTimeRangePickerPresets, selector: "[slTimeRangePickerPresets]", exportAs: ["slTimeRangePickerPresets"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1944
+ }
1945
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableTimeFilter, decorators: [{
1946
+ type: Component,
1947
+ args: [{
1948
+ selector: 'span[slTableTimeFilter]',
1949
+ exportAs: 'slTableTimeFilter',
1950
+ imports: [
1951
+ NgTemplateOutlet,
1952
+ SlTableFilterShell,
1953
+ SlTimePicker,
1954
+ SlTimeRangePicker,
1955
+ SlTimeRangePickerPresets,
1956
+ ],
1957
+ template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
1958
+ <ng-template #operand let-context>
1959
+ @if (context.slots.length === 2) {
1960
+ <div
1961
+ slTimeRangePicker
1962
+ size="sm"
1963
+ [locale]="locale()"
1964
+ [hourCycle]="hourCycle()"
1965
+ [granularity]="granularity()"
1966
+ [step]="step()"
1967
+ [options]="options()"
1968
+ [min]="timeOf(min())"
1969
+ [max]="timeOf(max())"
1970
+ [messages]="{ start: context.label(0), end: context.label(1) }"
1971
+ [value]="range(context.condition)"
1972
+ (valueChange)="context.setBoth(iso($event.value?.start), iso($event.value?.end))"
1973
+ >
1974
+ @if (presets(); as presetsTemplate) {
1975
+ <div slTimeRangePickerPresets>
1976
+ <ng-container [ngTemplateOutlet]="presetsTemplate" />
1977
+ </div>
1978
+ }
1979
+ </div>
1980
+ } @else {
1981
+ <div
1982
+ slTimePicker
1983
+ size="sm"
1984
+ [locale]="locale()"
1985
+ [hourCycle]="hourCycle()"
1986
+ [granularity]="granularity()"
1987
+ [step]="step()"
1988
+ [options]="options()"
1989
+ [min]="timeOf(min())"
1990
+ [max]="timeOf(max())"
1991
+ [value]="timeOf(context.condition.value)"
1992
+ [attr.aria-label]="context.label(0)"
1993
+ (valueChange)="context.set(0, iso($event.value))"
1994
+ (keydown.enter)="context.apply()"
1995
+ ></div>
1996
+ }
1997
+ </ng-template>`,
1998
+ standalone: true,
1999
+ changeDetection: ChangeDetectionStrategy.OnPush,
2000
+ encapsulation: ViewEncapsulation.None,
2001
+ }]
2002
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], hourCycle: [{ type: i0.Input, args: [{ isSignal: true, alias: "hourCycle", required: false }] }], granularity: [{ type: i0.Input, args: [{ isSignal: true, alias: "granularity", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], presets: [{ type: i0.Input, args: [{ isSignal: true, alias: "presets", required: false }] }] } });
2003
+ /**
2004
+ * A column of dates with times. The operand is `datetime-picker`, the
2005
+ * seven-segment field and the two surfaces behind it. A value with one half
2006
+ * missing reaches the draft as no operand at all, so the condition stays
2007
+ * inactive until both halves exist — the engine's one rule for a missing
2008
+ * operand, and the reason Apply reports nothing for a date without a time.
2009
+ *
2010
+ * `between` is one `datetime-range-picker`: the run's length said while it is
2011
+ * drawn, the dates ordered with each time kept on its end, and the
2012
+ * application's presets. No `(keydown.enter)` on it: the frame is a button,
2013
+ * and `Enter` on it opens the picker.
2014
+ */
2015
+ class SlTableDateTimeFilter extends SlTableFilterBase {
2016
+ kind = 'datetime';
2017
+ value = model(null, /* @ts-ignore */
2018
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
2019
+ /** BCP 47. Decides the operand's field order and separators. */
2020
+ locale = input(undefined, /* @ts-ignore */
2021
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
2022
+ /** The zone "now" is read in. Defaults to the runtime's. */
2023
+ timeZone = input(undefined, /* @ts-ignore */
2024
+ ...(ngDevMode ? [{ debugName: "timeZone" }] : /* istanbul ignore next */ []));
2025
+ /** Twelve or twenty-four hours, overriding what the locale says. */
2026
+ hourCycle = input(undefined, /* @ts-ignore */
2027
+ ...(ngDevMode ? [{ debugName: "hourCycle" }] : /* istanbul ignore next */ []));
2028
+ /** The last unit the operand writes. Minute unless stated. */
2029
+ granularity = input(undefined, /* @ts-ignore */
2030
+ ...(ngDevMode ? [{ debugName: "granularity" }] : /* istanbul ignore next */ []));
2031
+ /** The list's step, in seconds. */
2032
+ step = input(undefined, { ...(ngDevMode ? { debugName: "step" } : /* istanbul ignore next */ {}), transform: (given) => (given === undefined ? undefined : numberAttribute(given)) });
2033
+ /** The earliest date-time the operand accepts, as ISO date-time text. */
2034
+ min = input(undefined, /* @ts-ignore */
2035
+ ...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
2036
+ /** The latest, as ISO date-time text. */
2037
+ max = input(undefined, /* @ts-ignore */
2038
+ ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
2039
+ /**
2040
+ * The application's own windows — the last 24 hours, this week — as
2041
+ * `slDateTimeRangePickerPreset` buttons in a template, offered inside the
2042
+ * range picker `between` draws. The descriptor still receives two ISO
2043
+ * date-times.
2044
+ */
2045
+ presets = input(undefined, /* @ts-ignore */
2046
+ ...(ngDevMode ? [{ debugName: "presets" }] : /* istanbul ignore next */ []));
2047
+ rangeOperand() {
2048
+ return true;
2049
+ }
2050
+ dateTimeOf(value) {
2051
+ return dateTimeOf(value) ?? undefined;
2052
+ }
2053
+ range(condition) {
2054
+ return { start: dateTimeOf(condition.value), end: dateTimeOf(condition.end) };
2055
+ }
2056
+ iso(value) {
2057
+ return isPlainDateTime(value)
2058
+ ? `${toISODate(value.date)}T${toISOTime(value.time, this.granularity() ?? 'minute')}`
2059
+ : null;
2060
+ }
2061
+ readValue() {
2062
+ return this.value();
2063
+ }
2064
+ writeValue(next) {
2065
+ this.value.set(next);
2066
+ }
2067
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableDateTimeFilter, deps: null, target: i0.ɵɵFactoryTarget.Component });
2068
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlTableDateTimeFilter, isStandalone: true, selector: "span[slTableDateTimeFilter]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, timeZone: { classPropertyName: "timeZone", publicName: "timeZone", isSignal: true, isRequired: false, transformFunction: null }, hourCycle: { classPropertyName: "hourCycle", publicName: "hourCycle", isSignal: true, isRequired: false, transformFunction: null }, granularity: { classPropertyName: "granularity", publicName: "granularity", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, exportAs: ["slTableDateTimeFilter"], usesInheritance: true, ngImport: i0, template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
2069
+ <ng-template #operand let-context>
2070
+ @if (context.slots.length === 2) {
2071
+ <div
2072
+ slDateTimeRangePicker
2073
+ size="sm"
2074
+ [locale]="locale()"
2075
+ [timeZone]="timeZone()"
2076
+ [hourCycle]="hourCycle()"
2077
+ [granularity]="granularity()"
2078
+ [step]="step()"
2079
+ [min]="dateTimeOf(min())"
2080
+ [max]="dateTimeOf(max())"
2081
+ [messages]="{ start: context.label(0), end: context.label(1) }"
2082
+ [value]="range(context.condition)"
2083
+ (valueChange)="context.setBoth(iso($event.value?.start), iso($event.value?.end))"
2084
+ >
2085
+ @if (presets(); as presetsTemplate) {
2086
+ <div slDateTimeRangePickerPresets>
2087
+ <ng-container [ngTemplateOutlet]="presetsTemplate" />
2088
+ </div>
2089
+ }
2090
+ </div>
2091
+ } @else {
2092
+ <div
2093
+ slDateTimePicker
2094
+ size="sm"
2095
+ [locale]="locale()"
2096
+ [timeZone]="timeZone()"
2097
+ [hourCycle]="hourCycle()"
2098
+ [granularity]="granularity()"
2099
+ [step]="step()"
2100
+ [min]="dateTimeOf(min())"
2101
+ [max]="dateTimeOf(max())"
2102
+ [value]="dateTimeOf(context.condition.value)"
2103
+ [attr.aria-label]="context.label(0)"
2104
+ (valueChange)="context.set(0, iso($event.value))"
2105
+ (keydown.enter)="context.apply()"
2106
+ ></div>
2107
+ }
2108
+ </ng-template>`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SlTableFilterShell, selector: "span[slTableFilterShell]", inputs: ["slTableFilterShell", "operand"], exportAs: ["slTableFilterShell"] }, { kind: "component", type: SlDateTimePicker, selector: "[slDateTimePicker]", inputs: ["value", "defaultValue", "open", "defaultOpen", "highlighted", "defaultHighlighted", "min", "max", "minTime", "maxTime", "isDateUnavailable", "isTimeUnavailable", "step", "options", "maxOptions", "unavailableOptions", "locale", "timeZone", "hourCycle", "granularity", "calendar", "firstDayOfWeek", "months", "weekNumbers", "referenceDateTime", "size", "variant", "placement", "openTo", "closeOnSelect", "disabled", "readOnly", "invalid", "required", "clearable", "relative", "name", "messages"], outputs: ["valueChange", "openChange", "highlightedChange"], exportAs: ["slDateTimePicker"] }, { kind: "component", type: SlDateTimeRangePicker, selector: "[slDateTimeRangePicker]", inputs: ["value", "defaultValue", "open", "defaultOpen", "position", "defaultPosition", "highlighted", "defaultHighlighted", "min", "max", "minTime", "maxTime", "isDateUnavailable", "isTimeUnavailable", "contiguous", "minLength", "maxLength", "lengthLabel", "step", "options", "maxOptions", "unavailableOptions", "months", "weekNumbers", "fixedWeeks", "locale", "timeZone", "hourCycle", "granularity", "calendar", "firstDayOfWeek", "yearPivot", "referenceDateTime", "size", "variant", "placement", "closeOnSelect", "disabled", "readOnly", "invalid", "required", "clearable", "relative", "messages", "startName", "endName"], outputs: ["valueChange", "openChange", "positionChange", "highlightedChange"], exportAs: ["slDateTimeRangePicker"] }, { kind: "directive", type: SlDateTimeRangePickerPresets, selector: "[slDateTimeRangePickerPresets]", exportAs: ["slDateTimeRangePickerPresets"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2109
+ }
2110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableDateTimeFilter, decorators: [{
2111
+ type: Component,
2112
+ args: [{
2113
+ selector: 'span[slTableDateTimeFilter]',
2114
+ exportAs: 'slTableDateTimeFilter',
2115
+ imports: [
2116
+ NgTemplateOutlet,
2117
+ SlTableFilterShell,
2118
+ SlDateTimePicker,
2119
+ SlDateTimeRangePicker,
2120
+ SlDateTimeRangePickerPresets,
2121
+ ],
2122
+ template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
2123
+ <ng-template #operand let-context>
2124
+ @if (context.slots.length === 2) {
2125
+ <div
2126
+ slDateTimeRangePicker
2127
+ size="sm"
2128
+ [locale]="locale()"
2129
+ [timeZone]="timeZone()"
2130
+ [hourCycle]="hourCycle()"
2131
+ [granularity]="granularity()"
2132
+ [step]="step()"
2133
+ [min]="dateTimeOf(min())"
2134
+ [max]="dateTimeOf(max())"
2135
+ [messages]="{ start: context.label(0), end: context.label(1) }"
2136
+ [value]="range(context.condition)"
2137
+ (valueChange)="context.setBoth(iso($event.value?.start), iso($event.value?.end))"
2138
+ >
2139
+ @if (presets(); as presetsTemplate) {
2140
+ <div slDateTimeRangePickerPresets>
2141
+ <ng-container [ngTemplateOutlet]="presetsTemplate" />
2142
+ </div>
2143
+ }
2144
+ </div>
2145
+ } @else {
2146
+ <div
2147
+ slDateTimePicker
2148
+ size="sm"
2149
+ [locale]="locale()"
2150
+ [timeZone]="timeZone()"
2151
+ [hourCycle]="hourCycle()"
2152
+ [granularity]="granularity()"
2153
+ [step]="step()"
2154
+ [min]="dateTimeOf(min())"
2155
+ [max]="dateTimeOf(max())"
2156
+ [value]="dateTimeOf(context.condition.value)"
2157
+ [attr.aria-label]="context.label(0)"
2158
+ (valueChange)="context.set(0, iso($event.value))"
2159
+ (keydown.enter)="context.apply()"
2160
+ ></div>
2161
+ }
2162
+ </ng-template>`,
2163
+ standalone: true,
2164
+ changeDetection: ChangeDetectionStrategy.OnPush,
2165
+ encapsulation: ViewEncapsulation.None,
2166
+ }]
2167
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], timeZone: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeZone", required: false }] }], hourCycle: [{ type: i0.Input, args: [{ isSignal: true, alias: "hourCycle", required: false }] }], granularity: [{ type: i0.Input, args: [{ isSignal: true, alias: "granularity", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], presets: [{ type: i0.Input, args: [{ isSignal: true, alias: "presets", required: false }] }] } });
2168
+ /**
2169
+ * A column of yes and no. Three answers rather than two: the third is not being
2170
+ * filtered at all, which is what Clear leaves and what an empty draft is.
2171
+ */
2172
+ class SlTableBooleanFilter extends SlTableFilterBase {
2173
+ kind = 'boolean';
2174
+ value = model(null, /* @ts-ignore */
2175
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
2176
+ answer(value) {
2177
+ return value === undefined || value === null ? '' : String(value);
2178
+ }
2179
+ readValue() {
2180
+ return this.value();
2181
+ }
2182
+ writeValue(next) {
2183
+ this.value.set(next);
2184
+ }
2185
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableBooleanFilter, deps: null, target: i0.ɵɵFactoryTarget.Component });
2186
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlTableBooleanFilter, isStandalone: true, selector: "span[slTableBooleanFilter]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, exportAs: ["slTableBooleanFilter"], usesInheritance: true, ngImport: i0, template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
2187
+ <ng-template #operand let-context>
2188
+ <div
2189
+ slRadioGroup
2190
+ orientation="horizontal"
2191
+ size="sm"
2192
+ [attr.aria-label]="context.label(0)"
2193
+ [value]="answer(context.condition.value)"
2194
+ (valueChange)="context.set(0, $event.value === 'true')"
2195
+ >
2196
+ <div slRadio value="true">{{ t('true') }}</div>
2197
+ <div slRadio value="false">{{ t('false') }}</div>
2198
+ </div>
2199
+ </ng-template>`, isInline: true, dependencies: [{ kind: "component", type: SlTableFilterShell, selector: "span[slTableFilterShell]", inputs: ["slTableFilterShell", "operand"], exportAs: ["slTableFilterShell"] }, { kind: "component", type: SlRadio, selector: "[slRadio]", inputs: ["value", "disabled"], exportAs: ["slRadio"] }, { kind: "component", type: SlRadioGroup, selector: "[slRadioGroup]", inputs: ["value", "defaultValue", "name", "size", "orientation", "labelPlacement", "variant", "disabled", "readOnly", "invalid", "required"], outputs: ["valueChange"], exportAs: ["slRadioGroup"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2200
+ }
2201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableBooleanFilter, decorators: [{
2202
+ type: Component,
2203
+ args: [{
2204
+ selector: 'span[slTableBooleanFilter]',
2205
+ exportAs: 'slTableBooleanFilter',
2206
+ imports: [SlTableFilterShell, SlRadio, SlRadioGroup],
2207
+ template: `<span [slTableFilterShell]="this" [operand]="operand"></span>
2208
+ <ng-template #operand let-context>
2209
+ <div
2210
+ slRadioGroup
2211
+ orientation="horizontal"
2212
+ size="sm"
2213
+ [attr.aria-label]="context.label(0)"
2214
+ [value]="answer(context.condition.value)"
2215
+ (valueChange)="context.set(0, $event.value === 'true')"
2216
+ >
2217
+ <div slRadio value="true">{{ t('true') }}</div>
2218
+ <div slRadio value="false">{{ t('false') }}</div>
2219
+ </div>
2220
+ </ng-template>`,
2221
+ standalone: true,
2222
+ changeDetection: ChangeDetectionStrategy.OnPush,
2223
+ encapsulation: ViewEncapsulation.None,
2224
+ }]
2225
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
2226
+ /**
2227
+ * A column filtered to values the consumer named: the list, its search and the
2228
+ * checkbox that covers what the search left.
2229
+ *
2230
+ * One condition, and the design says why: `anyOf A and anyOf B` is
2231
+ * `anyOf (A ∩ B)`, so every pair of set conditions collapses to a single list.
2232
+ */
2233
+ class SlTableSetFilter extends SlTableFilterBase {
2234
+ kind = 'set';
2235
+ value = model(null, /* @ts-ignore */
2236
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
2237
+ /**
2238
+ * How the values are chosen. `list` is the search, the covering checkbox and
2239
+ * the values; `tags` is `tags-input`, for a list too long to tick — the
2240
+ * chosen values are chips, and `options` become a datalist of suggestions
2241
+ * and the set a typed value must belong to. The descriptor is the same list
2242
+ * either way.
2243
+ */
2244
+ operand = input('list', /* @ts-ignore */
2245
+ ...(ngDevMode ? [{ debugName: "operand" }] : /* istanbul ignore next */ []));
2246
+ /**
2247
+ * The values this column can be filtered to, and optionally their counts.
2248
+ * Optional with `tags`, where a column may hold more values than a page
2249
+ * knows; without it any typed value is admitted.
2250
+ */
2251
+ options = input([], /* @ts-ignore */
2252
+ ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
2253
+ /**
2254
+ * Whether the panel carries a search. Unstated, it appears once there are
2255
+ * `searchThreshold` values.
2256
+ */
2257
+ searchable = input(undefined, { ...(ngDevMode ? { debugName: "searchable" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
2258
+ /** How many values bring the search with them. Eight unless stated. */
2259
+ searchThreshold = input(8, { ...(ngDevMode ? { debugName: "searchThreshold" } : /* istanbul ignore next */ {}), transform: numberAttribute });
2260
+ query = signal('', /* @ts-ignore */
2261
+ ...(ngDevMode ? [{ debugName: "query" }] : /* istanbul ignore next */ []));
2262
+ listId = `sl-table-filter-options-${Math.random().toString(36).slice(2, 8)}`;
2263
+ operandName() {
2264
+ return this.operand();
2265
+ }
2266
+ /** Whether a typed value has to be one of the options. */
2267
+ constrained = computed(() => this.operand() === 'tags' && this.options().length > 0, /* @ts-ignore */
2268
+ ...(ngDevMode ? [{ debugName: "constrained" }] : /* istanbul ignore next */ []));
2269
+ byValue = computed(() => new Map(this.options().map((option) => [option.value, option])), /* @ts-ignore */
2270
+ ...(ngDevMode ? [{ debugName: "byValue" }] : /* istanbul ignore next */ []));
2271
+ /** The chip's text for a value, and the judgement on a typed one. */
2272
+ optionLabel = (value) => this.byValue().get(value)?.label ?? value;
2273
+ known = (text) => this.byValue().has(text);
2274
+ applyOnEmpty(event, context) {
2275
+ const input = event.target;
2276
+ if (!event.defaultPrevented && input?.value === '')
2277
+ context.apply();
2278
+ }
2279
+ /**
2280
+ * The collator `combobox` filters its own options with, rather than a fold
2281
+ * that strips combining marks: `normalize('NFD')` is an English answer
2282
+ * wearing a Unicode one — it turns `ø` into `ø` and leaves `ß` alone.
2283
+ */
2284
+ compare = createFilter({ sensitivity: 'base' });
2285
+ /** Two set conditions collapse to one list, so the panel offers one. */
2286
+ allowed() {
2287
+ return 1;
2288
+ }
2289
+ /** What the search left. The covering checkbox answers for exactly this. */
2290
+ shown = computed(() => {
2291
+ const query = this.query();
2292
+ const options = this.options();
2293
+ if (query === '')
2294
+ return options;
2295
+ return options.filter((option) => this.compare.contains(option.label ?? option.value, query));
2296
+ }, /* @ts-ignore */
2297
+ ...(ngDevMode ? [{ debugName: "shown" }] : /* istanbul ignore next */ []));
2298
+ searching = computed(() => this.searchable() ?? this.options().length >= this.searchThreshold(), /* @ts-ignore */
2299
+ ...(ngDevMode ? [{ debugName: "searching" }] : /* istanbul ignore next */ []));
2300
+ chosen(context) {
2301
+ return context.condition.value ?? [];
2302
+ }
2303
+ covered(context) {
2304
+ const chosen = this.chosen(context);
2305
+ return this.shown().filter((option) => chosen.includes(option.value)).length;
2306
+ }
2307
+ allCovered(context) {
2308
+ const covered = this.covered(context);
2309
+ return covered > 0 && covered === this.shown().length;
2310
+ }
2311
+ someCovered(context) {
2312
+ const covered = this.covered(context);
2313
+ return covered > 0 && covered < this.shown().length;
2314
+ }
2315
+ search(event) {
2316
+ this.query.set(event.target.value);
2317
+ /* A list that shortens under a reader who cannot see it says nothing. */
2318
+ this.announce(this.t('filterMatches', { count: this.shown().length }));
2319
+ }
2320
+ hold(context, value, next) {
2321
+ const chosen = this.chosen(context);
2322
+ context.set(0, next ? [...chosen, value] : chosen.filter((held) => held !== value));
2323
+ }
2324
+ coverAll(context, next) {
2325
+ const visible = this.shown().map((option) => option.value);
2326
+ const chosen = this.chosen(context);
2327
+ context.set(0, next
2328
+ ? [...new Set([...chosen, ...visible])]
2329
+ : chosen.filter((held) => !visible.includes(held)));
2330
+ }
2331
+ readValue() {
2332
+ return this.value();
2333
+ }
2334
+ writeValue(next) {
2335
+ this.value.set(next);
2336
+ }
2337
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableSetFilter, deps: null, target: i0.ɵɵFactoryTarget.Component });
2338
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlTableSetFilter, isStandalone: true, selector: "span[slTableSetFilter]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, operand: { classPropertyName: "operand", publicName: "operand", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchThreshold: { classPropertyName: "searchThreshold", publicName: "searchThreshold", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, exportAs: ["slTableSetFilter"], usesInheritance: true, ngImport: i0, template: `<span [slTableFilterShell]="this" [operand]="operandTemplate"></span>
2339
+ <!-- The template is not named operand: that is the input that says which
2340
+ of the two operands is drawn, and a template variable of the same name
2341
+ would shadow it in every binding below. -->
2342
+ <ng-template #operandTemplate let-context>
2343
+ @if (operand() === 'tags') {
2344
+ <!-- The chosen values as chips, for a list too long to tick. With
2345
+ options, a typed value outside them is refused and announced by
2346
+ tags-input's own validation, and the options are a datalist:
2347
+ native completion in every engine, with no second listbox inside
2348
+ the panel. Enter with pending text commits a chip, which is
2349
+ tags-input's key; Enter on an empty field applies, which is the
2350
+ panel's. -->
2351
+ <sl-tags-input
2352
+ size="sm"
2353
+ [fullWidth]="true"
2354
+ [attr.aria-label]="context.label(0)"
2355
+ [formatLabel]="optionLabel"
2356
+ [list]="constrained() ? listId : undefined"
2357
+ [validateValue]="constrained() ? known : undefined"
2358
+ [invalidValues]="constrained() ? 'refuse' : undefined"
2359
+ [value]="chosen(context)"
2360
+ (valueChange)="context.set(0, $event)"
2361
+ (keydown.enter)="applyOnEmpty($event, context)"
2362
+ ></sl-tags-input>
2363
+ @if (constrained()) {
2364
+ <datalist [id]="listId">
2365
+ @for (option of options(); track option.value) {
2366
+ <option [value]="option.value">{{ option.label ?? option.value }}</option>
2367
+ }
2368
+ </datalist>
2369
+ }
2370
+ } @else {
2371
+ @if (searching()) {
2372
+ <div data-part="filter-search">
2373
+ <div slTextField size="sm" clearable>
2374
+ <input
2375
+ slTextFieldInput
2376
+ [value]="query()"
2377
+ [attr.aria-label]="t('filterSearch')"
2378
+ [attr.placeholder]="t('filterSearch')"
2379
+ (input)="search($event)"
2380
+ />
2381
+ </div>
2382
+ </div>
2383
+ }
2384
+
2385
+ @if (shown().length === 0) {
2386
+ <p data-part="filter-empty">{{ t('filterEmpty') }}</p>
2387
+ } @else {
2388
+ <div data-part="filter-list">
2389
+ <div data-part="filter-option" data-covering>
2390
+ <span
2391
+ slCheckbox
2392
+ [checked]="allCovered(context)"
2393
+ [indeterminate]="someCovered(context)"
2394
+ (checkedChange)="coverAll(context, !allCovered(context))"
2395
+ >
2396
+ {{ t('filterSelectAll') }}
2397
+ </span>
2398
+ <span data-count>{{ shown().length }}</span>
2399
+ </div>
2400
+
2401
+ @for (option of shown(); track option.value) {
2402
+ <div data-part="filter-option">
2403
+ <span
2404
+ slCheckbox
2405
+ [checked]="chosen(context).includes(option.value)"
2406
+ (checkedChange)="hold(context, option.value, $event.value)"
2407
+ >
2408
+ {{ option.label ?? option.value }}
2409
+ </span>
2410
+ @if (option.count !== undefined) {
2411
+ <span data-count>{{ option.count }}</span>
2412
+ }
2413
+ </div>
2414
+ }
2415
+ </div>
2416
+ }
2417
+ }
2418
+ </ng-template>`, isInline: true, dependencies: [{ kind: "component", type: SlTableFilterShell, selector: "span[slTableFilterShell]", inputs: ["slTableFilterShell", "operand"], exportAs: ["slTableFilterShell"] }, { kind: "component", type: SlCheckbox, selector: "[slCheckbox]", inputs: ["checked", "defaultChecked", "indeterminate", "parent", "value", "name", "size", "labelPlacement", "variant", "disabled", "readOnly", "invalid"], outputs: ["checkedChange"], exportAs: ["slCheckbox"] }, { kind: "component", type: SlTagsInput, selector: "sl-tags-input", inputs: ["value", "defaultValue", "inputValue", "aria-label", "placeholder", "name", "form", "type", "list", "pattern", "minLength", "maxLength", "inputMode", "autocomplete", "locale", "validateValue", "normalize", "split", "formatLabel", "lockedValues", "delimiters", "max", "size", "variant", "overflow", "invalidValues", "pendingOnBlur", "messages", "addOnPaste", "allowDuplicates", "editable", "reorderable", "clearable", "fullWidth", "disabled", "readOnly", "required", "invalid"], outputs: ["valueChange", "valueChangeRequest", "inputValueChange", "inputValueChangeRequest", "valueRefuse", "valueCopy"], exportAs: ["slTagsInput"] }, { kind: "component", type: SlTextField, selector: "[slTextField]", inputs: ["size", "variant", "mono", "clearable", "revealable", "copyable", "messages", "loading"], outputs: ["valueCopy"], exportAs: ["slTextField"] }, { kind: "directive", type: SlTextFieldInput, selector: "input[slTextFieldInput]", inputs: ["value", "defaultValue", "disabled", "readOnly", "invalid", "showCount", "countMax", "revealed", "defaultRevealed", "type"], outputs: ["valueChange", "revealedChange"], exportAs: ["slTextFieldInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2419
+ }
2420
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTableSetFilter, decorators: [{
2421
+ type: Component,
2422
+ args: [{
2423
+ selector: 'span[slTableSetFilter]',
2424
+ exportAs: 'slTableSetFilter',
2425
+ imports: [SlTableFilterShell, SlCheckbox, SlTagsInput, SlTextField, SlTextFieldInput],
2426
+ template: `<span [slTableFilterShell]="this" [operand]="operandTemplate"></span>
2427
+ <!-- The template is not named operand: that is the input that says which
2428
+ of the two operands is drawn, and a template variable of the same name
2429
+ would shadow it in every binding below. -->
2430
+ <ng-template #operandTemplate let-context>
2431
+ @if (operand() === 'tags') {
2432
+ <!-- The chosen values as chips, for a list too long to tick. With
2433
+ options, a typed value outside them is refused and announced by
2434
+ tags-input's own validation, and the options are a datalist:
2435
+ native completion in every engine, with no second listbox inside
2436
+ the panel. Enter with pending text commits a chip, which is
2437
+ tags-input's key; Enter on an empty field applies, which is the
2438
+ panel's. -->
2439
+ <sl-tags-input
2440
+ size="sm"
2441
+ [fullWidth]="true"
2442
+ [attr.aria-label]="context.label(0)"
2443
+ [formatLabel]="optionLabel"
2444
+ [list]="constrained() ? listId : undefined"
2445
+ [validateValue]="constrained() ? known : undefined"
2446
+ [invalidValues]="constrained() ? 'refuse' : undefined"
2447
+ [value]="chosen(context)"
2448
+ (valueChange)="context.set(0, $event)"
2449
+ (keydown.enter)="applyOnEmpty($event, context)"
2450
+ ></sl-tags-input>
2451
+ @if (constrained()) {
2452
+ <datalist [id]="listId">
2453
+ @for (option of options(); track option.value) {
2454
+ <option [value]="option.value">{{ option.label ?? option.value }}</option>
2455
+ }
2456
+ </datalist>
2457
+ }
2458
+ } @else {
2459
+ @if (searching()) {
2460
+ <div data-part="filter-search">
2461
+ <div slTextField size="sm" clearable>
2462
+ <input
2463
+ slTextFieldInput
2464
+ [value]="query()"
2465
+ [attr.aria-label]="t('filterSearch')"
2466
+ [attr.placeholder]="t('filterSearch')"
2467
+ (input)="search($event)"
2468
+ />
2469
+ </div>
2470
+ </div>
2471
+ }
2472
+
2473
+ @if (shown().length === 0) {
2474
+ <p data-part="filter-empty">{{ t('filterEmpty') }}</p>
2475
+ } @else {
2476
+ <div data-part="filter-list">
2477
+ <div data-part="filter-option" data-covering>
2478
+ <span
2479
+ slCheckbox
2480
+ [checked]="allCovered(context)"
2481
+ [indeterminate]="someCovered(context)"
2482
+ (checkedChange)="coverAll(context, !allCovered(context))"
2483
+ >
2484
+ {{ t('filterSelectAll') }}
2485
+ </span>
2486
+ <span data-count>{{ shown().length }}</span>
2487
+ </div>
2488
+
2489
+ @for (option of shown(); track option.value) {
2490
+ <div data-part="filter-option">
2491
+ <span
2492
+ slCheckbox
2493
+ [checked]="chosen(context).includes(option.value)"
2494
+ (checkedChange)="hold(context, option.value, $event.value)"
2495
+ >
2496
+ {{ option.label ?? option.value }}
2497
+ </span>
2498
+ @if (option.count !== undefined) {
2499
+ <span data-count>{{ option.count }}</span>
2500
+ }
2501
+ </div>
2502
+ }
2503
+ </div>
2504
+ }
2505
+ }
2506
+ </ng-template>`,
2507
+ standalone: true,
2508
+ changeDetection: ChangeDetectionStrategy.OnPush,
2509
+ encapsulation: ViewEncapsulation.None,
2510
+ }]
2511
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], operand: [{ type: i0.Input, args: [{ isSignal: true, alias: "operand", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchThreshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchThreshold", required: false }] }] } });
2512
+
2513
+ /**
2514
+ * Generated bundle index. Do not edit.
2515
+ */
2516
+
2517
+ export { SL_TABLE_PARTS, SlTable, SlTableBody, SlTableBooleanFilter, SlTableCaption, SlTableCell, SlTableCellAxes, SlTableColumnActions, SlTableColumnHeader, SlTableContent, SlTableDateFilter, SlTableDateTimeFilter, SlTableDetail, SlTableEmpty, SlTableExpander, SlTableFilterBase, SlTableFilterShell, SlTableFooter, SlTableHead, SlTableIdFactory, SlTableLoader, SlTableNumberFilter, SlTableRow, SlTableRowHeader, SlTableSelect, SlTableSelectAll, SlTableSetFilter, SlTableSort, SlTableSummary, SlTableTextFilter, SlTableTimeFilter, TABLE_DEFAULTS, TABLE_ROW_SELECTOR, injectTableDefaults, provideTableDefaults };
2518
+ //# sourceMappingURL=slotted-angular-table.mjs.map