@slotted/angular 0.1.0-beta.8 → 0.1.0-beta.9

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 (418) hide show
  1. package/docs/code-block.json +92 -92
  2. package/docs/code-block.md +69 -69
  3. package/docs/currency-field.json +7 -0
  4. package/docs/currency-field.md +1 -0
  5. package/docs/data-grid.examples.md +1 -1
  6. package/docs/data-grid.json +21 -4
  7. package/docs/data-grid.md +1 -1
  8. package/docs/data-grid.props.md +5 -3
  9. package/docs/dialog.examples.md +138 -136
  10. package/docs/dialog.json +8 -8
  11. package/docs/filter-bar.json +118 -118
  12. package/docs/filter-bar.md +79 -79
  13. package/docs/guidelines/async-feedback.md +10 -0
  14. package/docs/guidelines/composition.md +11 -7
  15. package/docs/guidelines/index.md +6 -1
  16. package/docs/guidelines/list-pages.md +30 -0
  17. package/docs/guidelines/overviews.md +10 -0
  18. package/docs/markdown.json +79 -79
  19. package/docs/markdown.md +65 -65
  20. package/docs/page-header.json +1 -1
  21. package/docs/skills/compose-screen/SKILL.md +22 -10
  22. package/docs/skills/review-screen/SKILL.md +6 -0
  23. package/docs/skills/waiting-states/SKILL.md +4 -1
  24. package/docs/tags-input.json +28 -2
  25. package/docs/tags-input.md +4 -1
  26. package/docs/timeline.json +131 -131
  27. package/docs/timeline.md +123 -123
  28. package/fesm2022/slotted-angular-accordion.mjs +4 -2
  29. package/fesm2022/slotted-angular-accordion.mjs.map +1 -1
  30. package/fesm2022/slotted-angular-action-bar.mjs +21 -10
  31. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -1
  32. package/fesm2022/slotted-angular-action-sheet.mjs +42 -29
  33. package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -1
  34. package/fesm2022/slotted-angular-alert.mjs +17 -11
  35. package/fesm2022/slotted-angular-alert.mjs.map +1 -1
  36. package/fesm2022/slotted-angular-app-shell.mjs +52 -40
  37. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
  38. package/fesm2022/slotted-angular-aspect-ratio.mjs +4 -2
  39. package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -1
  40. package/fesm2022/slotted-angular-attachment.mjs +31 -20
  41. package/fesm2022/slotted-angular-attachment.mjs.map +1 -1
  42. package/fesm2022/slotted-angular-avatar-group.mjs +9 -6
  43. package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -1
  44. package/fesm2022/slotted-angular-avatar.mjs +9 -6
  45. package/fesm2022/slotted-angular-avatar.mjs.map +1 -1
  46. package/fesm2022/slotted-angular-badge.mjs +14 -10
  47. package/fesm2022/slotted-angular-badge.mjs.map +1 -1
  48. package/fesm2022/slotted-angular-breadcrumb.mjs +26 -18
  49. package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -1
  50. package/fesm2022/slotted-angular-button-group.mjs +7 -4
  51. package/fesm2022/slotted-angular-button-group.mjs.map +1 -1
  52. package/fesm2022/slotted-angular-button.mjs +53 -25
  53. package/fesm2022/slotted-angular-button.mjs.map +1 -1
  54. package/fesm2022/slotted-angular-calendar.mjs +68 -26
  55. package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
  56. package/fesm2022/slotted-angular-card.mjs +18 -16
  57. package/fesm2022/slotted-angular-card.mjs.map +1 -1
  58. package/fesm2022/slotted-angular-carousel.mjs +22 -11
  59. package/fesm2022/slotted-angular-carousel.mjs.map +1 -1
  60. package/fesm2022/slotted-angular-cascader.mjs +158 -64
  61. package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
  62. package/fesm2022/slotted-angular-chart.mjs +4 -2
  63. package/fesm2022/slotted-angular-chart.mjs.map +1 -1
  64. package/fesm2022/slotted-angular-checkbox-group.mjs +5 -3
  65. package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -1
  66. package/fesm2022/slotted-angular-checkbox.mjs +13 -8
  67. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -1
  68. package/fesm2022/slotted-angular-code-block.mjs +29 -15
  69. package/fesm2022/slotted-angular-code-block.mjs.map +1 -1
  70. package/fesm2022/slotted-angular-collapsible.mjs +20 -15
  71. package/fesm2022/slotted-angular-collapsible.mjs.map +1 -1
  72. package/fesm2022/slotted-angular-color-picker.mjs +77 -22
  73. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -1
  74. package/fesm2022/slotted-angular-column-manager.mjs +68 -31
  75. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
  76. package/fesm2022/slotted-angular-combobox.mjs +77 -31
  77. package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
  78. package/fesm2022/slotted-angular-command-palette.mjs +128 -51
  79. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -1
  80. package/fesm2022/slotted-angular-container.mjs +6 -4
  81. package/fesm2022/slotted-angular-container.mjs.map +1 -1
  82. package/fesm2022/slotted-angular-context-menu.mjs +5 -4
  83. package/fesm2022/slotted-angular-context-menu.mjs.map +1 -1
  84. package/fesm2022/slotted-angular-currency-field.mjs +98 -32
  85. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -1
  86. package/fesm2022/slotted-angular-dashboard-grid.mjs +127 -44
  87. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
  88. package/fesm2022/slotted-angular-data-grid.mjs +309 -104
  89. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
  90. package/fesm2022/slotted-angular-data-list.mjs +83 -50
  91. package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
  92. package/fesm2022/slotted-angular-date-field.mjs +38 -12
  93. package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
  94. package/fesm2022/slotted-angular-date-picker.mjs +19 -9
  95. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -1
  96. package/fesm2022/slotted-angular-date-range-picker.mjs +41 -16
  97. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -1
  98. package/fesm2022/slotted-angular-datetime-field.mjs +46 -14
  99. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -1
  100. package/fesm2022/slotted-angular-datetime-picker.mjs +37 -23
  101. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -1
  102. package/fesm2022/slotted-angular-datetime-range-picker.mjs +111 -42
  103. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -1
  104. package/fesm2022/slotted-angular-description-list.mjs +33 -19
  105. package/fesm2022/slotted-angular-description-list.mjs.map +1 -1
  106. package/fesm2022/slotted-angular-detail-panel.mjs +29 -18
  107. package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -1
  108. package/fesm2022/slotted-angular-dialog.mjs +39 -28
  109. package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
  110. package/fesm2022/slotted-angular-divider.mjs +7 -5
  111. package/fesm2022/slotted-angular-divider.mjs.map +1 -1
  112. package/fesm2022/slotted-angular-drawer.mjs +32 -24
  113. package/fesm2022/slotted-angular-drawer.mjs.map +1 -1
  114. package/fesm2022/slotted-angular-entity-picker.mjs +195 -67
  115. package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -1
  116. package/fesm2022/slotted-angular-event-calendar.mjs +259 -102
  117. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
  118. package/fesm2022/slotted-angular-field-group.mjs +14 -7
  119. package/fesm2022/slotted-angular-field-group.mjs.map +1 -1
  120. package/fesm2022/slotted-angular-field.mjs +35 -15
  121. package/fesm2022/slotted-angular-field.mjs.map +1 -1
  122. package/fesm2022/slotted-angular-filter-bar.mjs +104 -43
  123. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
  124. package/fesm2022/slotted-angular-form.mjs +18 -10
  125. package/fesm2022/slotted-angular-form.mjs.map +1 -1
  126. package/fesm2022/slotted-angular-fullscreen.mjs +14 -8
  127. package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -1
  128. package/fesm2022/slotted-angular-grid.mjs +4 -2
  129. package/fesm2022/slotted-angular-grid.mjs.map +1 -1
  130. package/fesm2022/slotted-angular-highlight.mjs +5 -3
  131. package/fesm2022/slotted-angular-highlight.mjs.map +1 -1
  132. package/fesm2022/slotted-angular-hover-card.mjs +5 -4
  133. package/fesm2022/slotted-angular-hover-card.mjs.map +1 -1
  134. package/fesm2022/slotted-angular-icon.mjs +6 -3
  135. package/fesm2022/slotted-angular-icon.mjs.map +1 -1
  136. package/fesm2022/slotted-angular-image.mjs +13 -10
  137. package/fesm2022/slotted-angular-image.mjs.map +1 -1
  138. package/fesm2022/slotted-angular-import-export-center.mjs +167 -99
  139. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
  140. package/fesm2022/slotted-angular-inline-message.mjs +10 -8
  141. package/fesm2022/slotted-angular-inline-message.mjs.map +1 -1
  142. package/fesm2022/slotted-angular-inline.mjs +4 -2
  143. package/fesm2022/slotted-angular-inline.mjs.map +1 -1
  144. package/fesm2022/slotted-angular-kbd.mjs +11 -7
  145. package/fesm2022/slotted-angular-kbd.mjs.map +1 -1
  146. package/fesm2022/slotted-angular-link.mjs +5 -3
  147. package/fesm2022/slotted-angular-link.mjs.map +1 -1
  148. package/fesm2022/slotted-angular-list-item.mjs +21 -18
  149. package/fesm2022/slotted-angular-list-item.mjs.map +1 -1
  150. package/fesm2022/slotted-angular-list.mjs +14 -10
  151. package/fesm2022/slotted-angular-list.mjs.map +1 -1
  152. package/fesm2022/slotted-angular-listbox.mjs +39 -21
  153. package/fesm2022/slotted-angular-listbox.mjs.map +1 -1
  154. package/fesm2022/slotted-angular-loading-overlay.mjs +59 -22
  155. package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -1
  156. package/fesm2022/slotted-angular-markdown.mjs +31 -19
  157. package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
  158. package/fesm2022/slotted-angular-menu.mjs +41 -27
  159. package/fesm2022/slotted-angular-menu.mjs.map +1 -1
  160. package/fesm2022/slotted-angular-menubar.mjs +4 -2
  161. package/fesm2022/slotted-angular-menubar.mjs.map +1 -1
  162. package/fesm2022/slotted-angular-message-scroller.mjs +28 -15
  163. package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -1
  164. package/fesm2022/slotted-angular-message.mjs +113 -51
  165. package/fesm2022/slotted-angular-message.mjs.map +1 -1
  166. package/fesm2022/slotted-angular-multi-select.mjs +133 -57
  167. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
  168. package/fesm2022/slotted-angular-navigation-menu.mjs +34 -26
  169. package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -1
  170. package/fesm2022/slotted-angular-notification-center.mjs +107 -65
  171. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -1
  172. package/fesm2022/slotted-angular-number-field.mjs +23 -11
  173. package/fesm2022/slotted-angular-number-field.mjs.map +1 -1
  174. package/fesm2022/slotted-angular-otp-input.mjs +13 -8
  175. package/fesm2022/slotted-angular-otp-input.mjs.map +1 -1
  176. package/fesm2022/slotted-angular-page-header.mjs +72 -42
  177. package/fesm2022/slotted-angular-page-header.mjs.map +1 -1
  178. package/fesm2022/slotted-angular-page.mjs +18 -9
  179. package/fesm2022/slotted-angular-page.mjs.map +1 -1
  180. package/fesm2022/slotted-angular-pagination.mjs +35 -22
  181. package/fesm2022/slotted-angular-pagination.mjs.map +1 -1
  182. package/fesm2022/slotted-angular-popover.mjs +25 -18
  183. package/fesm2022/slotted-angular-popover.mjs.map +1 -1
  184. package/fesm2022/slotted-angular-progress-indicator.mjs +122 -30
  185. package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -1
  186. package/fesm2022/slotted-angular-prompt-composer.mjs +24 -18
  187. package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -1
  188. package/fesm2022/slotted-angular-prose.mjs +14 -11
  189. package/fesm2022/slotted-angular-prose.mjs.map +1 -1
  190. package/fesm2022/slotted-angular-radio-group.mjs +15 -9
  191. package/fesm2022/slotted-angular-radio-group.mjs.map +1 -1
  192. package/fesm2022/slotted-angular-rating.mjs +138 -82
  193. package/fesm2022/slotted-angular-rating.mjs.map +1 -1
  194. package/fesm2022/slotted-angular-result-state.mjs +16 -12
  195. package/fesm2022/slotted-angular-result-state.mjs.map +1 -1
  196. package/fesm2022/slotted-angular-saved-views.mjs +43 -16
  197. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
  198. package/fesm2022/slotted-angular-scroll-area.mjs +9 -5
  199. package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -1
  200. package/fesm2022/slotted-angular-section.mjs +34 -15
  201. package/fesm2022/slotted-angular-section.mjs.map +1 -1
  202. package/fesm2022/slotted-angular-segmented-control.mjs +15 -9
  203. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -1
  204. package/fesm2022/slotted-angular-select.mjs +135 -53
  205. package/fesm2022/slotted-angular-select.mjs.map +1 -1
  206. package/fesm2022/slotted-angular-side-navigation.mjs +46 -35
  207. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -1
  208. package/fesm2022/slotted-angular-skeleton.mjs +32 -16
  209. package/fesm2022/slotted-angular-skeleton.mjs.map +1 -1
  210. package/fesm2022/slotted-angular-slider.mjs +31 -11
  211. package/fesm2022/slotted-angular-slider.mjs.map +1 -1
  212. package/fesm2022/slotted-angular-sparkline.mjs +29 -13
  213. package/fesm2022/slotted-angular-sparkline.mjs.map +1 -1
  214. package/fesm2022/slotted-angular-split-button.mjs +25 -11
  215. package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
  216. package/fesm2022/slotted-angular-splitter.mjs +11 -9
  217. package/fesm2022/slotted-angular-splitter.mjs.map +1 -1
  218. package/fesm2022/slotted-angular-stack.mjs +4 -2
  219. package/fesm2022/slotted-angular-stack.mjs.map +1 -1
  220. package/fesm2022/slotted-angular-stat-card.mjs +35 -28
  221. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
  222. package/fesm2022/slotted-angular-status-indicator.mjs +22 -8
  223. package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -1
  224. package/fesm2022/slotted-angular-stepper.mjs +40 -15
  225. package/fesm2022/slotted-angular-stepper.mjs.map +1 -1
  226. package/fesm2022/slotted-angular-switch.mjs +15 -10
  227. package/fesm2022/slotted-angular-switch.mjs.map +1 -1
  228. package/fesm2022/slotted-angular-table-of-contents.mjs +29 -21
  229. package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -1
  230. package/fesm2022/slotted-angular-table.mjs +135 -72
  231. package/fesm2022/slotted-angular-table.mjs.map +1 -1
  232. package/fesm2022/slotted-angular-tabs.mjs +31 -14
  233. package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
  234. package/fesm2022/slotted-angular-tag.mjs +19 -12
  235. package/fesm2022/slotted-angular-tag.mjs.map +1 -1
  236. package/fesm2022/slotted-angular-tags-input.mjs +253 -28
  237. package/fesm2022/slotted-angular-tags-input.mjs.map +1 -1
  238. package/fesm2022/slotted-angular-text-field.mjs +49 -15
  239. package/fesm2022/slotted-angular-text-field.mjs.map +1 -1
  240. package/fesm2022/slotted-angular-textarea.mjs +5 -3
  241. package/fesm2022/slotted-angular-textarea.mjs.map +1 -1
  242. package/fesm2022/slotted-angular-time-field.mjs +46 -12
  243. package/fesm2022/slotted-angular-time-field.mjs.map +1 -1
  244. package/fesm2022/slotted-angular-time-picker.mjs +28 -14
  245. package/fesm2022/slotted-angular-time-picker.mjs.map +1 -1
  246. package/fesm2022/slotted-angular-time-range-picker.mjs +109 -40
  247. package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -1
  248. package/fesm2022/slotted-angular-timeline.mjs +135 -64
  249. package/fesm2022/slotted-angular-timeline.mjs.map +1 -1
  250. package/fesm2022/slotted-angular-toast.mjs +42 -31
  251. package/fesm2022/slotted-angular-toast.mjs.map +1 -1
  252. package/fesm2022/slotted-angular-toggle-group.mjs +10 -6
  253. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -1
  254. package/fesm2022/slotted-angular-toggle.mjs +9 -4
  255. package/fesm2022/slotted-angular-toggle.mjs.map +1 -1
  256. package/fesm2022/slotted-angular-toolbar.mjs +21 -10
  257. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -1
  258. package/fesm2022/slotted-angular-tooltip.mjs +8 -5
  259. package/fesm2022/slotted-angular-tooltip.mjs.map +1 -1
  260. package/fesm2022/slotted-angular-top-navigation.mjs +64 -44
  261. package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -1
  262. package/fesm2022/slotted-angular-tour.mjs +46 -21
  263. package/fesm2022/slotted-angular-tour.mjs.map +1 -1
  264. package/fesm2022/slotted-angular-transfer.mjs +69 -30
  265. package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
  266. package/fesm2022/slotted-angular-tree.mjs +74 -26
  267. package/fesm2022/slotted-angular-tree.mjs.map +1 -1
  268. package/fesm2022/slotted-angular-typography.mjs +8 -4
  269. package/fesm2022/slotted-angular-typography.mjs.map +1 -1
  270. package/fesm2022/slotted-angular-upload.mjs +125 -57
  271. package/fesm2022/slotted-angular-upload.mjs.map +1 -1
  272. package/fesm2022/slotted-angular-visually-hidden.mjs +4 -2
  273. package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -1
  274. package/fesm2022/slotted-angular-wizard.mjs +163 -65
  275. package/fesm2022/slotted-angular-wizard.mjs.map +1 -1
  276. package/package.json +3 -3
  277. package/types/slotted-angular-accordion.d.ts.map +1 -1
  278. package/types/slotted-angular-action-bar.d.ts.map +1 -1
  279. package/types/slotted-angular-action-sheet.d.ts.map +1 -1
  280. package/types/slotted-angular-alert.d.ts +1 -1
  281. package/types/slotted-angular-alert.d.ts.map +1 -1
  282. package/types/slotted-angular-app-shell.d.ts.map +1 -1
  283. package/types/slotted-angular-aspect-ratio.d.ts.map +1 -1
  284. package/types/slotted-angular-attachment.d.ts +1 -1
  285. package/types/slotted-angular-attachment.d.ts.map +1 -1
  286. package/types/slotted-angular-avatar-group.d.ts.map +1 -1
  287. package/types/slotted-angular-avatar.d.ts.map +1 -1
  288. package/types/slotted-angular-badge.d.ts.map +1 -1
  289. package/types/slotted-angular-breadcrumb.d.ts.map +1 -1
  290. package/types/slotted-angular-button-group.d.ts.map +1 -1
  291. package/types/slotted-angular-button.d.ts.map +1 -1
  292. package/types/slotted-angular-calendar.d.ts.map +1 -1
  293. package/types/slotted-angular-card.d.ts.map +1 -1
  294. package/types/slotted-angular-carousel.d.ts.map +1 -1
  295. package/types/slotted-angular-cascader.d.ts.map +1 -1
  296. package/types/slotted-angular-chart.d.ts.map +1 -1
  297. package/types/slotted-angular-checkbox-group.d.ts.map +1 -1
  298. package/types/slotted-angular-checkbox.d.ts.map +1 -1
  299. package/types/slotted-angular-code-block.d.ts +1 -1
  300. package/types/slotted-angular-code-block.d.ts.map +1 -1
  301. package/types/slotted-angular-collapsible.d.ts +1 -1
  302. package/types/slotted-angular-collapsible.d.ts.map +1 -1
  303. package/types/slotted-angular-color-picker.d.ts.map +1 -1
  304. package/types/slotted-angular-column-manager.d.ts.map +1 -1
  305. package/types/slotted-angular-combobox.d.ts +1 -1
  306. package/types/slotted-angular-combobox.d.ts.map +1 -1
  307. package/types/slotted-angular-command-palette.d.ts.map +1 -1
  308. package/types/slotted-angular-container.d.ts.map +1 -1
  309. package/types/slotted-angular-context-menu.d.ts.map +1 -1
  310. package/types/slotted-angular-currency-field.d.ts +39 -13
  311. package/types/slotted-angular-currency-field.d.ts.map +1 -1
  312. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -1
  313. package/types/slotted-angular-data-grid.d.ts +26 -2
  314. package/types/slotted-angular-data-grid.d.ts.map +1 -1
  315. package/types/slotted-angular-data-list.d.ts.map +1 -1
  316. package/types/slotted-angular-date-field.d.ts.map +1 -1
  317. package/types/slotted-angular-date-picker.d.ts.map +1 -1
  318. package/types/slotted-angular-date-range-picker.d.ts.map +1 -1
  319. package/types/slotted-angular-datetime-field.d.ts.map +1 -1
  320. package/types/slotted-angular-datetime-picker.d.ts.map +1 -1
  321. package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -1
  322. package/types/slotted-angular-description-list.d.ts.map +1 -1
  323. package/types/slotted-angular-detail-panel.d.ts.map +1 -1
  324. package/types/slotted-angular-dialog.d.ts +2 -1
  325. package/types/slotted-angular-dialog.d.ts.map +1 -1
  326. package/types/slotted-angular-divider.d.ts.map +1 -1
  327. package/types/slotted-angular-drawer.d.ts.map +1 -1
  328. package/types/slotted-angular-entity-picker.d.ts.map +1 -1
  329. package/types/slotted-angular-event-calendar.d.ts.map +1 -1
  330. package/types/slotted-angular-field-group.d.ts.map +1 -1
  331. package/types/slotted-angular-field.d.ts.map +1 -1
  332. package/types/slotted-angular-filter-bar.d.ts.map +1 -1
  333. package/types/slotted-angular-form.d.ts.map +1 -1
  334. package/types/slotted-angular-fullscreen.d.ts.map +1 -1
  335. package/types/slotted-angular-grid.d.ts.map +1 -1
  336. package/types/slotted-angular-highlight.d.ts.map +1 -1
  337. package/types/slotted-angular-hover-card.d.ts.map +1 -1
  338. package/types/slotted-angular-icon.d.ts +1 -1
  339. package/types/slotted-angular-icon.d.ts.map +1 -1
  340. package/types/slotted-angular-image.d.ts.map +1 -1
  341. package/types/slotted-angular-import-export-center.d.ts.map +1 -1
  342. package/types/slotted-angular-inline-message.d.ts +1 -1
  343. package/types/slotted-angular-inline-message.d.ts.map +1 -1
  344. package/types/slotted-angular-inline.d.ts.map +1 -1
  345. package/types/slotted-angular-kbd.d.ts.map +1 -1
  346. package/types/slotted-angular-link.d.ts.map +1 -1
  347. package/types/slotted-angular-list-item.d.ts.map +1 -1
  348. package/types/slotted-angular-list.d.ts.map +1 -1
  349. package/types/slotted-angular-listbox.d.ts.map +1 -1
  350. package/types/slotted-angular-loading-overlay.d.ts.map +1 -1
  351. package/types/slotted-angular-markdown.d.ts.map +1 -1
  352. package/types/slotted-angular-menu.d.ts.map +1 -1
  353. package/types/slotted-angular-menubar.d.ts.map +1 -1
  354. package/types/slotted-angular-message-scroller.d.ts.map +1 -1
  355. package/types/slotted-angular-message.d.ts.map +1 -1
  356. package/types/slotted-angular-multi-select.d.ts +1 -1
  357. package/types/slotted-angular-multi-select.d.ts.map +1 -1
  358. package/types/slotted-angular-navigation-menu.d.ts.map +1 -1
  359. package/types/slotted-angular-notification-center.d.ts.map +1 -1
  360. package/types/slotted-angular-number-field.d.ts.map +1 -1
  361. package/types/slotted-angular-otp-input.d.ts.map +1 -1
  362. package/types/slotted-angular-page-header.d.ts +1 -1
  363. package/types/slotted-angular-page-header.d.ts.map +1 -1
  364. package/types/slotted-angular-page.d.ts.map +1 -1
  365. package/types/slotted-angular-pagination.d.ts.map +1 -1
  366. package/types/slotted-angular-popover.d.ts.map +1 -1
  367. package/types/slotted-angular-progress-indicator.d.ts.map +1 -1
  368. package/types/slotted-angular-prompt-composer.d.ts.map +1 -1
  369. package/types/slotted-angular-prose.d.ts.map +1 -1
  370. package/types/slotted-angular-radio-group.d.ts.map +1 -1
  371. package/types/slotted-angular-rating.d.ts.map +1 -1
  372. package/types/slotted-angular-result-state.d.ts.map +1 -1
  373. package/types/slotted-angular-saved-views.d.ts.map +1 -1
  374. package/types/slotted-angular-scroll-area.d.ts.map +1 -1
  375. package/types/slotted-angular-section.d.ts.map +1 -1
  376. package/types/slotted-angular-segmented-control.d.ts.map +1 -1
  377. package/types/slotted-angular-select.d.ts +1 -1
  378. package/types/slotted-angular-select.d.ts.map +1 -1
  379. package/types/slotted-angular-side-navigation.d.ts.map +1 -1
  380. package/types/slotted-angular-skeleton.d.ts.map +1 -1
  381. package/types/slotted-angular-slider.d.ts.map +1 -1
  382. package/types/slotted-angular-sparkline.d.ts.map +1 -1
  383. package/types/slotted-angular-split-button.d.ts.map +1 -1
  384. package/types/slotted-angular-splitter.d.ts.map +1 -1
  385. package/types/slotted-angular-stack.d.ts.map +1 -1
  386. package/types/slotted-angular-stat-card.d.ts.map +1 -1
  387. package/types/slotted-angular-status-indicator.d.ts +1 -1
  388. package/types/slotted-angular-status-indicator.d.ts.map +1 -1
  389. package/types/slotted-angular-stepper.d.ts +1 -1
  390. package/types/slotted-angular-stepper.d.ts.map +1 -1
  391. package/types/slotted-angular-switch.d.ts.map +1 -1
  392. package/types/slotted-angular-table-of-contents.d.ts.map +1 -1
  393. package/types/slotted-angular-table.d.ts.map +1 -1
  394. package/types/slotted-angular-tabs.d.ts.map +1 -1
  395. package/types/slotted-angular-tag.d.ts.map +1 -1
  396. package/types/slotted-angular-tags-input.d.ts +33 -1
  397. package/types/slotted-angular-tags-input.d.ts.map +1 -1
  398. package/types/slotted-angular-text-field.d.ts.map +1 -1
  399. package/types/slotted-angular-textarea.d.ts.map +1 -1
  400. package/types/slotted-angular-time-field.d.ts.map +1 -1
  401. package/types/slotted-angular-time-picker.d.ts.map +1 -1
  402. package/types/slotted-angular-time-range-picker.d.ts.map +1 -1
  403. package/types/slotted-angular-timeline.d.ts.map +1 -1
  404. package/types/slotted-angular-toast.d.ts +2 -2
  405. package/types/slotted-angular-toast.d.ts.map +1 -1
  406. package/types/slotted-angular-toggle-group.d.ts.map +1 -1
  407. package/types/slotted-angular-toggle.d.ts.map +1 -1
  408. package/types/slotted-angular-toolbar.d.ts.map +1 -1
  409. package/types/slotted-angular-tooltip.d.ts.map +1 -1
  410. package/types/slotted-angular-top-navigation.d.ts.map +1 -1
  411. package/types/slotted-angular-tour.d.ts.map +1 -1
  412. package/types/slotted-angular-transfer.d.ts.map +1 -1
  413. package/types/slotted-angular-tree.d.ts.map +1 -1
  414. package/types/slotted-angular-typography.d.ts.map +1 -1
  415. package/types/slotted-angular-upload.d.ts +2 -2
  416. package/types/slotted-angular-upload.d.ts.map +1 -1
  417. package/types/slotted-angular-visually-hidden.d.ts.map +1 -1
  418. package/types/slotted-angular-wizard.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-dashboard-grid.mjs","sources":["../../dashboard-grid/src/dashboard-grid-defaults.ts","../../dashboard-grid/src/dashboard-widget.ts","../../dashboard-grid/src/dashboard-grid.ts","../../dashboard-grid/src/persisted-dashboard-layout.ts","../../dashboard-grid/src/slotted-angular-dashboard-grid.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\nimport type {\n DashboardColumnsInput,\n DashboardLayout,\n DashboardLayoutChange,\n} from '@slotted/core/dashboard-grid';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\n\nexport type {\n DashboardColumnsInput,\n DashboardLayout,\n DashboardLayoutChange,\n DashboardLayoutItem,\n} from '@slotted/core/dashboard-grid';\n\nexport type DashboardHeadingLevel = 2 | 3 | 4 | 5 | 6;\n\nexport type DashboardLayoutReason = Extract<\n ChangeReason,\n 'pointer' | 'keyboard' | 'remove' | 'dismiss' | 'programmatic'\n>;\n\nexport type DashboardEditingReason = Extract<\n ChangeReason,\n 'pointer' | 'keyboard' | 'submit' | 'dismiss' | 'programmatic'\n>;\n\n/** The request for a new layout: the layout, why, and what the gesture was. */\nexport interface DashboardLayoutRequest extends ChangeRequest<DashboardLayout> {\n readonly reason: DashboardLayoutReason;\n readonly change: DashboardLayoutChange;\n}\n\nexport interface DashboardEditingRequest extends ChangeRequest<boolean> {\n readonly reason: DashboardEditingReason;\n}\n\nexport type DashboardWidgetStatus = 'ready' | 'empty' | 'error';\n\nexport interface DashboardGridDefaults {\n columns: DashboardColumnsInput;\n editBar: boolean;\n headingLevel: DashboardHeadingLevel;\n}\n\nconst FALLBACK: DashboardGridDefaults = {\n columns: 12,\n editBar: true,\n headingLevel: 3,\n};\n\nexport const DASHBOARD_GRID_DEFAULTS = new InjectionToken<DashboardGridDefaults>(\n 'slotted dashboard-grid defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once how many columns its dashboards have, whether\n * the family draws the edit bar and the level of a widget's title. A grid that\n * states any of it itself still wins. Its words come from the language in force\n * (`provideSlotted`).\n */\nexport function provideDashboardGridDefaults(defaults: Partial<DashboardGridDefaults>) {\n return {\n provide: DASHBOARD_GRID_DEFAULTS,\n useFactory: (): DashboardGridDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectDashboardGridDefaults(): DashboardGridDefaults {\n return inject(DASHBOARD_GRID_DEFAULTS);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SlDashboardGridIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-dashboard-grid-${this.count}`;\n }\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { CardFill, CardSize } from '@slotted/angular/card';\nimport { injectSkeletonDefaults } from '@slotted/angular/skeleton';\nimport type { DashboardWidgetSpec } from '@slotted/core/dashboard-grid';\nimport { initialLoadingVisibility, nextLoadingVisibility } from '@slotted/core/loading';\n\nimport type { DashboardHeadingLevel, DashboardWidgetStatus } from './dashboard-grid-defaults';\n\nconst optionalNumber = (given: number | string | undefined) =>\n given === undefined ? undefined : numberAttribute(given);\nconst optionalBoolean = (given: boolean | string | undefined) =>\n given === undefined ? undefined : booleanAttribute(given);\n\n/** Controls in the header's corner, before the detail action: `<button slDashboardWidgetActions>`. */\n@Directive({ selector: '[slDashboardWidgetActions]', standalone: true })\nexport class SlDashboardWidgetActions {}\n\n/** The skeleton of the body's own anatomy, shown while the widget loads. */\n@Directive({ selector: '[slDashboardWidgetSkeleton]', standalone: true })\nexport class SlDashboardWidgetSkeleton {}\n\n/** The action under the empty message: the one that creates the first entry. */\n@Directive({ selector: '[slDashboardWidgetEmptyAction]', standalone: true })\nexport class SlDashboardWidgetEmptyAction {}\n\n/** Content under the body. */\n@Directive({ selector: '[slDashboardWidgetFooter]', standalone: true })\nexport class SlDashboardWidgetFooter {}\n\n/**\n * Writes this family's part name on a control of another family. `slButton`\n * and `slIconButton` write `data-part=\"root\"` as a static host attribute, and\n * `slMenuTriggerFor` binds the attribute to `null` on a lone trigger; both\n * erase the part the template wrote, so it is written back after the first\n * render. The erasing expressions are constants, so nothing writes over it\n * again.\n */\n@Directive({ selector: '[slDashboardPart]', standalone: true })\nexport class SlDashboardPart {\n readonly part = input.required<string>({ alias: 'slDashboardPart' });\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n afterNextRender(() => this.host.nativeElement.setAttribute('data-part', this.part()));\n }\n}\n\n/**\n * One widget, declared. It draws nothing where it is written: its content is\n * kept in templates the grid renders inside its own `li` and card, in the\n * order the layout says — the way `mat-tab` hands its content to the tab\n * group. `value` is the widget's key in the layout.\n */\n@Component({\n selector: 'sl-dashboard-widget',\n standalone: true,\n exportAs: 'slDashboardWidget',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: none' },\n template: `\n <ng-template #body><ng-content /></ng-template>\n <ng-template #actions><ng-content select=\"[slDashboardWidgetActions]\" /></ng-template>\n <ng-template #skeleton><ng-content select=\"[slDashboardWidgetSkeleton]\" /></ng-template>\n <ng-template #emptyAction><ng-content select=\"[slDashboardWidgetEmptyAction]\" /></ng-template>\n <ng-template #footer><ng-content select=\"[slDashboardWidgetFooter]\" /></ng-template>\n `,\n})\nexport class SlDashboardWidget {\n readonly value = input.required<string>();\n /** The widget's name: its heading, its accessible name and its entry in Add widget. */\n readonly title = input.required<string>();\n readonly description = input<string | undefined>(undefined);\n readonly headingLevel = input<DashboardHeadingLevel | undefined>(undefined);\n\n readonly defaultColumns = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly defaultRows = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly minColumns = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly maxColumns = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly minRows = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly maxRows = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly movable = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly resizable = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly removable = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n\n /** The first answer has not arrived: the body shows a skeleton. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** A refresh of data already shown: the content stays and the region is busy. */\n readonly busy = input(false, { transform: booleanAttribute });\n readonly status = input<DashboardWidgetStatus>('ready');\n readonly emptyTitle = input<string | undefined>(undefined);\n readonly emptyDescription = input<string | undefined>(undefined);\n readonly errorTitle = input<string | undefined>(undefined);\n readonly errorDescription = input<string | undefined>(undefined);\n /** Draws Try again under the error message; `retry` fires when it is pressed. */\n readonly retryable = input(false, { transform: booleanAttribute });\n /** The widget's own page. */\n readonly detailHref = input<string | undefined>(undefined);\n /** Draws the detail action as a button; `detail` fires when it is pressed. */\n readonly detailable = input(false, { transform: booleanAttribute });\n readonly fill = input<CardFill | undefined>(undefined);\n readonly size = input<CardSize | undefined>(undefined);\n\n readonly retry = output<MouseEvent>();\n readonly detail = output<MouseEvent>();\n\n readonly bodyTemplate = viewChild.required<TemplateRef<unknown>>('body');\n readonly actionsTemplate = viewChild.required<TemplateRef<unknown>>('actions');\n readonly skeletonTemplate = viewChild.required<TemplateRef<unknown>>('skeleton');\n readonly emptyActionTemplate = viewChild.required<TemplateRef<unknown>>('emptyAction');\n readonly footerTemplate = viewChild.required<TemplateRef<unknown>>('footer');\n\n readonly hasActions = contentChild(SlDashboardWidgetActions);\n readonly hasSkeleton = contentChild(SlDashboardWidgetSkeleton);\n readonly hasEmptyAction = contentChild(SlDashboardWidgetEmptyAction);\n readonly hasFooter = contentChild(SlDashboardWidgetFooter);\n\n /** Whether the skeleton is on screen: `loading` held back by the skeleton family's timing. */\n readonly painted = signal(false);\n\n private readonly skeletonDefaults = injectSkeletonDefaults();\n private visibility = initialLoadingVisibility;\n private timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n effect(() => {\n const loading = this.loading();\n untracked(() => this.tick(loading));\n });\n inject(DestroyRef).onDestroy(() => clearTimeout(this.timer));\n }\n\n /** What the grid's layout arithmetic reads. */\n spec(): DashboardWidgetSpec {\n const given = {\n defaultColumns: this.defaultColumns(),\n defaultRows: this.defaultRows(),\n minColumns: this.minColumns(),\n maxColumns: this.maxColumns(),\n minRows: this.minRows(),\n maxRows: this.maxRows(),\n movable: this.movable(),\n resizable: this.resizable(),\n removable: this.removable(),\n };\n return {\n key: this.value(),\n ...Object.fromEntries(Object.entries(given).filter(([, value]) => value !== undefined)),\n };\n }\n\n private tick(loading: boolean): void {\n const answer = nextLoadingVisibility({\n delay: this.skeletonDefaults.delay ?? 0,\n loading,\n minDuration: this.skeletonDefaults.minDuration ?? 0,\n now: Date.now(),\n state: this.visibility,\n });\n this.visibility = answer.state;\n this.painted.set(answer.state.visible);\n clearTimeout(this.timer);\n if (answer.wait !== null) {\n this.timer = setTimeout(() => this.tick(this.loading()), answer.wait);\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterEveryRender,\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SlButton, SlButtonStart, SlIconButton } from '@slotted/angular/button';\nimport {\n SlCard,\n SlCardActions,\n SlCardBody,\n SlCardFooter,\n SlCardHeader,\n} from '@slotted/angular/card';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n SlMenu,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n type MenuSelectEvent,\n} from '@slotted/angular/menu';\nimport {\n SlResultState,\n SlResultStateActions,\n SlResultStateContent,\n SlResultStateDescription,\n SlResultStateTitle,\n} from '@slotted/angular/result-state';\nimport { SlSkeleton } from '@slotted/angular/skeleton';\nimport {\n cellAt,\n dashboardKeyIntent,\n handleShortcuts,\n layoutsEqual,\n materializeLayout,\n measureTiles,\n moveTile,\n moveTileBy,\n parseDuration,\n playFlip,\n playResize,\n resizeTileBy,\n resizeTileInClass,\n resolveColumns,\n resolveTiles,\n setTileHidden,\n sizeClassOf,\n spanFromTravel,\n swapTiles,\n tileStyle,\n type DashboardBox,\n type DashboardColumnsInput,\n type DashboardDirection,\n type DashboardLayout,\n type DashboardLayoutChange,\n type DashboardSizeClass,\n type DashboardTile,\n type MeasuredTile,\n} from '@slotted/core/dashboard-grid';\nimport { createDragController, type DropTarget } from '@slotted/core/drag';\nimport {\n dashboardGridMessages,\n dragMessages,\n type DashboardGridMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport type { ChangeReason } from '@slotted/core/state';\n\nimport {\n injectDashboardGridDefaults,\n SlDashboardGridIdFactory,\n type DashboardEditingReason,\n type DashboardEditingRequest,\n type DashboardHeadingLevel,\n type DashboardLayoutReason,\n type DashboardLayoutRequest,\n} from './dashboard-grid-defaults';\nimport { SlDashboardPart, SlDashboardWidget } from './dashboard-widget';\n\nconst EMPTY_LAYOUT: DashboardLayout = [];\nconst GRID = 'dashboard-grid';\nconst ADD = `${GRID}:add`;\nconst PLACEHOLDER = '\\u0000placeholder';\n\n/** An edge a widget is pulled by. The top is not one: gravity decides it. */\ntype DashboardEdge = 'start' | 'end' | 'bottom' | 'bottom-start' | 'bottom-end';\n\nconst EDGES: readonly DashboardEdge[] = ['start', 'end', 'bottom', 'bottom-start', 'bottom-end'];\n\n/** A click with no coordinates is a key. */\nfunction pressReason(event: MouseEvent): 'pointer' | 'keyboard' {\n return event.detail === 0 ? 'keyboard' : 'pointer';\n}\n\nfunction directionOf(element: Element): 'ltr' | 'rtl' {\n return getComputedStyle(element).direction === 'rtl' ? 'rtl' : 'ltr';\n}\n\n/** A grid not laid out yet — hidden, or in a test — is drawn in its stored class. */\nfunction classOf(root: HTMLElement): DashboardSizeClass {\n return root.clientWidth > 0 ? sizeClassOf(root.clientWidth) : 'expanded';\n}\n\nfunction makeRequest<T, Extra extends object>(\n value: T,\n previous: T,\n reason: ChangeReason,\n source: unknown,\n extra: Extra,\n) {\n let cancelled = false;\n return {\n value,\n previous,\n reason,\n source,\n ...extra,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n };\n}\n\n/** The tracks the grid is drawn with in the class it is in, read from its style. */\ninterface Tracks {\n readonly columns: number;\n readonly track: number;\n readonly columnGap: number;\n readonly row: number;\n readonly rowGap: number;\n}\n\nfunction tracksOf(list: HTMLElement, columns: number): Tracks {\n const styles = getComputedStyle(list);\n const columnGap = parseFloat(styles.columnGap) || 0;\n const rowGap = parseFloat(styles.rowGap) || 0;\n const track = (list.clientWidth - columnGap * (columns - 1)) / Math.max(1, columns);\n return { columns, track, columnGap, row: parseFloat(styles.gridAutoRows) || 0, rowGap };\n}\n\n/** Where a widget was picked up, relative to the grid, in logical terms. */\ninterface Origin {\n readonly inlineStart: number;\n readonly blockStart: number;\n readonly inlineSize: number;\n readonly blockSize: number;\n}\n\nfunction originOf(element: HTMLElement, list: HTMLElement, rtl: boolean): Origin {\n const box = element.getBoundingClientRect();\n const frame = list.getBoundingClientRect();\n return {\n inlineStart: rtl ? frame.right - box.right : box.left - frame.left,\n blockStart: box.top - frame.top,\n inlineSize: box.width,\n blockSize: box.height,\n };\n}\n\n/* The widget in hand is placed and moved by its own geometry, never by a\n custom property: one restyles everything under the widget, and it is\n written every frame. */\nconst LIFT = ['inset-inline-start', 'inset-block-start', 'inline-size', 'block-size', 'translate'];\n\nfunction writeOrigin(element: HTMLElement, origin: Origin) {\n element.style.setProperty('inset-inline-start', `${origin.inlineStart}px`);\n element.style.setProperty('inset-block-start', `${origin.blockStart}px`);\n element.style.setProperty('inline-size', `${origin.inlineSize}px`);\n element.style.setProperty('block-size', `${origin.blockSize}px`);\n}\n\nfunction clearLift(element: HTMLElement | undefined) {\n if (element === undefined) return;\n for (const name of LIFT) element.style.removeProperty(name);\n}\n\nfunction boxOf(element: HTMLElement): MeasuredTile {\n const { left, top, width, height } = element.getBoundingClientRect();\n return { left, top, width, height };\n}\n\n/** What a gesture has reached, as the grid draws it. */\ntype Gesture =\n | { readonly kind: 'move'; readonly key: string; readonly preview: DashboardLayout }\n | {\n readonly kind: 'resize';\n readonly key: string;\n readonly edge: DashboardEdge;\n readonly preview: DashboardLayout;\n readonly sizeClass: DashboardSizeClass;\n };\n\n/** What the template draws for one widget. */\ninterface Slot {\n readonly widget: SlDashboardWidget;\n readonly tile: DashboardTile;\n readonly style: Record<string, string>;\n readonly dragging: boolean;\n readonly resizing: boolean;\n /** The edge a pointer is pulling, while it pulls. */\n readonly edge: DashboardEdge | null;\n /** The size the pull has reached, already filled. */\n readonly readout: string | null;\n /** Whether the widget has a size to change in the class it is drawn in. */\n readonly sizable: boolean;\n readonly handle: boolean;\n readonly can: {\n readonly up: boolean;\n readonly down: boolean;\n readonly left: boolean;\n readonly right: boolean;\n readonly wider: boolean;\n readonly narrower: boolean;\n readonly taller: boolean;\n readonly shorter: boolean;\n };\n}\n\n/**\n * A surface of widgets the reader places and sizes. The widgets are\n * `sl-dashboard-widget` children, each with its own `value`; the grid draws\n * them where the layout puts them, by row and then column, which is the\n * reading order, the focus order and the picture at every width.\n *\n * The host is the root. `aria-label` and `aria-labelledby` written on it name\n * the list inside, which is what a reader meets.\n */\n@Component({\n selector: '[slDashboardGrid]',\n standalone: true,\n exportAs: 'slDashboardGrid',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: [\n '../../../styles/src/dashboard-grid/dashboard-grid.css',\n '../../../styles/src/visually-hidden/visually-hidden.css',\n ],\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlButtonStart,\n SlCard,\n SlCardActions,\n SlCardBody,\n SlCardFooter,\n SlCardHeader,\n SlDashboardPart,\n SlGlyph,\n SlIcon,\n SlIconButton,\n SlMenu,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n SlResultState,\n SlResultStateActions,\n SlResultStateContent,\n SlResultStateDescription,\n SlResultStateTitle,\n SlSkeleton,\n ],\n host: {\n 'data-ui': 'dashboard-grid',\n 'data-part': 'root',\n '[attr.data-editing]': 'isEditing() ? \"\" : null',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[style.--_dg-columns-expanded]': 'grid().expanded',\n '[style.--_dg-columns-medium]': 'grid().medium',\n '[style.--_dg-columns-compact]': 'grid().compact',\n },\n template: `\n @if (isEditing() && resolvedEditBar()) {\n <div data-part=\"edit-bar\" role=\"group\" [attr.aria-label]=\"t('editBar')\">\n <p data-part=\"edit-status\" [id]=\"statusId\">{{ t('editStatus') }}</p>\n <div data-part=\"edit-actions\">\n @if (hiddenTiles().length > 0) {\n <button\n slButton\n slDashboardPart=\"add\"\n data-dashboard-add\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n [slMenuTriggerFor]=\"addMenu\"\n >\n <span slButtonStart\n ><span slIcon><svg slGlyph name=\"plus\"></svg></span></span\n >{{ t('add') }}\n </button>\n <sl-menu #addMenu>\n @for (tile of hiddenTiles(); track tile.key) {\n <button slMenuItem (select)=\"show(tile.key, reasonOf($event), $event.source)\">\n {{ titleOf(tile.key) }}\n </button>\n }\n </sl-menu>\n }\n <button\n slButton\n slDashboardPart=\"reset\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n (click)=\"reset(pressReason($event), $event)\"\n >\n {{ t('reset') }}\n </button>\n <button\n slButton\n slDashboardPart=\"cancel\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n (click)=\"cancelEditing(pressReason($event), $event)\"\n >\n {{ t('cancel') }}\n </button>\n <button\n slButton\n slDashboardPart=\"done\"\n size=\"sm\"\n tone=\"accent\"\n variant=\"solid\"\n (click)=\"commitEditing('submit', $event)\"\n >\n {{ t('done') }}\n </button>\n </div>\n </div>\n }\n @if (isEditing() && !resolvedEditBar()) {\n <p data-part=\"edit-status\" data-ui=\"visually-hidden\" [id]=\"statusId\">\n {{ t('editStatus') }}\n </p>\n }\n <ul\n #list\n data-part=\"grid\"\n [attr.data-gesture]=\"gesture() === null ? null : ''\"\n role=\"list\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() ?? null\"\n [hidden]=\"slots().length === 0\"\n >\n @for (slot of slots(); track slot.tile.key) {\n <li\n data-part=\"widget\"\n [attr.data-key]=\"slot.tile.key\"\n [attr.data-status]=\"slot.widget.status()\"\n [attr.data-loading]=\"slot.widget.painted() ? '' : null\"\n [attr.data-movable]=\"slot.tile.movable ? '' : null\"\n [attr.data-resizable]=\"slot.tile.resizable ? '' : null\"\n [attr.data-dragging]=\"slot.dragging ? '' : null\"\n [attr.data-resizing]=\"slot.resizing ? '' : null\"\n [style]=\"slot.style\"\n >\n <article\n slCard\n [fill]=\"slot.widget.fill()\"\n [size]=\"slot.widget.size()\"\n [attr.aria-labelledby]=\"titleId(slot.tile.key)\"\n [attr.aria-describedby]=\"\n slot.widget.description() === undefined\n ? null\n : titleId(slot.tile.key) + '-description'\n \"\n [attr.aria-busy]=\"slot.widget.painted() || slot.widget.busy() ? true : null\"\n >\n <div slCardHeader>\n @switch (levelOf(slot.widget)) {\n @case (2) {\n <h2 data-part=\"title\" [id]=\"titleId(slot.tile.key)\">{{ slot.widget.title() }}</h2>\n }\n @case (4) {\n <h4 data-part=\"title\" [id]=\"titleId(slot.tile.key)\">{{ slot.widget.title() }}</h4>\n }\n @case (5) {\n <h5 data-part=\"title\" [id]=\"titleId(slot.tile.key)\">{{ slot.widget.title() }}</h5>\n }\n @case (6) {\n <h6 data-part=\"title\" [id]=\"titleId(slot.tile.key)\">{{ slot.widget.title() }}</h6>\n }\n @default {\n <h3 data-part=\"title\" [id]=\"titleId(slot.tile.key)\">{{ slot.widget.title() }}</h3>\n }\n }\n @if (slot.widget.description(); as description) {\n <p data-part=\"description\" [id]=\"titleId(slot.tile.key) + '-description'\">\n {{ description }}\n </p>\n }\n @if (\n slot.widget.hasActions() ||\n slot.widget.detailHref() !== undefined ||\n slot.widget.detailable()\n ) {\n <div slCardActions>\n <ng-container [ngTemplateOutlet]=\"slot.widget.actionsTemplate()\" />\n @if (slot.widget.detailHref(); as href) {\n <a\n data-ui=\"button\"\n data-part=\"detail\"\n data-tone=\"secondary\"\n data-variant=\"ghost\"\n data-size=\"sm\"\n data-shape=\"square\"\n [attr.href]=\"href\"\n [attr.aria-label]=\"t('detail', { title: slot.widget.title() })\"\n (click)=\"slot.widget.detail.emit($event)\"\n ><span data-part=\"icon\" aria-hidden=\"true\"\n ><span slIcon directional><svg slGlyph name=\"external\"></svg></span></span\n ></a>\n } @else if (slot.widget.detailable()) {\n <button\n slIconButton\n slDashboardPart=\"detail\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n [attr.aria-label]=\"t('detail', { title: slot.widget.title() })\"\n (click)=\"slot.widget.detail.emit($event)\"\n >\n <span slIcon directional><svg slGlyph name=\"external\"></svg></span>\n </button>\n }\n </div>\n }\n </div>\n <div slCardBody>\n @if (slot.widget.busy() && !slot.widget.painted()) {\n <span data-part=\"busy-indicator\" aria-hidden=\"true\"></span>\n }\n @if (slot.widget.painted()) {\n <div data-part=\"skeleton\">\n @if (slot.widget.hasSkeleton()) {\n <ng-container [ngTemplateOutlet]=\"slot.widget.skeletonTemplate()\" />\n } @else {\n <span slSkeleton shape=\"block\"></span>\n }\n </div>\n } @else if (slot.widget.status() === 'empty') {\n <div data-part=\"message\">\n <section slResultState status=\"empty\" reach=\"section\" align=\"center\" live=\"off\">\n <div slResultStateContent>\n <div slResultStateTitle>\n {{ slot.widget.emptyTitle() ?? t('emptyTitle') }}\n </div>\n @if (slot.widget.emptyDescription(); as description) {\n <p slResultStateDescription>{{ description }}</p>\n }\n </div>\n @if (slot.widget.hasEmptyAction()) {\n <div slResultStateActions>\n <ng-container [ngTemplateOutlet]=\"slot.widget.emptyActionTemplate()\" />\n </div>\n }\n </section>\n </div>\n } @else if (slot.widget.status() === 'error') {\n <div data-part=\"message\">\n <section\n slResultState\n status=\"error\"\n reach=\"section\"\n align=\"center\"\n live=\"polite\"\n >\n <div slResultStateContent>\n <div slResultStateTitle>\n {{ slot.widget.errorTitle() ?? t('errorTitle') }}\n </div>\n @if (slot.widget.errorDescription(); as description) {\n <p slResultStateDescription>{{ description }}</p>\n }\n </div>\n @if (slot.widget.retryable()) {\n <div slResultStateActions>\n <button\n slButton\n slDashboardPart=\"retry\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n (click)=\"slot.widget.retry.emit($event)\"\n >\n <span slButtonStart\n ><span slIcon><svg slGlyph name=\"rotate-ccw\"></svg></span></span\n >{{ t('retry') }}\n </button>\n </div>\n }\n </section>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"slot.widget.bodyTemplate()\" />\n }\n </div>\n @if (slot.widget.hasFooter()) {\n <div slCardFooter>\n <ng-container [ngTemplateOutlet]=\"slot.widget.footerTemplate()\" />\n </div>\n }\n </article>\n @if (slot.handle) {\n <button\n slDashboardPart=\"handle\"\n [attr.data-handle]=\"slot.tile.key\"\n [attr.aria-label]=\"t('handle', { title: slot.widget.title() })\"\n [attr.aria-describedby]=\"statusId\"\n [attr.aria-keyshortcuts]=\"shortcuts(slot.tile.removable)\"\n [slMenuTriggerFor]=\"handleMenu\"\n >\n <span slIcon><svg slGlyph name=\"grip-horizontal\"></svg></span>\n </button>\n <sl-menu #handleMenu>\n @if (slot.tile.movable) {\n <button\n slMenuItem\n shortcut=\"Alt+ArrowUp\"\n [disabled]=\"!slot.can.up\"\n (select)=\"move(slot.tile.key, 'up', reasonOf($event), $event.source)\"\n >\n {{ t('moveUp') }}\n </button>\n <button\n slMenuItem\n shortcut=\"Alt+ArrowDown\"\n [disabled]=\"!slot.can.down\"\n (select)=\"move(slot.tile.key, 'down', reasonOf($event), $event.source)\"\n >\n {{ t('moveDown') }}\n </button>\n @if (!flows()) {\n <button\n slMenuItem\n shortcut=\"Alt+ArrowLeft\"\n [disabled]=\"!slot.can.left\"\n (select)=\"move(slot.tile.key, 'left', reasonOf($event), $event.source)\"\n >\n {{ t('moveStart') }}\n </button>\n <button\n slMenuItem\n shortcut=\"Alt+ArrowRight\"\n [disabled]=\"!slot.can.right\"\n (select)=\"move(slot.tile.key, 'right', reasonOf($event), $event.source)\"\n >\n {{ t('moveEnd') }}\n </button>\n }\n }\n @if (slot.tile.movable && slot.sizable) {\n <hr slMenuSeparator />\n }\n @if (slot.sizable) {\n <button\n slMenuItem\n shortcut=\"Shift+ArrowRight\"\n [disabled]=\"!slot.can.wider\"\n (select)=\"resize(slot.tile.key, 1, 0, reasonOf($event), $event.source)\"\n >\n {{ t('wider') }}\n </button>\n <button\n slMenuItem\n shortcut=\"Shift+ArrowLeft\"\n [disabled]=\"!slot.can.narrower\"\n (select)=\"resize(slot.tile.key, -1, 0, reasonOf($event), $event.source)\"\n >\n {{ t('narrower') }}\n </button>\n <button\n slMenuItem\n shortcut=\"Shift+ArrowDown\"\n [disabled]=\"!slot.can.taller\"\n (select)=\"resize(slot.tile.key, 0, 1, reasonOf($event), $event.source)\"\n >\n {{ t('taller') }}\n </button>\n <button\n slMenuItem\n shortcut=\"Shift+ArrowUp\"\n [disabled]=\"!slot.can.shorter\"\n (select)=\"resize(slot.tile.key, 0, -1, reasonOf($event), $event.source)\"\n >\n {{ t('shorter') }}\n </button>\n }\n @if (slot.tile.removable) {\n @if (slot.tile.movable || slot.sizable) {\n <hr slMenuSeparator />\n }\n <button\n slMenuItem\n tone=\"danger\"\n shortcut=\"Delete\"\n (select)=\"hide(slot.tile.key, 'remove', $event.source)\"\n >\n {{ t('hide') }}\n </button>\n }\n </sl-menu>\n }\n @if (isEditing() && slot.sizable) {\n @for (edge of edges; track edge) {\n <span\n data-part=\"resize-handle\"\n aria-hidden=\"true\"\n [attr.data-edge]=\"edge\"\n [attr.data-active]=\"slot.edge === edge ? '' : null\"\n (pointerdown)=\"onResizePointerDown(slot.tile.key, edge, $event)\"\n ></span>\n }\n }\n @if (slot.readout !== null) {\n <span data-part=\"size-readout\" aria-hidden=\"true\" [attr.data-edge]=\"slot.edge\">{{\n slot.readout\n }}</span>\n }\n </li>\n }\n @if (placeholder(); as style) {\n <li data-part=\"placeholder\" aria-hidden=\"true\" [style]=\"style\"></li>\n }\n </ul>\n @if (slots().length === 0) {\n <div data-part=\"empty\">\n <section slResultState status=\"empty\" reach=\"section\" live=\"polite\">\n <div slResultStateContent>\n <div slResultStateTitle>{{ t('empty') }}</div>\n @if (isEditing()) {\n <p slResultStateDescription>{{ t('emptyEditing') }}</p>\n }\n </div>\n </section>\n </div>\n }\n `,\n})\nexport class SlDashboardGrid {\n /**\n * Where each widget stands and how big it is: `[{ key, x, y, w, h, hidden? }]`\n * in cells of the expanded class. Bound at all, it is the value; unbound,\n * the grid keeps its own.\n */\n readonly layout = model<DashboardLayout | undefined>(undefined);\n /** The layout an unbound grid starts from. Default: every widget at its defaults. */\n readonly defaultLayout = input<DashboardLayout | undefined>(undefined);\n readonly editing = model<boolean | undefined>(undefined);\n readonly defaultEditing = input(false, { transform: booleanAttribute });\n /** Columns of the expanded class, or one count per class. Default 12, 6, 1. */\n readonly columns = input<DashboardColumnsInput | undefined>(undefined);\n readonly editBar = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (given) => (given === undefined ? undefined : booleanAttribute(given)),\n });\n readonly headingLevel = input<DashboardHeadingLevel | undefined>(undefined);\n /** Words laid over the catalog of the language in force, key by key. */\n readonly messages = input<PartialMessages<DashboardGridMessages> | undefined>(undefined);\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n readonly ariaLabelledBy = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n readonly layoutChangeRequest = output<DashboardLayoutRequest>();\n readonly editingChangeRequest = output<DashboardEditingRequest>();\n\n /* ── State ────────────────────────────────────────────────────────── */\n\n private readonly defaults = injectDashboardGridDefaults();\n private readonly base = inject(SlDashboardGridIdFactory).next();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly list = viewChild<ElementRef<HTMLUListElement>>('list');\n protected readonly widgets = contentChildren(SlDashboardWidget);\n\n protected readonly statusId = `${this.base}-edit-status`;\n protected readonly edges = EDGES;\n protected readonly pressReason = pressReason;\n protected readonly shortcuts = handleShortcuts;\n\n /** The family's words in the language in force, with this grid's `messages` laid over them. */\n protected readonly t = injectMessages(dashboardGridMessages, this.messages);\n /** What a drag of a widget says when no position is left, in the language in force. */\n private readonly dragT = injectMessages(dragMessages);\n protected readonly grid = computed(() => resolveColumns(this.columns() ?? this.defaults.columns));\n protected readonly resolvedEditBar = computed(() => this.editBar() ?? this.defaults.editBar);\n\n readonly currentLayout = computed(() => this.layout() ?? this.defaultLayout() ?? EMPTY_LAYOUT);\n readonly isEditing = computed(() => this.editing() ?? this.defaultEditing());\n\n private readonly specs = computed(() => this.widgets().map((widget) => widget.spec()));\n private readonly byKey = computed(\n () => new Map(this.widgets().map((widget) => [widget.value(), widget])),\n );\n private readonly tiles = computed(() =>\n resolveTiles(this.currentLayout(), this.specs(), this.grid()),\n );\n private readonly visible = computed(() => this.tiles().filter((tile) => !tile.hidden));\n protected readonly hiddenTiles = computed(() => this.tiles().filter((tile) => tile.hidden));\n\n protected readonly gesture = signal<Gesture | null>(null);\n /* The class the grid is drawn in, observed after the first render, so a\n server render and the first client render agree on `expanded`. */\n private readonly drawnClass = signal<DashboardSizeClass>('expanded');\n protected readonly flows = computed(() => this.drawnClass() !== 'expanded');\n\n /** What is drawn: the committed layout, or the one a gesture previews. */\n private readonly drawn = computed(() => {\n const gesture = this.gesture();\n return gesture === null\n ? this.tiles()\n : resolveTiles(gesture.preview, this.specs(), this.grid());\n });\n private readonly drawnVisible = computed(() => this.drawn().filter((tile) => !tile.hidden));\n\n protected readonly slots = computed<Slot[]>(() => {\n const gesture = this.gesture();\n const drawn = this.drawn();\n const order = new Map(this.drawnVisible().map((tile, index) => [tile.key, index]));\n const widgets = this.byKey();\n const editing = this.isEditing();\n const drawnClass = this.drawnClass();\n const layout = this.currentLayout();\n const specs = this.specs();\n const grid = this.grid();\n const committed = materializeLayout(layout, specs, grid);\n const differs = (next: DashboardLayout) =>\n !layoutsEqual(materializeLayout(next, specs, grid), committed);\n const slots: Slot[] = [];\n for (const tile of this.visible()) {\n const widget = widgets.get(tile.key);\n if (widget === undefined) continue;\n const shown = drawn.find((each) => each.key === tile.key) ?? tile;\n const inHand = gesture !== null && gesture.key === tile.key;\n const resizing = inHand && gesture.kind === 'resize';\n const sizable = tile.resizable && drawnClass !== 'compact';\n const at = (direction: DashboardDirection) =>\n editing && differs(moveTileBy(layout, specs, grid, tile.key, direction, drawnClass));\n const by = (columns: number, rows: number) =>\n editing &&\n differs(resizeTileBy(layout, specs, grid, tile.key, { columns, rows }, drawnClass));\n const style = tileStyle(shown);\n if (gesture !== null) style['order'] = String(order.get(tile.key) ?? 0);\n slots.push({\n widget,\n tile: shown,\n style,\n dragging: inHand && gesture.kind === 'move',\n resizing,\n edge: resizing ? gesture.edge : null,\n readout: resizing\n ? this.t('size', {\n columns: gesture.sizeClass === 'medium' ? shown.medium : shown.w,\n rows: shown.h,\n })\n : null,\n sizable,\n handle: editing && (tile.movable || sizable || tile.removable),\n can: {\n up: at('up'),\n down: at('down'),\n left: at('left'),\n right: at('right'),\n wider: by(1, 0),\n narrower: by(-1, 0),\n taller: by(0, 1),\n shorter: by(0, -1),\n },\n });\n }\n return slots;\n });\n\n /** The cells the widget in hand will land in, while a gesture lasts. */\n protected readonly placeholder = computed<Record<string, string> | null>(() => {\n const gesture = this.gesture();\n if (gesture === null) return null;\n const visible = this.drawnVisible();\n const index = visible.findIndex((tile) => tile.key === gesture.key);\n const tile = visible[index];\n return tile === undefined ? null : { ...tileStyle(tile), order: String(index) };\n });\n\n /** Measured before a change of what is drawn, played after it lands. */\n private flipFrom: Map<string, MeasuredTile> | null = null;\n private settleFrom: { key: string; box: MeasuredTile } | null = null;\n private focusAfter: string | null = null;\n private snapshot: DashboardLayout | null = null;\n private returnFocus: Element | null = null;\n private wasEditing = false;\n private resizeTeardown: (() => void) | null = null;\n private dragTeardown: (() => void) | null = null;\n private dragKeys = '';\n\n constructor() {\n const onKeyDown = (event: KeyboardEvent) => this.onHandleKeyDown(event);\n afterNextRender(() => {\n this.host.nativeElement.addEventListener('keydown', onKeyDown, true);\n if (typeof ResizeObserver === 'undefined') return;\n const root = this.host.nativeElement;\n const observer = new ResizeObserver(() => this.drawnClass.set(classOf(root)));\n observer.observe(root);\n this.drawnClass.set(classOf(root));\n this.destroyRef.onDestroy(() => observer.disconnect());\n });\n this.destroyRef.onDestroy(() => {\n this.host.nativeElement.removeEventListener('keydown', onKeyDown, true);\n this.resizeTeardown?.();\n this.dragTeardown?.();\n });\n\n afterEveryRender(() => {\n this.syncEditing();\n this.syncDrag();\n this.settle();\n });\n }\n\n /* ── Reading ──────────────────────────────────────────────────────── */\n\n protected titleId(key: string) {\n return `${this.base}-${key}-title`;\n }\n\n protected titleOf(key: string) {\n return this.byKey().get(key)?.title() ?? key;\n }\n\n protected levelOf(widget: SlDashboardWidget): DashboardHeadingLevel {\n return widget.headingLevel() ?? this.headingLevel() ?? this.defaults.headingLevel;\n }\n\n protected reasonOf(event: MenuSelectEvent): DashboardLayoutReason {\n return event.reason === 'keyboard' ? 'keyboard' : 'pointer';\n }\n\n private sizeClass(): DashboardSizeClass {\n return classOf(this.host.nativeElement);\n }\n\n private widgetNodes() {\n const nodes = new Map<string, HTMLElement>();\n for (const node of this.list()?.nativeElement.querySelectorAll<HTMLElement>(\n ':scope > [data-part=\"widget\"]',\n ) ?? []) {\n const key = node.dataset['key'];\n if (key !== undefined) nodes.set(key, node);\n }\n return nodes;\n }\n\n private placeholderNode() {\n return (\n this.list()?.nativeElement.querySelector<HTMLElement>(':scope > [data-part=\"placeholder\"]') ??\n null\n );\n }\n\n private handleOf(key: string) {\n return (\n this.widgetNodes().get(key)?.querySelector<HTMLElement>(':scope > [data-handle]') ?? null\n );\n }\n\n private cardOf(key: string) {\n return (\n this.widgetNodes().get(key)?.querySelector<HTMLElement>(':scope > [data-ui=\"card\"]') ?? null\n );\n }\n\n /** The widgets that glide, and the placeholder; not the one in hand. */\n private flipNodes() {\n const nodes = this.widgetNodes();\n const key = this.gesture()?.key;\n if (key !== undefined) nodes.delete(key);\n const placeholder = this.placeholderNode();\n if (placeholder !== null) nodes.set(PLACEHOLDER, placeholder);\n return nodes;\n }\n\n private measureAll() {\n this.flipFrom = measureTiles(this.flipNodes());\n }\n\n private setGesture(next: Gesture | null) {\n this.measureAll();\n this.gesture.set(next);\n }\n\n /* ── Requests ─────────────────────────────────────────────────────── */\n\n private announce(message: string) {\n if (message !== '') getLiveAnnouncer(this.host.nativeElement.ownerDocument).announce(message);\n }\n\n private full(layout: DashboardLayout) {\n return materializeLayout(layout, this.specs(), this.grid());\n }\n\n private change(\n next: DashboardLayout,\n reason: DashboardLayoutReason,\n change: DashboardLayoutChange,\n source: unknown,\n message: (layout: DashboardLayout) => string,\n ): boolean {\n const full = this.full(next);\n const previous = this.full(this.currentLayout());\n if (layoutsEqual(full, previous)) return false;\n if (this.flipFrom === null) this.measureAll();\n const request = makeRequest(full, previous, reason, source, { change });\n this.layoutChangeRequest.emit(request as DashboardLayoutRequest);\n if (request.cancelled) {\n this.flipFrom = null;\n return false;\n }\n this.layout.set(full);\n this.announce(message(full));\n return true;\n }\n\n private requestEditing(next: boolean, reason: DashboardEditingReason, source: unknown) {\n const previous = this.isEditing();\n if (previous === next) return;\n const request = makeRequest(next, previous, reason, source, {});\n this.editingChangeRequest.emit(request as DashboardEditingRequest);\n if (request.cancelled) return;\n this.editing.set(next);\n }\n\n private movedMessage(key: string, drawnIn: DashboardSizeClass) {\n return (layout: DashboardLayout) => {\n const placed = resolveTiles(layout, this.specs(), this.grid()).filter((tile) => !tile.hidden);\n const index = placed.findIndex((tile) => tile.key === key);\n const tile = placed[index];\n if (tile === undefined) return '';\n return drawnIn === 'expanded'\n ? this.t('moved', {\n title: this.titleOf(key),\n row: tile.y + 1,\n column: tile.x + 1,\n })\n : this.t('movedInOrder', {\n title: this.titleOf(key),\n position: index + 1,\n total: placed.length,\n });\n };\n }\n\n private resizedMessage(key: string, drawnIn: DashboardSizeClass) {\n return (layout: DashboardLayout) => {\n const tile = resolveTiles(layout, this.specs(), this.grid()).find((each) => each.key === key);\n return tile === undefined\n ? ''\n : this.t('resized', {\n title: this.titleOf(key),\n columns: drawnIn === 'medium' ? tile.medium : tile.w,\n rows: tile.h,\n });\n };\n }\n\n protected move(\n key: string,\n direction: DashboardDirection,\n reason: DashboardLayoutReason,\n source?: unknown,\n ) {\n const drawnIn = this.sizeClass();\n const next = moveTileBy(\n this.currentLayout(),\n this.specs(),\n this.grid(),\n key,\n direction,\n drawnIn,\n );\n this.focusAfter = key;\n if (\n !this.change(next, reason, { kind: 'move', key }, source, this.movedMessage(key, drawnIn))\n ) {\n this.focusAfter = null;\n }\n }\n\n protected resize(\n key: string,\n columns: number,\n rows: number,\n reason: DashboardLayoutReason,\n source?: unknown,\n ) {\n const drawnIn = this.sizeClass();\n const next = resizeTileBy(\n this.currentLayout(),\n this.specs(),\n this.grid(),\n key,\n { columns, rows },\n drawnIn,\n );\n this.focusAfter = key;\n const message = this.resizedMessage(key, drawnIn);\n if (!this.change(next, reason, { kind: 'resize', key }, source, message)) {\n this.focusAfter = null;\n }\n }\n\n protected hide(key: string, reason: DashboardLayoutReason, source?: unknown) {\n const visible = this.visible();\n const at = visible.findIndex((tile) => tile.key === key);\n const tile = visible[at];\n if (tile === undefined || !tile.removable) return;\n this.focusAfter = (visible[at + 1] ?? visible[at - 1])?.key ?? ADD;\n const next = setTileHidden(this.currentLayout(), this.specs(), this.grid(), key, true);\n const done = this.change(next, reason, { kind: 'hide', key }, source, () =>\n this.t('hidden', { title: this.titleOf(key) }),\n );\n if (!done) this.focusAfter = null;\n }\n\n protected show(key: string, reason: DashboardLayoutReason, source?: unknown) {\n this.focusAfter = key;\n const next = setTileHidden(this.currentLayout(), this.specs(), this.grid(), key, false);\n this.change(next, reason, { kind: 'show', key }, source, () =>\n this.t('shown', { title: this.titleOf(key) }),\n );\n }\n\n protected reset(reason: DashboardLayoutReason, source?: unknown) {\n this.change(EMPTY_LAYOUT, reason, { kind: 'reset', key: null }, source, () =>\n this.t('resetDone'),\n );\n }\n\n /** Leaves editing, as Done does. */\n commitEditing(reason: DashboardEditingReason = 'programmatic', source?: unknown) {\n this.requestEditing(false, reason, source);\n }\n\n /** Asks for the layout editing began from, then leaves, as Cancel does. */\n cancelEditing(reason: DashboardEditingReason = 'programmatic', source?: unknown) {\n const back = this.snapshot;\n if (back !== null) {\n this.change(back, 'dismiss', { kind: 'cancel', key: null }, source, () =>\n this.t('cancelled'),\n );\n }\n this.requestEditing(false, reason, source);\n }\n\n /** Focuses a widget's handle while editing, or the widget's first control. */\n focusWidget(key: string) {\n const target =\n (this.isEditing() ? this.handleOf(key) : null) ??\n this.widgetNodes()\n .get(key)\n ?.querySelector<HTMLElement>(\n 'a[href], button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n );\n target?.focus();\n }\n\n /* ── Keyboard ─────────────────────────────────────────────────────── */\n\n /**\n * Taken in the capture phase, before the handle's menu trigger reads\n * ArrowDown and ArrowUp: `Alt` and `Shift` with an arrow belong to the\n * layout, and the trigger does not look at modifiers.\n */\n private onHandleKeyDown(event: KeyboardEvent) {\n const handle = (event.target as HTMLElement | null)?.closest<HTMLElement>('[data-handle]');\n const key = handle?.getAttribute('data-handle');\n if (!handle || !key || !this.isEditing()) return;\n const intent = dashboardKeyIntent(event, directionOf(handle));\n if (intent === null) return;\n const tile = this.visible().find((each) => each.key === key);\n if (tile === undefined) return;\n event.preventDefault();\n event.stopPropagation();\n if (intent.kind === 'move' && tile.movable) this.move(key, intent.direction, 'keyboard', event);\n if (intent.kind === 'resize' && tile.resizable) {\n this.resize(key, intent.columns, intent.rows, 'keyboard', event);\n }\n if (intent.kind === 'hide') this.hide(key, 'remove', event);\n }\n\n /* ── Pointer: resize ──────────────────────────────────────────────── */\n\n protected onResizePointerDown(key: string, edge: DashboardEdge, event: PointerEvent) {\n if (event.button !== 0 || this.resizeTeardown !== null) return;\n const tile = this.visible().find((each) => each.key === key);\n const list = this.list()?.nativeElement;\n const element = this.widgetNodes().get(key);\n if (tile === undefined || !tile.resizable || list === undefined || element === undefined) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const drawnIn = this.sizeClass();\n if (drawnIn === 'compact') return;\n const handle = event.currentTarget as HTMLElement;\n const rtl = directionOf(list) === 'rtl';\n const tracks = tracksOf(list, this.grid()[drawnIn]);\n const origin = originOf(element, list, rtl);\n const start = { x: event.clientX, y: event.clientY };\n const span = drawnIn === 'medium' ? tile.medium : tile.w;\n const pullsStart = edge === 'start' || edge === 'bottom-start';\n const pullsEnd = edge === 'end' || edge === 'bottom-end';\n const pullsBottom = edge !== 'start' && edge !== 'end';\n let snapped: DashboardBox = { x: tile.x, y: tile.y, w: span, h: tile.h };\n let preview: DashboardLayout = this.full(this.currentLayout());\n\n writeOrigin(element, origin);\n this.setGesture({ kind: 'resize', key, edge, preview, sizeClass: drawnIn });\n\n const onMove = (moved: PointerEvent) => {\n const dx = moved.clientX - start.x;\n const dy = moved.clientY - start.y;\n /* Travel toward the inline end, whichever way the document reads. */\n const along = rtl ? -dx : dx;\n const floor = tracks.track;\n const inlineSize = pullsEnd\n ? Math.max(floor, origin.inlineSize + along)\n : pullsStart\n ? Math.max(floor, origin.inlineSize - along)\n : origin.inlineSize;\n const blockSize = pullsBottom\n ? Math.max(tracks.row, origin.blockSize + dy)\n : origin.blockSize;\n element.style.setProperty('inline-size', `${inlineSize}px`);\n element.style.setProperty('block-size', `${blockSize}px`);\n /* Pulled by its start, the widget keeps its end still: the element is\n anchored at its start, so it moves by what it grew. */\n const shift = pullsStart ? origin.inlineSize - inlineSize : 0;\n element.style.setProperty('translate', `${rtl ? -shift : shift}px 0px`);\n\n const w = spanFromTravel({\n span,\n track: tracks.track,\n gap: tracks.columnGap,\n travel: inlineSize - origin.inlineSize,\n });\n const h = pullsBottom\n ? spanFromTravel({\n span: tile.h,\n track: tracks.row,\n gap: tracks.rowGap,\n travel: blockSize - origin.blockSize,\n })\n : tile.h;\n const x = pullsStart ? tile.x + tile.w - w : tile.x;\n if (w === snapped.w && h === snapped.h && x === snapped.x) return;\n snapped = { x, y: tile.y, w, h };\n preview = resizeTileInClass(\n this.currentLayout(),\n this.specs(),\n this.grid(),\n key,\n snapped,\n drawnIn,\n );\n this.setGesture({ kind: 'resize', key, edge, preview, sizeClass: drawnIn });\n };\n\n const finish = (commit: boolean, source?: Event) => {\n this.resizeTeardown?.();\n this.settleFrom = { key, box: boxOf(element) };\n clearLift(element);\n this.setGesture(null);\n if (!commit) return;\n this.change(\n preview,\n 'pointer',\n { kind: 'resize', key },\n source,\n this.resizedMessage(key, drawnIn),\n );\n };\n const onUp = (up: PointerEvent) => finish(true, up);\n const onCancel = () => finish(false);\n const onKey = (down: KeyboardEvent) => {\n if (down.key !== 'Escape') return;\n down.preventDefault();\n down.stopPropagation();\n finish(false);\n };\n const document = handle.ownerDocument;\n handle.setPointerCapture?.(event.pointerId);\n handle.addEventListener('pointermove', onMove);\n handle.addEventListener('pointerup', onUp);\n handle.addEventListener('pointercancel', onCancel);\n document.addEventListener('keydown', onKey, true);\n this.resizeTeardown = () => {\n this.resizeTeardown = null;\n handle.removeEventListener('pointermove', onMove);\n handle.removeEventListener('pointerup', onUp);\n handle.removeEventListener('pointercancel', onCancel);\n document.removeEventListener('keydown', onKey, true);\n if (handle.hasPointerCapture?.(event.pointerId)) {\n handle.releasePointerCapture(event.pointerId);\n }\n };\n }\n\n /* ── Pointer: move ────────────────────────────────────────────────── */\n\n /**\n * One drag controller while editing, rebuilt when the set of widgets that\n * can be picked up changes, and never while one is carried. A widget is\n * picked up by its card, by a mouse or a pen — a finger on a card scrolls\n * the page — and by its handle, by anything.\n */\n private syncDrag() {\n const list = this.list()?.nativeElement;\n const keys = this.isEditing()\n ? this.visible()\n .filter((tile) => tile.movable)\n .map((tile) => tile.key)\n .sort()\n .join('\\n')\n : '';\n if (keys === this.dragKeys && (keys === '' || this.dragTeardown !== null)) return;\n if (this.gesture()?.kind === 'move') return;\n this.dragTeardown?.();\n this.dragTeardown = null;\n this.dragKeys = keys;\n if (keys === '' || list === undefined) return;\n\n const root = this.host.nativeElement;\n const document = root.ownerDocument;\n\n /** Where the press landed, and where in the widget. */\n let press: { x: number; y: number; grabX: number; grabY: number } | null = null;\n let target: string | null = null;\n let drawnIn: DashboardSizeClass = 'expanded';\n let rtl = false;\n let tracks: Tracks | null = null;\n\n const onPress = (event: PointerEvent) => {\n const element = (event.target as Element | null)?.closest<HTMLElement>(\n '[data-part=\"widget\"]',\n );\n if (!element || element.parentElement !== list) return;\n const box = element.getBoundingClientRect();\n press = {\n x: event.clientX,\n y: event.clientY,\n grabX: event.clientX - box.left,\n grabY: event.clientY - box.top,\n };\n };\n list.addEventListener('pointerdown', onPress, true);\n\n /** The preview a target stands for. */\n const previewOf = (key: string, at: string): DashboardLayout => {\n if (at.startsWith('swap:')) {\n return swapTiles(this.currentLayout(), this.specs(), this.grid(), key, at.slice(5));\n }\n const [x, y] = at.split(',').map(Number);\n return moveTile(this.currentLayout(), this.specs(), this.grid(), key, {\n x: x ?? 0,\n y: y ?? 0,\n });\n };\n\n const controller = createDragController({\n document,\n restoreFocus: false,\n preview: false,\n autoScroll: { axis: 'y' },\n t: this.dragT,\n /* The move says what happened once, in the family's own words. */\n silent: ['pickedUp', 'moved', 'dropped', 'cancelled'],\n /**\n * In the expanded class the target is a cell: the one the card's leading\n * corner is nearest, so a widget lands where it is drawn under the\n * pointer. In the classes that flow the target is the widget under the\n * pointer, which the carried one exchanges places with.\n */\n resolveTarget: (point) => {\n const carried = controller.state.items[0];\n if (carried === undefined || press === null || tracks === null) return null;\n const frame = list.getBoundingClientRect();\n if (drawnIn === 'expanded') {\n const left = point.x - press.grabX;\n const top = point.y - press.grabY;\n const tile = this.visible().find((each) => each.key === carried);\n const width = tile ? tile.w * tracks.track + (tile.w - 1) * tracks.columnGap : 0;\n const lead = rtl ? left + width - tracks.track / 2 : left + tracks.track / 2;\n const cell = cellAt(\n { x: lead, y: top + tracks.row / 2 },\n { left: frame.left, top: frame.top, width: frame.width },\n { columns: tracks.columns, row: tracks.row, gap: tracks.columnGap },\n rtl ? 'rtl' : 'ltr',\n );\n target = `${cell.x},${cell.y}`;\n } else {\n for (const [key, element] of this.widgetNodes()) {\n if (key === carried) continue;\n const rect = element.getBoundingClientRect();\n if (\n point.x >= rect.left &&\n point.x <= rect.right &&\n point.y >= rect.top &&\n point.y <= rect.bottom\n ) {\n target = `swap:${key}`;\n break;\n }\n }\n }\n return target === null\n ? null\n : ({ kind: 'on', container: GRID, key: target } satisfies DropTarget);\n },\n onTargetChange: ({ state }) => {\n const key = state.items[0];\n if (key === undefined || state.target?.kind !== 'on') return;\n this.setGesture({ kind: 'move', key, preview: previewOf(key, state.target.key) });\n },\n onDrop: ({ items, target: dropped, reason, event }) => {\n const key = items[0];\n if (key === undefined || dropped.kind !== 'on') return;\n this.focusAfter = null;\n this.change(\n previewOf(key, dropped.key),\n reason === 'keyboard' ? 'keyboard' : 'pointer',\n { kind: 'move', key },\n event,\n this.movedMessage(key, drawnIn),\n );\n },\n });\n\n const unregister = controller.registerContainer({\n key: GRID,\n items: () => this.visible().map((tile) => tile.key),\n orientation: 'grid',\n targets: ['on'],\n element: () => list,\n itemElement: (key) => this.widgetNodes().get(key) ?? null,\n label: () => this.t('editBar'),\n itemLabel: (key) => this.titleOf(key),\n });\n\n /* The click the browser fires after a pointer drag belongs to the drag,\n not to the handle it started on, which would open the handle's menu. */\n let swallow = false;\n let dragging: string | null = null;\n const onClick = (event: Event) => {\n if (!swallow) return;\n swallow = false;\n event.preventDefault();\n event.stopPropagation();\n };\n root.addEventListener('click', onClick, true);\n\n const unsubscribe = controller.subscribe((state) => {\n if (state.status !== 'dragging') {\n if (dragging !== null) {\n const element = this.widgetNodes().get(dragging);\n if (element) this.settleFrom = { key: dragging, box: boxOf(element) };\n clearLift(element);\n swallow = state.reason === 'pointer' || state.reason === null;\n setTimeout(() => (swallow = false), 0);\n dragging = null;\n target = null;\n if (this.gesture()?.kind === 'move') this.setGesture(null);\n }\n return;\n }\n const key = state.items[0];\n if (key === undefined || press === null) return;\n const element = this.widgetNodes().get(key);\n if (element === undefined) return;\n if (dragging === null) {\n dragging = key;\n drawnIn = classOf(root);\n rtl = directionOf(list) === 'rtl';\n tracks = tracksOf(list, this.grid()[drawnIn]);\n writeOrigin(element, originOf(element, list, rtl));\n this.setGesture({ kind: 'move', key, preview: this.full(this.currentLayout()) });\n }\n if (state.point !== null) {\n element.style.setProperty(\n 'translate',\n `${state.point.x - press.x}px ${state.point.y - press.y}px`,\n );\n }\n });\n\n const detachments: (() => void)[] = [];\n const nodes = this.widgetNodes();\n for (const tile of this.visible()) {\n if (!tile.movable) continue;\n const element = nodes.get(tile.key);\n if (element === undefined) continue;\n const card = this.cardOf(tile.key);\n const handle = this.handleOf(tile.key);\n if (card !== null) {\n detachments.push(\n controller.attachDraggable(element, {\n container: GRID,\n key: tile.key,\n handle: () => card,\n canDrag: (event) => event.pointerType !== 'touch',\n }),\n );\n }\n if (handle !== null) {\n detachments.push(\n controller.attachDraggable(element, {\n container: GRID,\n key: tile.key,\n handle: () => handle,\n delay: { touch: 0 },\n }),\n );\n }\n }\n\n this.dragTeardown = () => {\n for (const detach of detachments) detach();\n list.removeEventListener('pointerdown', onPress, true);\n root.removeEventListener('click', onClick, true);\n unsubscribe();\n unregister();\n controller.destroy();\n };\n }\n\n /* ── After a render ───────────────────────────────────────────────── */\n\n private syncEditing() {\n const editing = this.isEditing();\n const document = this.host.nativeElement.ownerDocument;\n if (editing && !this.wasEditing) {\n this.snapshot = this.full(this.currentLayout());\n this.returnFocus = document.activeElement;\n }\n if (!editing && this.wasEditing) {\n const active = document.activeElement;\n const lost = active === null || active === document.body || !active.isConnected;\n const back = this.returnFocus;\n if (lost && back instanceof HTMLElement && back.isConnected) back.focus();\n this.snapshot = null;\n this.returnFocus = null;\n }\n this.wasEditing = editing;\n }\n\n private timing() {\n const styles = getComputedStyle(this.host.nativeElement);\n return {\n duration: parseDuration(styles.getPropertyValue('--slotted-duration-medium')),\n easing: styles.getPropertyValue('--slotted-easing-standard').trim() || 'ease',\n };\n }\n\n private settle() {\n const root = this.host.nativeElement;\n const before = this.flipFrom;\n if (before !== null) {\n this.flipFrom = null;\n playFlip(this.flipNodes(), before, this.timing());\n }\n const settling = this.settleFrom;\n if (settling !== null && this.gesture() === null) {\n this.settleFrom = null;\n const element = this.widgetNodes().get(settling.key);\n if (element) playResize(element, settling.box, this.timing());\n }\n const key = this.focusAfter;\n if (key === null) return;\n this.focusAfter = null;\n const target =\n key === ADD\n ? root.querySelector<HTMLElement>('[data-dashboard-add]')\n : this.isEditing()\n ? this.handleOf(key)\n : null;\n if (target && target !== root.ownerDocument.activeElement) target.focus();\n }\n}\n","import { effect, signal, untracked, type Injector, type WritableSignal } from '@angular/core';\nimport {\n parseDashboardLayout,\n serializeDashboardLayout,\n type DashboardLayout,\n} from '@slotted/core/dashboard-grid';\n\nexport interface DashboardLayoutStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\nexport interface PersistedDashboardLayoutOptions {\n /** The key the layout is stored under. */\n readonly key: string;\n /** Default `localStorage`, when the platform has it. */\n readonly storage?: DashboardLayoutStorage | null | undefined;\n /** What the grid shows when nothing is stored. Default: every widget at its defaults. */\n readonly defaultLayout?: DashboardLayout | undefined;\n /** Needed outside an injection context, as `effect` is. */\n readonly injector?: Injector | undefined;\n}\n\nexport interface PersistedDashboardLayout {\n /** Bind with `[(layout)]`: it is read once from the store and written after every change. */\n readonly layout: WritableSignal<DashboardLayout>;\n /** Forgets what is stored and returns to the default. */\n clear(): void;\n}\n\n/** What the store holds under the key; a store that throws holds nothing. */\nfunction readStored(store: DashboardLayoutStorage | null, key: string): string | null {\n try {\n return store?.getItem(key) ?? null;\n } catch {\n return null;\n }\n}\n\nfunction defaultStorage(): DashboardLayoutStorage | null {\n try {\n return typeof window === 'undefined' ? null : window.localStorage;\n } catch {\n return null;\n }\n}\n\n/**\n * The reader's layout, kept across visits. The store is reached inside `try`\n * both ways — a private window, a full quota or a blocked origin reads as\n * nothing stored and writes nothing. The component itself never writes; the\n * store and its key are the application's to name.\n */\nexport function persistedDashboardLayout({\n key,\n storage,\n defaultLayout = [],\n injector,\n}: PersistedDashboardLayoutOptions): PersistedDashboardLayout {\n const store = storage === undefined ? defaultStorage() : storage;\n const text = readStored(store, key);\n const layout = signal<DashboardLayout>(\n (text === null ? null : parseDashboardLayout(text)) ?? defaultLayout,\n );\n /* What the store already holds: the value just read is not written back,\n so a reader who never changed anything stores nothing. An effect's first\n run is deferred, so this compares values rather than counting runs. */\n let held: DashboardLayout = layout();\n effect(\n () => {\n const next = layout();\n untracked(() => {\n if (next === held) return;\n held = next;\n try {\n store?.setItem(key, serializeDashboardLayout(next));\n } catch {\n /* Nothing stored: the next visit starts from the default. */\n }\n });\n },\n injector === undefined ? {} : { injector },\n );\n return {\n layout,\n clear() {\n try {\n store?.removeItem(key);\n } catch {\n /* Nothing to forget. */\n }\n held = defaultLayout;\n layout.set(defaultLayout);\n },\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slotted-angular-dashboard-grid.mjs","sources":["../../dashboard-grid/src/dashboard-grid-defaults.ts","../../dashboard-grid/src/dashboard-widget.ts","../../dashboard-grid/src/dashboard-grid.ts","../../dashboard-grid/src/persisted-dashboard-layout.ts","../../dashboard-grid/src/slotted-angular-dashboard-grid.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\nimport type {\n DashboardColumnsInput,\n DashboardLayout,\n DashboardLayoutChange,\n} from '@slotted/core/dashboard-grid';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\n\nexport type {\n DashboardColumnsInput,\n DashboardLayout,\n DashboardLayoutChange,\n DashboardLayoutItem,\n} from '@slotted/core/dashboard-grid';\n\nexport type DashboardHeadingLevel = 2 | 3 | 4 | 5 | 6;\n\nexport type DashboardLayoutReason = Extract<\n ChangeReason,\n 'pointer' | 'keyboard' | 'remove' | 'dismiss' | 'programmatic'\n>;\n\nexport type DashboardEditingReason = Extract<\n ChangeReason,\n 'pointer' | 'keyboard' | 'submit' | 'dismiss' | 'programmatic'\n>;\n\n/** The request for a new layout: the layout, why, and what the gesture was. */\nexport interface DashboardLayoutRequest extends ChangeRequest<DashboardLayout> {\n readonly reason: DashboardLayoutReason;\n readonly change: DashboardLayoutChange;\n}\n\nexport interface DashboardEditingRequest extends ChangeRequest<boolean> {\n readonly reason: DashboardEditingReason;\n}\n\nexport type DashboardWidgetStatus = 'ready' | 'empty' | 'error';\n\nexport interface DashboardGridDefaults {\n columns: DashboardColumnsInput;\n editBar: boolean;\n headingLevel: DashboardHeadingLevel;\n}\n\nconst FALLBACK: DashboardGridDefaults = {\n columns: 12,\n editBar: true,\n headingLevel: 3,\n};\n\nexport const DASHBOARD_GRID_DEFAULTS = new InjectionToken<DashboardGridDefaults>(\n 'slotted dashboard-grid defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once how many columns its dashboards have, whether\n * the family draws the edit bar and the level of a widget's title. A grid that\n * states any of it itself still wins. Its words come from the language in force\n * (`provideSlotted`).\n */\nexport function provideDashboardGridDefaults(defaults: Partial<DashboardGridDefaults>) {\n return {\n provide: DASHBOARD_GRID_DEFAULTS,\n useFactory: (): DashboardGridDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectDashboardGridDefaults(): DashboardGridDefaults {\n return inject(DASHBOARD_GRID_DEFAULTS);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SlDashboardGridIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-dashboard-grid-${this.count}`;\n }\n}\n","import { writeSelectorKey } from '@slotted/core/selector-key';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { CardFill, CardSize } from '@slotted/angular/card';\nimport { injectSkeletonDefaults } from '@slotted/angular/skeleton';\nimport type { DashboardWidgetSpec } from '@slotted/core/dashboard-grid';\nimport { initialLoadingVisibility, nextLoadingVisibility } from '@slotted/core/loading';\n\nimport type { DashboardHeadingLevel, DashboardWidgetStatus } from './dashboard-grid-defaults';\n\nconst optionalNumber = (given: number | string | undefined) =>\n given === undefined ? undefined : numberAttribute(given);\nconst optionalBoolean = (given: boolean | string | undefined) =>\n given === undefined ? undefined : booleanAttribute(given);\n\n/** Controls in the header's corner, before the detail action: `<button slDashboardWidgetActions>`. */\n@Directive({ selector: '[slDashboardWidgetActions]', standalone: true })\nexport class SlDashboardWidgetActions {}\n\n/** The skeleton of the body's own anatomy, shown while the widget loads. */\n@Directive({ selector: '[slDashboardWidgetSkeleton]', standalone: true })\nexport class SlDashboardWidgetSkeleton {}\n\n/** The action under the empty message: the one that creates the first entry. */\n@Directive({ selector: '[slDashboardWidgetEmptyAction]', standalone: true })\nexport class SlDashboardWidgetEmptyAction {}\n\n/** Content under the body. */\n@Directive({ selector: '[slDashboardWidgetFooter]', standalone: true })\nexport class SlDashboardWidgetFooter {}\n\n/**\n * Writes this family's part name on a control of another family. `slButton`\n * and `slIconButton` write `data-part=\"root\"` as a static host attribute, and\n * `slMenuTriggerFor` binds the attribute to `null` on a lone trigger; both\n * erase the part the template wrote, so it is written back after the first\n * render. The erasing expressions are constants, so nothing writes over it\n * again.\n */\n@Directive({ selector: '[slDashboardPart]', standalone: true })\nexport class SlDashboardPart {\n readonly part = input.required<string>({ alias: 'slDashboardPart' });\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n afterNextRender(() => writeSelectorKey(this.host.nativeElement, 'part', this.part()));\n }\n}\n\n/**\n * One widget, declared. It draws nothing where it is written: its content is\n * kept in templates the grid renders inside its own `li` and card, in the\n * order the layout says — the way `mat-tab` hands its content to the tab\n * group. `value` is the widget's key in the layout.\n */\n@Component({\n selector: 'sl-dashboard-widget',\n standalone: true,\n exportAs: 'slDashboardWidget',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: none' },\n template: `\n <ng-template #body><ng-content /></ng-template>\n <ng-template #actions><ng-content select=\"[slDashboardWidgetActions]\" /></ng-template>\n <ng-template #skeleton><ng-content select=\"[slDashboardWidgetSkeleton]\" /></ng-template>\n <ng-template #emptyAction><ng-content select=\"[slDashboardWidgetEmptyAction]\" /></ng-template>\n <ng-template #footer><ng-content select=\"[slDashboardWidgetFooter]\" /></ng-template>\n `,\n})\nexport class SlDashboardWidget {\n readonly value = input.required<string>();\n /** The widget's name: its heading, its accessible name and its entry in Add widget. */\n readonly title = input.required<string>();\n readonly description = input<string | undefined>(undefined);\n readonly headingLevel = input<DashboardHeadingLevel | undefined>(undefined);\n\n readonly defaultColumns = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly defaultRows = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly minColumns = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly maxColumns = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly minRows = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly maxRows = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumber,\n });\n readonly movable = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly resizable = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly removable = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n\n /** The first answer has not arrived: the body shows a skeleton. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** A refresh of data already shown: the content stays and the region is busy. */\n readonly busy = input(false, { transform: booleanAttribute });\n readonly status = input<DashboardWidgetStatus>('ready');\n readonly emptyTitle = input<string | undefined>(undefined);\n readonly emptyDescription = input<string | undefined>(undefined);\n readonly errorTitle = input<string | undefined>(undefined);\n readonly errorDescription = input<string | undefined>(undefined);\n /** Draws Try again under the error message; `retry` fires when it is pressed. */\n readonly retryable = input(false, { transform: booleanAttribute });\n /** The widget's own page. */\n readonly detailHref = input<string | undefined>(undefined);\n /** Draws the detail action as a button; `detail` fires when it is pressed. */\n readonly detailable = input(false, { transform: booleanAttribute });\n readonly fill = input<CardFill | undefined>(undefined);\n readonly size = input<CardSize | undefined>(undefined);\n\n readonly retry = output<MouseEvent>();\n readonly detail = output<MouseEvent>();\n\n readonly bodyTemplate = viewChild.required<TemplateRef<unknown>>('body');\n readonly actionsTemplate = viewChild.required<TemplateRef<unknown>>('actions');\n readonly skeletonTemplate = viewChild.required<TemplateRef<unknown>>('skeleton');\n readonly emptyActionTemplate = viewChild.required<TemplateRef<unknown>>('emptyAction');\n readonly footerTemplate = viewChild.required<TemplateRef<unknown>>('footer');\n\n readonly hasActions = contentChild(SlDashboardWidgetActions);\n readonly hasSkeleton = contentChild(SlDashboardWidgetSkeleton);\n readonly hasEmptyAction = contentChild(SlDashboardWidgetEmptyAction);\n readonly hasFooter = contentChild(SlDashboardWidgetFooter);\n\n /** Whether the skeleton is on screen: `loading` held back by the skeleton family's timing. */\n readonly painted = signal(false);\n\n private readonly skeletonDefaults = injectSkeletonDefaults();\n private visibility = initialLoadingVisibility;\n private timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n effect(() => {\n const loading = this.loading();\n untracked(() => this.tick(loading));\n });\n inject(DestroyRef).onDestroy(() => clearTimeout(this.timer));\n }\n\n /** What the grid's layout arithmetic reads. */\n spec(): DashboardWidgetSpec {\n const given = {\n defaultColumns: this.defaultColumns(),\n defaultRows: this.defaultRows(),\n minColumns: this.minColumns(),\n maxColumns: this.maxColumns(),\n minRows: this.minRows(),\n maxRows: this.maxRows(),\n movable: this.movable(),\n resizable: this.resizable(),\n removable: this.removable(),\n };\n return {\n key: this.value(),\n ...Object.fromEntries(Object.entries(given).filter(([, value]) => value !== undefined)),\n };\n }\n\n private tick(loading: boolean): void {\n const answer = nextLoadingVisibility({\n delay: this.skeletonDefaults.delay ?? 0,\n loading,\n minDuration: this.skeletonDefaults.minDuration ?? 0,\n now: Date.now(),\n state: this.visibility,\n });\n this.visibility = answer.state;\n this.painted.set(answer.state.visible);\n clearTimeout(this.timer);\n if (answer.wait !== null) {\n this.timer = setTimeout(() => this.tick(this.loading()), answer.wait);\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterEveryRender,\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SlButton, SlButtonStart, SlIconButton } from '@slotted/angular/button';\nimport {\n SlCard,\n SlCardActions,\n SlCardBody,\n SlCardFooter,\n SlCardHeader,\n} from '@slotted/angular/card';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n SlMenu,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n type MenuSelectEvent,\n} from '@slotted/angular/menu';\nimport {\n SlResultState,\n SlResultStateActions,\n SlResultStateContent,\n SlResultStateDescription,\n SlResultStateTitle,\n} from '@slotted/angular/result-state';\nimport { SlSkeleton } from '@slotted/angular/skeleton';\nimport {\n cellAt,\n dashboardKeyIntent,\n handleShortcuts,\n layoutsEqual,\n materializeLayout,\n measureTiles,\n moveTile,\n moveTileBy,\n parseDuration,\n playFlip,\n playResize,\n resizeTileBy,\n resizeTileInClass,\n resolveColumns,\n resolveTiles,\n setTileHidden,\n sizeClassOf,\n spanFromTravel,\n swapTiles,\n tileStyle,\n type DashboardBox,\n type DashboardColumnsInput,\n type DashboardDirection,\n type DashboardLayout,\n type DashboardLayoutChange,\n type DashboardSizeClass,\n type DashboardTile,\n type MeasuredTile,\n} from '@slotted/core/dashboard-grid';\nimport { createDragController, type DropTarget } from '@slotted/core/drag';\nimport {\n dashboardGridMessages,\n dragMessages,\n type DashboardGridMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport type { ChangeReason } from '@slotted/core/state';\n\nimport {\n injectDashboardGridDefaults,\n SlDashboardGridIdFactory,\n type DashboardEditingReason,\n type DashboardEditingRequest,\n type DashboardHeadingLevel,\n type DashboardLayoutReason,\n type DashboardLayoutRequest,\n} from './dashboard-grid-defaults';\nimport { SlDashboardPart, SlDashboardWidget } from './dashboard-widget';\n\nconst EMPTY_LAYOUT: DashboardLayout = [];\nconst GRID = 'dashboard-grid';\nconst ADD = `${GRID}:add`;\nconst PLACEHOLDER = '\\u0000placeholder';\n\n/** An edge a widget is pulled by. The top is not one: gravity decides it. */\ntype DashboardEdge = 'start' | 'end' | 'bottom' | 'bottom-start' | 'bottom-end';\n\nconst EDGES: readonly DashboardEdge[] = ['start', 'end', 'bottom', 'bottom-start', 'bottom-end'];\n\n/** A click with no coordinates is a key. */\nfunction pressReason(event: MouseEvent): 'pointer' | 'keyboard' {\n return event.detail === 0 ? 'keyboard' : 'pointer';\n}\n\nfunction directionOf(element: Element): 'ltr' | 'rtl' {\n return getComputedStyle(element).direction === 'rtl' ? 'rtl' : 'ltr';\n}\n\n/** A grid not laid out yet — hidden, or in a test — is drawn in its stored class. */\nfunction classOf(root: HTMLElement): DashboardSizeClass {\n return root.clientWidth > 0 ? sizeClassOf(root.clientWidth) : 'expanded';\n}\n\nfunction makeRequest<T, Extra extends object>(\n value: T,\n previous: T,\n reason: ChangeReason,\n source: unknown,\n extra: Extra,\n) {\n let cancelled = false;\n return {\n value,\n previous,\n reason,\n source,\n ...extra,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n };\n}\n\n/** The tracks the grid is drawn with in the class it is in, read from its style. */\ninterface Tracks {\n readonly columns: number;\n readonly track: number;\n readonly columnGap: number;\n readonly row: number;\n readonly rowGap: number;\n}\n\nfunction tracksOf(list: HTMLElement, columns: number): Tracks {\n const styles = getComputedStyle(list);\n const columnGap = parseFloat(styles.columnGap) || 0;\n const rowGap = parseFloat(styles.rowGap) || 0;\n const track = (list.clientWidth - columnGap * (columns - 1)) / Math.max(1, columns);\n return { columns, track, columnGap, row: parseFloat(styles.gridAutoRows) || 0, rowGap };\n}\n\n/** Where a widget was picked up, relative to the grid, in logical terms. */\ninterface Origin {\n readonly inlineStart: number;\n readonly blockStart: number;\n readonly inlineSize: number;\n readonly blockSize: number;\n}\n\nfunction originOf(element: HTMLElement, list: HTMLElement, rtl: boolean): Origin {\n const box = element.getBoundingClientRect();\n const frame = list.getBoundingClientRect();\n return {\n inlineStart: rtl ? frame.right - box.right : box.left - frame.left,\n blockStart: box.top - frame.top,\n inlineSize: box.width,\n blockSize: box.height,\n };\n}\n\n/* The widget in hand is placed and moved by its own geometry, never by a\n custom property: one restyles everything under the widget, and it is\n written every frame. */\nconst LIFT = ['inset-inline-start', 'inset-block-start', 'inline-size', 'block-size', 'translate'];\n\nfunction writeOrigin(element: HTMLElement, origin: Origin) {\n element.style.setProperty('inset-inline-start', `${origin.inlineStart}px`);\n element.style.setProperty('inset-block-start', `${origin.blockStart}px`);\n element.style.setProperty('inline-size', `${origin.inlineSize}px`);\n element.style.setProperty('block-size', `${origin.blockSize}px`);\n}\n\nfunction clearLift(element: HTMLElement | undefined) {\n if (element === undefined) return;\n for (const name of LIFT) element.style.removeProperty(name);\n}\n\nfunction boxOf(element: HTMLElement): MeasuredTile {\n const { left, top, width, height } = element.getBoundingClientRect();\n return { left, top, width, height };\n}\n\n/** What a gesture has reached, as the grid draws it. */\ntype Gesture =\n | { readonly kind: 'move'; readonly key: string; readonly preview: DashboardLayout }\n | {\n readonly kind: 'resize';\n readonly key: string;\n readonly edge: DashboardEdge;\n readonly preview: DashboardLayout;\n readonly sizeClass: DashboardSizeClass;\n };\n\n/** What the template draws for one widget. */\ninterface Slot {\n readonly widget: SlDashboardWidget;\n readonly tile: DashboardTile;\n readonly style: Record<string, string>;\n readonly dragging: boolean;\n readonly resizing: boolean;\n /** The edge a pointer is pulling, while it pulls. */\n readonly edge: DashboardEdge | null;\n /** The size the pull has reached, already filled. */\n readonly readout: string | null;\n /** Whether the widget has a size to change in the class it is drawn in. */\n readonly sizable: boolean;\n readonly handle: boolean;\n readonly can: {\n readonly up: boolean;\n readonly down: boolean;\n readonly left: boolean;\n readonly right: boolean;\n readonly wider: boolean;\n readonly narrower: boolean;\n readonly taller: boolean;\n readonly shorter: boolean;\n };\n}\n\n/**\n * A surface of widgets the reader places and sizes. The widgets are\n * `sl-dashboard-widget` children, each with its own `value`; the grid draws\n * them where the layout puts them, by row and then column, which is the\n * reading order, the focus order and the picture at every width.\n *\n * The host is the root. `aria-label` and `aria-labelledby` written on it name\n * the list inside, which is what a reader meets.\n */\n@Component({\n selector: '[slDashboardGrid]',\n standalone: true,\n exportAs: 'slDashboardGrid',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: [\n '../../../styles/src/dashboard-grid/dashboard-grid.css',\n '../../../styles/src/visually-hidden/visually-hidden.css',\n ],\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlButtonStart,\n SlCard,\n SlCardActions,\n SlCardBody,\n SlCardFooter,\n SlCardHeader,\n SlDashboardPart,\n SlGlyph,\n SlIcon,\n SlIconButton,\n SlMenu,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n SlResultState,\n SlResultStateActions,\n SlResultStateContent,\n SlResultStateDescription,\n SlResultStateTitle,\n SlSkeleton,\n ],\n host: {\n 'data-ui': 'dashboard-grid',\n 'data-ui-dashboard-grid': '',\n 'data-part': 'root',\n 'data-part-root': '',\n '[attr.data-editing]': 'isEditing() ? \"\" : null',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[style.--_dg-columns-expanded]': 'grid().expanded',\n '[style.--_dg-columns-medium]': 'grid().medium',\n '[style.--_dg-columns-compact]': 'grid().compact',\n },\n template: `\n @if (isEditing() && resolvedEditBar()) {\n <div data-part=\"edit-bar\" data-part-edit-bar=\"\" role=\"group\" [attr.aria-label]=\"t('editBar')\">\n <p data-part=\"edit-status\" data-part-edit-status=\"\" [id]=\"statusId\">\n {{ t('editStatus') }}\n </p>\n <div data-part=\"edit-actions\" data-part-edit-actions=\"\">\n @if (hiddenTiles().length > 0) {\n <button\n slButton\n slDashboardPart=\"add\"\n data-dashboard-add\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n [slMenuTriggerFor]=\"addMenu\"\n >\n <span slButtonStart\n ><span slIcon><svg slGlyph name=\"plus\"></svg></span></span\n >{{ t('add') }}\n </button>\n <sl-menu #addMenu>\n @for (tile of hiddenTiles(); track tile.key) {\n <button slMenuItem (select)=\"show(tile.key, reasonOf($event), $event.source)\">\n {{ titleOf(tile.key) }}\n </button>\n }\n </sl-menu>\n }\n <button\n slButton\n slDashboardPart=\"reset\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n (click)=\"reset(pressReason($event), $event)\"\n >\n {{ t('reset') }}\n </button>\n <button\n slButton\n slDashboardPart=\"cancel\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n (click)=\"cancelEditing(pressReason($event), $event)\"\n >\n {{ t('cancel') }}\n </button>\n <button\n slButton\n slDashboardPart=\"done\"\n size=\"sm\"\n tone=\"accent\"\n variant=\"solid\"\n (click)=\"commitEditing('submit', $event)\"\n >\n {{ t('done') }}\n </button>\n </div>\n </div>\n }\n @if (isEditing() && !resolvedEditBar()) {\n <p\n data-part=\"edit-status\"\n data-part-edit-status=\"\"\n data-ui=\"visually-hidden\"\n data-ui-visually-hidden=\"\"\n [id]=\"statusId\"\n >\n {{ t('editStatus') }}\n </p>\n }\n <ul\n #list\n data-part=\"grid\"\n data-part-grid=\"\"\n [attr.data-gesture]=\"gesture() === null ? null : ''\"\n role=\"list\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() ?? null\"\n [hidden]=\"slots().length === 0\"\n >\n @for (slot of slots(); track slot.tile.key) {\n <li\n data-part=\"widget\"\n data-part-widget=\"\"\n [attr.data-key]=\"slot.tile.key\"\n [attr.data-status]=\"slot.widget.status()\"\n [attr.data-loading]=\"slot.widget.painted() ? '' : null\"\n [attr.data-movable]=\"slot.tile.movable ? '' : null\"\n [attr.data-resizable]=\"slot.tile.resizable ? '' : null\"\n [attr.data-dragging]=\"slot.dragging ? '' : null\"\n [attr.data-resizing]=\"slot.resizing ? '' : null\"\n [style]=\"slot.style\"\n >\n <article\n slCard\n [fill]=\"slot.widget.fill()\"\n [size]=\"slot.widget.size()\"\n [attr.aria-labelledby]=\"titleId(slot.tile.key)\"\n [attr.aria-describedby]=\"\n slot.widget.description() === undefined\n ? null\n : titleId(slot.tile.key) + '-description'\n \"\n [attr.aria-busy]=\"slot.widget.painted() || slot.widget.busy() ? true : null\"\n >\n <div slCardHeader>\n @switch (levelOf(slot.widget)) {\n @case (2) {\n <h2 data-part=\"title\" data-part-title=\"\" [id]=\"titleId(slot.tile.key)\">\n {{ slot.widget.title() }}\n </h2>\n }\n @case (4) {\n <h4 data-part=\"title\" data-part-title=\"\" [id]=\"titleId(slot.tile.key)\">\n {{ slot.widget.title() }}\n </h4>\n }\n @case (5) {\n <h5 data-part=\"title\" data-part-title=\"\" [id]=\"titleId(slot.tile.key)\">\n {{ slot.widget.title() }}\n </h5>\n }\n @case (6) {\n <h6 data-part=\"title\" data-part-title=\"\" [id]=\"titleId(slot.tile.key)\">\n {{ slot.widget.title() }}\n </h6>\n }\n @default {\n <h3 data-part=\"title\" data-part-title=\"\" [id]=\"titleId(slot.tile.key)\">\n {{ slot.widget.title() }}\n </h3>\n }\n }\n @if (slot.widget.description(); as description) {\n <p\n data-part=\"description\"\n data-part-description=\"\"\n [id]=\"titleId(slot.tile.key) + '-description'\"\n >\n {{ description }}\n </p>\n }\n @if (\n slot.widget.hasActions() ||\n slot.widget.detailHref() !== undefined ||\n slot.widget.detailable()\n ) {\n <div slCardActions>\n <ng-container [ngTemplateOutlet]=\"slot.widget.actionsTemplate()\" />\n @if (slot.widget.detailHref(); as href) {\n <a\n data-ui=\"button\"\n data-ui-button=\"\"\n data-part=\"detail\"\n data-part-detail=\"\"\n data-tone=\"secondary\"\n data-variant=\"ghost\"\n data-size=\"sm\"\n data-shape=\"square\"\n [attr.href]=\"href\"\n [attr.aria-label]=\"t('detail', { title: slot.widget.title() })\"\n (click)=\"slot.widget.detail.emit($event)\"\n ><span data-part=\"icon\" data-part-icon=\"\" aria-hidden=\"true\"\n ><span slIcon directional><svg slGlyph name=\"external\"></svg></span></span\n ></a>\n } @else if (slot.widget.detailable()) {\n <button\n slIconButton\n slDashboardPart=\"detail\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n [attr.aria-label]=\"t('detail', { title: slot.widget.title() })\"\n (click)=\"slot.widget.detail.emit($event)\"\n >\n <span slIcon directional><svg slGlyph name=\"external\"></svg></span>\n </button>\n }\n </div>\n }\n </div>\n <div slCardBody>\n @if (slot.widget.busy() && !slot.widget.painted()) {\n <span\n data-part=\"busy-indicator\"\n data-part-busy-indicator=\"\"\n aria-hidden=\"true\"\n ></span>\n }\n @if (slot.widget.painted()) {\n <div data-part=\"skeleton\" data-part-skeleton=\"\">\n @if (slot.widget.hasSkeleton()) {\n <ng-container [ngTemplateOutlet]=\"slot.widget.skeletonTemplate()\" />\n } @else {\n <span slSkeleton shape=\"block\"></span>\n }\n </div>\n } @else if (slot.widget.status() === 'empty') {\n <div data-part=\"message\" data-part-message=\"\">\n <section slResultState status=\"empty\" reach=\"section\" align=\"center\" live=\"off\">\n <div slResultStateContent>\n <div slResultStateTitle>\n {{ slot.widget.emptyTitle() ?? t('emptyTitle') }}\n </div>\n @if (slot.widget.emptyDescription(); as description) {\n <p slResultStateDescription>{{ description }}</p>\n }\n </div>\n @if (slot.widget.hasEmptyAction()) {\n <div slResultStateActions>\n <ng-container [ngTemplateOutlet]=\"slot.widget.emptyActionTemplate()\" />\n </div>\n }\n </section>\n </div>\n } @else if (slot.widget.status() === 'error') {\n <div data-part=\"message\" data-part-message=\"\">\n <section\n slResultState\n status=\"error\"\n reach=\"section\"\n align=\"center\"\n live=\"polite\"\n >\n <div slResultStateContent>\n <div slResultStateTitle>\n {{ slot.widget.errorTitle() ?? t('errorTitle') }}\n </div>\n @if (slot.widget.errorDescription(); as description) {\n <p slResultStateDescription>{{ description }}</p>\n }\n </div>\n @if (slot.widget.retryable()) {\n <div slResultStateActions>\n <button\n slButton\n slDashboardPart=\"retry\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n (click)=\"slot.widget.retry.emit($event)\"\n >\n <span slButtonStart\n ><span slIcon><svg slGlyph name=\"rotate-ccw\"></svg></span></span\n >{{ t('retry') }}\n </button>\n </div>\n }\n </section>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"slot.widget.bodyTemplate()\" />\n }\n </div>\n @if (slot.widget.hasFooter()) {\n <div slCardFooter>\n <ng-container [ngTemplateOutlet]=\"slot.widget.footerTemplate()\" />\n </div>\n }\n </article>\n @if (slot.handle) {\n <button\n slDashboardPart=\"handle\"\n [attr.data-handle]=\"slot.tile.key\"\n [attr.aria-label]=\"t('handle', { title: slot.widget.title() })\"\n [attr.aria-describedby]=\"statusId\"\n [attr.aria-keyshortcuts]=\"shortcuts(slot.tile.removable)\"\n [slMenuTriggerFor]=\"handleMenu\"\n >\n <span slIcon><svg slGlyph name=\"grip-horizontal\"></svg></span>\n </button>\n <sl-menu #handleMenu>\n @if (slot.tile.movable) {\n <button\n slMenuItem\n shortcut=\"Alt+ArrowUp\"\n [disabled]=\"!slot.can.up\"\n (select)=\"move(slot.tile.key, 'up', reasonOf($event), $event.source)\"\n >\n {{ t('moveUp') }}\n </button>\n <button\n slMenuItem\n shortcut=\"Alt+ArrowDown\"\n [disabled]=\"!slot.can.down\"\n (select)=\"move(slot.tile.key, 'down', reasonOf($event), $event.source)\"\n >\n {{ t('moveDown') }}\n </button>\n @if (!flows()) {\n <button\n slMenuItem\n shortcut=\"Alt+ArrowLeft\"\n [disabled]=\"!slot.can.left\"\n (select)=\"move(slot.tile.key, 'left', reasonOf($event), $event.source)\"\n >\n {{ t('moveStart') }}\n </button>\n <button\n slMenuItem\n shortcut=\"Alt+ArrowRight\"\n [disabled]=\"!slot.can.right\"\n (select)=\"move(slot.tile.key, 'right', reasonOf($event), $event.source)\"\n >\n {{ t('moveEnd') }}\n </button>\n }\n }\n @if (slot.tile.movable && slot.sizable) {\n <hr slMenuSeparator />\n }\n @if (slot.sizable) {\n <button\n slMenuItem\n shortcut=\"Shift+ArrowRight\"\n [disabled]=\"!slot.can.wider\"\n (select)=\"resize(slot.tile.key, 1, 0, reasonOf($event), $event.source)\"\n >\n {{ t('wider') }}\n </button>\n <button\n slMenuItem\n shortcut=\"Shift+ArrowLeft\"\n [disabled]=\"!slot.can.narrower\"\n (select)=\"resize(slot.tile.key, -1, 0, reasonOf($event), $event.source)\"\n >\n {{ t('narrower') }}\n </button>\n <button\n slMenuItem\n shortcut=\"Shift+ArrowDown\"\n [disabled]=\"!slot.can.taller\"\n (select)=\"resize(slot.tile.key, 0, 1, reasonOf($event), $event.source)\"\n >\n {{ t('taller') }}\n </button>\n <button\n slMenuItem\n shortcut=\"Shift+ArrowUp\"\n [disabled]=\"!slot.can.shorter\"\n (select)=\"resize(slot.tile.key, 0, -1, reasonOf($event), $event.source)\"\n >\n {{ t('shorter') }}\n </button>\n }\n @if (slot.tile.removable) {\n @if (slot.tile.movable || slot.sizable) {\n <hr slMenuSeparator />\n }\n <button\n slMenuItem\n tone=\"danger\"\n shortcut=\"Delete\"\n (select)=\"hide(slot.tile.key, 'remove', $event.source)\"\n >\n {{ t('hide') }}\n </button>\n }\n </sl-menu>\n }\n @if (isEditing() && slot.sizable) {\n @for (edge of edges; track edge) {\n <span\n data-part=\"resize-handle\"\n data-part-resize-handle=\"\"\n aria-hidden=\"true\"\n [attr.data-edge]=\"edge\"\n [attr.data-active]=\"slot.edge === edge ? '' : null\"\n (pointerdown)=\"onResizePointerDown(slot.tile.key, edge, $event)\"\n ></span>\n }\n }\n @if (slot.readout !== null) {\n <span\n data-part=\"size-readout\"\n data-part-size-readout=\"\"\n aria-hidden=\"true\"\n [attr.data-edge]=\"slot.edge\"\n >{{ slot.readout }}</span\n >\n }\n </li>\n }\n @if (placeholder(); as style) {\n <li\n data-part=\"placeholder\"\n data-part-placeholder=\"\"\n aria-hidden=\"true\"\n [style]=\"style\"\n ></li>\n }\n </ul>\n @if (slots().length === 0) {\n <div data-part=\"empty\" data-part-empty=\"\">\n <section slResultState status=\"empty\" reach=\"section\" live=\"polite\">\n <div slResultStateContent>\n <div slResultStateTitle>{{ t('empty') }}</div>\n @if (isEditing()) {\n <p slResultStateDescription>{{ t('emptyEditing') }}</p>\n }\n </div>\n </section>\n </div>\n }\n `,\n})\nexport class SlDashboardGrid {\n /**\n * Where each widget stands and how big it is: `[{ key, x, y, w, h, hidden? }]`\n * in cells of the expanded class. Bound at all, it is the value; unbound,\n * the grid keeps its own.\n */\n readonly layout = model<DashboardLayout | undefined>(undefined);\n /** The layout an unbound grid starts from. Default: every widget at its defaults. */\n readonly defaultLayout = input<DashboardLayout | undefined>(undefined);\n readonly editing = model<boolean | undefined>(undefined);\n readonly defaultEditing = input(false, { transform: booleanAttribute });\n /** Columns of the expanded class, or one count per class. Default 12, 6, 1. */\n readonly columns = input<DashboardColumnsInput | undefined>(undefined);\n readonly editBar = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (given) => (given === undefined ? undefined : booleanAttribute(given)),\n });\n readonly headingLevel = input<DashboardHeadingLevel | undefined>(undefined);\n /** Words laid over the catalog of the language in force, key by key. */\n readonly messages = input<PartialMessages<DashboardGridMessages> | undefined>(undefined);\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n readonly ariaLabelledBy = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n readonly layoutChangeRequest = output<DashboardLayoutRequest>();\n readonly editingChangeRequest = output<DashboardEditingRequest>();\n\n /* ── State ────────────────────────────────────────────────────────── */\n\n private readonly defaults = injectDashboardGridDefaults();\n private readonly base = inject(SlDashboardGridIdFactory).next();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly list = viewChild<ElementRef<HTMLUListElement>>('list');\n protected readonly widgets = contentChildren(SlDashboardWidget);\n\n protected readonly statusId = `${this.base}-edit-status`;\n protected readonly edges = EDGES;\n protected readonly pressReason = pressReason;\n protected readonly shortcuts = handleShortcuts;\n\n /** The family's words in the language in force, with this grid's `messages` laid over them. */\n protected readonly t = injectMessages(dashboardGridMessages, this.messages);\n /** What a drag of a widget says when no position is left, in the language in force. */\n private readonly dragT = injectMessages(dragMessages);\n protected readonly grid = computed(() => resolveColumns(this.columns() ?? this.defaults.columns));\n protected readonly resolvedEditBar = computed(() => this.editBar() ?? this.defaults.editBar);\n\n readonly currentLayout = computed(() => this.layout() ?? this.defaultLayout() ?? EMPTY_LAYOUT);\n readonly isEditing = computed(() => this.editing() ?? this.defaultEditing());\n\n private readonly specs = computed(() => this.widgets().map((widget) => widget.spec()));\n private readonly byKey = computed(\n () => new Map(this.widgets().map((widget) => [widget.value(), widget])),\n );\n private readonly tiles = computed(() =>\n resolveTiles(this.currentLayout(), this.specs(), this.grid()),\n );\n private readonly visible = computed(() => this.tiles().filter((tile) => !tile.hidden));\n protected readonly hiddenTiles = computed(() => this.tiles().filter((tile) => tile.hidden));\n\n protected readonly gesture = signal<Gesture | null>(null);\n /* The class the grid is drawn in, observed after the first render, so a\n server render and the first client render agree on `expanded`. */\n private readonly drawnClass = signal<DashboardSizeClass>('expanded');\n protected readonly flows = computed(() => this.drawnClass() !== 'expanded');\n\n /** What is drawn: the committed layout, or the one a gesture previews. */\n private readonly drawn = computed(() => {\n const gesture = this.gesture();\n return gesture === null\n ? this.tiles()\n : resolveTiles(gesture.preview, this.specs(), this.grid());\n });\n private readonly drawnVisible = computed(() => this.drawn().filter((tile) => !tile.hidden));\n\n protected readonly slots = computed<Slot[]>(() => {\n const gesture = this.gesture();\n const drawn = this.drawn();\n const order = new Map(this.drawnVisible().map((tile, index) => [tile.key, index]));\n const widgets = this.byKey();\n const editing = this.isEditing();\n const drawnClass = this.drawnClass();\n const layout = this.currentLayout();\n const specs = this.specs();\n const grid = this.grid();\n const committed = materializeLayout(layout, specs, grid);\n const differs = (next: DashboardLayout) =>\n !layoutsEqual(materializeLayout(next, specs, grid), committed);\n const slots: Slot[] = [];\n for (const tile of this.visible()) {\n const widget = widgets.get(tile.key);\n if (widget === undefined) continue;\n const shown = drawn.find((each) => each.key === tile.key) ?? tile;\n const inHand = gesture !== null && gesture.key === tile.key;\n const resizing = inHand && gesture.kind === 'resize';\n const sizable = tile.resizable && drawnClass !== 'compact';\n const at = (direction: DashboardDirection) =>\n editing && differs(moveTileBy(layout, specs, grid, tile.key, direction, drawnClass));\n const by = (columns: number, rows: number) =>\n editing &&\n differs(resizeTileBy(layout, specs, grid, tile.key, { columns, rows }, drawnClass));\n const style = tileStyle(shown);\n if (gesture !== null) style['order'] = String(order.get(tile.key) ?? 0);\n slots.push({\n widget,\n tile: shown,\n style,\n dragging: inHand && gesture.kind === 'move',\n resizing,\n edge: resizing ? gesture.edge : null,\n readout: resizing\n ? this.t('size', {\n columns: gesture.sizeClass === 'medium' ? shown.medium : shown.w,\n rows: shown.h,\n })\n : null,\n sizable,\n handle: editing && (tile.movable || sizable || tile.removable),\n can: {\n up: at('up'),\n down: at('down'),\n left: at('left'),\n right: at('right'),\n wider: by(1, 0),\n narrower: by(-1, 0),\n taller: by(0, 1),\n shorter: by(0, -1),\n },\n });\n }\n return slots;\n });\n\n /** The cells the widget in hand will land in, while a gesture lasts. */\n protected readonly placeholder = computed<Record<string, string> | null>(() => {\n const gesture = this.gesture();\n if (gesture === null) return null;\n const visible = this.drawnVisible();\n const index = visible.findIndex((tile) => tile.key === gesture.key);\n const tile = visible[index];\n return tile === undefined ? null : { ...tileStyle(tile), order: String(index) };\n });\n\n /** Measured before a change of what is drawn, played after it lands. */\n private flipFrom: Map<string, MeasuredTile> | null = null;\n private settleFrom: { key: string; box: MeasuredTile } | null = null;\n private focusAfter: string | null = null;\n private snapshot: DashboardLayout | null = null;\n private returnFocus: Element | null = null;\n private wasEditing = false;\n private resizeTeardown: (() => void) | null = null;\n private dragTeardown: (() => void) | null = null;\n private dragKeys = '';\n\n constructor() {\n const onKeyDown = (event: KeyboardEvent) => this.onHandleKeyDown(event);\n afterNextRender(() => {\n this.host.nativeElement.addEventListener('keydown', onKeyDown, true);\n if (typeof ResizeObserver === 'undefined') return;\n const root = this.host.nativeElement;\n const observer = new ResizeObserver(() => this.drawnClass.set(classOf(root)));\n observer.observe(root);\n this.drawnClass.set(classOf(root));\n this.destroyRef.onDestroy(() => observer.disconnect());\n });\n this.destroyRef.onDestroy(() => {\n this.host.nativeElement.removeEventListener('keydown', onKeyDown, true);\n this.resizeTeardown?.();\n this.dragTeardown?.();\n });\n\n afterEveryRender(() => {\n this.syncEditing();\n this.syncDrag();\n this.settle();\n });\n }\n\n /* ── Reading ──────────────────────────────────────────────────────── */\n\n protected titleId(key: string) {\n return `${this.base}-${key}-title`;\n }\n\n protected titleOf(key: string) {\n return this.byKey().get(key)?.title() ?? key;\n }\n\n protected levelOf(widget: SlDashboardWidget): DashboardHeadingLevel {\n return widget.headingLevel() ?? this.headingLevel() ?? this.defaults.headingLevel;\n }\n\n protected reasonOf(event: MenuSelectEvent): DashboardLayoutReason {\n return event.reason === 'keyboard' ? 'keyboard' : 'pointer';\n }\n\n private sizeClass(): DashboardSizeClass {\n return classOf(this.host.nativeElement);\n }\n\n private widgetNodes() {\n const nodes = new Map<string, HTMLElement>();\n for (const node of this.list()?.nativeElement.querySelectorAll<HTMLElement>(\n ':scope > [data-part=\"widget\"]',\n ) ?? []) {\n const key = node.dataset['key'];\n if (key !== undefined) nodes.set(key, node);\n }\n return nodes;\n }\n\n private placeholderNode() {\n return (\n this.list()?.nativeElement.querySelector<HTMLElement>(':scope > [data-part=\"placeholder\"]') ??\n null\n );\n }\n\n private handleOf(key: string) {\n return (\n this.widgetNodes().get(key)?.querySelector<HTMLElement>(':scope > [data-handle]') ?? null\n );\n }\n\n private cardOf(key: string) {\n return (\n this.widgetNodes().get(key)?.querySelector<HTMLElement>(':scope > [data-ui=\"card\"]') ?? null\n );\n }\n\n /** The widgets that glide, and the placeholder; not the one in hand. */\n private flipNodes() {\n const nodes = this.widgetNodes();\n const key = this.gesture()?.key;\n if (key !== undefined) nodes.delete(key);\n const placeholder = this.placeholderNode();\n if (placeholder !== null) nodes.set(PLACEHOLDER, placeholder);\n return nodes;\n }\n\n private measureAll() {\n this.flipFrom = measureTiles(this.flipNodes());\n }\n\n private setGesture(next: Gesture | null) {\n this.measureAll();\n this.gesture.set(next);\n }\n\n /* ── Requests ─────────────────────────────────────────────────────── */\n\n private announce(message: string) {\n if (message !== '') getLiveAnnouncer(this.host.nativeElement.ownerDocument).announce(message);\n }\n\n private full(layout: DashboardLayout) {\n return materializeLayout(layout, this.specs(), this.grid());\n }\n\n private change(\n next: DashboardLayout,\n reason: DashboardLayoutReason,\n change: DashboardLayoutChange,\n source: unknown,\n message: (layout: DashboardLayout) => string,\n ): boolean {\n const full = this.full(next);\n const previous = this.full(this.currentLayout());\n if (layoutsEqual(full, previous)) return false;\n if (this.flipFrom === null) this.measureAll();\n const request = makeRequest(full, previous, reason, source, { change });\n this.layoutChangeRequest.emit(request as DashboardLayoutRequest);\n if (request.cancelled) {\n this.flipFrom = null;\n return false;\n }\n this.layout.set(full);\n this.announce(message(full));\n return true;\n }\n\n private requestEditing(next: boolean, reason: DashboardEditingReason, source: unknown) {\n const previous = this.isEditing();\n if (previous === next) return;\n const request = makeRequest(next, previous, reason, source, {});\n this.editingChangeRequest.emit(request as DashboardEditingRequest);\n if (request.cancelled) return;\n this.editing.set(next);\n }\n\n private movedMessage(key: string, drawnIn: DashboardSizeClass) {\n return (layout: DashboardLayout) => {\n const placed = resolveTiles(layout, this.specs(), this.grid()).filter((tile) => !tile.hidden);\n const index = placed.findIndex((tile) => tile.key === key);\n const tile = placed[index];\n if (tile === undefined) return '';\n return drawnIn === 'expanded'\n ? this.t('moved', {\n title: this.titleOf(key),\n row: tile.y + 1,\n column: tile.x + 1,\n })\n : this.t('movedInOrder', {\n title: this.titleOf(key),\n position: index + 1,\n total: placed.length,\n });\n };\n }\n\n private resizedMessage(key: string, drawnIn: DashboardSizeClass) {\n return (layout: DashboardLayout) => {\n const tile = resolveTiles(layout, this.specs(), this.grid()).find((each) => each.key === key);\n return tile === undefined\n ? ''\n : this.t('resized', {\n title: this.titleOf(key),\n columns: drawnIn === 'medium' ? tile.medium : tile.w,\n rows: tile.h,\n });\n };\n }\n\n protected move(\n key: string,\n direction: DashboardDirection,\n reason: DashboardLayoutReason,\n source?: unknown,\n ) {\n const drawnIn = this.sizeClass();\n const next = moveTileBy(\n this.currentLayout(),\n this.specs(),\n this.grid(),\n key,\n direction,\n drawnIn,\n );\n this.focusAfter = key;\n if (\n !this.change(next, reason, { kind: 'move', key }, source, this.movedMessage(key, drawnIn))\n ) {\n this.focusAfter = null;\n }\n }\n\n protected resize(\n key: string,\n columns: number,\n rows: number,\n reason: DashboardLayoutReason,\n source?: unknown,\n ) {\n const drawnIn = this.sizeClass();\n const next = resizeTileBy(\n this.currentLayout(),\n this.specs(),\n this.grid(),\n key,\n { columns, rows },\n drawnIn,\n );\n this.focusAfter = key;\n const message = this.resizedMessage(key, drawnIn);\n if (!this.change(next, reason, { kind: 'resize', key }, source, message)) {\n this.focusAfter = null;\n }\n }\n\n protected hide(key: string, reason: DashboardLayoutReason, source?: unknown) {\n const visible = this.visible();\n const at = visible.findIndex((tile) => tile.key === key);\n const tile = visible[at];\n if (tile === undefined || !tile.removable) return;\n this.focusAfter = (visible[at + 1] ?? visible[at - 1])?.key ?? ADD;\n const next = setTileHidden(this.currentLayout(), this.specs(), this.grid(), key, true);\n const done = this.change(next, reason, { kind: 'hide', key }, source, () =>\n this.t('hidden', { title: this.titleOf(key) }),\n );\n if (!done) this.focusAfter = null;\n }\n\n protected show(key: string, reason: DashboardLayoutReason, source?: unknown) {\n this.focusAfter = key;\n const next = setTileHidden(this.currentLayout(), this.specs(), this.grid(), key, false);\n this.change(next, reason, { kind: 'show', key }, source, () =>\n this.t('shown', { title: this.titleOf(key) }),\n );\n }\n\n protected reset(reason: DashboardLayoutReason, source?: unknown) {\n this.change(EMPTY_LAYOUT, reason, { kind: 'reset', key: null }, source, () =>\n this.t('resetDone'),\n );\n }\n\n /** Leaves editing, as Done does. */\n commitEditing(reason: DashboardEditingReason = 'programmatic', source?: unknown) {\n this.requestEditing(false, reason, source);\n }\n\n /** Asks for the layout editing began from, then leaves, as Cancel does. */\n cancelEditing(reason: DashboardEditingReason = 'programmatic', source?: unknown) {\n const back = this.snapshot;\n if (back !== null) {\n this.change(back, 'dismiss', { kind: 'cancel', key: null }, source, () =>\n this.t('cancelled'),\n );\n }\n this.requestEditing(false, reason, source);\n }\n\n /** Focuses a widget's handle while editing, or the widget's first control. */\n focusWidget(key: string) {\n const target =\n (this.isEditing() ? this.handleOf(key) : null) ??\n this.widgetNodes()\n .get(key)\n ?.querySelector<HTMLElement>(\n 'a[href], button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n );\n target?.focus();\n }\n\n /* ── Keyboard ─────────────────────────────────────────────────────── */\n\n /**\n * Taken in the capture phase, before the handle's menu trigger reads\n * ArrowDown and ArrowUp: `Alt` and `Shift` with an arrow belong to the\n * layout, and the trigger does not look at modifiers.\n */\n private onHandleKeyDown(event: KeyboardEvent) {\n const handle = (event.target as HTMLElement | null)?.closest<HTMLElement>('[data-handle]');\n const key = handle?.getAttribute('data-handle');\n if (!handle || !key || !this.isEditing()) return;\n const intent = dashboardKeyIntent(event, directionOf(handle));\n if (intent === null) return;\n const tile = this.visible().find((each) => each.key === key);\n if (tile === undefined) return;\n event.preventDefault();\n event.stopPropagation();\n if (intent.kind === 'move' && tile.movable) this.move(key, intent.direction, 'keyboard', event);\n if (intent.kind === 'resize' && tile.resizable) {\n this.resize(key, intent.columns, intent.rows, 'keyboard', event);\n }\n if (intent.kind === 'hide') this.hide(key, 'remove', event);\n }\n\n /* ── Pointer: resize ──────────────────────────────────────────────── */\n\n protected onResizePointerDown(key: string, edge: DashboardEdge, event: PointerEvent) {\n if (event.button !== 0 || this.resizeTeardown !== null) return;\n const tile = this.visible().find((each) => each.key === key);\n const list = this.list()?.nativeElement;\n const element = this.widgetNodes().get(key);\n if (tile === undefined || !tile.resizable || list === undefined || element === undefined) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const drawnIn = this.sizeClass();\n if (drawnIn === 'compact') return;\n const handle = event.currentTarget as HTMLElement;\n const rtl = directionOf(list) === 'rtl';\n const tracks = tracksOf(list, this.grid()[drawnIn]);\n const origin = originOf(element, list, rtl);\n const start = { x: event.clientX, y: event.clientY };\n const span = drawnIn === 'medium' ? tile.medium : tile.w;\n const pullsStart = edge === 'start' || edge === 'bottom-start';\n const pullsEnd = edge === 'end' || edge === 'bottom-end';\n const pullsBottom = edge !== 'start' && edge !== 'end';\n let snapped: DashboardBox = { x: tile.x, y: tile.y, w: span, h: tile.h };\n let preview: DashboardLayout = this.full(this.currentLayout());\n\n writeOrigin(element, origin);\n this.setGesture({ kind: 'resize', key, edge, preview, sizeClass: drawnIn });\n\n const onMove = (moved: PointerEvent) => {\n const dx = moved.clientX - start.x;\n const dy = moved.clientY - start.y;\n /* Travel toward the inline end, whichever way the document reads. */\n const along = rtl ? -dx : dx;\n const floor = tracks.track;\n const inlineSize = pullsEnd\n ? Math.max(floor, origin.inlineSize + along)\n : pullsStart\n ? Math.max(floor, origin.inlineSize - along)\n : origin.inlineSize;\n const blockSize = pullsBottom\n ? Math.max(tracks.row, origin.blockSize + dy)\n : origin.blockSize;\n element.style.setProperty('inline-size', `${inlineSize}px`);\n element.style.setProperty('block-size', `${blockSize}px`);\n /* Pulled by its start, the widget keeps its end still: the element is\n anchored at its start, so it moves by what it grew. */\n const shift = pullsStart ? origin.inlineSize - inlineSize : 0;\n element.style.setProperty('translate', `${rtl ? -shift : shift}px 0px`);\n\n const w = spanFromTravel({\n span,\n track: tracks.track,\n gap: tracks.columnGap,\n travel: inlineSize - origin.inlineSize,\n });\n const h = pullsBottom\n ? spanFromTravel({\n span: tile.h,\n track: tracks.row,\n gap: tracks.rowGap,\n travel: blockSize - origin.blockSize,\n })\n : tile.h;\n const x = pullsStart ? tile.x + tile.w - w : tile.x;\n if (w === snapped.w && h === snapped.h && x === snapped.x) return;\n snapped = { x, y: tile.y, w, h };\n preview = resizeTileInClass(\n this.currentLayout(),\n this.specs(),\n this.grid(),\n key,\n snapped,\n drawnIn,\n );\n this.setGesture({ kind: 'resize', key, edge, preview, sizeClass: drawnIn });\n };\n\n const finish = (commit: boolean, source?: Event) => {\n this.resizeTeardown?.();\n this.settleFrom = { key, box: boxOf(element) };\n clearLift(element);\n this.setGesture(null);\n if (!commit) return;\n this.change(\n preview,\n 'pointer',\n { kind: 'resize', key },\n source,\n this.resizedMessage(key, drawnIn),\n );\n };\n const onUp = (up: PointerEvent) => finish(true, up);\n const onCancel = () => finish(false);\n const onKey = (down: KeyboardEvent) => {\n if (down.key !== 'Escape') return;\n down.preventDefault();\n down.stopPropagation();\n finish(false);\n };\n const document = handle.ownerDocument;\n handle.setPointerCapture?.(event.pointerId);\n handle.addEventListener('pointermove', onMove);\n handle.addEventListener('pointerup', onUp);\n handle.addEventListener('pointercancel', onCancel);\n document.addEventListener('keydown', onKey, true);\n this.resizeTeardown = () => {\n this.resizeTeardown = null;\n handle.removeEventListener('pointermove', onMove);\n handle.removeEventListener('pointerup', onUp);\n handle.removeEventListener('pointercancel', onCancel);\n document.removeEventListener('keydown', onKey, true);\n if (handle.hasPointerCapture?.(event.pointerId)) {\n handle.releasePointerCapture(event.pointerId);\n }\n };\n }\n\n /* ── Pointer: move ────────────────────────────────────────────────── */\n\n /**\n * One drag controller while editing, rebuilt when the set of widgets that\n * can be picked up changes, and never while one is carried. A widget is\n * picked up by its card, by a mouse or a pen — a finger on a card scrolls\n * the page — and by its handle, by anything.\n */\n private syncDrag() {\n const list = this.list()?.nativeElement;\n const keys = this.isEditing()\n ? this.visible()\n .filter((tile) => tile.movable)\n .map((tile) => tile.key)\n .sort()\n .join('\\n')\n : '';\n if (keys === this.dragKeys && (keys === '' || this.dragTeardown !== null)) return;\n if (this.gesture()?.kind === 'move') return;\n this.dragTeardown?.();\n this.dragTeardown = null;\n this.dragKeys = keys;\n if (keys === '' || list === undefined) return;\n\n const root = this.host.nativeElement;\n const document = root.ownerDocument;\n\n /** Where the press landed, and where in the widget. */\n let press: { x: number; y: number; grabX: number; grabY: number } | null = null;\n let target: string | null = null;\n let drawnIn: DashboardSizeClass = 'expanded';\n let rtl = false;\n let tracks: Tracks | null = null;\n\n const onPress = (event: PointerEvent) => {\n const element = (event.target as Element | null)?.closest<HTMLElement>(\n '[data-part=\"widget\"]',\n );\n if (!element || element.parentElement !== list) return;\n const box = element.getBoundingClientRect();\n press = {\n x: event.clientX,\n y: event.clientY,\n grabX: event.clientX - box.left,\n grabY: event.clientY - box.top,\n };\n };\n list.addEventListener('pointerdown', onPress, true);\n\n /** The preview a target stands for. */\n const previewOf = (key: string, at: string): DashboardLayout => {\n if (at.startsWith('swap:')) {\n return swapTiles(this.currentLayout(), this.specs(), this.grid(), key, at.slice(5));\n }\n const [x, y] = at.split(',').map(Number);\n return moveTile(this.currentLayout(), this.specs(), this.grid(), key, {\n x: x ?? 0,\n y: y ?? 0,\n });\n };\n\n const controller = createDragController({\n document,\n restoreFocus: false,\n preview: false,\n autoScroll: { axis: 'y' },\n t: this.dragT,\n /* The move says what happened once, in the family's own words. */\n silent: ['pickedUp', 'moved', 'dropped', 'cancelled'],\n /**\n * In the expanded class the target is a cell: the one the card's leading\n * corner is nearest, so a widget lands where it is drawn under the\n * pointer. In the classes that flow the target is the widget under the\n * pointer, which the carried one exchanges places with.\n */\n resolveTarget: (point) => {\n const carried = controller.state.items[0];\n if (carried === undefined || press === null || tracks === null) return null;\n const frame = list.getBoundingClientRect();\n if (drawnIn === 'expanded') {\n const left = point.x - press.grabX;\n const top = point.y - press.grabY;\n const tile = this.visible().find((each) => each.key === carried);\n const width = tile ? tile.w * tracks.track + (tile.w - 1) * tracks.columnGap : 0;\n const lead = rtl ? left + width - tracks.track / 2 : left + tracks.track / 2;\n const cell = cellAt(\n { x: lead, y: top + tracks.row / 2 },\n { left: frame.left, top: frame.top, width: frame.width },\n { columns: tracks.columns, row: tracks.row, gap: tracks.columnGap },\n rtl ? 'rtl' : 'ltr',\n );\n target = `${cell.x},${cell.y}`;\n } else {\n for (const [key, element] of this.widgetNodes()) {\n if (key === carried) continue;\n const rect = element.getBoundingClientRect();\n if (\n point.x >= rect.left &&\n point.x <= rect.right &&\n point.y >= rect.top &&\n point.y <= rect.bottom\n ) {\n target = `swap:${key}`;\n break;\n }\n }\n }\n return target === null\n ? null\n : ({ kind: 'on', container: GRID, key: target } satisfies DropTarget);\n },\n onTargetChange: ({ state }) => {\n const key = state.items[0];\n if (key === undefined || state.target?.kind !== 'on') return;\n this.setGesture({ kind: 'move', key, preview: previewOf(key, state.target.key) });\n },\n onDrop: ({ items, target: dropped, reason, event }) => {\n const key = items[0];\n if (key === undefined || dropped.kind !== 'on') return;\n this.focusAfter = null;\n this.change(\n previewOf(key, dropped.key),\n reason === 'keyboard' ? 'keyboard' : 'pointer',\n { kind: 'move', key },\n event,\n this.movedMessage(key, drawnIn),\n );\n },\n });\n\n const unregister = controller.registerContainer({\n key: GRID,\n items: () => this.visible().map((tile) => tile.key),\n orientation: 'grid',\n targets: ['on'],\n element: () => list,\n itemElement: (key) => this.widgetNodes().get(key) ?? null,\n label: () => this.t('editBar'),\n itemLabel: (key) => this.titleOf(key),\n });\n\n /* The click the browser fires after a pointer drag belongs to the drag,\n not to the handle it started on, which would open the handle's menu. */\n let swallow = false;\n let dragging: string | null = null;\n const onClick = (event: Event) => {\n if (!swallow) return;\n swallow = false;\n event.preventDefault();\n event.stopPropagation();\n };\n root.addEventListener('click', onClick, true);\n\n const unsubscribe = controller.subscribe((state) => {\n if (state.status !== 'dragging') {\n if (dragging !== null) {\n const element = this.widgetNodes().get(dragging);\n if (element) this.settleFrom = { key: dragging, box: boxOf(element) };\n clearLift(element);\n swallow = state.reason === 'pointer' || state.reason === null;\n setTimeout(() => (swallow = false), 0);\n dragging = null;\n target = null;\n if (this.gesture()?.kind === 'move') this.setGesture(null);\n }\n return;\n }\n const key = state.items[0];\n if (key === undefined || press === null) return;\n const element = this.widgetNodes().get(key);\n if (element === undefined) return;\n if (dragging === null) {\n dragging = key;\n drawnIn = classOf(root);\n rtl = directionOf(list) === 'rtl';\n tracks = tracksOf(list, this.grid()[drawnIn]);\n writeOrigin(element, originOf(element, list, rtl));\n this.setGesture({ kind: 'move', key, preview: this.full(this.currentLayout()) });\n }\n if (state.point !== null) {\n element.style.setProperty(\n 'translate',\n `${state.point.x - press.x}px ${state.point.y - press.y}px`,\n );\n }\n });\n\n const detachments: (() => void)[] = [];\n const nodes = this.widgetNodes();\n for (const tile of this.visible()) {\n if (!tile.movable) continue;\n const element = nodes.get(tile.key);\n if (element === undefined) continue;\n const card = this.cardOf(tile.key);\n const handle = this.handleOf(tile.key);\n if (card !== null) {\n detachments.push(\n controller.attachDraggable(element, {\n container: GRID,\n key: tile.key,\n handle: () => card,\n canDrag: (event) => event.pointerType !== 'touch',\n }),\n );\n }\n if (handle !== null) {\n detachments.push(\n controller.attachDraggable(element, {\n container: GRID,\n key: tile.key,\n handle: () => handle,\n delay: { touch: 0 },\n }),\n );\n }\n }\n\n this.dragTeardown = () => {\n for (const detach of detachments) detach();\n list.removeEventListener('pointerdown', onPress, true);\n root.removeEventListener('click', onClick, true);\n unsubscribe();\n unregister();\n controller.destroy();\n };\n }\n\n /* ── After a render ───────────────────────────────────────────────── */\n\n private syncEditing() {\n const editing = this.isEditing();\n const document = this.host.nativeElement.ownerDocument;\n if (editing && !this.wasEditing) {\n this.snapshot = this.full(this.currentLayout());\n this.returnFocus = document.activeElement;\n }\n if (!editing && this.wasEditing) {\n const active = document.activeElement;\n const lost = active === null || active === document.body || !active.isConnected;\n const back = this.returnFocus;\n if (lost && back instanceof HTMLElement && back.isConnected) back.focus();\n this.snapshot = null;\n this.returnFocus = null;\n }\n this.wasEditing = editing;\n }\n\n private timing() {\n const styles = getComputedStyle(this.host.nativeElement);\n return {\n duration: parseDuration(styles.getPropertyValue('--slotted-duration-medium')),\n easing: styles.getPropertyValue('--slotted-easing-standard').trim() || 'ease',\n };\n }\n\n private settle() {\n const root = this.host.nativeElement;\n const before = this.flipFrom;\n if (before !== null) {\n this.flipFrom = null;\n playFlip(this.flipNodes(), before, this.timing());\n }\n const settling = this.settleFrom;\n if (settling !== null && this.gesture() === null) {\n this.settleFrom = null;\n const element = this.widgetNodes().get(settling.key);\n if (element) playResize(element, settling.box, this.timing());\n }\n const key = this.focusAfter;\n if (key === null) return;\n this.focusAfter = null;\n const target =\n key === ADD\n ? root.querySelector<HTMLElement>('[data-dashboard-add]')\n : this.isEditing()\n ? this.handleOf(key)\n : null;\n if (target && target !== root.ownerDocument.activeElement) target.focus();\n }\n}\n","import { effect, signal, untracked, type Injector, type WritableSignal } from '@angular/core';\nimport {\n parseDashboardLayout,\n serializeDashboardLayout,\n type DashboardLayout,\n} from '@slotted/core/dashboard-grid';\n\nexport interface DashboardLayoutStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\nexport interface PersistedDashboardLayoutOptions {\n /** The key the layout is stored under. */\n readonly key: string;\n /** Default `localStorage`, when the platform has it. */\n readonly storage?: DashboardLayoutStorage | null | undefined;\n /** What the grid shows when nothing is stored. Default: every widget at its defaults. */\n readonly defaultLayout?: DashboardLayout | undefined;\n /** Needed outside an injection context, as `effect` is. */\n readonly injector?: Injector | undefined;\n}\n\nexport interface PersistedDashboardLayout {\n /** Bind with `[(layout)]`: it is read once from the store and written after every change. */\n readonly layout: WritableSignal<DashboardLayout>;\n /** Forgets what is stored and returns to the default. */\n clear(): void;\n}\n\n/** What the store holds under the key; a store that throws holds nothing. */\nfunction readStored(store: DashboardLayoutStorage | null, key: string): string | null {\n try {\n return store?.getItem(key) ?? null;\n } catch {\n return null;\n }\n}\n\nfunction defaultStorage(): DashboardLayoutStorage | null {\n try {\n return typeof window === 'undefined' ? null : window.localStorage;\n } catch {\n return null;\n }\n}\n\n/**\n * The reader's layout, kept across visits. The store is reached inside `try`\n * both ways — a private window, a full quota or a blocked origin reads as\n * nothing stored and writes nothing. The component itself never writes; the\n * store and its key are the application's to name.\n */\nexport function persistedDashboardLayout({\n key,\n storage,\n defaultLayout = [],\n injector,\n}: PersistedDashboardLayoutOptions): PersistedDashboardLayout {\n const store = storage === undefined ? defaultStorage() : storage;\n const text = readStored(store, key);\n const layout = signal<DashboardLayout>(\n (text === null ? null : parseDashboardLayout(text)) ?? defaultLayout,\n );\n /* What the store already holds: the value just read is not written back,\n so a reader who never changed anything stores nothing. An effect's first\n run is deferred, so this compares values rather than counting runs. */\n let held: DashboardLayout = layout();\n effect(\n () => {\n const next = layout();\n untracked(() => {\n if (next === held) return;\n held = next;\n try {\n store?.setItem(key, serializeDashboardLayout(next));\n } catch {\n /* Nothing stored: the next visit starts from the default. */\n }\n });\n },\n injector === undefined ? {} : { injector },\n );\n return {\n layout,\n clear() {\n try {\n store?.removeItem(key);\n } catch {\n /* Nothing to forget. */\n }\n held = defaultLayout;\n layout.set(defaultLayout);\n },\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}