@malva-ui/core 0.1.12 → 0.1.14

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 (1619) hide show
  1. package/AGENTS.md +4 -1
  2. package/LICENSE +21 -0
  3. package/README.md +69 -3
  4. package/docs/ai/avatar.md +2 -0
  5. package/docs/ai/breadcrumb.md +67 -7
  6. package/docs/ai/button.md +74 -19
  7. package/docs/ai/card.md +8 -6
  8. package/docs/ai/chat.md +59 -45
  9. package/docs/ai/checkbox.md +12 -0
  10. package/docs/ai/combobox.md +18 -2
  11. package/docs/ai/copy-to-clipboard.md +1 -1
  12. package/docs/ai/core.md +15 -0
  13. package/docs/ai/data-table.md +89 -54
  14. package/docs/ai/dialog.md +76 -67
  15. package/docs/ai/drawer.md +15 -12
  16. package/docs/ai/dropdown.md +24 -19
  17. package/docs/ai/empty-state.md +3 -3
  18. package/docs/ai/filter.md +24 -5
  19. package/docs/ai/form-utils.md +160 -5
  20. package/docs/ai/icon-toggle.md +160 -0
  21. package/docs/ai/input.md +30 -0
  22. package/docs/ai/layout.md +23 -0
  23. package/docs/ai/list.md +10 -6
  24. package/docs/ai/menu.md +75 -1
  25. package/docs/ai/page.md +220 -60
  26. package/docs/ai/radio.md +9 -0
  27. package/docs/ai/scrollbar.md +30 -8
  28. package/docs/ai/segmented.md +35 -35
  29. package/docs/ai/select.md +30 -5
  30. package/docs/ai/sidebar.md +45 -27
  31. package/docs/ai/switch.md +114 -19
  32. package/docs/ai/table.md +69 -0
  33. package/docs/ai/tabs.md +2 -1
  34. package/docs/ai/tile.md +311 -85
  35. package/docs/ai/timeline.md +63 -39
  36. package/docs/ai/tokenizer.md +21 -5
  37. package/docs/ai/tooltip.md +5 -5
  38. package/docs/ai/view-variant.md +75 -0
  39. package/fesm2022/malva-ui-core-accordion.mjs +167 -0
  40. package/fesm2022/malva-ui-core-accordion.mjs.map +1 -0
  41. package/fesm2022/malva-ui-core-action-bar.mjs +111 -0
  42. package/fesm2022/malva-ui-core-action-bar.mjs.map +1 -0
  43. package/fesm2022/malva-ui-core-alert.mjs +173 -0
  44. package/fesm2022/malva-ui-core-alert.mjs.map +1 -0
  45. package/fesm2022/malva-ui-core-autocomplete.mjs +775 -0
  46. package/fesm2022/malva-ui-core-autocomplete.mjs.map +1 -0
  47. package/fesm2022/malva-ui-core-avatar-group.mjs +224 -0
  48. package/fesm2022/malva-ui-core-avatar-group.mjs.map +1 -0
  49. package/fesm2022/malva-ui-core-avatar.mjs +247 -0
  50. package/fesm2022/malva-ui-core-avatar.mjs.map +1 -0
  51. package/fesm2022/malva-ui-core-badge.mjs +122 -0
  52. package/fesm2022/malva-ui-core-badge.mjs.map +1 -0
  53. package/fesm2022/malva-ui-core-bottom-nav.mjs +161 -0
  54. package/fesm2022/malva-ui-core-bottom-nav.mjs.map +1 -0
  55. package/fesm2022/malva-ui-core-breadcrumb.mjs +494 -0
  56. package/fesm2022/malva-ui-core-breadcrumb.mjs.map +1 -0
  57. package/fesm2022/malva-ui-core-button.mjs +406 -0
  58. package/fesm2022/malva-ui-core-button.mjs.map +1 -0
  59. package/fesm2022/malva-ui-core-calendar.mjs +938 -0
  60. package/fesm2022/malva-ui-core-calendar.mjs.map +1 -0
  61. package/fesm2022/malva-ui-core-card.mjs +164 -0
  62. package/fesm2022/malva-ui-core-card.mjs.map +1 -0
  63. package/fesm2022/malva-ui-core-chat.mjs +825 -0
  64. package/fesm2022/malva-ui-core-chat.mjs.map +1 -0
  65. package/fesm2022/malva-ui-core-checkbox.mjs +272 -0
  66. package/fesm2022/malva-ui-core-checkbox.mjs.map +1 -0
  67. package/fesm2022/malva-ui-core-chip.mjs +176 -0
  68. package/fesm2022/malva-ui-core-chip.mjs.map +1 -0
  69. package/fesm2022/malva-ui-core-color-picker.mjs +1204 -0
  70. package/fesm2022/malva-ui-core-color-picker.mjs.map +1 -0
  71. package/fesm2022/malva-ui-core-combobox.mjs +945 -0
  72. package/fesm2022/malva-ui-core-combobox.mjs.map +1 -0
  73. package/fesm2022/malva-ui-core-copy-to-clipboard.mjs +255 -0
  74. package/fesm2022/malva-ui-core-copy-to-clipboard.mjs.map +1 -0
  75. package/fesm2022/malva-ui-core-data-table.mjs +2696 -0
  76. package/fesm2022/malva-ui-core-data-table.mjs.map +1 -0
  77. package/fesm2022/malva-ui-core-date-range-picker.mjs +276 -0
  78. package/fesm2022/malva-ui-core-date-range-picker.mjs.map +1 -0
  79. package/fesm2022/malva-ui-core-day-picker.mjs +131 -0
  80. package/fesm2022/malva-ui-core-day-picker.mjs.map +1 -0
  81. package/fesm2022/malva-ui-core-dialog-routable-dialog-CvjXMtlD.mjs +94 -0
  82. package/fesm2022/malva-ui-core-dialog-routable-dialog-CvjXMtlD.mjs.map +1 -0
  83. package/fesm2022/malva-ui-core-dialog.mjs +1223 -0
  84. package/fesm2022/malva-ui-core-dialog.mjs.map +1 -0
  85. package/fesm2022/malva-ui-core-divider.mjs +80 -0
  86. package/fesm2022/malva-ui-core-divider.mjs.map +1 -0
  87. package/fesm2022/malva-ui-core-drawer-routable-drawer-qUk6Etnx.mjs +94 -0
  88. package/fesm2022/malva-ui-core-drawer-routable-drawer-qUk6Etnx.mjs.map +1 -0
  89. package/fesm2022/malva-ui-core-drawer.mjs +814 -0
  90. package/fesm2022/malva-ui-core-drawer.mjs.map +1 -0
  91. package/fesm2022/malva-ui-core-dropdown.mjs +994 -0
  92. package/fesm2022/malva-ui-core-dropdown.mjs.map +1 -0
  93. package/fesm2022/malva-ui-core-empty-state.mjs +50 -0
  94. package/fesm2022/malva-ui-core-empty-state.mjs.map +1 -0
  95. package/fesm2022/malva-ui-core-expand.mjs +130 -0
  96. package/fesm2022/malva-ui-core-expand.mjs.map +1 -0
  97. package/fesm2022/malva-ui-core-file-upload.mjs +451 -0
  98. package/fesm2022/malva-ui-core-file-upload.mjs.map +1 -0
  99. package/fesm2022/malva-ui-core-filter.mjs +1627 -0
  100. package/fesm2022/malva-ui-core-filter.mjs.map +1 -0
  101. package/fesm2022/malva-ui-core-form-utils-testing.mjs +39 -0
  102. package/fesm2022/malva-ui-core-form-utils-testing.mjs.map +1 -0
  103. package/fesm2022/malva-ui-core-form-utils.mjs +977 -0
  104. package/fesm2022/malva-ui-core-form-utils.mjs.map +1 -0
  105. package/fesm2022/malva-ui-core-form.mjs +283 -0
  106. package/fesm2022/malva-ui-core-form.mjs.map +1 -0
  107. package/fesm2022/malva-ui-core-icon-toggle.mjs +120 -0
  108. package/fesm2022/malva-ui-core-icon-toggle.mjs.map +1 -0
  109. package/fesm2022/malva-ui-core-input.mjs +375 -0
  110. package/fesm2022/malva-ui-core-input.mjs.map +1 -0
  111. package/fesm2022/malva-ui-core-kbd.mjs +131 -0
  112. package/fesm2022/malva-ui-core-kbd.mjs.map +1 -0
  113. package/fesm2022/malva-ui-core-layout.mjs +212 -0
  114. package/fesm2022/malva-ui-core-layout.mjs.map +1 -0
  115. package/fesm2022/malva-ui-core-link.mjs +89 -0
  116. package/fesm2022/malva-ui-core-link.mjs.map +1 -0
  117. package/fesm2022/malva-ui-core-list.mjs +413 -0
  118. package/fesm2022/malva-ui-core-list.mjs.map +1 -0
  119. package/fesm2022/malva-ui-core-loader.mjs +141 -0
  120. package/fesm2022/malva-ui-core-loader.mjs.map +1 -0
  121. package/fesm2022/malva-ui-core-menu.mjs +2540 -0
  122. package/fesm2022/malva-ui-core-menu.mjs.map +1 -0
  123. package/fesm2022/malva-ui-core-notification.mjs +201 -0
  124. package/fesm2022/malva-ui-core-notification.mjs.map +1 -0
  125. package/fesm2022/malva-ui-core-number-input.mjs +404 -0
  126. package/fesm2022/malva-ui-core-number-input.mjs.map +1 -0
  127. package/fesm2022/malva-ui-core-page.mjs +1898 -0
  128. package/fesm2022/malva-ui-core-page.mjs.map +1 -0
  129. package/fesm2022/malva-ui-core-pagination.mjs +458 -0
  130. package/fesm2022/malva-ui-core-pagination.mjs.map +1 -0
  131. package/fesm2022/malva-ui-core-pin-input.mjs +405 -0
  132. package/fesm2022/malva-ui-core-pin-input.mjs.map +1 -0
  133. package/fesm2022/malva-ui-core-popup.mjs +1488 -0
  134. package/fesm2022/malva-ui-core-popup.mjs.map +1 -0
  135. package/fesm2022/malva-ui-core-progress.mjs +109 -0
  136. package/fesm2022/malva-ui-core-progress.mjs.map +1 -0
  137. package/fesm2022/malva-ui-core-radio.mjs +317 -0
  138. package/fesm2022/malva-ui-core-radio.mjs.map +1 -0
  139. package/fesm2022/malva-ui-core-rating.mjs +236 -0
  140. package/fesm2022/malva-ui-core-rating.mjs.map +1 -0
  141. package/fesm2022/malva-ui-core-scrollbar.mjs +430 -0
  142. package/fesm2022/malva-ui-core-scrollbar.mjs.map +1 -0
  143. package/fesm2022/malva-ui-core-search-field.mjs +578 -0
  144. package/fesm2022/malva-ui-core-search-field.mjs.map +1 -0
  145. package/fesm2022/malva-ui-core-segmented.mjs +458 -0
  146. package/fesm2022/malva-ui-core-segmented.mjs.map +1 -0
  147. package/fesm2022/malva-ui-core-select.mjs +855 -0
  148. package/fesm2022/malva-ui-core-select.mjs.map +1 -0
  149. package/fesm2022/malva-ui-core-sidebar.mjs +1504 -0
  150. package/fesm2022/malva-ui-core-sidebar.mjs.map +1 -0
  151. package/fesm2022/malva-ui-core-skeleton.mjs +85 -0
  152. package/fesm2022/malva-ui-core-skeleton.mjs.map +1 -0
  153. package/fesm2022/malva-ui-core-slider.mjs +514 -0
  154. package/fesm2022/malva-ui-core-slider.mjs.map +1 -0
  155. package/fesm2022/malva-ui-core-split-pane.mjs +359 -0
  156. package/fesm2022/malva-ui-core-split-pane.mjs.map +1 -0
  157. package/fesm2022/malva-ui-core-status-indicator.mjs +78 -0
  158. package/fesm2022/malva-ui-core-status-indicator.mjs.map +1 -0
  159. package/fesm2022/malva-ui-core-stepper.mjs +332 -0
  160. package/fesm2022/malva-ui-core-stepper.mjs.map +1 -0
  161. package/fesm2022/malva-ui-core-switch.mjs +272 -0
  162. package/fesm2022/malva-ui-core-switch.mjs.map +1 -0
  163. package/fesm2022/malva-ui-core-table.mjs +79 -0
  164. package/fesm2022/malva-ui-core-table.mjs.map +1 -0
  165. package/fesm2022/malva-ui-core-tabs.mjs +794 -0
  166. package/fesm2022/malva-ui-core-tabs.mjs.map +1 -0
  167. package/fesm2022/malva-ui-core-textarea.mjs +201 -0
  168. package/fesm2022/malva-ui-core-textarea.mjs.map +1 -0
  169. package/fesm2022/malva-ui-core-tile.mjs +1404 -0
  170. package/fesm2022/malva-ui-core-tile.mjs.map +1 -0
  171. package/fesm2022/malva-ui-core-time-picker.mjs +533 -0
  172. package/fesm2022/malva-ui-core-time-picker.mjs.map +1 -0
  173. package/fesm2022/malva-ui-core-timeline.mjs +216 -0
  174. package/fesm2022/malva-ui-core-timeline.mjs.map +1 -0
  175. package/fesm2022/malva-ui-core-title.mjs +178 -0
  176. package/fesm2022/malva-ui-core-title.mjs.map +1 -0
  177. package/fesm2022/malva-ui-core-toast.mjs +749 -0
  178. package/fesm2022/malva-ui-core-toast.mjs.map +1 -0
  179. package/fesm2022/malva-ui-core-tokenizer.mjs +502 -0
  180. package/fesm2022/malva-ui-core-tokenizer.mjs.map +1 -0
  181. package/fesm2022/malva-ui-core-toolbar.mjs +141 -0
  182. package/fesm2022/malva-ui-core-toolbar.mjs.map +1 -0
  183. package/fesm2022/malva-ui-core-tooltip.mjs +432 -0
  184. package/fesm2022/malva-ui-core-tooltip.mjs.map +1 -0
  185. package/fesm2022/malva-ui-core-tree.mjs +505 -0
  186. package/fesm2022/malva-ui-core-tree.mjs.map +1 -0
  187. package/fesm2022/malva-ui-core-view-variant.mjs +292 -0
  188. package/fesm2022/malva-ui-core-view-variant.mjs.map +1 -0
  189. package/fesm2022/malva-ui-core.mjs +77 -0
  190. package/fesm2022/malva-ui-core.mjs.map +1 -0
  191. package/package.json +195 -156
  192. package/styles/malva-ui.css +253 -220
  193. package/styles/tokens.md +174 -173
  194. package/table/README.md +46 -0
  195. package/types/malva-ui-core-accordion.d.ts +121 -0
  196. package/types/malva-ui-core-action-bar.d.ts +82 -0
  197. package/types/malva-ui-core-alert.d.ts +131 -0
  198. package/types/malva-ui-core-autocomplete.d.ts +301 -0
  199. package/types/malva-ui-core-avatar-group.d.ts +119 -0
  200. package/types/malva-ui-core-avatar.d.ts +156 -0
  201. package/types/malva-ui-core-badge.d.ts +97 -0
  202. package/types/malva-ui-core-bottom-nav.d.ts +104 -0
  203. package/types/malva-ui-core-breadcrumb.d.ts +308 -0
  204. package/types/malva-ui-core-button.d.ts +194 -0
  205. package/types/malva-ui-core-calendar.d.ts +339 -0
  206. package/types/malva-ui-core-card.d.ts +88 -0
  207. package/types/malva-ui-core-chat.d.ts +375 -0
  208. package/types/malva-ui-core-checkbox.d.ts +158 -0
  209. package/types/malva-ui-core-chip.d.ts +128 -0
  210. package/types/malva-ui-core-color-picker.d.ts +442 -0
  211. package/types/malva-ui-core-combobox.d.ts +419 -0
  212. package/types/malva-ui-core-copy-to-clipboard.d.ts +148 -0
  213. package/types/malva-ui-core-data-table.d.ts +1074 -0
  214. package/types/malva-ui-core-date-range-picker.d.ts +149 -0
  215. package/types/malva-ui-core-day-picker.d.ts +55 -0
  216. package/types/malva-ui-core-dialog.d.ts +597 -0
  217. package/types/malva-ui-core-divider.d.ts +68 -0
  218. package/types/malva-ui-core-drawer.d.ts +333 -0
  219. package/types/malva-ui-core-dropdown.d.ts +592 -0
  220. package/types/malva-ui-core-empty-state.d.ts +37 -0
  221. package/types/malva-ui-core-expand.d.ts +102 -0
  222. package/types/malva-ui-core-file-upload.d.ts +267 -0
  223. package/types/malva-ui-core-filter.d.ts +552 -0
  224. package/types/malva-ui-core-form-utils-testing.d.ts +50 -0
  225. package/types/malva-ui-core-form-utils.d.ts +579 -0
  226. package/types/malva-ui-core-form.d.ts +176 -0
  227. package/types/malva-ui-core-icon-toggle.d.ts +80 -0
  228. package/types/malva-ui-core-input.d.ts +262 -0
  229. package/types/malva-ui-core-kbd.d.ts +56 -0
  230. package/types/malva-ui-core-layout.d.ts +70 -0
  231. package/types/malva-ui-core-link.d.ts +28 -0
  232. package/types/malva-ui-core-list.d.ts +252 -0
  233. package/types/malva-ui-core-loader.d.ts +89 -0
  234. package/types/malva-ui-core-menu.d.ts +954 -0
  235. package/types/malva-ui-core-notification.d.ts +122 -0
  236. package/types/malva-ui-core-number-input.d.ts +167 -0
  237. package/types/malva-ui-core-page.d.ts +799 -0
  238. package/types/malva-ui-core-pagination.d.ts +261 -0
  239. package/types/malva-ui-core-pin-input.d.ts +203 -0
  240. package/types/malva-ui-core-popup.d.ts +834 -0
  241. package/types/malva-ui-core-progress.d.ts +73 -0
  242. package/types/malva-ui-core-radio.d.ts +130 -0
  243. package/types/malva-ui-core-rating.d.ts +115 -0
  244. package/types/malva-ui-core-scrollbar.d.ts +203 -0
  245. package/types/malva-ui-core-search-field.d.ts +408 -0
  246. package/types/malva-ui-core-segmented.d.ts +206 -0
  247. package/types/malva-ui-core-select.d.ts +456 -0
  248. package/types/malva-ui-core-sidebar.d.ts +698 -0
  249. package/types/malva-ui-core-skeleton.d.ts +64 -0
  250. package/types/malva-ui-core-slider.d.ts +219 -0
  251. package/types/malva-ui-core-split-pane.d.ts +149 -0
  252. package/types/malva-ui-core-status-indicator.d.ts +65 -0
  253. package/types/malva-ui-core-stepper.d.ts +168 -0
  254. package/types/malva-ui-core-switch.d.ts +146 -0
  255. package/types/malva-ui-core-table.d.ts +37 -0
  256. package/types/malva-ui-core-tabs.d.ts +339 -0
  257. package/types/malva-ui-core-textarea.d.ts +79 -0
  258. package/types/malva-ui-core-tile.d.ts +373 -0
  259. package/types/malva-ui-core-time-picker.d.ts +141 -0
  260. package/types/malva-ui-core-timeline.d.ts +188 -0
  261. package/types/malva-ui-core-title.d.ts +66 -0
  262. package/types/malva-ui-core-toast.d.ts +432 -0
  263. package/types/malva-ui-core-tokenizer.d.ts +217 -0
  264. package/types/malva-ui-core-toolbar.d.ts +91 -0
  265. package/types/malva-ui-core-tooltip.d.ts +200 -0
  266. package/types/malva-ui-core-tree.d.ts +289 -0
  267. package/types/malva-ui-core-view-variant.d.ts +207 -0
  268. package/types/malva-ui-core.d.ts +72 -0
  269. package/view-variant/README.md +3 -0
  270. package/accordion/index.d.ts +0 -3
  271. package/accordion/lib/accordion/accordion.d.ts +0 -47
  272. package/accordion/lib/accordion-item/accordion-header.d.ts +0 -22
  273. package/accordion/lib/accordion-item/accordion-item.d.ts +0 -49
  274. package/accordion/malva-ui-core-accordion.d.ts +0 -5
  275. package/action-bar/index.d.ts +0 -4
  276. package/action-bar/lib/action-bar/action-bar.d.ts +0 -59
  277. package/action-bar/lib/action-bar/components/action-bar-actions.d.ts +0 -9
  278. package/action-bar/lib/action-bar/components/action-bar-logo.d.ts +0 -5
  279. package/action-bar/lib/action-bar/components/action-bar-spacer.d.ts +0 -5
  280. package/action-bar/malva-ui-core-action-bar.d.ts +0 -5
  281. package/alert/index.d.ts +0 -2
  282. package/alert/lib/alert/alert.d.ts +0 -84
  283. package/alert/lib/alert/alert.directives.d.ts +0 -44
  284. package/alert/malva-ui-core-alert.d.ts +0 -5
  285. package/autocomplete/index.d.ts +0 -1
  286. package/autocomplete/lib/autocomplete/autocomplete.d.ts +0 -296
  287. package/autocomplete/malva-ui-core-autocomplete.d.ts +0 -5
  288. package/avatar/index.d.ts +0 -2
  289. package/avatar/lib/avatar/avatar.d.ts +0 -125
  290. package/avatar/lib/color-from-text.pipe.d.ts +0 -21
  291. package/avatar/malva-ui-core-avatar.d.ts +0 -5
  292. package/avatar-group/index.d.ts +0 -1
  293. package/avatar-group/lib/avatar-group/avatar-group.d.ts +0 -115
  294. package/avatar-group/malva-ui-core-avatar-group.d.ts +0 -5
  295. package/badge/index.d.ts +0 -2
  296. package/badge/lib/badge/badge.d.ts +0 -59
  297. package/badge/lib/badge-icon.d.ts +0 -35
  298. package/badge/malva-ui-core-badge.d.ts +0 -5
  299. package/bottom-nav/index.d.ts +0 -1
  300. package/bottom-nav/lib/bottom-nav/bottom-nav.d.ts +0 -99
  301. package/bottom-nav/malva-ui-core-bottom-nav.d.ts +0 -5
  302. package/breadcrumb/index.d.ts +0 -5
  303. package/breadcrumb/lib/breadcrumb/breadcrumb-item-host.d.ts +0 -32
  304. package/breadcrumb/lib/breadcrumb/breadcrumb-item.d.ts +0 -41
  305. package/breadcrumb/lib/breadcrumb/breadcrumb-separator.d.ts +0 -31
  306. package/breadcrumb/lib/breadcrumb/breadcrumb.d.ts +0 -151
  307. package/breadcrumb/lib/breadcrumb/breadcrumb.types.d.ts +0 -26
  308. package/breadcrumb/malva-ui-core-breadcrumb.d.ts +0 -5
  309. package/button/index.d.ts +0 -7
  310. package/button/lib/button/button.d.ts +0 -61
  311. package/button/lib/button-close/button-close.d.ts +0 -24
  312. package/button/lib/button-group/button-group.d.ts +0 -21
  313. package/button/lib/button-split/button-split.d.ts +0 -21
  314. package/button/lib/button-toggle/button-toggle.d.ts +0 -33
  315. package/button/lib/button-variant.token.d.ts +0 -13
  316. package/button/lib/button.directives.d.ts +0 -14
  317. package/button/lib/button.types.d.ts +0 -8
  318. package/button/malva-ui-core-button.d.ts +0 -5
  319. package/calendar/index.d.ts +0 -3
  320. package/calendar/lib/calendar/calendar.d.ts +0 -182
  321. package/calendar/lib/date-provider/date-adapter.d.ts +0 -92
  322. package/calendar/lib/date-provider/native-date-adapter.d.ts +0 -60
  323. package/calendar/malva-ui-core-calendar.d.ts +0 -5
  324. package/card/index.d.ts +0 -5
  325. package/card/lib/card/card.d.ts +0 -43
  326. package/card/lib/card-actions-def.d.ts +0 -10
  327. package/card/lib/card-footer-def.d.ts +0 -13
  328. package/card/lib/card-header-def.d.ts +0 -10
  329. package/card/lib/card-subheader-def.d.ts +0 -16
  330. package/card/malva-ui-core-card.d.ts +0 -5
  331. package/chat/index.d.ts +0 -9
  332. package/chat/lib/chat/chat.d.ts +0 -133
  333. package/chat/lib/chat-audio/chat-audio.d.ts +0 -51
  334. package/chat/lib/chat-audio/chat-audio.service.d.ts +0 -21
  335. package/chat/lib/chat-date/chat-date.d.ts +0 -16
  336. package/chat/lib/chat-format.d.ts +0 -5
  337. package/chat/lib/chat-media-grid/chat-media-grid.d.ts +0 -32
  338. package/chat/lib/chat-message/chat-message.d.ts +0 -45
  339. package/chat/lib/chat-render-list.d.ts +0 -16
  340. package/chat/lib/chat-tokens.d.ts +0 -25
  341. package/chat/lib/chat-typing/chat-typing.d.ts +0 -16
  342. package/chat/lib/chat.types.d.ts +0 -80
  343. package/chat/lib/defs/chat-author-def.d.ts +0 -30
  344. package/chat/lib/defs/chat-date-def.d.ts +0 -22
  345. package/chat/lib/defs/chat-message-def.d.ts +0 -23
  346. package/chat/malva-ui-core-chat.d.ts +0 -5
  347. package/checkbox/index.d.ts +0 -3
  348. package/checkbox/lib/checkbox/checkbox.d.ts +0 -129
  349. package/checkbox/lib/checkbox-group/checkbox-group.d.ts +0 -24
  350. package/checkbox/lib/checkbox-group-token.d.ts +0 -6
  351. package/checkbox/malva-ui-core-checkbox.d.ts +0 -5
  352. package/chip/index.d.ts +0 -2
  353. package/chip/lib/chip/chip.d.ts +0 -107
  354. package/chip/lib/chip/chip.directives.d.ts +0 -18
  355. package/chip/malva-ui-core-chip.d.ts +0 -5
  356. package/color-picker/index.d.ts +0 -3
  357. package/color-picker/lib/color-picker/color-picker.d.ts +0 -188
  358. package/color-picker/lib/color-picker-popup/color-picker-popup.d.ts +0 -151
  359. package/color-picker/lib/color-utils/color-utils.d.ts +0 -102
  360. package/color-picker/malva-ui-core-color-picker.d.ts +0 -5
  361. package/combobox/index.d.ts +0 -2
  362. package/combobox/lib/combobox/combobox.d.ts +0 -400
  363. package/combobox/lib/combobox-template.directives.d.ts +0 -10
  364. package/combobox/malva-ui-core-combobox.d.ts +0 -5
  365. package/copy-to-clipboard/index.d.ts +0 -1
  366. package/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.d.ts +0 -130
  367. package/copy-to-clipboard/malva-ui-core-copy-to-clipboard.d.ts +0 -5
  368. package/data-table/index.d.ts +0 -8
  369. package/data-table/lib/data-source.d.ts +0 -5
  370. package/data-table/lib/data-table/data-table-layout.d.ts +0 -31
  371. package/data-table/lib/data-table/data-table.d.ts +0 -699
  372. package/data-table/lib/data-table/services/data-table-column-visibility.service.d.ts +0 -19
  373. package/data-table/lib/data-table/services/data-table-editing.service.d.ts +0 -37
  374. package/data-table/lib/data-table/services/data-table-pinning.service.d.ts +0 -37
  375. package/data-table/lib/data-table-cell.d.ts +0 -44
  376. package/data-table/lib/data-table-edit-cell.d.ts +0 -44
  377. package/data-table/lib/data-table-error.d.ts +0 -37
  378. package/data-table/lib/data-table-footer.d.ts +0 -26
  379. package/data-table/lib/data-table-no-data.d.ts +0 -19
  380. package/data-table/lib/filter-dropdown/filter-dropdown.d.ts +0 -54
  381. package/data-table/lib/types.d.ts +0 -134
  382. package/data-table/malva-ui-core-data-table.d.ts +0 -5
  383. package/date-range-picker/index.d.ts +0 -1
  384. package/date-range-picker/lib/date-range-picker/date-range-picker.d.ts +0 -145
  385. package/date-range-picker/malva-ui-core-date-range-picker.d.ts +0 -5
  386. package/day-picker/index.d.ts +0 -1
  387. package/day-picker/lib/day-picker/day-picker.d.ts +0 -51
  388. package/day-picker/malva-ui-core-day-picker.d.ts +0 -5
  389. package/dialog/index.d.ts +0 -11
  390. package/dialog/lib/confirm-dialog-options.d.ts +0 -41
  391. package/dialog/lib/confirm-dialog.d.ts +0 -52
  392. package/dialog/lib/dialog/dialog.d.ts +0 -22
  393. package/dialog/lib/dialog-body.d.ts +0 -9
  394. package/dialog/lib/dialog-close.d.ts +0 -27
  395. package/dialog/lib/dialog-config.d.ts +0 -112
  396. package/dialog/lib/dialog-container.d.ts +0 -40
  397. package/dialog/lib/dialog-footer.d.ts +0 -13
  398. package/dialog/lib/dialog-header.d.ts +0 -74
  399. package/dialog/lib/dialog-ref.d.ts +0 -95
  400. package/dialog/lib/dialog-template.d.ts +0 -65
  401. package/dialog/lib/dialog-text-content.d.ts +0 -24
  402. package/dialog/lib/dialog.service.d.ts +0 -63
  403. package/dialog/lib/generate-routable-dialog-route.d.ts +0 -49
  404. package/dialog/lib/inject-dialog-ref.d.ts +0 -8
  405. package/dialog/lib/routable-dialog.d.ts +0 -30
  406. package/dialog/malva-ui-core-dialog.d.ts +0 -5
  407. package/divider/index.d.ts +0 -1
  408. package/divider/lib/divider/divider.d.ts +0 -64
  409. package/divider/malva-ui-core-divider.d.ts +0 -5
  410. package/drawer/index.d.ts +0 -11
  411. package/drawer/lib/drawer/drawer.d.ts +0 -106
  412. package/drawer/lib/drawer-body.d.ts +0 -8
  413. package/drawer/lib/drawer-content.d.ts +0 -6
  414. package/drawer/lib/drawer-footer.d.ts +0 -5
  415. package/drawer/lib/drawer-header.d.ts +0 -5
  416. package/drawer/lib/drawer-ref.d.ts +0 -29
  417. package/drawer/lib/drawer-resize.d.ts +0 -65
  418. package/drawer/lib/drawer-section/drawer-section.d.ts +0 -15
  419. package/drawer/lib/drawer-sections/drawer-sections.d.ts +0 -22
  420. package/drawer/lib/drawer-sections.service.d.ts +0 -42
  421. package/drawer/lib/drawer.service.d.ts +0 -66
  422. package/drawer/lib/generate-routable-drawer-route.d.ts +0 -42
  423. package/drawer/lib/routable-drawer.d.ts +0 -30
  424. package/drawer/malva-ui-core-drawer.d.ts +0 -5
  425. package/dropdown/index.d.ts +0 -9
  426. package/dropdown/lib/active-descendant.d.ts +0 -64
  427. package/dropdown/lib/dropdown-panel/dropdown-panel.d.ts +0 -178
  428. package/dropdown/lib/highlight-match.pipe.d.ts +0 -27
  429. package/dropdown/lib/option-matcher.d.ts +0 -87
  430. package/dropdown/lib/options-adapter.d.ts +0 -142
  431. package/dropdown/lib/options-result.d.ts +0 -6
  432. package/dropdown/lib/reconciliation.d.ts +0 -19
  433. package/dropdown/lib/select-data-source.d.ts +0 -18
  434. package/dropdown/lib/select-option.d.ts +0 -37
  435. package/dropdown/malva-ui-core-dropdown.d.ts +0 -5
  436. package/empty-state/index.d.ts +0 -1
  437. package/empty-state/lib/empty-state/empty-state.d.ts +0 -34
  438. package/empty-state/malva-ui-core-empty-state.d.ts +0 -5
  439. package/esm2022/accordion/index.js +0 -4
  440. package/esm2022/accordion/index.js.map +0 -1
  441. package/esm2022/accordion/lib/accordion/accordion.js +0 -65
  442. package/esm2022/accordion/lib/accordion/accordion.js.map +0 -1
  443. package/esm2022/accordion/lib/accordion-item/accordion-header.js +0 -30
  444. package/esm2022/accordion/lib/accordion-item/accordion-header.js.map +0 -1
  445. package/esm2022/accordion/lib/accordion-item/accordion-item.js +0 -70
  446. package/esm2022/accordion/lib/accordion-item/accordion-item.js.map +0 -1
  447. package/esm2022/accordion/malva-ui-core-accordion.js +0 -5
  448. package/esm2022/accordion/malva-ui-core-accordion.js.map +0 -1
  449. package/esm2022/action-bar/index.js +0 -5
  450. package/esm2022/action-bar/index.js.map +0 -1
  451. package/esm2022/action-bar/lib/action-bar/action-bar.js +0 -64
  452. package/esm2022/action-bar/lib/action-bar/action-bar.js.map +0 -1
  453. package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js +0 -20
  454. package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js.map +0 -1
  455. package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js +0 -13
  456. package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js.map +0 -1
  457. package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js +0 -13
  458. package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js.map +0 -1
  459. package/esm2022/action-bar/malva-ui-core-action-bar.js +0 -5
  460. package/esm2022/action-bar/malva-ui-core-action-bar.js.map +0 -1
  461. package/esm2022/alert/index.js +0 -3
  462. package/esm2022/alert/index.js.map +0 -1
  463. package/esm2022/alert/lib/alert/alert.directives.js +0 -53
  464. package/esm2022/alert/lib/alert/alert.directives.js.map +0 -1
  465. package/esm2022/alert/lib/alert/alert.js +0 -118
  466. package/esm2022/alert/lib/alert/alert.js.map +0 -1
  467. package/esm2022/alert/malva-ui-core-alert.js +0 -5
  468. package/esm2022/alert/malva-ui-core-alert.js.map +0 -1
  469. package/esm2022/autocomplete/index.js +0 -2
  470. package/esm2022/autocomplete/index.js.map +0 -1
  471. package/esm2022/autocomplete/lib/autocomplete/autocomplete.js +0 -765
  472. package/esm2022/autocomplete/lib/autocomplete/autocomplete.js.map +0 -1
  473. package/esm2022/autocomplete/malva-ui-core-autocomplete.js +0 -5
  474. package/esm2022/autocomplete/malva-ui-core-autocomplete.js.map +0 -1
  475. package/esm2022/avatar/index.js +0 -3
  476. package/esm2022/avatar/index.js.map +0 -1
  477. package/esm2022/avatar/lib/avatar/avatar.js +0 -192
  478. package/esm2022/avatar/lib/avatar/avatar.js.map +0 -1
  479. package/esm2022/avatar/lib/color-from-text.pipe.js +0 -39
  480. package/esm2022/avatar/lib/color-from-text.pipe.js.map +0 -1
  481. package/esm2022/avatar/malva-ui-core-avatar.js +0 -5
  482. package/esm2022/avatar/malva-ui-core-avatar.js.map +0 -1
  483. package/esm2022/avatar-group/index.js +0 -2
  484. package/esm2022/avatar-group/index.js.map +0 -1
  485. package/esm2022/avatar-group/lib/avatar-group/avatar-group.js +0 -217
  486. package/esm2022/avatar-group/lib/avatar-group/avatar-group.js.map +0 -1
  487. package/esm2022/avatar-group/malva-ui-core-avatar-group.js +0 -5
  488. package/esm2022/avatar-group/malva-ui-core-avatar-group.js.map +0 -1
  489. package/esm2022/badge/index.js +0 -3
  490. package/esm2022/badge/index.js.map +0 -1
  491. package/esm2022/badge/lib/badge/badge.js +0 -71
  492. package/esm2022/badge/lib/badge/badge.js.map +0 -1
  493. package/esm2022/badge/lib/badge-icon.js +0 -47
  494. package/esm2022/badge/lib/badge-icon.js.map +0 -1
  495. package/esm2022/badge/malva-ui-core-badge.js +0 -5
  496. package/esm2022/badge/malva-ui-core-badge.js.map +0 -1
  497. package/esm2022/bottom-nav/index.js +0 -2
  498. package/esm2022/bottom-nav/index.js.map +0 -1
  499. package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js +0 -155
  500. package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js.map +0 -1
  501. package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js +0 -5
  502. package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js.map +0 -1
  503. package/esm2022/breadcrumb/index.js +0 -6
  504. package/esm2022/breadcrumb/index.js.map +0 -1
  505. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js +0 -43
  506. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js.map +0 -1
  507. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js +0 -110
  508. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js.map +0 -1
  509. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js +0 -38
  510. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js.map +0 -1
  511. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js +0 -284
  512. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js.map +0 -1
  513. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js +0 -1
  514. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js.map +0 -1
  515. package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js +0 -5
  516. package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js.map +0 -1
  517. package/esm2022/button/index.js +0 -8
  518. package/esm2022/button/index.js.map +0 -1
  519. package/esm2022/button/lib/button/button.js +0 -137
  520. package/esm2022/button/lib/button/button.js.map +0 -1
  521. package/esm2022/button/lib/button-close/button-close.js +0 -52
  522. package/esm2022/button/lib/button-close/button-close.js.map +0 -1
  523. package/esm2022/button/lib/button-group/button-group.js +0 -44
  524. package/esm2022/button/lib/button-group/button-group.js.map +0 -1
  525. package/esm2022/button/lib/button-split/button-split.js +0 -44
  526. package/esm2022/button/lib/button-split/button-split.js.map +0 -1
  527. package/esm2022/button/lib/button-toggle/button-toggle.js +0 -94
  528. package/esm2022/button/lib/button-toggle/button-toggle.js.map +0 -1
  529. package/esm2022/button/lib/button-variant.token.js +0 -4
  530. package/esm2022/button/lib/button-variant.token.js.map +0 -1
  531. package/esm2022/button/lib/button.directives.js +0 -37
  532. package/esm2022/button/lib/button.directives.js.map +0 -1
  533. package/esm2022/button/lib/button.types.js +0 -1
  534. package/esm2022/button/lib/button.types.js.map +0 -1
  535. package/esm2022/button/malva-ui-core-button.js +0 -5
  536. package/esm2022/button/malva-ui-core-button.js.map +0 -1
  537. package/esm2022/calendar/index.js +0 -4
  538. package/esm2022/calendar/index.js.map +0 -1
  539. package/esm2022/calendar/lib/calendar/calendar.js +0 -672
  540. package/esm2022/calendar/lib/calendar/calendar.js.map +0 -1
  541. package/esm2022/calendar/lib/date-provider/date-adapter.js +0 -111
  542. package/esm2022/calendar/lib/date-provider/date-adapter.js.map +0 -1
  543. package/esm2022/calendar/lib/date-provider/native-date-adapter.js +0 -151
  544. package/esm2022/calendar/lib/date-provider/native-date-adapter.js.map +0 -1
  545. package/esm2022/calendar/malva-ui-core-calendar.js +0 -5
  546. package/esm2022/calendar/malva-ui-core-calendar.js.map +0 -1
  547. package/esm2022/card/index.js +0 -6
  548. package/esm2022/card/index.js.map +0 -1
  549. package/esm2022/card/lib/card/card.js +0 -54
  550. package/esm2022/card/lib/card/card.js.map +0 -1
  551. package/esm2022/card/lib/card-actions-def.js +0 -27
  552. package/esm2022/card/lib/card-actions-def.js.map +0 -1
  553. package/esm2022/card/lib/card-footer-def.js +0 -32
  554. package/esm2022/card/lib/card-footer-def.js.map +0 -1
  555. package/esm2022/card/lib/card-header-def.js +0 -27
  556. package/esm2022/card/lib/card-header-def.js.map +0 -1
  557. package/esm2022/card/lib/card-subheader-def.js +0 -33
  558. package/esm2022/card/lib/card-subheader-def.js.map +0 -1
  559. package/esm2022/card/malva-ui-core-card.js +0 -5
  560. package/esm2022/card/malva-ui-core-card.js.map +0 -1
  561. package/esm2022/chat/index.js +0 -10
  562. package/esm2022/chat/index.js.map +0 -1
  563. package/esm2022/chat/lib/chat/chat.js +0 -326
  564. package/esm2022/chat/lib/chat/chat.js.map +0 -1
  565. package/esm2022/chat/lib/chat-audio/chat-audio.js +0 -110
  566. package/esm2022/chat/lib/chat-audio/chat-audio.js.map +0 -1
  567. package/esm2022/chat/lib/chat-audio/chat-audio.service.js +0 -28
  568. package/esm2022/chat/lib/chat-audio/chat-audio.service.js.map +0 -1
  569. package/esm2022/chat/lib/chat-date/chat-date.js +0 -46
  570. package/esm2022/chat/lib/chat-date/chat-date.js.map +0 -1
  571. package/esm2022/chat/lib/chat-format.js +0 -11
  572. package/esm2022/chat/lib/chat-format.js.map +0 -1
  573. package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js +0 -53
  574. package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js.map +0 -1
  575. package/esm2022/chat/lib/chat-message/chat-message.js +0 -86
  576. package/esm2022/chat/lib/chat-message/chat-message.js.map +0 -1
  577. package/esm2022/chat/lib/chat-render-list.js +0 -55
  578. package/esm2022/chat/lib/chat-render-list.js.map +0 -1
  579. package/esm2022/chat/lib/chat-tokens.js +0 -9
  580. package/esm2022/chat/lib/chat-tokens.js.map +0 -1
  581. package/esm2022/chat/lib/chat-typing/chat-typing.js +0 -50
  582. package/esm2022/chat/lib/chat-typing/chat-typing.js.map +0 -1
  583. package/esm2022/chat/lib/chat.types.js +0 -1
  584. package/esm2022/chat/lib/chat.types.js.map +0 -1
  585. package/esm2022/chat/lib/defs/chat-author-def.js +0 -27
  586. package/esm2022/chat/lib/defs/chat-author-def.js.map +0 -1
  587. package/esm2022/chat/lib/defs/chat-date-def.js +0 -24
  588. package/esm2022/chat/lib/defs/chat-date-def.js.map +0 -1
  589. package/esm2022/chat/lib/defs/chat-message-def.js +0 -30
  590. package/esm2022/chat/lib/defs/chat-message-def.js.map +0 -1
  591. package/esm2022/chat/malva-ui-core-chat.js +0 -5
  592. package/esm2022/chat/malva-ui-core-chat.js.map +0 -1
  593. package/esm2022/checkbox/index.js +0 -4
  594. package/esm2022/checkbox/index.js.map +0 -1
  595. package/esm2022/checkbox/lib/checkbox/checkbox.js +0 -201
  596. package/esm2022/checkbox/lib/checkbox/checkbox.js.map +0 -1
  597. package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js +0 -68
  598. package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js.map +0 -1
  599. package/esm2022/checkbox/lib/checkbox-group-token.js +0 -3
  600. package/esm2022/checkbox/lib/checkbox-group-token.js.map +0 -1
  601. package/esm2022/checkbox/malva-ui-core-checkbox.js +0 -5
  602. package/esm2022/checkbox/malva-ui-core-checkbox.js.map +0 -1
  603. package/esm2022/chip/index.js +0 -3
  604. package/esm2022/chip/index.js.map +0 -1
  605. package/esm2022/chip/lib/chip/chip.directives.js +0 -32
  606. package/esm2022/chip/lib/chip/chip.directives.js.map +0 -1
  607. package/esm2022/chip/lib/chip/chip.js +0 -140
  608. package/esm2022/chip/lib/chip/chip.js.map +0 -1
  609. package/esm2022/chip/malva-ui-core-chip.js +0 -5
  610. package/esm2022/chip/malva-ui-core-chip.js.map +0 -1
  611. package/esm2022/color-picker/index.js +0 -4
  612. package/esm2022/color-picker/index.js.map +0 -1
  613. package/esm2022/color-picker/lib/color-picker/color-picker.js +0 -530
  614. package/esm2022/color-picker/lib/color-picker/color-picker.js.map +0 -1
  615. package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js +0 -419
  616. package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js.map +0 -1
  617. package/esm2022/color-picker/lib/color-utils/color-utils.js +0 -256
  618. package/esm2022/color-picker/lib/color-utils/color-utils.js.map +0 -1
  619. package/esm2022/color-picker/malva-ui-core-color-picker.js +0 -5
  620. package/esm2022/color-picker/malva-ui-core-color-picker.js.map +0 -1
  621. package/esm2022/combobox/index.js +0 -3
  622. package/esm2022/combobox/index.js.map +0 -1
  623. package/esm2022/combobox/lib/combobox/combobox.js +0 -911
  624. package/esm2022/combobox/lib/combobox/combobox.js.map +0 -1
  625. package/esm2022/combobox/lib/combobox-template.directives.js +0 -24
  626. package/esm2022/combobox/lib/combobox-template.directives.js.map +0 -1
  627. package/esm2022/combobox/malva-ui-core-combobox.js +0 -5
  628. package/esm2022/combobox/malva-ui-core-combobox.js.map +0 -1
  629. package/esm2022/copy-to-clipboard/index.js +0 -2
  630. package/esm2022/copy-to-clipboard/index.js.map +0 -1
  631. package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js +0 -201
  632. package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js.map +0 -1
  633. package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js +0 -5
  634. package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js.map +0 -1
  635. package/esm2022/data-table/index.js +0 -9
  636. package/esm2022/data-table/index.js.map +0 -1
  637. package/esm2022/data-table/lib/data-source.js +0 -6
  638. package/esm2022/data-table/lib/data-source.js.map +0 -1
  639. package/esm2022/data-table/lib/data-table/data-table-layout.js +0 -84
  640. package/esm2022/data-table/lib/data-table/data-table-layout.js.map +0 -1
  641. package/esm2022/data-table/lib/data-table/data-table.js +0 -1846
  642. package/esm2022/data-table/lib/data-table/data-table.js.map +0 -1
  643. package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js +0 -37
  644. package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js.map +0 -1
  645. package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js +0 -63
  646. package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js.map +0 -1
  647. package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js +0 -68
  648. package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js.map +0 -1
  649. package/esm2022/data-table/lib/data-table-cell.js +0 -46
  650. package/esm2022/data-table/lib/data-table-cell.js.map +0 -1
  651. package/esm2022/data-table/lib/data-table-edit-cell.js +0 -46
  652. package/esm2022/data-table/lib/data-table-edit-cell.js.map +0 -1
  653. package/esm2022/data-table/lib/data-table-error.js +0 -37
  654. package/esm2022/data-table/lib/data-table-error.js.map +0 -1
  655. package/esm2022/data-table/lib/data-table-footer.js +0 -33
  656. package/esm2022/data-table/lib/data-table-footer.js.map +0 -1
  657. package/esm2022/data-table/lib/data-table-no-data.js +0 -26
  658. package/esm2022/data-table/lib/data-table-no-data.js.map +0 -1
  659. package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js +0 -224
  660. package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js.map +0 -1
  661. package/esm2022/data-table/lib/types.js +0 -1
  662. package/esm2022/data-table/lib/types.js.map +0 -1
  663. package/esm2022/data-table/malva-ui-core-data-table.js +0 -5
  664. package/esm2022/data-table/malva-ui-core-data-table.js.map +0 -1
  665. package/esm2022/date-range-picker/index.js +0 -2
  666. package/esm2022/date-range-picker/index.js.map +0 -1
  667. package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js +0 -269
  668. package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js.map +0 -1
  669. package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js +0 -5
  670. package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js.map +0 -1
  671. package/esm2022/day-picker/index.js +0 -2
  672. package/esm2022/day-picker/index.js.map +0 -1
  673. package/esm2022/day-picker/lib/day-picker/day-picker.js +0 -124
  674. package/esm2022/day-picker/lib/day-picker/day-picker.js.map +0 -1
  675. package/esm2022/day-picker/malva-ui-core-day-picker.js +0 -5
  676. package/esm2022/day-picker/malva-ui-core-day-picker.js.map +0 -1
  677. package/esm2022/dialog/index.js +0 -12
  678. package/esm2022/dialog/index.js.map +0 -1
  679. package/esm2022/dialog/lib/confirm-dialog-options.js +0 -1
  680. package/esm2022/dialog/lib/confirm-dialog-options.js.map +0 -1
  681. package/esm2022/dialog/lib/confirm-dialog.js +0 -155
  682. package/esm2022/dialog/lib/confirm-dialog.js.map +0 -1
  683. package/esm2022/dialog/lib/dialog/dialog.js +0 -40
  684. package/esm2022/dialog/lib/dialog/dialog.js.map +0 -1
  685. package/esm2022/dialog/lib/dialog-body.js +0 -33
  686. package/esm2022/dialog/lib/dialog-body.js.map +0 -1
  687. package/esm2022/dialog/lib/dialog-close.js +0 -45
  688. package/esm2022/dialog/lib/dialog-close.js.map +0 -1
  689. package/esm2022/dialog/lib/dialog-config.js +0 -23
  690. package/esm2022/dialog/lib/dialog-config.js.map +0 -1
  691. package/esm2022/dialog/lib/dialog-container.js +0 -69
  692. package/esm2022/dialog/lib/dialog-container.js.map +0 -1
  693. package/esm2022/dialog/lib/dialog-footer.js +0 -29
  694. package/esm2022/dialog/lib/dialog-footer.js.map +0 -1
  695. package/esm2022/dialog/lib/dialog-header.js +0 -181
  696. package/esm2022/dialog/lib/dialog-header.js.map +0 -1
  697. package/esm2022/dialog/lib/dialog-ref.js +0 -167
  698. package/esm2022/dialog/lib/dialog-ref.js.map +0 -1
  699. package/esm2022/dialog/lib/dialog-template.js +0 -136
  700. package/esm2022/dialog/lib/dialog-template.js.map +0 -1
  701. package/esm2022/dialog/lib/dialog-text-content.js +0 -59
  702. package/esm2022/dialog/lib/dialog-text-content.js.map +0 -1
  703. package/esm2022/dialog/lib/dialog.service.js +0 -205
  704. package/esm2022/dialog/lib/dialog.service.js.map +0 -1
  705. package/esm2022/dialog/lib/generate-routable-dialog-route.js +0 -59
  706. package/esm2022/dialog/lib/generate-routable-dialog-route.js.map +0 -1
  707. package/esm2022/dialog/lib/inject-dialog-ref.js +0 -16
  708. package/esm2022/dialog/lib/inject-dialog-ref.js.map +0 -1
  709. package/esm2022/dialog/lib/routable-dialog.js +0 -91
  710. package/esm2022/dialog/lib/routable-dialog.js.map +0 -1
  711. package/esm2022/dialog/malva-ui-core-dialog.js +0 -5
  712. package/esm2022/dialog/malva-ui-core-dialog.js.map +0 -1
  713. package/esm2022/divider/index.js +0 -2
  714. package/esm2022/divider/index.js.map +0 -1
  715. package/esm2022/divider/lib/divider/divider.js +0 -73
  716. package/esm2022/divider/lib/divider/divider.js.map +0 -1
  717. package/esm2022/divider/malva-ui-core-divider.js +0 -5
  718. package/esm2022/divider/malva-ui-core-divider.js.map +0 -1
  719. package/esm2022/drawer/index.js +0 -12
  720. package/esm2022/drawer/index.js.map +0 -1
  721. package/esm2022/drawer/lib/drawer/drawer.js +0 -180
  722. package/esm2022/drawer/lib/drawer/drawer.js.map +0 -1
  723. package/esm2022/drawer/lib/drawer-body.js +0 -32
  724. package/esm2022/drawer/lib/drawer-body.js.map +0 -1
  725. package/esm2022/drawer/lib/drawer-content.js +0 -14
  726. package/esm2022/drawer/lib/drawer-content.js.map +0 -1
  727. package/esm2022/drawer/lib/drawer-footer.js +0 -14
  728. package/esm2022/drawer/lib/drawer-footer.js.map +0 -1
  729. package/esm2022/drawer/lib/drawer-header.js +0 -14
  730. package/esm2022/drawer/lib/drawer-header.js.map +0 -1
  731. package/esm2022/drawer/lib/drawer-ref.js +0 -31
  732. package/esm2022/drawer/lib/drawer-ref.js.map +0 -1
  733. package/esm2022/drawer/lib/drawer-resize.js +0 -243
  734. package/esm2022/drawer/lib/drawer-resize.js.map +0 -1
  735. package/esm2022/drawer/lib/drawer-section/drawer-section.js +0 -26
  736. package/esm2022/drawer/lib/drawer-section/drawer-section.js.map +0 -1
  737. package/esm2022/drawer/lib/drawer-sections/drawer-sections.js +0 -58
  738. package/esm2022/drawer/lib/drawer-sections/drawer-sections.js.map +0 -1
  739. package/esm2022/drawer/lib/drawer-sections.service.js +0 -83
  740. package/esm2022/drawer/lib/drawer-sections.service.js.map +0 -1
  741. package/esm2022/drawer/lib/drawer.service.js +0 -86
  742. package/esm2022/drawer/lib/drawer.service.js.map +0 -1
  743. package/esm2022/drawer/lib/generate-routable-drawer-route.js +0 -52
  744. package/esm2022/drawer/lib/generate-routable-drawer-route.js.map +0 -1
  745. package/esm2022/drawer/lib/routable-drawer.js +0 -91
  746. package/esm2022/drawer/lib/routable-drawer.js.map +0 -1
  747. package/esm2022/drawer/malva-ui-core-drawer.js +0 -5
  748. package/esm2022/drawer/malva-ui-core-drawer.js.map +0 -1
  749. package/esm2022/dropdown/index.js +0 -10
  750. package/esm2022/dropdown/index.js.map +0 -1
  751. package/esm2022/dropdown/lib/active-descendant.js +0 -92
  752. package/esm2022/dropdown/lib/active-descendant.js.map +0 -1
  753. package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js +0 -295
  754. package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js.map +0 -1
  755. package/esm2022/dropdown/lib/highlight-match.pipe.js +0 -36
  756. package/esm2022/dropdown/lib/highlight-match.pipe.js.map +0 -1
  757. package/esm2022/dropdown/lib/option-matcher.js +0 -124
  758. package/esm2022/dropdown/lib/option-matcher.js.map +0 -1
  759. package/esm2022/dropdown/lib/options-adapter.js +0 -356
  760. package/esm2022/dropdown/lib/options-adapter.js.map +0 -1
  761. package/esm2022/dropdown/lib/options-result.js +0 -11
  762. package/esm2022/dropdown/lib/options-result.js.map +0 -1
  763. package/esm2022/dropdown/lib/reconciliation.js +0 -32
  764. package/esm2022/dropdown/lib/reconciliation.js.map +0 -1
  765. package/esm2022/dropdown/lib/select-data-source.js +0 -21
  766. package/esm2022/dropdown/lib/select-data-source.js.map +0 -1
  767. package/esm2022/dropdown/lib/select-option.js +0 -25
  768. package/esm2022/dropdown/lib/select-option.js.map +0 -1
  769. package/esm2022/dropdown/malva-ui-core-dropdown.js +0 -5
  770. package/esm2022/dropdown/malva-ui-core-dropdown.js.map +0 -1
  771. package/esm2022/empty-state/index.js +0 -2
  772. package/esm2022/empty-state/index.js.map +0 -1
  773. package/esm2022/empty-state/lib/empty-state/empty-state.js +0 -43
  774. package/esm2022/empty-state/lib/empty-state/empty-state.js.map +0 -1
  775. package/esm2022/empty-state/malva-ui-core-empty-state.js +0 -5
  776. package/esm2022/empty-state/malva-ui-core-empty-state.js.map +0 -1
  777. package/esm2022/expand/index.js +0 -3
  778. package/esm2022/expand/index.js.map +0 -1
  779. package/esm2022/expand/lib/expand/expand-content.js +0 -33
  780. package/esm2022/expand/lib/expand/expand-content.js.map +0 -1
  781. package/esm2022/expand/lib/expand/expand.js +0 -93
  782. package/esm2022/expand/lib/expand/expand.js.map +0 -1
  783. package/esm2022/expand/malva-ui-core-expand.js +0 -5
  784. package/esm2022/expand/malva-ui-core-expand.js.map +0 -1
  785. package/esm2022/file-upload/index.js +0 -5
  786. package/esm2022/file-upload/index.js.map +0 -1
  787. package/esm2022/file-upload/lib/file-upload/file-upload.js +0 -324
  788. package/esm2022/file-upload/lib/file-upload/file-upload.js.map +0 -1
  789. package/esm2022/file-upload/lib/file-upload/file-upload.types.js +0 -1
  790. package/esm2022/file-upload/lib/file-upload/file-upload.types.js.map +0 -1
  791. package/esm2022/file-upload/lib/file-upload-action.js +0 -65
  792. package/esm2022/file-upload/lib/file-upload-action.js.map +0 -1
  793. package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js +0 -55
  794. package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js.map +0 -1
  795. package/esm2022/file-upload/malva-ui-core-file-upload.js +0 -5
  796. package/esm2022/file-upload/malva-ui-core-file-upload.js.map +0 -1
  797. package/esm2022/filter/index.js +0 -4
  798. package/esm2022/filter/index.js.map +0 -1
  799. package/esm2022/filter/lib/filter/filter.js +0 -552
  800. package/esm2022/filter/lib/filter/filter.js.map +0 -1
  801. package/esm2022/filter/lib/filter.types.js +0 -1
  802. package/esm2022/filter/lib/filter.types.js.map +0 -1
  803. package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js +0 -518
  804. package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js.map +0 -1
  805. package/esm2022/filter/malva-ui-core-filter.js +0 -5
  806. package/esm2022/filter/malva-ui-core-filter.js.map +0 -1
  807. package/esm2022/form/index.js +0 -7
  808. package/esm2022/form/index.js.map +0 -1
  809. package/esm2022/form/lib/fieldset/fieldset.js +0 -101
  810. package/esm2022/form/lib/fieldset/fieldset.js.map +0 -1
  811. package/esm2022/form/lib/fieldset-span.js +0 -49
  812. package/esm2022/form/lib/fieldset-span.js.map +0 -1
  813. package/esm2022/form/lib/form/form.js +0 -60
  814. package/esm2022/form/lib/form/form.js.map +0 -1
  815. package/esm2022/form/lib/form-actions.js +0 -34
  816. package/esm2022/form/lib/form-actions.js.map +0 -1
  817. package/esm2022/form/lib/form-gap.js +0 -15
  818. package/esm2022/form/lib/form-gap.js.map +0 -1
  819. package/esm2022/form/lib/form-header.js +0 -27
  820. package/esm2022/form/lib/form-header.js.map +0 -1
  821. package/esm2022/form/lib/form.types.js +0 -1
  822. package/esm2022/form/lib/form.types.js.map +0 -1
  823. package/esm2022/form/malva-ui-core-form.js +0 -5
  824. package/esm2022/form/malva-ui-core-form.js.map +0 -1
  825. package/esm2022/form-utils/index.js +0 -16
  826. package/esm2022/form-utils/index.js.map +0 -1
  827. package/esm2022/form-utils/lib/aria-value-bridge.js +0 -57
  828. package/esm2022/form-utils/lib/aria-value-bridge.js.map +0 -1
  829. package/esm2022/form-utils/lib/description/description.js +0 -24
  830. package/esm2022/form-utils/lib/description/description.js.map +0 -1
  831. package/esm2022/form-utils/lib/focusable-group-base.js +0 -87
  832. package/esm2022/form-utils/lib/focusable-group-base.js.map +0 -1
  833. package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js +0 -192
  834. package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js.map +0 -1
  835. package/esm2022/form-utils/lib/form-control-sides.js +0 -34
  836. package/esm2022/form-utils/lib/form-control-sides.js.map +0 -1
  837. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js +0 -14
  838. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js.map +0 -1
  839. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js +0 -47
  840. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js.map +0 -1
  841. package/esm2022/form-utils/lib/form-field/form-field.js +0 -245
  842. package/esm2022/form-utils/lib/form-field/form-field.js.map +0 -1
  843. package/esm2022/form-utils/lib/hint/hint.js +0 -11
  844. package/esm2022/form-utils/lib/hint/hint.js.map +0 -1
  845. package/esm2022/form-utils/lib/label/label.js +0 -55
  846. package/esm2022/form-utils/lib/label/label.js.map +0 -1
  847. package/esm2022/form-utils/lib/message/message.js +0 -20
  848. package/esm2022/form-utils/lib/message/message.js.map +0 -1
  849. package/esm2022/form-utils/lib/models/error-display-strategy.js +0 -1
  850. package/esm2022/form-utils/lib/models/error-display-strategy.js.map +0 -1
  851. package/esm2022/form-utils/lib/models/form-control-connector.js +0 -3
  852. package/esm2022/form-utils/lib/models/form-control-connector.js.map +0 -1
  853. package/esm2022/form-utils/lib/models/form-state.js +0 -1
  854. package/esm2022/form-utils/lib/models/form-state.js.map +0 -1
  855. package/esm2022/form-utils/lib/selection.service.js +0 -81
  856. package/esm2022/form-utils/lib/selection.service.js.map +0 -1
  857. package/esm2022/form-utils/malva-ui-core-form-utils.js +0 -5
  858. package/esm2022/form-utils/malva-ui-core-form-utils.js.map +0 -1
  859. package/esm2022/form-utils/testing/index.js +0 -2
  860. package/esm2022/form-utils/testing/index.js.map +0 -1
  861. package/esm2022/form-utils/testing/lib/forms-binding-matrix.js +0 -32
  862. package/esm2022/form-utils/testing/lib/forms-binding-matrix.js.map +0 -1
  863. package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js +0 -5
  864. package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js.map +0 -1
  865. package/esm2022/index.js +0 -70
  866. package/esm2022/index.js.map +0 -1
  867. package/esm2022/input/index.js +0 -4
  868. package/esm2022/input/index.js.map +0 -1
  869. package/esm2022/input/lib/input/input-native.js +0 -49
  870. package/esm2022/input/lib/input/input-native.js.map +0 -1
  871. package/esm2022/input/lib/input/input-value-accessor.js +0 -4
  872. package/esm2022/input/lib/input/input-value-accessor.js.map +0 -1
  873. package/esm2022/input/lib/input/input.js +0 -277
  874. package/esm2022/input/lib/input/input.js.map +0 -1
  875. package/esm2022/input/lib/input/password-strength.js +0 -46
  876. package/esm2022/input/lib/input/password-strength.js.map +0 -1
  877. package/esm2022/input/malva-ui-core-input.js +0 -5
  878. package/esm2022/input/malva-ui-core-input.js.map +0 -1
  879. package/esm2022/kbd/index.js +0 -2
  880. package/esm2022/kbd/index.js.map +0 -1
  881. package/esm2022/kbd/lib/kbd/kbd.js +0 -124
  882. package/esm2022/kbd/lib/kbd/kbd.js.map +0 -1
  883. package/esm2022/kbd/malva-ui-core-kbd.js +0 -5
  884. package/esm2022/kbd/malva-ui-core-kbd.js.map +0 -1
  885. package/esm2022/layout/index.js +0 -5
  886. package/esm2022/layout/index.js.map +0 -1
  887. package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js +0 -14
  888. package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js.map +0 -1
  889. package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js +0 -14
  890. package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js.map +0 -1
  891. package/esm2022/layout/lib/layout/layout.js +0 -43
  892. package/esm2022/layout/lib/layout/layout.js.map +0 -1
  893. package/esm2022/layout/lib/layout/services/theme.service.js +0 -121
  894. package/esm2022/layout/lib/layout/services/theme.service.js.map +0 -1
  895. package/esm2022/layout/malva-ui-core-layout.js +0 -5
  896. package/esm2022/layout/malva-ui-core-layout.js.map +0 -1
  897. package/esm2022/link/index.js +0 -3
  898. package/esm2022/link/index.js.map +0 -1
  899. package/esm2022/link/lib/link/link.directives.js +0 -24
  900. package/esm2022/link/lib/link/link.directives.js.map +0 -1
  901. package/esm2022/link/lib/link/link.js +0 -61
  902. package/esm2022/link/lib/link/link.js.map +0 -1
  903. package/esm2022/link/malva-ui-core-link.js +0 -5
  904. package/esm2022/link/malva-ui-core-link.js.map +0 -1
  905. package/esm2022/list/index.js +0 -14
  906. package/esm2022/list/index.js.map +0 -1
  907. package/esm2022/list/lib/list/list.js +0 -28
  908. package/esm2022/list/lib/list/list.js.map +0 -1
  909. package/esm2022/list/lib/list-item/list-item.js +0 -125
  910. package/esm2022/list/lib/list-item/list-item.js.map +0 -1
  911. package/esm2022/list/lib/list-item-actions.js +0 -23
  912. package/esm2022/list/lib/list-item-actions.js.map +0 -1
  913. package/esm2022/list/lib/list-item-byline.js +0 -13
  914. package/esm2022/list/lib/list-item-byline.js.map +0 -1
  915. package/esm2022/list/lib/list-item-group/list-item-group.js +0 -25
  916. package/esm2022/list/lib/list-item-group/list-item-group.js.map +0 -1
  917. package/esm2022/list/lib/list-item-link/list-item-link.js +0 -20
  918. package/esm2022/list/lib/list-item-link/list-item-link.js.map +0 -1
  919. package/esm2022/list/lib/list-item-media.js +0 -13
  920. package/esm2022/list/lib/list-item-media.js.map +0 -1
  921. package/esm2022/list/lib/list-item-meta.js +0 -13
  922. package/esm2022/list/lib/list-item-meta.js.map +0 -1
  923. package/esm2022/list/lib/list-item-prefix.js +0 -13
  924. package/esm2022/list/lib/list-item-prefix.js.map +0 -1
  925. package/esm2022/list/lib/list-item-suffix.js +0 -13
  926. package/esm2022/list/lib/list-item-suffix.js.map +0 -1
  927. package/esm2022/list/lib/list-item-template.js +0 -14
  928. package/esm2022/list/lib/list-item-template.js.map +0 -1
  929. package/esm2022/list/lib/list-item-title.js +0 -13
  930. package/esm2022/list/lib/list-item-title.js.map +0 -1
  931. package/esm2022/list/lib/list-selectable.js +0 -116
  932. package/esm2022/list/lib/list-selectable.js.map +0 -1
  933. package/esm2022/list/malva-ui-core-list.js +0 -5
  934. package/esm2022/list/malva-ui-core-list.js.map +0 -1
  935. package/esm2022/loader/index.js +0 -2
  936. package/esm2022/loader/index.js.map +0 -1
  937. package/esm2022/loader/lib/loader/loader.js +0 -134
  938. package/esm2022/loader/lib/loader/loader.js.map +0 -1
  939. package/esm2022/loader/malva-ui-core-loader.js +0 -5
  940. package/esm2022/loader/malva-ui-core-loader.js.map +0 -1
  941. package/esm2022/malva-ui-core.js +0 -5
  942. package/esm2022/malva-ui-core.js.map +0 -1
  943. package/esm2022/menu/index.js +0 -10
  944. package/esm2022/menu/index.js.map +0 -1
  945. package/esm2022/menu/lib/menu/menu-group-label.js +0 -35
  946. package/esm2022/menu/lib/menu/menu-group-label.js.map +0 -1
  947. package/esm2022/menu/lib/menu/menu-group.js +0 -44
  948. package/esm2022/menu/lib/menu/menu-group.js.map +0 -1
  949. package/esm2022/menu/lib/menu/menu-item.js +0 -117
  950. package/esm2022/menu/lib/menu/menu-item.js.map +0 -1
  951. package/esm2022/menu/lib/menu/menu-separator.js +0 -41
  952. package/esm2022/menu/lib/menu/menu-separator.js.map +0 -1
  953. package/esm2022/menu/lib/menu/menu-trigger.js +0 -653
  954. package/esm2022/menu/lib/menu/menu-trigger.js.map +0 -1
  955. package/esm2022/menu/lib/menu/menu.js +0 -308
  956. package/esm2022/menu/lib/menu/menu.js.map +0 -1
  957. package/esm2022/menu/lib/menu/menu.types.js +0 -4
  958. package/esm2022/menu/lib/menu/menu.types.js.map +0 -1
  959. package/esm2022/menu/lib/menu/menubar.js +0 -257
  960. package/esm2022/menu/lib/menu/menubar.js.map +0 -1
  961. package/esm2022/menu/lib/menu/menubar.types.js +0 -4
  962. package/esm2022/menu/lib/menu/menubar.types.js.map +0 -1
  963. package/esm2022/menu/lib/menu/submenu-aim.js +0 -30
  964. package/esm2022/menu/lib/menu/submenu-aim.js.map +0 -1
  965. package/esm2022/menu/malva-ui-core-menu.js +0 -5
  966. package/esm2022/menu/malva-ui-core-menu.js.map +0 -1
  967. package/esm2022/notification/index.js +0 -5
  968. package/esm2022/notification/index.js.map +0 -1
  969. package/esm2022/notification/lib/notification-item/notification-item.js +0 -65
  970. package/esm2022/notification/lib/notification-item/notification-item.js.map +0 -1
  971. package/esm2022/notification/lib/notification-ref.js +0 -13
  972. package/esm2022/notification/lib/notification-ref.js.map +0 -1
  973. package/esm2022/notification/lib/notification.service.js +0 -118
  974. package/esm2022/notification/lib/notification.service.js.map +0 -1
  975. package/esm2022/notification/lib/notification.types.js +0 -6
  976. package/esm2022/notification/lib/notification.types.js.map +0 -1
  977. package/esm2022/notification/malva-ui-core-notification.js +0 -5
  978. package/esm2022/notification/malva-ui-core-notification.js.map +0 -1
  979. package/esm2022/number-input/index.js +0 -2
  980. package/esm2022/number-input/index.js.map +0 -1
  981. package/esm2022/number-input/lib/number-input/number-input.js +0 -395
  982. package/esm2022/number-input/lib/number-input/number-input.js.map +0 -1
  983. package/esm2022/number-input/malva-ui-core-number-input.js +0 -5
  984. package/esm2022/number-input/malva-ui-core-number-input.js.map +0 -1
  985. package/esm2022/page/index.js +0 -15
  986. package/esm2022/page/index.js.map +0 -1
  987. package/esm2022/page/lib/page/page-scroll.token.js +0 -9
  988. package/esm2022/page/lib/page/page-scroll.token.js.map +0 -1
  989. package/esm2022/page/lib/page/page-snap-controller.js +0 -170
  990. package/esm2022/page/lib/page/page-snap-controller.js.map +0 -1
  991. package/esm2022/page/lib/page/page-snap.directive.js +0 -65
  992. package/esm2022/page/lib/page/page-snap.directive.js.map +0 -1
  993. package/esm2022/page/lib/page/page.js +0 -173
  994. package/esm2022/page/lib/page/page.js.map +0 -1
  995. package/esm2022/page/lib/page-content/page-aside.js +0 -13
  996. package/esm2022/page/lib/page-content/page-aside.js.map +0 -1
  997. package/esm2022/page/lib/page-content/page-content.js +0 -72
  998. package/esm2022/page/lib/page-content/page-content.js.map +0 -1
  999. package/esm2022/page/lib/page-dock/page-dock.js +0 -128
  1000. package/esm2022/page/lib/page-dock/page-dock.js.map +0 -1
  1001. package/esm2022/page/lib/page-dock/page-dock.slots.js +0 -39
  1002. package/esm2022/page/lib/page-dock/page-dock.slots.js.map +0 -1
  1003. package/esm2022/page/lib/page-header/page-header.directives.js +0 -88
  1004. package/esm2022/page/lib/page-header/page-header.directives.js.map +0 -1
  1005. package/esm2022/page/lib/page-header/page-header.js +0 -124
  1006. package/esm2022/page/lib/page-header/page-header.js.map +0 -1
  1007. package/esm2022/page/lib/page-shell/page-shell-color.js +0 -193
  1008. package/esm2022/page/lib/page-shell/page-shell-color.js.map +0 -1
  1009. package/esm2022/page/lib/page-shell/page-shell-css-color.js +0 -207
  1010. package/esm2022/page/lib/page-shell/page-shell-css-color.js.map +0 -1
  1011. package/esm2022/page/lib/page-shell/page-shell.js +0 -131
  1012. package/esm2022/page/lib/page-shell/page-shell.js.map +0 -1
  1013. package/esm2022/page/lib/page-shell/page-shell.slots.js +0 -41
  1014. package/esm2022/page/lib/page-shell/page-shell.slots.js.map +0 -1
  1015. package/esm2022/page/lib/page-summary/page-summary-item.js +0 -26
  1016. package/esm2022/page/lib/page-summary/page-summary-item.js.map +0 -1
  1017. package/esm2022/page/lib/page-summary/page-summary.js +0 -87
  1018. package/esm2022/page/lib/page-summary/page-summary.js.map +0 -1
  1019. package/esm2022/page/malva-ui-core-page.js +0 -5
  1020. package/esm2022/page/malva-ui-core-page.js.map +0 -1
  1021. package/esm2022/pagination/index.js +0 -5
  1022. package/esm2022/pagination/index.js.map +0 -1
  1023. package/esm2022/pagination/lib/pagination/pagination.directives.js +0 -58
  1024. package/esm2022/pagination/lib/pagination/pagination.directives.js.map +0 -1
  1025. package/esm2022/pagination/lib/pagination/pagination.js +0 -293
  1026. package/esm2022/pagination/lib/pagination/pagination.js.map +0 -1
  1027. package/esm2022/pagination/lib/pagination/pagination.model.js +0 -1
  1028. package/esm2022/pagination/lib/pagination/pagination.model.js.map +0 -1
  1029. package/esm2022/pagination/lib/pagination/pagination.service.js +0 -108
  1030. package/esm2022/pagination/lib/pagination/pagination.service.js.map +0 -1
  1031. package/esm2022/pagination/malva-ui-core-pagination.js +0 -5
  1032. package/esm2022/pagination/malva-ui-core-pagination.js.map +0 -1
  1033. package/esm2022/pin-input/index.js +0 -3
  1034. package/esm2022/pin-input/index.js.map +0 -1
  1035. package/esm2022/pin-input/lib/pin-input/pin-input-separator.js +0 -31
  1036. package/esm2022/pin-input/lib/pin-input/pin-input-separator.js.map +0 -1
  1037. package/esm2022/pin-input/lib/pin-input/pin-input.js +0 -365
  1038. package/esm2022/pin-input/lib/pin-input/pin-input.js.map +0 -1
  1039. package/esm2022/pin-input/malva-ui-core-pin-input.js +0 -5
  1040. package/esm2022/pin-input/malva-ui-core-pin-input.js.map +0 -1
  1041. package/esm2022/popup/index.js +0 -10
  1042. package/esm2022/popup/index.js.map +0 -1
  1043. package/esm2022/popup/lib/popup/popup.js +0 -500
  1044. package/esm2022/popup/lib/popup/popup.js.map +0 -1
  1045. package/esm2022/popup/lib/popup-container/popup-container.js +0 -169
  1046. package/esm2022/popup/lib/popup-container/popup-container.js.map +0 -1
  1047. package/esm2022/popup/lib/popup-container/popup-container.token.js +0 -9
  1048. package/esm2022/popup/lib/popup-container/popup-container.token.js.map +0 -1
  1049. package/esm2022/popup/lib/popup-content.js +0 -14
  1050. package/esm2022/popup/lib/popup-content.js.map +0 -1
  1051. package/esm2022/popup/lib/popup-header-content.js +0 -26
  1052. package/esm2022/popup/lib/popup-header-content.js.map +0 -1
  1053. package/esm2022/popup/lib/popup-pinned-content.js +0 -25
  1054. package/esm2022/popup/lib/popup-pinned-content.js.map +0 -1
  1055. package/esm2022/popup/lib/popup-positions.js +0 -252
  1056. package/esm2022/popup/lib/popup-positions.js.map +0 -1
  1057. package/esm2022/popup/lib/popup-trigger/popup-trigger.js +0 -308
  1058. package/esm2022/popup/lib/popup-trigger/popup-trigger.js.map +0 -1
  1059. package/esm2022/popup/lib/popup.service.js +0 -188
  1060. package/esm2022/popup/lib/popup.service.js.map +0 -1
  1061. package/esm2022/popup/malva-ui-core-popup.js +0 -5
  1062. package/esm2022/popup/malva-ui-core-popup.js.map +0 -1
  1063. package/esm2022/progress/index.js +0 -2
  1064. package/esm2022/progress/index.js.map +0 -1
  1065. package/esm2022/progress/lib/progress/progress.js +0 -102
  1066. package/esm2022/progress/lib/progress/progress.js.map +0 -1
  1067. package/esm2022/progress/malva-ui-core-progress.js +0 -5
  1068. package/esm2022/progress/malva-ui-core-progress.js.map +0 -1
  1069. package/esm2022/radio/index.js +0 -3
  1070. package/esm2022/radio/index.js.map +0 -1
  1071. package/esm2022/radio/lib/radio/radio.js +0 -134
  1072. package/esm2022/radio/lib/radio/radio.js.map +0 -1
  1073. package/esm2022/radio/lib/radio-group/radio-group.js +0 -176
  1074. package/esm2022/radio/lib/radio-group/radio-group.js.map +0 -1
  1075. package/esm2022/radio/lib/radio-group-token.js +0 -3
  1076. package/esm2022/radio/lib/radio-group-token.js.map +0 -1
  1077. package/esm2022/radio/malva-ui-core-radio.js +0 -5
  1078. package/esm2022/radio/malva-ui-core-radio.js.map +0 -1
  1079. package/esm2022/rating/index.js +0 -2
  1080. package/esm2022/rating/index.js.map +0 -1
  1081. package/esm2022/rating/lib/rating/rating.js +0 -208
  1082. package/esm2022/rating/lib/rating/rating.js.map +0 -1
  1083. package/esm2022/rating/malva-ui-core-rating.js +0 -5
  1084. package/esm2022/rating/malva-ui-core-rating.js.map +0 -1
  1085. package/esm2022/scrollbar/index.js +0 -2
  1086. package/esm2022/scrollbar/index.js.map +0 -1
  1087. package/esm2022/scrollbar/lib/scrollbar/scrollbar.js +0 -388
  1088. package/esm2022/scrollbar/lib/scrollbar/scrollbar.js.map +0 -1
  1089. package/esm2022/scrollbar/malva-ui-core-scrollbar.js +0 -5
  1090. package/esm2022/scrollbar/malva-ui-core-scrollbar.js.map +0 -1
  1091. package/esm2022/search-field/index.js +0 -3
  1092. package/esm2022/search-field/index.js.map +0 -1
  1093. package/esm2022/search-field/lib/search-field/search-field.js +0 -535
  1094. package/esm2022/search-field/lib/search-field/search-field.js.map +0 -1
  1095. package/esm2022/search-field/lib/search-field/search-overlay-content.js +0 -35
  1096. package/esm2022/search-field/lib/search-field/search-overlay-content.js.map +0 -1
  1097. package/esm2022/search-field/malva-ui-core-search-field.js +0 -5
  1098. package/esm2022/search-field/malva-ui-core-search-field.js.map +0 -1
  1099. package/esm2022/segmented/index.js +0 -5
  1100. package/esm2022/segmented/index.js.map +0 -1
  1101. package/esm2022/segmented/lib/segmented/segmented.js +0 -248
  1102. package/esm2022/segmented/lib/segmented/segmented.js.map +0 -1
  1103. package/esm2022/segmented/lib/segmented-item/segmented-item.js +0 -194
  1104. package/esm2022/segmented/lib/segmented-item/segmented-item.js.map +0 -1
  1105. package/esm2022/segmented/lib/segmented-token.js +0 -4
  1106. package/esm2022/segmented/lib/segmented-token.js.map +0 -1
  1107. package/esm2022/segmented/lib/segmented.types.js +0 -1
  1108. package/esm2022/segmented/lib/segmented.types.js.map +0 -1
  1109. package/esm2022/segmented/malva-ui-core-segmented.js +0 -5
  1110. package/esm2022/segmented/malva-ui-core-segmented.js.map +0 -1
  1111. package/esm2022/select/index.js +0 -4
  1112. package/esm2022/select/index.js.map +0 -1
  1113. package/esm2022/select/lib/select/select.js +0 -685
  1114. package/esm2022/select/lib/select/select.js.map +0 -1
  1115. package/esm2022/select/lib/select-option.js +0 -2
  1116. package/esm2022/select/lib/select-option.js.map +0 -1
  1117. package/esm2022/select/lib/select-template.directives.js +0 -34
  1118. package/esm2022/select/lib/select-template.directives.js.map +0 -1
  1119. package/esm2022/select/malva-ui-core-select.js +0 -5
  1120. package/esm2022/select/malva-ui-core-select.js.map +0 -1
  1121. package/esm2022/sidebar/index.js +0 -16
  1122. package/esm2022/sidebar/index.js.map +0 -1
  1123. package/esm2022/sidebar/lib/sidebar/sidebar.js +0 -251
  1124. package/esm2022/sidebar/lib/sidebar/sidebar.js.map +0 -1
  1125. package/esm2022/sidebar/lib/sidebar-content.js +0 -37
  1126. package/esm2022/sidebar/lib/sidebar-content.js.map +0 -1
  1127. package/esm2022/sidebar/lib/sidebar-context.js +0 -3
  1128. package/esm2022/sidebar/lib/sidebar-context.js.map +0 -1
  1129. package/esm2022/sidebar/lib/sidebar-footer.js +0 -20
  1130. package/esm2022/sidebar/lib/sidebar-footer.js.map +0 -1
  1131. package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js +0 -341
  1132. package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js.map +0 -1
  1133. package/esm2022/sidebar/lib/sidebar-header.js +0 -20
  1134. package/esm2022/sidebar/lib/sidebar-header.js.map +0 -1
  1135. package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js +0 -216
  1136. package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js.map +0 -1
  1137. package/esm2022/sidebar/lib/sidebar-item-host.js +0 -39
  1138. package/esm2022/sidebar/lib/sidebar-item-host.js.map +0 -1
  1139. package/esm2022/sidebar/lib/sidebar-item-icon.js +0 -14
  1140. package/esm2022/sidebar/lib/sidebar-item-icon.js.map +0 -1
  1141. package/esm2022/sidebar/lib/sidebar-mode.js +0 -1
  1142. package/esm2022/sidebar/lib/sidebar-mode.js.map +0 -1
  1143. package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js +0 -202
  1144. package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js.map +0 -1
  1145. package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js +0 -159
  1146. package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js.map +0 -1
  1147. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js +0 -35
  1148. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js.map +0 -1
  1149. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js +0 -107
  1150. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js.map +0 -1
  1151. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js +0 -1
  1152. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js.map +0 -1
  1153. package/esm2022/sidebar/malva-ui-core-sidebar.js +0 -5
  1154. package/esm2022/sidebar/malva-ui-core-sidebar.js.map +0 -1
  1155. package/esm2022/skeleton/index.js +0 -2
  1156. package/esm2022/skeleton/index.js.map +0 -1
  1157. package/esm2022/skeleton/lib/skeleton/skeleton.js +0 -78
  1158. package/esm2022/skeleton/lib/skeleton/skeleton.js.map +0 -1
  1159. package/esm2022/skeleton/malva-ui-core-skeleton.js +0 -5
  1160. package/esm2022/skeleton/malva-ui-core-skeleton.js.map +0 -1
  1161. package/esm2022/slider/index.js +0 -3
  1162. package/esm2022/slider/index.js.map +0 -1
  1163. package/esm2022/slider/lib/slider/slider-tooltip-def.js +0 -31
  1164. package/esm2022/slider/lib/slider/slider-tooltip-def.js.map +0 -1
  1165. package/esm2022/slider/lib/slider/slider.js +0 -468
  1166. package/esm2022/slider/lib/slider/slider.js.map +0 -1
  1167. package/esm2022/slider/malva-ui-core-slider.js +0 -5
  1168. package/esm2022/slider/malva-ui-core-slider.js.map +0 -1
  1169. package/esm2022/split-pane/index.js +0 -4
  1170. package/esm2022/split-pane/index.js.map +0 -1
  1171. package/esm2022/split-pane/lib/split-pane/split-pane-panel.js +0 -49
  1172. package/esm2022/split-pane/lib/split-pane/split-pane-panel.js.map +0 -1
  1173. package/esm2022/split-pane/lib/split-pane/split-pane.js +0 -290
  1174. package/esm2022/split-pane/lib/split-pane/split-pane.js.map +0 -1
  1175. package/esm2022/split-pane/lib/split-pane/split-pane.types.js +0 -1
  1176. package/esm2022/split-pane/lib/split-pane/split-pane.types.js.map +0 -1
  1177. package/esm2022/split-pane/malva-ui-core-split-pane.js +0 -5
  1178. package/esm2022/split-pane/malva-ui-core-split-pane.js.map +0 -1
  1179. package/esm2022/status-indicator/index.js +0 -2
  1180. package/esm2022/status-indicator/index.js.map +0 -1
  1181. package/esm2022/status-indicator/lib/status-indicator/status-indicator.js +0 -71
  1182. package/esm2022/status-indicator/lib/status-indicator/status-indicator.js.map +0 -1
  1183. package/esm2022/status-indicator/malva-ui-core-status-indicator.js +0 -5
  1184. package/esm2022/status-indicator/malva-ui-core-status-indicator.js.map +0 -1
  1185. package/esm2022/stepper/index.js +0 -5
  1186. package/esm2022/stepper/index.js.map +0 -1
  1187. package/esm2022/stepper/lib/stepper/step-header.js +0 -46
  1188. package/esm2022/stepper/lib/stepper/step-header.js.map +0 -1
  1189. package/esm2022/stepper/lib/stepper/step.js +0 -65
  1190. package/esm2022/stepper/lib/stepper/step.js.map +0 -1
  1191. package/esm2022/stepper/lib/stepper/stepper-token.js +0 -4
  1192. package/esm2022/stepper/lib/stepper/stepper-token.js.map +0 -1
  1193. package/esm2022/stepper/lib/stepper/stepper.js +0 -216
  1194. package/esm2022/stepper/lib/stepper/stepper.js.map +0 -1
  1195. package/esm2022/stepper/lib/stepper/stepper.types.js +0 -1
  1196. package/esm2022/stepper/lib/stepper/stepper.types.js.map +0 -1
  1197. package/esm2022/stepper/malva-ui-core-stepper.js +0 -5
  1198. package/esm2022/stepper/malva-ui-core-stepper.js.map +0 -1
  1199. package/esm2022/switch/index.js +0 -3
  1200. package/esm2022/switch/index.js.map +0 -1
  1201. package/esm2022/switch/lib/switch/switch.js +0 -190
  1202. package/esm2022/switch/lib/switch/switch.js.map +0 -1
  1203. package/esm2022/switch/lib/switch-group/switch-group.js +0 -68
  1204. package/esm2022/switch/lib/switch-group/switch-group.js.map +0 -1
  1205. package/esm2022/switch/lib/switch-group-token.js +0 -3
  1206. package/esm2022/switch/lib/switch-group-token.js.map +0 -1
  1207. package/esm2022/switch/malva-ui-core-switch.js +0 -5
  1208. package/esm2022/switch/malva-ui-core-switch.js.map +0 -1
  1209. package/esm2022/tabs/index.js +0 -9
  1210. package/esm2022/tabs/index.js.map +0 -1
  1211. package/esm2022/tabs/lib/tab/tab.js +0 -72
  1212. package/esm2022/tabs/lib/tab/tab.js.map +0 -1
  1213. package/esm2022/tabs/lib/tab-content/tab-content.js +0 -19
  1214. package/esm2022/tabs/lib/tab-content/tab-content.js.map +0 -1
  1215. package/esm2022/tabs/lib/tab-content-def.js +0 -14
  1216. package/esm2022/tabs/lib/tab-content-def.js.map +0 -1
  1217. package/esm2022/tabs/lib/tab-def.js +0 -17
  1218. package/esm2022/tabs/lib/tab-def.js.map +0 -1
  1219. package/esm2022/tabs/lib/tab-group-token.js +0 -3
  1220. package/esm2022/tabs/lib/tab-group-token.js.map +0 -1
  1221. package/esm2022/tabs/lib/tab-item/tab-item.js +0 -44
  1222. package/esm2022/tabs/lib/tab-item/tab-item.js.map +0 -1
  1223. package/esm2022/tabs/lib/tabs/tabs.js +0 -542
  1224. package/esm2022/tabs/lib/tabs/tabs.js.map +0 -1
  1225. package/esm2022/tabs/lib/tabs.service.js +0 -83
  1226. package/esm2022/tabs/lib/tabs.service.js.map +0 -1
  1227. package/esm2022/tabs/malva-ui-core-tabs.js +0 -5
  1228. package/esm2022/tabs/malva-ui-core-tabs.js.map +0 -1
  1229. package/esm2022/textarea/index.js +0 -2
  1230. package/esm2022/textarea/index.js.map +0 -1
  1231. package/esm2022/textarea/lib/textarea/textarea.js +0 -194
  1232. package/esm2022/textarea/lib/textarea/textarea.js.map +0 -1
  1233. package/esm2022/textarea/malva-ui-core-textarea.js +0 -5
  1234. package/esm2022/textarea/malva-ui-core-textarea.js.map +0 -1
  1235. package/esm2022/tile/index.js +0 -3
  1236. package/esm2022/tile/index.js.map +0 -1
  1237. package/esm2022/tile/lib/tile/tile.js +0 -39
  1238. package/esm2022/tile/lib/tile/tile.js.map +0 -1
  1239. package/esm2022/tile/lib/tile-header.js +0 -14
  1240. package/esm2022/tile/lib/tile-header.js.map +0 -1
  1241. package/esm2022/tile/malva-ui-core-tile.js +0 -5
  1242. package/esm2022/tile/malva-ui-core-tile.js.map +0 -1
  1243. package/esm2022/time-picker/index.js +0 -2
  1244. package/esm2022/time-picker/index.js.map +0 -1
  1245. package/esm2022/time-picker/lib/time-picker/time-picker.js +0 -310
  1246. package/esm2022/time-picker/lib/time-picker/time-picker.js.map +0 -1
  1247. package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js +0 -216
  1248. package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js.map +0 -1
  1249. package/esm2022/time-picker/malva-ui-core-time-picker.js +0 -5
  1250. package/esm2022/time-picker/malva-ui-core-time-picker.js.map +0 -1
  1251. package/esm2022/timeline/index.js +0 -6
  1252. package/esm2022/timeline/index.js.map +0 -1
  1253. package/esm2022/timeline/lib/timeline/timeline-item-icon.js +0 -31
  1254. package/esm2022/timeline/lib/timeline/timeline-item-icon.js.map +0 -1
  1255. package/esm2022/timeline/lib/timeline/timeline-item-meta.js +0 -31
  1256. package/esm2022/timeline/lib/timeline/timeline-item-meta.js.map +0 -1
  1257. package/esm2022/timeline/lib/timeline/timeline-item.js +0 -69
  1258. package/esm2022/timeline/lib/timeline/timeline-item.js.map +0 -1
  1259. package/esm2022/timeline/lib/timeline/timeline.js +0 -36
  1260. package/esm2022/timeline/lib/timeline/timeline.js.map +0 -1
  1261. package/esm2022/timeline/lib/timeline/timeline.types.js +0 -1
  1262. package/esm2022/timeline/lib/timeline/timeline.types.js.map +0 -1
  1263. package/esm2022/timeline/malva-ui-core-timeline.js +0 -5
  1264. package/esm2022/timeline/malva-ui-core-timeline.js.map +0 -1
  1265. package/esm2022/title/index.js +0 -2
  1266. package/esm2022/title/index.js.map +0 -1
  1267. package/esm2022/title/lib/title/title.js +0 -171
  1268. package/esm2022/title/lib/title/title.js.map +0 -1
  1269. package/esm2022/title/malva-ui-core-title.js +0 -5
  1270. package/esm2022/title/malva-ui-core-title.js.map +0 -1
  1271. package/esm2022/toast/index.js +0 -13
  1272. package/esm2022/toast/index.js.map +0 -1
  1273. package/esm2022/toast/lib/abstract-toast-container.js +0 -50
  1274. package/esm2022/toast/lib/abstract-toast-container.js.map +0 -1
  1275. package/esm2022/toast/lib/abstract-toast-item.js +0 -75
  1276. package/esm2022/toast/lib/abstract-toast-item.js.map +0 -1
  1277. package/esm2022/toast/lib/abstract-toast.service.js +0 -176
  1278. package/esm2022/toast/lib/abstract-toast.service.js.map +0 -1
  1279. package/esm2022/toast/lib/toast-container/toast-container.js +0 -61
  1280. package/esm2022/toast/lib/toast-container/toast-container.js.map +0 -1
  1281. package/esm2022/toast/lib/toast-item/toast-item.js +0 -62
  1282. package/esm2022/toast/lib/toast-item/toast-item.js.map +0 -1
  1283. package/esm2022/toast/lib/toast-ref.js +0 -54
  1284. package/esm2022/toast/lib/toast-ref.js.map +0 -1
  1285. package/esm2022/toast/lib/toast-timer.js +0 -37
  1286. package/esm2022/toast/lib/toast-timer.js.map +0 -1
  1287. package/esm2022/toast/lib/toast.directives.js +0 -76
  1288. package/esm2022/toast/lib/toast.directives.js.map +0 -1
  1289. package/esm2022/toast/lib/toast.service.js +0 -127
  1290. package/esm2022/toast/lib/toast.service.js.map +0 -1
  1291. package/esm2022/toast/lib/toast.types.js +0 -39
  1292. package/esm2022/toast/lib/toast.types.js.map +0 -1
  1293. package/esm2022/toast/malva-ui-core-toast.js +0 -5
  1294. package/esm2022/toast/malva-ui-core-toast.js.map +0 -1
  1295. package/esm2022/tokenizer/index.js +0 -4
  1296. package/esm2022/tokenizer/index.js.map +0 -1
  1297. package/esm2022/tokenizer/lib/token/token.js +0 -123
  1298. package/esm2022/tokenizer/lib/token/token.js.map +0 -1
  1299. package/esm2022/tokenizer/lib/token-template.js +0 -23
  1300. package/esm2022/tokenizer/lib/token-template.js.map +0 -1
  1301. package/esm2022/tokenizer/lib/tokenizer/tokenizer.js +0 -324
  1302. package/esm2022/tokenizer/lib/tokenizer/tokenizer.js.map +0 -1
  1303. package/esm2022/tokenizer/malva-ui-core-tokenizer.js +0 -5
  1304. package/esm2022/tokenizer/malva-ui-core-tokenizer.js.map +0 -1
  1305. package/esm2022/toolbar/index.js +0 -4
  1306. package/esm2022/toolbar/index.js.map +0 -1
  1307. package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js +0 -13
  1308. package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js.map +0 -1
  1309. package/esm2022/toolbar/lib/toolbar/toolbar-widget.js +0 -106
  1310. package/esm2022/toolbar/lib/toolbar/toolbar-widget.js.map +0 -1
  1311. package/esm2022/toolbar/lib/toolbar/toolbar.js +0 -19
  1312. package/esm2022/toolbar/lib/toolbar/toolbar.js.map +0 -1
  1313. package/esm2022/toolbar/malva-ui-core-toolbar.js +0 -5
  1314. package/esm2022/toolbar/malva-ui-core-toolbar.js.map +0 -1
  1315. package/esm2022/tooltip/index.js +0 -4
  1316. package/esm2022/tooltip/index.js.map +0 -1
  1317. package/esm2022/tooltip/lib/tooltip/tooltip-panel.js +0 -69
  1318. package/esm2022/tooltip/lib/tooltip/tooltip-panel.js.map +0 -1
  1319. package/esm2022/tooltip/lib/tooltip/tooltip.js +0 -352
  1320. package/esm2022/tooltip/lib/tooltip/tooltip.js.map +0 -1
  1321. package/esm2022/tooltip/lib/tooltip/tooltip.types.js +0 -1
  1322. package/esm2022/tooltip/lib/tooltip/tooltip.types.js.map +0 -1
  1323. package/esm2022/tooltip/malva-ui-core-tooltip.js +0 -5
  1324. package/esm2022/tooltip/malva-ui-core-tooltip.js.map +0 -1
  1325. package/esm2022/tree/index.js +0 -5
  1326. package/esm2022/tree/index.js.map +0 -1
  1327. package/esm2022/tree/lib/tree/tree-context.js +0 -7
  1328. package/esm2022/tree/lib/tree/tree-context.js.map +0 -1
  1329. package/esm2022/tree/lib/tree/tree-node-def.js +0 -34
  1330. package/esm2022/tree/lib/tree/tree-node-def.js.map +0 -1
  1331. package/esm2022/tree/lib/tree/tree-node.js +0 -1
  1332. package/esm2022/tree/lib/tree/tree-node.js.map +0 -1
  1333. package/esm2022/tree/lib/tree/tree-subtree.js +0 -107
  1334. package/esm2022/tree/lib/tree/tree-subtree.js.map +0 -1
  1335. package/esm2022/tree/lib/tree/tree.js +0 -362
  1336. package/esm2022/tree/lib/tree/tree.js.map +0 -1
  1337. package/esm2022/tree/malva-ui-core-tree.js +0 -5
  1338. package/esm2022/tree/malva-ui-core-tree.js.map +0 -1
  1339. package/expand/index.d.ts +0 -2
  1340. package/expand/lib/expand/expand-content.d.ts +0 -26
  1341. package/expand/lib/expand/expand.d.ts +0 -74
  1342. package/expand/malva-ui-core-expand.d.ts +0 -5
  1343. package/file-upload/index.d.ts +0 -4
  1344. package/file-upload/lib/file-upload/file-upload.d.ts +0 -138
  1345. package/file-upload/lib/file-upload/file-upload.types.d.ts +0 -42
  1346. package/file-upload/lib/file-upload-action.d.ts +0 -53
  1347. package/file-upload/lib/file-upload-item/file-upload-item.d.ts +0 -30
  1348. package/file-upload/malva-ui-core-file-upload.d.ts +0 -5
  1349. package/filter/index.d.ts +0 -3
  1350. package/filter/lib/filter/filter.d.ts +0 -156
  1351. package/filter/lib/filter.types.d.ts +0 -75
  1352. package/filter/lib/smart-filter-bar/smart-filter-bar.d.ts +0 -153
  1353. package/filter/malva-ui-core-filter.d.ts +0 -5
  1354. package/form/index.d.ts +0 -6
  1355. package/form/lib/fieldset/fieldset.d.ts +0 -58
  1356. package/form/lib/fieldset-span.d.ts +0 -28
  1357. package/form/lib/form/form.d.ts +0 -37
  1358. package/form/lib/form-actions.d.ts +0 -20
  1359. package/form/lib/form-gap.d.ts +0 -5
  1360. package/form/lib/form-header.d.ts +0 -18
  1361. package/form/lib/form.types.d.ts +0 -13
  1362. package/form/malva-ui-core-form.d.ts +0 -5
  1363. package/form-utils/index.d.ts +0 -15
  1364. package/form-utils/lib/aria-value-bridge.d.ts +0 -45
  1365. package/form-utils/lib/description/description.d.ts +0 -16
  1366. package/form-utils/lib/focusable-group-base.d.ts +0 -76
  1367. package/form-utils/lib/form-control-base/signal-form-control-base.d.ts +0 -159
  1368. package/form-utils/lib/form-control-sides.d.ts +0 -20
  1369. package/form-utils/lib/form-control-wrapper/form-control-wrapper-control.d.ts +0 -6
  1370. package/form-utils/lib/form-control-wrapper/form-control-wrapper.d.ts +0 -20
  1371. package/form-utils/lib/form-field/form-field.d.ts +0 -68
  1372. package/form-utils/lib/hint/hint.d.ts +0 -5
  1373. package/form-utils/lib/label/label.d.ts +0 -22
  1374. package/form-utils/lib/message/message.d.ts +0 -7
  1375. package/form-utils/lib/models/error-display-strategy.d.ts +0 -1
  1376. package/form-utils/lib/models/form-control-connector.d.ts +0 -41
  1377. package/form-utils/lib/models/form-state.d.ts +0 -1
  1378. package/form-utils/lib/selection.service.d.ts +0 -27
  1379. package/form-utils/malva-ui-core-form-utils.d.ts +0 -5
  1380. package/form-utils/testing/index.d.ts +0 -1
  1381. package/form-utils/testing/lib/forms-binding-matrix.d.ts +0 -47
  1382. package/form-utils/testing/malva-ui-core-form-utils-testing.d.ts +0 -5
  1383. package/index.d.ts +0 -69
  1384. package/input/index.d.ts +0 -3
  1385. package/input/lib/input/input-native.d.ts +0 -36
  1386. package/input/lib/input/input-value-accessor.d.ts +0 -11
  1387. package/input/lib/input/input.d.ts +0 -189
  1388. package/input/lib/input/password-strength.d.ts +0 -34
  1389. package/input/malva-ui-core-input.d.ts +0 -5
  1390. package/kbd/index.d.ts +0 -1
  1391. package/kbd/lib/kbd/kbd.d.ts +0 -52
  1392. package/kbd/malva-ui-core-kbd.d.ts +0 -5
  1393. package/layout/index.d.ts +0 -4
  1394. package/layout/lib/layout/directives/MlvLayoutSide.d.ts +0 -6
  1395. package/layout/lib/layout/directives/MlvLayoutTop.d.ts +0 -6
  1396. package/layout/lib/layout/layout.d.ts +0 -20
  1397. package/layout/lib/layout/services/theme.service.d.ts +0 -33
  1398. package/layout/malva-ui-core-layout.d.ts +0 -5
  1399. package/link/index.d.ts +0 -2
  1400. package/link/lib/link/link.d.ts +0 -15
  1401. package/link/lib/link/link.directives.d.ts +0 -10
  1402. package/link/malva-ui-core-link.d.ts +0 -5
  1403. package/list/index.d.ts +0 -13
  1404. package/list/lib/list/list.d.ts +0 -25
  1405. package/list/lib/list-item/list-item.d.ts +0 -67
  1406. package/list/lib/list-item-actions.d.ts +0 -12
  1407. package/list/lib/list-item-byline.d.ts +0 -5
  1408. package/list/lib/list-item-group/list-item-group.d.ts +0 -11
  1409. package/list/lib/list-item-link/list-item-link.d.ts +0 -8
  1410. package/list/lib/list-item-media.d.ts +0 -5
  1411. package/list/lib/list-item-meta.d.ts +0 -5
  1412. package/list/lib/list-item-prefix.d.ts +0 -5
  1413. package/list/lib/list-item-suffix.d.ts +0 -5
  1414. package/list/lib/list-item-template.d.ts +0 -10
  1415. package/list/lib/list-item-title.d.ts +0 -5
  1416. package/list/lib/list-selectable.d.ts +0 -73
  1417. package/list/malva-ui-core-list.d.ts +0 -5
  1418. package/loader/index.d.ts +0 -1
  1419. package/loader/lib/loader/loader.d.ts +0 -84
  1420. package/loader/malva-ui-core-loader.d.ts +0 -5
  1421. package/malva-ui-core.d.ts +0 -5
  1422. package/menu/index.d.ts +0 -9
  1423. package/menu/lib/menu/menu-group-label.d.ts +0 -22
  1424. package/menu/lib/menu/menu-group.d.ts +0 -27
  1425. package/menu/lib/menu/menu-item.d.ts +0 -76
  1426. package/menu/lib/menu/menu-separator.d.ts +0 -18
  1427. package/menu/lib/menu/menu-trigger.d.ts +0 -255
  1428. package/menu/lib/menu/menu.d.ts +0 -149
  1429. package/menu/lib/menu/menu.types.d.ts +0 -13
  1430. package/menu/lib/menu/menubar.d.ts +0 -131
  1431. package/menu/lib/menu/menubar.types.d.ts +0 -82
  1432. package/menu/lib/menu/submenu-aim.d.ts +0 -10
  1433. package/menu/malva-ui-core-menu.d.ts +0 -5
  1434. package/notification/index.d.ts +0 -4
  1435. package/notification/lib/notification-item/notification-item.d.ts +0 -20
  1436. package/notification/lib/notification-ref.d.ts +0 -12
  1437. package/notification/lib/notification.service.d.ts +0 -43
  1438. package/notification/lib/notification.types.d.ts +0 -52
  1439. package/notification/malva-ui-core-notification.d.ts +0 -5
  1440. package/number-input/index.d.ts +0 -1
  1441. package/number-input/lib/number-input/number-input.d.ts +0 -162
  1442. package/number-input/malva-ui-core-number-input.d.ts +0 -5
  1443. package/page/index.d.ts +0 -14
  1444. package/page/lib/page/page-scroll.token.d.ts +0 -19
  1445. package/page/lib/page/page-snap-controller.d.ts +0 -87
  1446. package/page/lib/page/page-snap.directive.d.ts +0 -40
  1447. package/page/lib/page/page.d.ts +0 -74
  1448. package/page/lib/page-content/page-aside.d.ts +0 -7
  1449. package/page/lib/page-content/page-content.d.ts +0 -37
  1450. package/page/lib/page-dock/page-dock.d.ts +0 -50
  1451. package/page/lib/page-dock/page-dock.slots.d.ts +0 -16
  1452. package/page/lib/page-header/page-header.d.ts +0 -77
  1453. package/page/lib/page-header/page-header.directives.d.ts +0 -50
  1454. package/page/lib/page-shell/page-shell-color.d.ts +0 -48
  1455. package/page/lib/page-shell/page-shell-css-color.d.ts +0 -20
  1456. package/page/lib/page-shell/page-shell.d.ts +0 -44
  1457. package/page/lib/page-shell/page-shell.slots.d.ts +0 -16
  1458. package/page/lib/page-summary/page-summary-item.d.ts +0 -11
  1459. package/page/lib/page-summary/page-summary.d.ts +0 -36
  1460. package/page/malva-ui-core-page.d.ts +0 -5
  1461. package/pagination/index.d.ts +0 -4
  1462. package/pagination/lib/pagination/pagination.d.ts +0 -182
  1463. package/pagination/lib/pagination/pagination.directives.d.ts +0 -44
  1464. package/pagination/lib/pagination/pagination.model.d.ts +0 -6
  1465. package/pagination/lib/pagination/pagination.service.d.ts +0 -26
  1466. package/pagination/malva-ui-core-pagination.d.ts +0 -5
  1467. package/pin-input/index.d.ts +0 -2
  1468. package/pin-input/lib/pin-input/pin-input-separator.d.ts +0 -24
  1469. package/pin-input/lib/pin-input/pin-input.d.ts +0 -176
  1470. package/pin-input/malva-ui-core-pin-input.d.ts +0 -5
  1471. package/popup/index.d.ts +0 -9
  1472. package/popup/lib/popup/popup.d.ts +0 -343
  1473. package/popup/lib/popup-container/popup-container.d.ts +0 -61
  1474. package/popup/lib/popup-container/popup-container.token.d.ts +0 -34
  1475. package/popup/lib/popup-content.d.ts +0 -6
  1476. package/popup/lib/popup-header-content.d.ts +0 -18
  1477. package/popup/lib/popup-pinned-content.d.ts +0 -17
  1478. package/popup/lib/popup-positions.d.ts +0 -105
  1479. package/popup/lib/popup-trigger/popup-trigger.d.ts +0 -102
  1480. package/popup/lib/popup.service.d.ts +0 -159
  1481. package/popup/malva-ui-core-popup.d.ts +0 -5
  1482. package/progress/index.d.ts +0 -1
  1483. package/progress/lib/progress/progress.d.ts +0 -69
  1484. package/progress/malva-ui-core-progress.d.ts +0 -5
  1485. package/radio/index.d.ts +0 -2
  1486. package/radio/lib/radio/radio.d.ts +0 -87
  1487. package/radio/lib/radio-group/radio-group.d.ts +0 -35
  1488. package/radio/lib/radio-group-token.d.ts +0 -7
  1489. package/radio/malva-ui-core-radio.d.ts +0 -5
  1490. package/rating/index.d.ts +0 -1
  1491. package/rating/lib/rating/rating.d.ts +0 -100
  1492. package/rating/malva-ui-core-rating.d.ts +0 -5
  1493. package/scrollbar/index.d.ts +0 -1
  1494. package/scrollbar/lib/scrollbar/scrollbar.d.ts +0 -166
  1495. package/scrollbar/malva-ui-core-scrollbar.d.ts +0 -5
  1496. package/search-field/index.d.ts +0 -2
  1497. package/search-field/lib/search-field/search-field.d.ts +0 -347
  1498. package/search-field/lib/search-field/search-overlay-content.d.ts +0 -59
  1499. package/search-field/malva-ui-core-search-field.d.ts +0 -5
  1500. package/segmented/index.d.ts +0 -4
  1501. package/segmented/lib/segmented/segmented.d.ts +0 -80
  1502. package/segmented/lib/segmented-item/segmented-item.d.ts +0 -89
  1503. package/segmented/lib/segmented-token.d.ts +0 -22
  1504. package/segmented/lib/segmented.types.d.ts +0 -9
  1505. package/segmented/malva-ui-core-segmented.d.ts +0 -5
  1506. package/select/index.d.ts +0 -3
  1507. package/select/lib/select/select.d.ts +0 -379
  1508. package/select/lib/select-option.d.ts +0 -1
  1509. package/select/lib/select-template.directives.d.ts +0 -14
  1510. package/select/malva-ui-core-select.d.ts +0 -5
  1511. package/sidebar/index.d.ts +0 -15
  1512. package/sidebar/lib/sidebar/sidebar.d.ts +0 -134
  1513. package/sidebar/lib/sidebar-content.d.ts +0 -11
  1514. package/sidebar/lib/sidebar-context.d.ts +0 -23
  1515. package/sidebar/lib/sidebar-footer.d.ts +0 -9
  1516. package/sidebar/lib/sidebar-group/sidebar-group.d.ts +0 -127
  1517. package/sidebar/lib/sidebar-header.d.ts +0 -9
  1518. package/sidebar/lib/sidebar-item/sidebar-item.d.ts +0 -104
  1519. package/sidebar/lib/sidebar-item-host.d.ts +0 -18
  1520. package/sidebar/lib/sidebar-item-icon.d.ts +0 -6
  1521. package/sidebar/lib/sidebar-mode.d.ts +0 -2
  1522. package/sidebar/lib/sidebar-rail/sidebar-rail.d.ts +0 -54
  1523. package/sidebar/lib/sidebar-trigger/sidebar-trigger.d.ts +0 -67
  1524. package/sidebar/lib/sidebar-workspace/sidebar-workspace.d.ts +0 -54
  1525. package/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.d.ts +0 -19
  1526. package/sidebar/lib/sidebar-workspace/sidebar-workspace.types.d.ts +0 -20
  1527. package/sidebar/malva-ui-core-sidebar.d.ts +0 -5
  1528. package/skeleton/index.d.ts +0 -1
  1529. package/skeleton/lib/skeleton/skeleton.d.ts +0 -60
  1530. package/skeleton/malva-ui-core-skeleton.d.ts +0 -5
  1531. package/slider/index.d.ts +0 -2
  1532. package/slider/lib/slider/slider-tooltip-def.d.ts +0 -39
  1533. package/slider/lib/slider/slider.d.ts +0 -171
  1534. package/slider/malva-ui-core-slider.d.ts +0 -5
  1535. package/split-pane/index.d.ts +0 -3
  1536. package/split-pane/lib/split-pane/split-pane-panel.d.ts +0 -34
  1537. package/split-pane/lib/split-pane/split-pane.d.ts +0 -98
  1538. package/split-pane/lib/split-pane/split-pane.types.d.ts +0 -7
  1539. package/split-pane/malva-ui-core-split-pane.d.ts +0 -5
  1540. package/status-indicator/index.d.ts +0 -1
  1541. package/status-indicator/lib/status-indicator/status-indicator.d.ts +0 -61
  1542. package/status-indicator/malva-ui-core-status-indicator.d.ts +0 -5
  1543. package/stepper/index.d.ts +0 -4
  1544. package/stepper/lib/stepper/step-header.d.ts +0 -34
  1545. package/stepper/lib/stepper/step.d.ts +0 -51
  1546. package/stepper/lib/stepper/stepper-token.d.ts +0 -13
  1547. package/stepper/lib/stepper/stepper.d.ts +0 -98
  1548. package/stepper/lib/stepper/stepper.types.d.ts +0 -4
  1549. package/stepper/malva-ui-core-stepper.d.ts +0 -5
  1550. package/switch/index.d.ts +0 -2
  1551. package/switch/lib/switch/switch.d.ts +0 -118
  1552. package/switch/lib/switch-group/switch-group.d.ts +0 -24
  1553. package/switch/lib/switch-group-token.d.ts +0 -6
  1554. package/switch/malva-ui-core-switch.d.ts +0 -5
  1555. package/tabs/index.d.ts +0 -8
  1556. package/tabs/lib/tab/tab.d.ts +0 -46
  1557. package/tabs/lib/tab-content/tab-content.d.ts +0 -11
  1558. package/tabs/lib/tab-content-def.d.ts +0 -6
  1559. package/tabs/lib/tab-def.d.ts +0 -11
  1560. package/tabs/lib/tab-group-token.d.ts +0 -10
  1561. package/tabs/lib/tab-item/tab-item.d.ts +0 -28
  1562. package/tabs/lib/tabs/tabs.d.ts +0 -202
  1563. package/tabs/lib/tabs.service.d.ts +0 -24
  1564. package/tabs/malva-ui-core-tabs.d.ts +0 -5
  1565. package/textarea/index.d.ts +0 -1
  1566. package/textarea/lib/textarea/textarea.d.ts +0 -77
  1567. package/textarea/malva-ui-core-textarea.d.ts +0 -5
  1568. package/tile/index.d.ts +0 -2
  1569. package/tile/lib/tile/tile.d.ts +0 -20
  1570. package/tile/lib/tile-header.d.ts +0 -6
  1571. package/tile/malva-ui-core-tile.d.ts +0 -5
  1572. package/time-picker/index.d.ts +0 -1
  1573. package/time-picker/lib/time-picker/time-picker.d.ts +0 -135
  1574. package/time-picker/lib/time-picker-column/time-picker-column.d.ts +0 -111
  1575. package/time-picker/malva-ui-core-time-picker.d.ts +0 -5
  1576. package/timeline/index.d.ts +0 -5
  1577. package/timeline/lib/timeline/timeline-item-icon.d.ts +0 -24
  1578. package/timeline/lib/timeline/timeline-item-meta.d.ts +0 -24
  1579. package/timeline/lib/timeline/timeline-item.d.ts +0 -52
  1580. package/timeline/lib/timeline/timeline.d.ts +0 -27
  1581. package/timeline/lib/timeline/timeline.types.d.ts +0 -18
  1582. package/timeline/malva-ui-core-timeline.d.ts +0 -5
  1583. package/title/index.d.ts +0 -1
  1584. package/title/lib/title/title.d.ts +0 -63
  1585. package/title/malva-ui-core-title.d.ts +0 -5
  1586. package/toast/index.d.ts +0 -10
  1587. package/toast/lib/abstract-toast-container.d.ts +0 -29
  1588. package/toast/lib/abstract-toast-item.d.ts +0 -44
  1589. package/toast/lib/abstract-toast.service.d.ts +0 -75
  1590. package/toast/lib/toast-container/toast-container.d.ts +0 -23
  1591. package/toast/lib/toast-item/toast-item.d.ts +0 -25
  1592. package/toast/lib/toast-ref.d.ts +0 -33
  1593. package/toast/lib/toast-timer.d.ts +0 -24
  1594. package/toast/lib/toast.directives.d.ts +0 -13
  1595. package/toast/lib/toast.service.d.ts +0 -41
  1596. package/toast/lib/toast.types.d.ts +0 -139
  1597. package/toast/malva-ui-core-toast.d.ts +0 -5
  1598. package/tokenizer/index.d.ts +0 -3
  1599. package/tokenizer/lib/token/token.d.ts +0 -60
  1600. package/tokenizer/lib/token-template.d.ts +0 -29
  1601. package/tokenizer/lib/tokenizer/tokenizer.d.ts +0 -109
  1602. package/tokenizer/malva-ui-core-tokenizer.d.ts +0 -5
  1603. package/toolbar/index.d.ts +0 -3
  1604. package/toolbar/lib/toolbar/toolbar-spacer.d.ts +0 -5
  1605. package/toolbar/lib/toolbar/toolbar-widget.d.ts +0 -75
  1606. package/toolbar/lib/toolbar/toolbar.d.ts +0 -8
  1607. package/toolbar/malva-ui-core-toolbar.d.ts +0 -5
  1608. package/tooltip/index.d.ts +0 -3
  1609. package/tooltip/lib/tooltip/tooltip-panel.d.ts +0 -26
  1610. package/tooltip/lib/tooltip/tooltip.d.ts +0 -148
  1611. package/tooltip/lib/tooltip/tooltip.types.d.ts +0 -17
  1612. package/tooltip/malva-ui-core-tooltip.d.ts +0 -5
  1613. package/tree/index.d.ts +0 -4
  1614. package/tree/lib/tree/tree-context.d.ts +0 -62
  1615. package/tree/lib/tree/tree-node-def.d.ts +0 -33
  1616. package/tree/lib/tree/tree-node.d.ts +0 -45
  1617. package/tree/lib/tree/tree-subtree.d.ts +0 -63
  1618. package/tree/lib/tree/tree.d.ts +0 -156
  1619. package/tree/malva-ui-core-tree.d.ts +0 -5
@@ -0,0 +1,1898 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, inject, DestroyRef, computed, Injectable, InjectionToken, input, viewChild, NgZone, ElementRef, afterNextRender, afterRenderEffect, ChangeDetectionStrategy, ViewEncapsulation, Component, Directive, TemplateRef, model, output, contentChild, Injector, effect } from '@angular/core';
3
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
+ import { mlvNextId, MlvBreakpointService, MlvStructural, MlvResizeObserverService } from '@malva-ui/cdk/utils';
5
+ import { MlvScrollbar } from '@malva-ui/core/scrollbar';
6
+ import { NgTemplateOutlet } from '@angular/common';
7
+ import { MlvDrawer, MlvDrawerContent } from '@malva-ui/core/drawer';
8
+ import { RouterLink } from '@angular/router';
9
+ import { LucideChevronLeft, LucideChevronUp, LucidePin, LucidePinOff } from '@lucide/angular';
10
+ import { MlvButton } from '@malva-ui/core/button';
11
+ import { MlvLink, MlvLinkBefore } from '@malva-ui/core/link';
12
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
13
+
14
+ /**
15
+ * Owns the snap progress of a page's collapsing top chrome.
16
+ *
17
+ * Progress is **scroll-scrubbed**: `main[mlvPage]` maps its scroll offset onto
18
+ * a 0..1 timeline (`snapRange` pixels of scroll = the full timeline), so
19
+ * chrome motion is proportional to scrolling instead of a time-based
20
+ * animation. The effective value is published as the `--mlv-page-snap` CSS
21
+ * custom property on the page host; elements interpolate their own state from
22
+ * it (see `MlvPageSnap`).
23
+ *
24
+ * Pinning distinguishes its origin:
25
+ * - **Manual** (chevron toggle): an explicit choice — while manually pinned
26
+ * collapsed, the geometry-compensation spacer is reclaimed (`spacerScale`
27
+ * tweens to 0) so no dead space remains above the content, including at the
28
+ * top of the page.
29
+ * - **Scroll** (pin button freezing a scroll-derived state): the frozen state
30
+ * is a scroll artifact — when the user returns to the top, the controller
31
+ * unpins automatically and the chrome expands.
32
+ *
33
+ * `expand()` / `collapse()` drive the same manual pin imperatively; `expand()`
34
+ * additionally reveals every registered `MlvPageSnapRegion` on the spot, so
35
+ * consumers can focus a control inside chrome the scroll had collapsed.
36
+ *
37
+ * Provided by `MlvPage`. Inject optionally from header/summary components and
38
+ * snap directives — absence simply means "no scroll-linked behaviour".
39
+ */
40
+ class MlvPageSnapController {
41
+ /** @private Raw scroll-derived progress, 0 (top) .. 1 (fully snapped). */
42
+ _scrollProgress = signal(0, /* @ts-ignore */
43
+ ...(ngDevMode ? [{ debugName: "_scrollProgress" }] : /* istanbul ignore next */ []));
44
+ /**
45
+ * @private Frozen progress while pinned or after a manual toggle;
46
+ * `null` means the progress follows the scroll position.
47
+ */
48
+ _frozen = signal(null, /* @ts-ignore */
49
+ ...(ngDevMode ? [{ debugName: "_frozen" }] : /* istanbul ignore next */ []));
50
+ /** @private How the current frozen state was produced. */
51
+ _pinOrigin = null;
52
+ /**
53
+ * @private Scale applied by `MlvPage` to the geometry-compensation spacer;
54
+ * tweens to 0 while manually pinned collapsed (dead space reclaimed).
55
+ */
56
+ _spacerScale = signal(1, /* @ts-ignore */
57
+ ...(ngDevMode ? [{ debugName: "_spacerScale" }] : /* istanbul ignore next */ []));
58
+ /** @private Frame handles of the running tweens, per animated signal. */
59
+ _tweenFrames = new Map();
60
+ /** @private Adapter so the frozen tween can share the signal tween helper. */
61
+ _frozenNumber = signal(0, /* @ts-ignore */
62
+ ...(ngDevMode ? [{ debugName: "_frozenNumber" }] : /* istanbul ignore next */ []));
63
+ /** @private Cancels pending tweens when the owning page is destroyed. */
64
+ _destroyRef = inject(DestroyRef);
65
+ /** @private Snap regions that `expand()` reveals ahead of the tween. */
66
+ _regions = new Set();
67
+ /** @private Backs the `revealing` bridge flag. */
68
+ _revealing = signal(false, /* @ts-ignore */
69
+ ...(ngDevMode ? [{ debugName: "_revealing" }] : /* istanbul ignore next */ []));
70
+ /** Effective snap progress: 0 fully expanded, 1 fully snapped. */
71
+ progress = computed(() => this._frozen() ?? this._scrollProgress(), /* @ts-ignore */
72
+ ...(ngDevMode ? [{ debugName: "progress" }] : /* istanbul ignore next */ []));
73
+ /** True while the chrome state is frozen and ignores scrolling. */
74
+ pinned = computed(() => this._frozen() !== null, /* @ts-ignore */
75
+ ...(ngDevMode ? [{ debugName: "pinned" }] : /* istanbul ignore next */ []));
76
+ /** True once the chrome is closer to its snapped state than the open one. */
77
+ snapped = computed(() => this.progress() >= 0.5, /* @ts-ignore */
78
+ ...(ngDevMode ? [{ debugName: "snapped" }] : /* istanbul ignore next */ []));
79
+ /**
80
+ * @internal True while `expand()` bridges its own tween: snap regions stay
81
+ * visible — and therefore focusable — from the call itself until the
82
+ * progress has left their window. Read by `MlvPageSnap`.
83
+ */
84
+ revealing = this._revealing;
85
+ /**
86
+ * Multiplier for the geometry-compensation spacer, 1 (full compensation)
87
+ * .. 0 (reclaimed). Consumed by `MlvPage`.
88
+ */
89
+ spacerScale = this._spacerScale;
90
+ constructor() {
91
+ this._destroyRef.onDestroy(() => {
92
+ for (const frame of this._tweenFrames.values()) {
93
+ cancelAnimationFrame(frame);
94
+ }
95
+ this._tweenFrames.clear();
96
+ });
97
+ }
98
+ /**
99
+ * @internal Registers a snap region so `expand()` can reveal it. Called by
100
+ * `MlvPageSnap`; the returned callback unregisters on destroy.
101
+ */
102
+ registerRegion(region) {
103
+ this._regions.add(region);
104
+ return () => {
105
+ this._regions.delete(region);
106
+ };
107
+ }
108
+ /**
109
+ * @internal Called by `MlvPage` on every scroll event of its viewport.
110
+ * A pinned controller keeps reporting the frozen value; a scroll-origin
111
+ * pin releases itself once the user returns to the top, where the frozen
112
+ * scroll artifact would only leave dead space.
113
+ */
114
+ updateFromScroll(scrollTop, snapRange) {
115
+ const progress = snapRange > 0 ? Math.min(Math.max(scrollTop / snapRange, 0), 1) : 0;
116
+ this._scrollProgress.set(progress);
117
+ if (this.pinned() && this._pinOrigin === 'scroll' && scrollTop <= 1) {
118
+ this.setPinned(false);
119
+ }
120
+ }
121
+ /**
122
+ * Pins the chrome at its current progress (`true`) or releases it back to
123
+ * scroll-following (`false`, animating to the scroll-derived value). A pin
124
+ * taken from a scroll-following state is a scroll-origin pin; pinning while
125
+ * already frozen by the chevron keeps the manual origin.
126
+ */
127
+ setPinned(pinned) {
128
+ if (pinned === this.pinned()) {
129
+ return;
130
+ }
131
+ if (pinned) {
132
+ this._cancelTween(this._frozenNumber);
133
+ this._pinOrigin ??= 'scroll';
134
+ this._frozen.set(this.progress());
135
+ return;
136
+ }
137
+ this._pinOrigin = null;
138
+ // Releasing the pin cancels a running expand tween as well.
139
+ this._endReveal();
140
+ this._animateSignal(this._spacerScale, 1);
141
+ this._animateFrozenTo(this._scrollProgress(), () => this._frozen.set(null));
142
+ }
143
+ /**
144
+ * Snaps the chrome fully open or closed (the chevron control). The result
145
+ * is a manual pin — otherwise the very next scroll event would undo the
146
+ * choice. Collapsing manually also reclaims the compensation spacer so no
147
+ * dead space remains above the content.
148
+ */
149
+ toggle() {
150
+ if (this.snapped()) {
151
+ this.expand();
152
+ }
153
+ else {
154
+ this.collapse();
155
+ }
156
+ }
157
+ /**
158
+ * Expands the chrome regardless of the scroll position and pins it there
159
+ * (a manual pin, like the chevron control). Every registered snap region is
160
+ * revealed **synchronously**, before the tween starts, so a consumer can
161
+ * move focus into collapsed chrome in the same task:
162
+ *
163
+ * ```ts
164
+ * this.snap.expand();
165
+ * headerTab.focus();
166
+ * ```
167
+ */
168
+ expand() {
169
+ for (const region of this._regions) {
170
+ region.reveal();
171
+ }
172
+ this._revealing.set(true);
173
+ this._pinOrigin = 'manual';
174
+ this._animateSignal(this._spacerScale, 1);
175
+ this._animateFrozenTo(0, () => this._endReveal());
176
+ }
177
+ /**
178
+ * Collapses the chrome regardless of the scroll position and pins it there,
179
+ * reclaiming the compensation spacer so no dead space remains above the
180
+ * content.
181
+ */
182
+ collapse() {
183
+ // Collapsing cancels the expand tween, so the bridge that outlived it
184
+ // would strand every region visible-but-scrubbed — an invisible tab stop.
185
+ this._endReveal();
186
+ this._pinOrigin = 'manual';
187
+ this._animateSignal(this._spacerScale, 0);
188
+ this._animateFrozenTo(1);
189
+ }
190
+ /**
191
+ * @private Ends the reveal bridge and hands every region back its own
192
+ * hidden state. `reveal()` writes the DOM ahead of change detection, so a
193
+ * bridge that opens and closes without a render in between would otherwise
194
+ * leave the host binding's cached value disagreeing with the element.
195
+ */
196
+ _endReveal() {
197
+ if (!this._revealing()) {
198
+ return;
199
+ }
200
+ this._revealing.set(false);
201
+ for (const region of this._regions) {
202
+ region.syncHiddenState();
203
+ }
204
+ }
205
+ /** @private Tweens the frozen progress via the shared signal tween. */
206
+ _animateFrozenTo(target, done) {
207
+ this._frozenNumber.set(this.progress());
208
+ this._frozen.set(this.progress());
209
+ this._animateSignal(this._frozenNumber, target, done, (value) => this._frozen.set(value));
210
+ }
211
+ /** @private rAF tween so manual state changes stay smooth. */
212
+ _animateSignal(target, to, done, mirror) {
213
+ this._cancelTween(target);
214
+ const from = target();
215
+ const reducedMotion = typeof matchMedia !== 'undefined' &&
216
+ matchMedia('(prefers-reduced-motion: reduce)').matches;
217
+ if (reducedMotion ||
218
+ typeof requestAnimationFrame === 'undefined' ||
219
+ Math.abs(to - from) < 0.001) {
220
+ target.set(to);
221
+ mirror?.(to);
222
+ done?.();
223
+ return;
224
+ }
225
+ const durationMs = 200;
226
+ let startTime = null;
227
+ const step = (now) => {
228
+ startTime ??= now;
229
+ const t = Math.min((now - startTime) / durationMs, 1);
230
+ const eased = 1 - (1 - t) ** 3;
231
+ const value = from + (to - from) * eased;
232
+ target.set(value);
233
+ mirror?.(value);
234
+ if (t < 1) {
235
+ this._tweenFrames.set(target, requestAnimationFrame(step));
236
+ }
237
+ else {
238
+ this._tweenFrames.delete(target);
239
+ done?.();
240
+ }
241
+ };
242
+ this._tweenFrames.set(target, requestAnimationFrame(step));
243
+ }
244
+ /** @private Stops the running tween of one signal, if any. */
245
+ _cancelTween(target) {
246
+ const frame = this._tweenFrames.get(target);
247
+ if (frame !== undefined) {
248
+ cancelAnimationFrame(frame);
249
+ this._tweenFrames.delete(target);
250
+ }
251
+ }
252
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSnapController, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
253
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSnapController });
254
+ }
255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSnapController, decorators: [{
256
+ type: Injectable
257
+ }], ctorParameters: () => [] });
258
+
259
+ /**
260
+ * Injection token provided by `main[mlvPage]` so descendants can react to the
261
+ * page's scroll position without knowing which element owns scrolling.
262
+ * Inject optionally — components keep working outside a page, just without
263
+ * scroll-linked behaviour.
264
+ */
265
+ const MLV_PAGE_SCROLL = new InjectionToken('MLV_PAGE_SCROLL');
266
+
267
+ /**
268
+ * Scroll offset in pixels below which the page reports itself as unscrolled.
269
+ * The small hysteresis avoids flicker from sub-pixel scroll positions.
270
+ */
271
+ const SCROLLED_THRESHOLD = 4;
272
+ /**
273
+ * Main page surface and scroll owner. Apply it to the page's native `<main>`
274
+ * landmark and compose headers, content grids, and feature components inside.
275
+ *
276
+ * Provides `MLV_PAGE_SCROLL` so descendants such as `mlv-page-header` and
277
+ * `mlv-page-summary` can react to the page's scroll position, and
278
+ * `MlvPageSnapController`, whose scroll-scrubbed progress it publishes as the
279
+ * `--mlv-page-snap` custom property (0 expanded .. 1 snapped) for descendants
280
+ * to interpolate their snap state from.
281
+ */
282
+ class MlvPage {
283
+ /** Unique landmark id; set explicitly when targeting the page from a skip link. */
284
+ id = input(mlvNextId('mlv-page'), /* @ts-ignore */
285
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
286
+ /** Selects whether the page or a consumer-owned region handles scrolling. */
287
+ scroll = input('auto', /* @ts-ignore */
288
+ ...(ngDevMode ? [{ debugName: "scroll" }] : /* istanbul ignore next */ []));
289
+ /** Optional maximum width for the centred inner page canvas. */
290
+ maxWidth = input(null, /* @ts-ignore */
291
+ ...(ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []));
292
+ /** Selects the responsive inset applied around projected page content. */
293
+ padding = input('m', /* @ts-ignore */
294
+ ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
295
+ /** Selects the anchored rounded canvas or a completely flat surface. */
296
+ surface = input('anchored', /* @ts-ignore */
297
+ ...(ngDevMode ? [{ debugName: "surface" }] : /* istanbul ignore next */ []));
298
+ /** Makes projected page headers sticky within this page's scroll container. */
299
+ stickyHeader = input(true, { ...(ngDevMode ? { debugName: "stickyHeader" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
300
+ /**
301
+ * Scroll distance in pixels mapped onto the full snap timeline: scrolling
302
+ * this far takes the top chrome from fully expanded to fully snapped.
303
+ */
304
+ snapRange = input(96, /* @ts-ignore */
305
+ ...(ngDevMode ? [{ debugName: "snapRange" }] : /* istanbul ignore next */ []));
306
+ /** Current vertical scroll offset of the page scroll owner, in pixels. */
307
+ get scrollTop() {
308
+ return this._scrollTop.asReadonly();
309
+ }
310
+ /** True once the page has scrolled past a small hysteresis threshold. */
311
+ get scrolled() {
312
+ return this._scrolled.asReadonly();
313
+ }
314
+ /**
315
+ * Snap controller of this page's collapsing top chrome. Descendants inject
316
+ * `MlvPageSnapController` directly; a component that only *hosts* the page
317
+ * reaches it from outside through `viewChild(MlvPage).snap` — for instance
318
+ * to `expand()` the chrome before moving focus into it.
319
+ */
320
+ get snap() {
321
+ return this._snap;
322
+ }
323
+ /** @private Writable source behind the public `scrollTop` signal. */
324
+ _scrollTop = signal(0, /* @ts-ignore */
325
+ ...(ngDevMode ? [{ debugName: "_scrollTop" }] : /* istanbul ignore next */ []));
326
+ /** @private Writable source behind the public `scrolled` signal. */
327
+ _scrolled = signal(false, /* @ts-ignore */
328
+ ...(ngDevMode ? [{ debugName: "_scrolled" }] : /* istanbul ignore next */ []));
329
+ /** @private The page-owned scrollbar whose viewport is observed. */
330
+ _scrollbar = viewChild.required(MlvScrollbar, /* @ts-ignore */
331
+ ...(ngDevMode ? [{ debugName: "_scrollbar" }] : /* istanbul ignore next */ []));
332
+ /** @private Zone reference; the scroll listener runs outside the zone. */
333
+ _ngZone = inject(NgZone);
334
+ /** @private Cleans up the native scroll listener. */
335
+ _destroyRef = inject(DestroyRef);
336
+ /** @private Snap state provided to descendants and scrubbed from scroll. */
337
+ _snap = inject(MlvPageSnapController);
338
+ /** @private Host element carrying the published snap custom property. */
339
+ _elementRef = inject(ElementRef);
340
+ constructor() {
341
+ afterNextRender(() => {
342
+ const viewport = this._scrollbar().viewportElement;
343
+ const onScroll = () => {
344
+ const top = viewport.scrollTop;
345
+ this._scrollTop.set(top);
346
+ this._scrolled.set(top > SCROLLED_THRESHOLD);
347
+ this._snap.updateFromScroll(top, this.snapRange());
348
+ };
349
+ // Signal writes propagate through the reactivity graph without zone
350
+ // involvement, so the frequent listener can stay outside the zone.
351
+ this._ngZone.runOutsideAngular(() => {
352
+ viewport.addEventListener('scroll', onScroll, { passive: true });
353
+ });
354
+ this._destroyRef.onDestroy(() => {
355
+ viewport.removeEventListener('scroll', onScroll);
356
+ });
357
+ });
358
+ // Publish the effective snap progress as a CSS custom property so
359
+ // descendant styles can scrub their state with pure calc() interpolation,
360
+ // then rebalance the chrome spacer against the freshly applied progress.
361
+ afterRenderEffect(() => {
362
+ const progress = this._snap.progress();
363
+ // Track the spacer scale too: the reclaim tween must republish.
364
+ this._snap.spacerScale();
365
+ this._elementRef.nativeElement.style.setProperty('--mlv-page-snap', String(Math.round(progress * 1000) / 1000));
366
+ this._measureSnapOffset();
367
+ });
368
+ afterNextRender(() => {
369
+ const host = this._elementRef.nativeElement;
370
+ this._snapChrome = Array.from(host.querySelectorAll('.mlv-page__inner > .mlv-page-header, .mlv-page__inner > .mlv-page-summary'));
371
+ this._measureSnapOffset();
372
+ // Re-measure when chrome content itself resizes (wrapping, data).
373
+ if (typeof ResizeObserver !== 'undefined') {
374
+ const observer = new ResizeObserver(() => this._measureSnapOffset());
375
+ this._snapChrome.forEach((element) => observer.observe(element));
376
+ this._destroyRef.onDestroy(() => observer.disconnect());
377
+ }
378
+ });
379
+ }
380
+ /** @private Direct chrome children whose snapping height is compensated. */
381
+ _snapChrome = [];
382
+ /** @private Expanded (progress 0) chrome height, the compensation baseline. */
383
+ _snapExpandedHeight = 0;
384
+ /**
385
+ * @private Snapping shrinks in-flow chrome (the header with its projected
386
+ * summary row), which would shift the content and the scroll height while
387
+ * the user is still scrolling — a feedback loop that reads as mid-scroll
388
+ * jumping. The removed height is re-added as a spacer after the chrome
389
+ * (`--mlv-page-snap-offset`), keeping the document geometry stable so
390
+ * content tracks the scroll 1:1. The controller's `spacerScale` scales the
391
+ * spacer away while the chrome is manually pinned collapsed — a frozen
392
+ * chrome never changes height mid-scroll, so the spacer is pure dead space.
393
+ */
394
+ _measureSnapOffset() {
395
+ if (this._snapChrome.length === 0) {
396
+ return;
397
+ }
398
+ const total = this._snapChrome.reduce((sum, element) => sum + element.offsetHeight, 0);
399
+ if (this._snap.progress() <= 0.001) {
400
+ this._snapExpandedHeight = total;
401
+ }
402
+ const offset = Math.max(0, this._snapExpandedHeight - total) * this._snap.spacerScale();
403
+ this._elementRef.nativeElement.style.setProperty('--mlv-page-snap-offset', `${Math.round(offset * 100) / 100}px`);
404
+ }
405
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPage, deps: [], target: i0.ɵɵFactoryTarget.Component });
406
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: MlvPage, isStandalone: true, selector: "main[mlvPage]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, scroll: { classPropertyName: "scroll", publicName: "scroll", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, surface: { classPropertyName: "surface", publicName: "surface", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null }, snapRange: { classPropertyName: "snapRange", publicName: "snapRange", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "-1" }, properties: { "id": "id()", "class.mlv-page--scroll-auto": "scroll() === \"auto\"", "class.mlv-page--scroll-none": "scroll() === \"none\"", "class.mlv-page--padding-none": "padding() === \"none\"", "class.mlv-page--padding-s": "padding() === \"s\"", "class.mlv-page--padding-m": "padding() === \"m\"", "class.mlv-page--padding-l": "padding() === \"l\"", "class.mlv-page--surface-anchored": "surface() === \"anchored\"", "class.mlv-page--surface-flat": "surface() === \"flat\"", "class.mlv-page--sticky-header": "stickyHeader()", "class.mlv-page--scrolled": "scrolled()", "style.--mlv-page-max-width": "maxWidth()" }, classAttribute: "mlv-page" }, providers: [
407
+ { provide: MLV_PAGE_SCROLL, useExisting: MlvPage },
408
+ MlvPageSnapController,
409
+ ], viewQueries: [{ propertyName: "_scrollbar", first: true, predicate: MlvScrollbar, descendants: true, isSignal: true }], ngImport: i0, template: `
410
+ <mlv-scrollbar class="mlv-page__scrollbar" [disabled]="scroll() === 'none'">
411
+ <div class="mlv-page__inner"><ng-content /></div>
412
+ </mlv-scrollbar>
413
+ `, isInline: true, styles: ["@layer mlv.components{.mlv-page{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page *{box-sizing:border-box}.mlv-page{display:block;flex:1 1 auto;min-width:0;min-height:0;color:var(--mlv-text-primary);background:var(--mlv-background-base);outline:none;isolation:isolate;--mlv-page-surface-radius: 0rem}.mlv-page__scrollbar{width:100%;height:100%;min-height:0}.mlv-page__scrollbar .mlv-scrollbar__viewport{overflow-x:hidden;scroll-padding-top:var(--mlv-page-header-offset, 6rem);overflow-anchor:none}.mlv-page__inner{container-type:inline-size;width:100%;min-height:100%;max-width:var(--mlv-page-max-width, none);margin-inline:auto}.mlv-page--surface-anchored{--mlv-page-surface-radius: calc( var(--mlv-radius-xl) - .0625rem );border:.0625rem solid var(--mlv-border-subtle);border-bottom:0;border-radius:var(--mlv-radius-xl) var(--mlv-radius-xl) 0 0}.mlv-page--surface-flat{--mlv-page-surface-radius: 0rem;border-radius:0}.mlv-page--scroll-auto,.mlv-page--scroll-none,.mlv-page--scroll-none .mlv-page__scrollbar .mlv-scrollbar__viewport{overflow:clip}.mlv-page--padding-none .mlv-page__inner{--mlv-page-inset: 0rem;padding:0}.mlv-page--padding-s .mlv-page__inner{--mlv-page-inset: var(--mlv-spacing-1-5);padding:var(--mlv-page-inset)}.mlv-page--padding-m .mlv-page__inner{--mlv-page-inset: var(--mlv-spacing-2);padding:var(--mlv-page-inset)}.mlv-page--padding-l .mlv-page__inner{--mlv-page-inset: var(--mlv-spacing-3);padding:var(--mlv-page-inset)}.mlv-page__inner>.mlv-page-header,.mlv-page__inner>.mlv-page-summary{margin-inline:calc(-1 * var(--mlv-page-inset, 0rem))}.mlv-page__inner>.mlv-page-header{margin-top:calc(-1 * var(--mlv-page-inset, 0rem));border-radius:0}.mlv-page__inner>.mlv-page-header:first-child,.mlv-page__inner>.mlv-page-summary:first-child{border-radius:var(--mlv-page-surface-radius, 0rem) var(--mlv-page-surface-radius, 0rem) 0 0}.mlv-page__inner>.mlv-page-summary,.mlv-page__inner>.mlv-page-header:not(:has(~.mlv-page-summary)){margin-bottom:var(--mlv-page-snap-offset, 0rem)}.mlv-page--sticky-header .mlv-page-header{position:sticky;top:0;z-index:10}.mlv-page:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-page-snap--hide,.mlv-page-snap--fade{--mlv-snap-progress: clamp( 0, (var(--mlv-page-snap, 0) - var(--mlv-snap-from, 0)) * var(--mlv-snap-scale, 1), 1 )}.mlv-page-snap--fade{opacity:calc(1 - var(--mlv-snap-progress))}.mlv-page-snap--hide{max-height:calc(var(--mlv-snap-size, 3rem) * (1 - var(--mlv-snap-progress)));overflow:hidden;opacity:calc(1 - var(--mlv-snap-progress) * 1.5);transform:translateY(calc(-.5rem * var(--mlv-snap-progress)))}.mlv-page-snap--revealed{--mlv-snap-progress: 0}@media(prefers-reduced-motion:reduce){.mlv-page,.mlv-page *,.mlv-page:before,.mlv-page:after,[class^=mlv-page__],[class*=\" mlv-page__\"],[class^=mlv-page--],[class*=\" mlv-page--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"], dependencies: [{ kind: "component", type: MlvScrollbar, selector: "mlv-scrollbar", inputs: ["orientation", "scrollbarSize", "disabled", "ariaLabel", "viewportTabIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
414
+ }
415
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPage, decorators: [{
416
+ type: Component,
417
+ args: [{ selector: 'main[mlvPage]', template: `
418
+ <mlv-scrollbar class="mlv-page__scrollbar" [disabled]="scroll() === 'none'">
419
+ <div class="mlv-page__inner"><ng-content /></div>
420
+ </mlv-scrollbar>
421
+ `, imports: [MlvScrollbar], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
422
+ { provide: MLV_PAGE_SCROLL, useExisting: MlvPage },
423
+ MlvPageSnapController,
424
+ ], host: {
425
+ class: 'mlv-page',
426
+ '[id]': 'id()',
427
+ tabindex: '-1',
428
+ '[class.mlv-page--scroll-auto]': 'scroll() === "auto"',
429
+ '[class.mlv-page--scroll-none]': 'scroll() === "none"',
430
+ '[class.mlv-page--padding-none]': 'padding() === "none"',
431
+ '[class.mlv-page--padding-s]': 'padding() === "s"',
432
+ '[class.mlv-page--padding-m]': 'padding() === "m"',
433
+ '[class.mlv-page--padding-l]': 'padding() === "l"',
434
+ '[class.mlv-page--surface-anchored]': 'surface() === "anchored"',
435
+ '[class.mlv-page--surface-flat]': 'surface() === "flat"',
436
+ '[class.mlv-page--sticky-header]': 'stickyHeader()',
437
+ '[class.mlv-page--scrolled]': 'scrolled()',
438
+ '[style.--mlv-page-max-width]': 'maxWidth()',
439
+ }, styles: ["@layer mlv.components{.mlv-page{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page *{box-sizing:border-box}.mlv-page{display:block;flex:1 1 auto;min-width:0;min-height:0;color:var(--mlv-text-primary);background:var(--mlv-background-base);outline:none;isolation:isolate;--mlv-page-surface-radius: 0rem}.mlv-page__scrollbar{width:100%;height:100%;min-height:0}.mlv-page__scrollbar .mlv-scrollbar__viewport{overflow-x:hidden;scroll-padding-top:var(--mlv-page-header-offset, 6rem);overflow-anchor:none}.mlv-page__inner{container-type:inline-size;width:100%;min-height:100%;max-width:var(--mlv-page-max-width, none);margin-inline:auto}.mlv-page--surface-anchored{--mlv-page-surface-radius: calc( var(--mlv-radius-xl) - .0625rem );border:.0625rem solid var(--mlv-border-subtle);border-bottom:0;border-radius:var(--mlv-radius-xl) var(--mlv-radius-xl) 0 0}.mlv-page--surface-flat{--mlv-page-surface-radius: 0rem;border-radius:0}.mlv-page--scroll-auto,.mlv-page--scroll-none,.mlv-page--scroll-none .mlv-page__scrollbar .mlv-scrollbar__viewport{overflow:clip}.mlv-page--padding-none .mlv-page__inner{--mlv-page-inset: 0rem;padding:0}.mlv-page--padding-s .mlv-page__inner{--mlv-page-inset: var(--mlv-spacing-1-5);padding:var(--mlv-page-inset)}.mlv-page--padding-m .mlv-page__inner{--mlv-page-inset: var(--mlv-spacing-2);padding:var(--mlv-page-inset)}.mlv-page--padding-l .mlv-page__inner{--mlv-page-inset: var(--mlv-spacing-3);padding:var(--mlv-page-inset)}.mlv-page__inner>.mlv-page-header,.mlv-page__inner>.mlv-page-summary{margin-inline:calc(-1 * var(--mlv-page-inset, 0rem))}.mlv-page__inner>.mlv-page-header{margin-top:calc(-1 * var(--mlv-page-inset, 0rem));border-radius:0}.mlv-page__inner>.mlv-page-header:first-child,.mlv-page__inner>.mlv-page-summary:first-child{border-radius:var(--mlv-page-surface-radius, 0rem) var(--mlv-page-surface-radius, 0rem) 0 0}.mlv-page__inner>.mlv-page-summary,.mlv-page__inner>.mlv-page-header:not(:has(~.mlv-page-summary)){margin-bottom:var(--mlv-page-snap-offset, 0rem)}.mlv-page--sticky-header .mlv-page-header{position:sticky;top:0;z-index:10}.mlv-page:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-page-snap--hide,.mlv-page-snap--fade{--mlv-snap-progress: clamp( 0, (var(--mlv-page-snap, 0) - var(--mlv-snap-from, 0)) * var(--mlv-snap-scale, 1), 1 )}.mlv-page-snap--fade{opacity:calc(1 - var(--mlv-snap-progress))}.mlv-page-snap--hide{max-height:calc(var(--mlv-snap-size, 3rem) * (1 - var(--mlv-snap-progress)));overflow:hidden;opacity:calc(1 - var(--mlv-snap-progress) * 1.5);transform:translateY(calc(-.5rem * var(--mlv-snap-progress)))}.mlv-page-snap--revealed{--mlv-snap-progress: 0}@media(prefers-reduced-motion:reduce){.mlv-page,.mlv-page *,.mlv-page:before,.mlv-page:after,[class^=mlv-page__],[class*=\" mlv-page__\"],[class^=mlv-page--],[class*=\" mlv-page--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"] }]
440
+ }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], scroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "scroll", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], surface: [{ type: i0.Input, args: [{ isSignal: true, alias: "surface", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyHeader", required: false }] }], snapRange: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapRange", required: false }] }], _scrollbar: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MlvScrollbar), { isSignal: true }] }] } });
441
+
442
+ /**
443
+ * Shared focus contract for page chrome that the scroll timeline collapses —
444
+ * `MlvPageSnap` regions and `MlvPageSummary`.
445
+ *
446
+ * A fully collapsed region is `visibility: hidden` so it leaves the
447
+ * accessibility tree and, crucially, the tab order: a control nobody can see
448
+ * must not be an invisible tab stop. The state is driven by **scrolling**
449
+ * though, not by a user action, so hiding it unconditionally would let a
450
+ * scroll blur whatever the user had focused — the browser drops that focus to
451
+ * `<body>`, destroying the user's place in the tab order.
452
+ *
453
+ * Two exceptions therefore lift the hide:
454
+ * - **Focus inside the region** ({@link _revealed}) — the region steps off the
455
+ * timeline and renders fully expanded for as long as it holds focus. Focus
456
+ * is never relocated implicitly, and the focused control stays visible.
457
+ * - **`MlvPageSnapController.expand()`** — reveals every registered region up
458
+ * front (see {@link reveal}) so a consumer can move focus into chrome the
459
+ * scroll had collapsed.
460
+ *
461
+ * Subclasses supply {@link _elapsed} (their own end-of-window test) and bind
462
+ * {@link _hidden} / {@link _revealed} plus the two focus listeners in their
463
+ * own `host` object — the class names differ per block.
464
+ */
465
+ class MlvPageSnapRegionBase {
466
+ /**
467
+ * @protected Snap state of the owning page, when rendered inside one.
468
+ * Absent outside `main[mlvPage]`, where nothing collapses.
469
+ */
470
+ _snapController = inject(MlvPageSnapController, {
471
+ optional: true,
472
+ });
473
+ /** @private Host element, for the eager reveal and the focus containment test. */
474
+ _regionHost = inject(ElementRef);
475
+ /** @private True while this region contains the active element. */
476
+ _focusWithin = signal(false, /* @ts-ignore */
477
+ ...(ngDevMode ? [{ debugName: "_focusWithin" }] : /* istanbul ignore next */ []));
478
+ /**
479
+ * @protected Holds the region at its expanded state while it has focus:
480
+ * a focused control has to stay visible, and a region that stays visible
481
+ * cannot have its focus dropped by the next scroll event.
482
+ */
483
+ _revealed = computed(() => this._focusWithin(), /* @ts-ignore */
484
+ ...(ngDevMode ? [{ debugName: "_revealed" }] : /* istanbul ignore next */ []));
485
+ /**
486
+ * @protected Takes the collapsed region out of the accessibility tree and
487
+ * the tab order — unless it holds focus, or the controller is revealing it
488
+ * for one.
489
+ */
490
+ _hidden = computed(() => this._elapsed() &&
491
+ !this._focusWithin() &&
492
+ !(this._snapController?.revealing() ?? false), /* @ts-ignore */
493
+ ...(ngDevMode ? [{ debugName: "_hidden" }] : /* istanbul ignore next */ []));
494
+ constructor() {
495
+ const unregister = this._snapController?.registerRegion(this);
496
+ inject(DestroyRef).onDestroy(() => unregister?.());
497
+ }
498
+ /**
499
+ * Reveals the region immediately, ahead of the controller's expand tween.
500
+ * Host bindings only flush on the next change detection pass, so the inline
501
+ * hide is cleared eagerly — otherwise a `focus()` issued in the same task
502
+ * would still be refused on a `visibility: hidden` element. The controller's
503
+ * `revealing` flag keeps the binding in agreement until the progress has
504
+ * left this region's window.
505
+ */
506
+ reveal() {
507
+ this._regionHost.nativeElement.style.visibility = '';
508
+ }
509
+ /**
510
+ * Re-applies the hidden state after the controller's reveal window closes.
511
+ * A reveal that opens and closes without a render in between leaves the
512
+ * `[style.visibility]` binding holding a value it never rewrote, so the
513
+ * region would stay visible — and its controls would become invisible tab
514
+ * stops — until something else changed.
515
+ */
516
+ syncHiddenState() {
517
+ this._regionHost.nativeElement.style.visibility = this._hidden()
518
+ ? 'hidden'
519
+ : '';
520
+ }
521
+ /** @protected Records that focus entered this region. */
522
+ _onRegionFocusIn() {
523
+ this._focusWithin.set(true);
524
+ }
525
+ /**
526
+ * @protected Releases the focus reveal only when focus actually left the
527
+ * region — moving between two controls inside it also fires `focusout`.
528
+ */
529
+ _onRegionFocusOut(event) {
530
+ const next = event.relatedTarget;
531
+ this._focusWithin.set(next instanceof Node && this._regionHost.nativeElement.contains(next));
532
+ }
533
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSnapRegionBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
534
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageSnapRegionBase, isStandalone: true, ngImport: i0 });
535
+ }
536
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSnapRegionBase, decorators: [{
537
+ type: Directive
538
+ }], ctorParameters: () => [] });
539
+
540
+ /**
541
+ * Lets any element inside `main[mlvPage]` define its own state on the snap
542
+ * timeline. The element reads the page-level `--mlv-page-snap` progress,
543
+ * remaps it into its own stagger window (`snapFrom`..`snapTo`), and applies
544
+ * the chosen behaviour with pure CSS `calc()` interpolation — so the motion
545
+ * is scrubbed by scrolling, not played on a clock.
546
+ *
547
+ * A fully elapsed region is `visibility: hidden` and therefore leaves the
548
+ * accessibility tree and the tab order — except while it holds focus, when it
549
+ * reveals itself instead (`mlv-page-snap--revealed`) so that scrolling can
550
+ * never blur a focused control into `<body>`. See {@link MlvPageSnapRegionBase}.
551
+ *
552
+ * ```html
553
+ * <div mlvPageSnap="hide" [snapFrom]="0.2" [snapTo]="0.7" snapSize="3rem">…</div>
554
+ * ```
555
+ */
556
+ class MlvPageSnap extends MlvPageSnapRegionBase {
557
+ /** Behaviour on the snap timeline. An empty attribute value means `hide`. */
558
+ mlvPageSnap = input('', /* @ts-ignore */
559
+ ...(ngDevMode ? [{ debugName: "mlvPageSnap" }] : /* istanbul ignore next */ []));
560
+ /** Progress at which this element starts reacting (0..1). */
561
+ snapFrom = input(0, /* @ts-ignore */
562
+ ...(ngDevMode ? [{ debugName: "snapFrom" }] : /* istanbul ignore next */ []));
563
+ /** Progress at which this element reaches its final state (0..1). */
564
+ snapTo = input(1, /* @ts-ignore */
565
+ ...(ngDevMode ? [{ debugName: "snapTo" }] : /* istanbul ignore next */ []));
566
+ /**
567
+ * Nominal expanded size used by the `hide` behaviour's height scrub.
568
+ * Must be at least the element's natural height.
569
+ */
570
+ snapSize = input('3rem', /* @ts-ignore */
571
+ ...(ngDevMode ? [{ debugName: "snapSize" }] : /* istanbul ignore next */ []));
572
+ /** @protected Effective behaviour; the bare attribute defaults to `hide`. */
573
+ _mode = computed(() => this.mlvPageSnap() || 'hide', /* @ts-ignore */
574
+ ...(ngDevMode ? [{ debugName: "_mode" }] : /* istanbul ignore next */ []));
575
+ /** @protected Multiplier remapping page progress into the stagger window. */
576
+ _scale = computed(() => 1 / Math.max(this.snapTo() - this.snapFrom(), 0.001), /* @ts-ignore */
577
+ ...(ngDevMode ? [{ debugName: "_scale" }] : /* istanbul ignore next */ []));
578
+ /**
579
+ * @protected Fully elapsed once the page progress passes this element's
580
+ * `snapTo`; a `keep` element never elapses.
581
+ */
582
+ _elapsed = computed(() => this._mode() !== 'keep' &&
583
+ (this._snapController?.progress() ?? 0) >= Math.min(this.snapTo(), 1), /* @ts-ignore */
584
+ ...(ngDevMode ? [{ debugName: "_elapsed" }] : /* istanbul ignore next */ []));
585
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSnap, deps: null, target: i0.ɵɵFactoryTarget.Directive });
586
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: MlvPageSnap, isStandalone: true, selector: "[mlvPageSnap]", inputs: { mlvPageSnap: { classPropertyName: "mlvPageSnap", publicName: "mlvPageSnap", isSignal: true, isRequired: false, transformFunction: null }, snapFrom: { classPropertyName: "snapFrom", publicName: "snapFrom", isSignal: true, isRequired: false, transformFunction: null }, snapTo: { classPropertyName: "snapTo", publicName: "snapTo", isSignal: true, isRequired: false, transformFunction: null }, snapSize: { classPropertyName: "snapSize", publicName: "snapSize", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "focusin": "_onRegionFocusIn()", "focusout": "_onRegionFocusOut($event)" }, properties: { "class.mlv-page-snap--hide": "_mode() === \"hide\"", "class.mlv-page-snap--fade": "_mode() === \"fade\"", "class.mlv-page-snap--revealed": "_revealed()", "style.--mlv-snap-from": "snapFrom()", "style.--mlv-snap-scale": "_scale()", "style.--mlv-snap-size": "snapSize()", "style.visibility": "_hidden() ? \"hidden\" : null" } }, usesInheritance: true, ngImport: i0 });
587
+ }
588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSnap, decorators: [{
589
+ type: Directive,
590
+ args: [{
591
+ selector: '[mlvPageSnap]',
592
+ host: {
593
+ '[class.mlv-page-snap--hide]': '_mode() === "hide"',
594
+ '[class.mlv-page-snap--fade]': '_mode() === "fade"',
595
+ '[class.mlv-page-snap--revealed]': '_revealed()',
596
+ '[style.--mlv-snap-from]': 'snapFrom()',
597
+ '[style.--mlv-snap-scale]': '_scale()',
598
+ '[style.--mlv-snap-size]': 'snapSize()',
599
+ '[style.visibility]': '_hidden() ? "hidden" : null',
600
+ '(focusin)': '_onRegionFocusIn()',
601
+ '(focusout)': '_onRegionFocusOut($event)',
602
+ },
603
+ }]
604
+ }], propDecorators: { mlvPageSnap: [{ type: i0.Input, args: [{ isSignal: true, alias: "mlvPageSnap", required: false }] }], snapFrom: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapFrom", required: false }] }], snapTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapTo", required: false }] }], snapSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapSize", required: false }] }] } });
605
+
606
+ /** Opaque black, used as one endpoint for automatic contrast. */
607
+ const BLACK = { red: 0, green: 0, blue: 0, alpha: 1 };
608
+ /** Opaque white, used as one endpoint for automatic contrast. */
609
+ const WHITE = {
610
+ red: 255,
611
+ green: 255,
612
+ blue: 255,
613
+ alpha: 1,
614
+ };
615
+ /**
616
+ * Parses an RGB value emitted by the browser CSSOM.
617
+ *
618
+ * @param value Computed `rgb(...)` or `rgba(...)` string.
619
+ * @returns The normalized color, or `null` when the value is not parseable.
620
+ */
621
+ function parseComputedColor(value) {
622
+ const normalized = value.trim().toLowerCase();
623
+ if (normalized === 'transparent') {
624
+ return { red: 0, green: 0, blue: 0, alpha: 0 };
625
+ }
626
+ const match = /^rgba?\((.*)\)$/i.exec(normalized);
627
+ if (!match) {
628
+ return null;
629
+ }
630
+ const body = match[1].trim();
631
+ const commaSeparated = body.includes(',');
632
+ let channelValues;
633
+ let alphaValue;
634
+ if (commaSeparated) {
635
+ const parts = body.split(',').map((part) => part.trim());
636
+ if (parts.length !== 3 && parts.length !== 4) {
637
+ return null;
638
+ }
639
+ channelValues = parts.slice(0, 3);
640
+ alphaValue = parts[3];
641
+ }
642
+ else {
643
+ const slashParts = body.split('/').map((part) => part.trim());
644
+ if (slashParts.length > 2) {
645
+ return null;
646
+ }
647
+ channelValues = slashParts[0].split(/\s+/);
648
+ alphaValue = slashParts[1];
649
+ }
650
+ if (channelValues.length !== 3) {
651
+ return null;
652
+ }
653
+ const channels = channelValues.map(_parseChannel);
654
+ const alpha = alphaValue === undefined ? 1 : _parseAlpha(alphaValue);
655
+ if (channels.some((channel) => channel === null) || alpha === null) {
656
+ return null;
657
+ }
658
+ return {
659
+ red: channels[0],
660
+ green: channels[1],
661
+ blue: channels[2],
662
+ alpha,
663
+ };
664
+ }
665
+ /**
666
+ * Composites one sRGB color over another using source-over alpha blending.
667
+ *
668
+ * @param foreground Color painted above the background.
669
+ * @param background Color painted below the foreground.
670
+ * @returns The effective blended color.
671
+ */
672
+ function compositeColors(foreground, background) {
673
+ const alpha = foreground.alpha + background.alpha * (1 - foreground.alpha);
674
+ if (alpha === 0) {
675
+ return { red: 0, green: 0, blue: 0, alpha: 0 };
676
+ }
677
+ return {
678
+ red: _compositeChannel(foreground.red, background.red, foreground.alpha, background.alpha, alpha),
679
+ green: _compositeChannel(foreground.green, background.green, foreground.alpha, background.alpha, alpha),
680
+ blue: _compositeChannel(foreground.blue, background.blue, foreground.alpha, background.alpha, alpha),
681
+ alpha,
682
+ };
683
+ }
684
+ /**
685
+ * Serializes a normalized color to modern CSS RGB syntax.
686
+ *
687
+ * @param color Color to serialize.
688
+ * @returns A CSS `rgb(...)` value.
689
+ */
690
+ function toCssColor(color) {
691
+ const channels = [color.red, color.green, color.blue]
692
+ .map(_formatNumber)
693
+ .join(', ');
694
+ if (color.alpha >= 1) {
695
+ return `rgb(${channels})`;
696
+ }
697
+ return `rgba(${channels}, ${_formatNumber(color.alpha)})`;
698
+ }
699
+ /**
700
+ * Computes the WCAG contrast ratio between two opaque effective colors.
701
+ *
702
+ * @param first First effective color.
703
+ * @param second Second effective color.
704
+ * @returns Contrast ratio in the inclusive range 1–21.
705
+ */
706
+ function contrastRatio(first, second) {
707
+ const firstLuminance = _relativeLuminance(first);
708
+ const secondLuminance = _relativeLuminance(second);
709
+ const lighter = Math.max(firstLuminance, secondLuminance);
710
+ const darker = Math.min(firstLuminance, secondLuminance);
711
+ return (lighter + 0.05) / (darker + 0.05);
712
+ }
713
+ /**
714
+ * Selects the black or white endpoint with the strongest WCAG contrast.
715
+ *
716
+ * @param background Opaque effective background color.
717
+ * @returns An opaque CSS black or white value.
718
+ */
719
+ function chooseContrastForeground(background) {
720
+ return contrastRatio(background, BLACK) >= contrastRatio(background, WHITE)
721
+ ? 'rgb(0, 0, 0)'
722
+ : 'rgb(255, 255, 255)';
723
+ }
724
+ /**
725
+ * Parses an RGB channel expressed as a number or percentage.
726
+ *
727
+ * @param value Serialized channel.
728
+ * @returns A channel in the range 0–255, or `null` when invalid.
729
+ */
730
+ function _parseChannel(value) {
731
+ const isPercentage = value.endsWith('%');
732
+ const parsed = Number(isPercentage ? value.slice(0, -1) : value);
733
+ const channel = isPercentage ? (parsed / 100) * 255 : parsed;
734
+ return Number.isFinite(channel) && channel >= 0 && channel <= 255
735
+ ? channel
736
+ : null;
737
+ }
738
+ /**
739
+ * Parses an alpha channel expressed as a number or percentage.
740
+ *
741
+ * @param value Serialized alpha channel.
742
+ * @returns A channel in the range 0–1, or `null` when invalid.
743
+ */
744
+ function _parseAlpha(value) {
745
+ const isPercentage = value.endsWith('%');
746
+ const parsed = Number(isPercentage ? value.slice(0, -1) : value);
747
+ const alpha = isPercentage ? parsed / 100 : parsed;
748
+ return Number.isFinite(alpha) && alpha >= 0 && alpha <= 1 ? alpha : null;
749
+ }
750
+ /**
751
+ * Blends one channel using source-over alpha compositing.
752
+ *
753
+ * @param foreground Foreground channel.
754
+ * @param background Background channel.
755
+ * @param foregroundAlpha Foreground alpha.
756
+ * @param backgroundAlpha Background alpha.
757
+ * @param outputAlpha Resulting alpha.
758
+ * @returns Blended channel.
759
+ */
760
+ function _compositeChannel(foreground, background, foregroundAlpha, backgroundAlpha, outputAlpha) {
761
+ return ((foreground * foregroundAlpha +
762
+ background * backgroundAlpha * (1 - foregroundAlpha)) /
763
+ outputAlpha);
764
+ }
765
+ /**
766
+ * Computes WCAG relative luminance for an sRGB color.
767
+ *
768
+ * @param color Effective color.
769
+ * @returns Relative luminance in the range 0–1.
770
+ */
771
+ function _relativeLuminance(color) {
772
+ const red = _linearizeChannel(color.red);
773
+ const green = _linearizeChannel(color.green);
774
+ const blue = _linearizeChannel(color.blue);
775
+ return 0.2126 * red + 0.7152 * green + 0.0722 * blue;
776
+ }
777
+ /**
778
+ * Converts an sRGB channel to linear light for luminance calculation.
779
+ *
780
+ * @param channel Channel in the range 0–255.
781
+ * @returns Linearized channel in the range 0–1.
782
+ */
783
+ function _linearizeChannel(channel) {
784
+ const normalized = channel / 255;
785
+ return normalized <= 0.04045
786
+ ? normalized / 12.92
787
+ : ((normalized + 0.055) / 1.055) ** 2.4;
788
+ }
789
+ /**
790
+ * Produces a compact, stable decimal for CSS serialization.
791
+ *
792
+ * @param value Numeric value.
793
+ * @returns Rounded decimal without trailing zeroes.
794
+ */
795
+ function _formatNumber(value) {
796
+ return String(Math.round(value * 1000) / 1000);
797
+ }
798
+
799
+ /** Stable opaque base matching the default page-shell chrome background. */
800
+ const DEFAULT_SHELL_BACKGROUND = {
801
+ red: 23,
802
+ green: 23,
803
+ blue: 23,
804
+ alpha: 1,
805
+ };
806
+ /**
807
+ * Resolves a CSS color in an element's actual inheritance context.
808
+ * Two inherited sentinel colors distinguish a valid result from an unresolved
809
+ * value that silently falls back to `inherit`.
810
+ *
811
+ * @param host Element whose cascade resolves custom properties.
812
+ * @param value Candidate CSS color.
813
+ * @returns Browser-resolved sRGB channels, or `null` when unresolved.
814
+ */
815
+ function resolveCssColor(host, value) {
816
+ const rawCandidate = value?.trim();
817
+ if (!rawCandidate ||
818
+ /^(currentcolor|inherit|initial|unset|revert|revert-layer)$/i.test(rawCandidate)) {
819
+ return null;
820
+ }
821
+ const view = host.ownerDocument.defaultView;
822
+ if (!view) {
823
+ return null;
824
+ }
825
+ const candidate = _resolveCustomProperties(host, rawCandidate);
826
+ if (!candidate) {
827
+ return null;
828
+ }
829
+ const first = _createColorProbe(host, 'rgb(1, 2, 3)', candidate);
830
+ const second = _createColorProbe(host, 'rgb(4, 5, 6)', candidate);
831
+ host.append(first.wrapper, second.wrapper);
832
+ const firstColor = parseComputedColor(view.getComputedStyle(first.probe).color);
833
+ const secondColor = parseComputedColor(view.getComputedStyle(second.probe).color);
834
+ first.wrapper.remove();
835
+ second.wrapper.remove();
836
+ return firstColor && secondColor && _colorsEqual(firstColor, secondColor)
837
+ ? firstColor
838
+ : null;
839
+ }
840
+ /**
841
+ * Resolves the visible backdrop beneath a translucent shell color.
842
+ * Ancestor backgrounds are composited from nearest to farthest before the
843
+ * stable shell default is used as the final opaque base.
844
+ *
845
+ * @param host Shell whose ancestor cascade supplies the backdrop.
846
+ * @returns Opaque effective backdrop.
847
+ */
848
+ function resolveBackdropBackground(host) {
849
+ const view = host.ownerDocument.defaultView;
850
+ let backdrop = {
851
+ red: 0,
852
+ green: 0,
853
+ blue: 0,
854
+ alpha: 0,
855
+ };
856
+ let current = host.parentElement;
857
+ while (view && current) {
858
+ const ancestorBackground = parseComputedColor(view.getComputedStyle(current).backgroundColor);
859
+ if (ancestorBackground) {
860
+ backdrop = compositeColors(backdrop, ancestorBackground);
861
+ if (backdrop.alpha >= 1) {
862
+ return backdrop;
863
+ }
864
+ }
865
+ current = current.parentElement;
866
+ }
867
+ const fallback = resolveCssColor(host, 'var(--mlv-palette-neutral-900)') ??
868
+ DEFAULT_SHELL_BACKGROUND;
869
+ return compositeColors(backdrop, fallback);
870
+ }
871
+ /**
872
+ * Resolves `var(...)` references from the host's computed cascade.
873
+ * The browser remains responsible for the custom-property cascade; this
874
+ * substitution handles CSSOM implementations that do not expand variables
875
+ * when serializing a computed `color` value.
876
+ *
877
+ * @param host Element whose cascade owns the custom properties.
878
+ * @param value CSS value that may contain custom-property references.
879
+ * @param seen Custom properties currently being expanded, for cycle safety.
880
+ * @param depth Expansion depth guard.
881
+ * @returns Value with variables substituted, or `null` when unresolved.
882
+ */
883
+ function _resolveCustomProperties(host, value, seen = new Set(), depth = 0) {
884
+ if (depth > 16) {
885
+ return null;
886
+ }
887
+ const range = _findFirstVarFunction(value);
888
+ if (!range) {
889
+ return value;
890
+ }
891
+ const content = value.slice(range.contentStart, range.contentEnd);
892
+ const [namePart, fallback] = _splitCustomPropertyArguments(content);
893
+ const name = namePart.trim();
894
+ if (!/^--[a-z0-9_-]+$/i.test(name)) {
895
+ return null;
896
+ }
897
+ const view = host.ownerDocument.defaultView;
898
+ let replacement = view?.getComputedStyle(host).getPropertyValue(name).trim() ?? '';
899
+ if (!replacement || seen.has(name)) {
900
+ replacement = fallback?.trim() ?? '';
901
+ }
902
+ if (!replacement) {
903
+ return null;
904
+ }
905
+ const nextSeen = new Set(seen);
906
+ nextSeen.add(name);
907
+ const resolvedReplacement = _resolveCustomProperties(host, replacement, nextSeen, depth + 1);
908
+ if (!resolvedReplacement) {
909
+ if (!fallback) {
910
+ return null;
911
+ }
912
+ const resolvedFallback = _resolveCustomProperties(host, fallback.trim(), seen, depth + 1);
913
+ if (!resolvedFallback) {
914
+ return null;
915
+ }
916
+ return _resolveCustomProperties(host, `${value.slice(0, range.start)}${resolvedFallback}${value.slice(range.end)}`, seen, depth + 1);
917
+ }
918
+ return _resolveCustomProperties(host, `${value.slice(0, range.start)}${resolvedReplacement}${value.slice(range.end)}`, seen, depth + 1);
919
+ }
920
+ /**
921
+ * Locates the first balanced CSS `var(...)` function.
922
+ *
923
+ * @param value CSS value to scan.
924
+ * @returns Function and content offsets, or `null` when absent/malformed.
925
+ */
926
+ function _findFirstVarFunction(value) {
927
+ const start = value.toLowerCase().indexOf('var(');
928
+ if (start < 0) {
929
+ return null;
930
+ }
931
+ let parentheses = 1;
932
+ for (let index = start + 4; index < value.length; index++) {
933
+ if (value[index] === '(') {
934
+ parentheses++;
935
+ }
936
+ else if (value[index] === ')') {
937
+ parentheses--;
938
+ if (parentheses === 0) {
939
+ return {
940
+ start,
941
+ end: index + 1,
942
+ contentStart: start + 4,
943
+ contentEnd: index,
944
+ };
945
+ }
946
+ }
947
+ }
948
+ return null;
949
+ }
950
+ /**
951
+ * Splits a custom-property name from its optional top-level fallback.
952
+ *
953
+ * @param content Contents of a `var(...)` function.
954
+ * @returns Name and optional fallback.
955
+ */
956
+ function _splitCustomPropertyArguments(content) {
957
+ let parentheses = 0;
958
+ for (let index = 0; index < content.length; index++) {
959
+ if (content[index] === '(') {
960
+ parentheses++;
961
+ }
962
+ else if (content[index] === ')') {
963
+ parentheses--;
964
+ }
965
+ else if (content[index] === ',' && parentheses === 0) {
966
+ return [content.slice(0, index), content.slice(index + 1)];
967
+ }
968
+ }
969
+ return [content, undefined];
970
+ }
971
+ /**
972
+ * Creates a hidden color probe and its sentinel-colored wrapper.
973
+ *
974
+ * @param host Element whose document creates the probes.
975
+ * @param sentinel Inherited color used to detect unresolved candidates.
976
+ * @param candidate Candidate assigned to the probe.
977
+ * @returns Wrapper and probe elements.
978
+ */
979
+ function _createColorProbe(host, sentinel, candidate) {
980
+ const document = host.ownerDocument;
981
+ const wrapper = document.createElement('span');
982
+ const probe = document.createElement('span');
983
+ wrapper.setAttribute('aria-hidden', 'true');
984
+ wrapper.style.cssText =
985
+ `position:fixed;inline-size:0;block-size:0;overflow:hidden;` +
986
+ `visibility:hidden;pointer-events:none;color:${sentinel}`;
987
+ probe.style.color = candidate;
988
+ wrapper.append(probe);
989
+ return { wrapper, probe };
990
+ }
991
+ /**
992
+ * Compares two normalized colors exactly as emitted by CSSOM.
993
+ *
994
+ * @param first First resolved color.
995
+ * @param second Second resolved color.
996
+ * @returns Whether all four channels match.
997
+ */
998
+ function _colorsEqual(first, second) {
999
+ return (first.red === second.red &&
1000
+ first.green === second.green &&
1001
+ first.blue === second.blue &&
1002
+ first.alpha === second.alpha);
1003
+ }
1004
+
1005
+ /**
1006
+ * Application-page shell that joins global top navigation, one or two sidebars,
1007
+ * and the Page canvas without taking ownership of their component behaviour.
1008
+ */
1009
+ class MlvPageShell {
1010
+ /**
1011
+ * Optional CSS color for the shell chrome background.
1012
+ * Browser-resolved values such as `var(--brand-color)` are supported.
1013
+ */
1014
+ color = input(null, /* @ts-ignore */
1015
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
1016
+ /**
1017
+ * Optional CSS color overriding the automatically selected chrome foreground.
1018
+ */
1019
+ foreground = input(null, /* @ts-ignore */
1020
+ ...(ngDevMode ? [{ debugName: "foreground" }] : /* istanbul ignore next */ []));
1021
+ /** @protected Browser-resolved background applied through the host style. */
1022
+ _resolvedBackground = signal(null, /* @ts-ignore */
1023
+ ...(ngDevMode ? [{ debugName: "_resolvedBackground" }] : /* istanbul ignore next */ []));
1024
+ /** @protected Browser-resolved foreground applied through the host style. */
1025
+ _resolvedForeground = signal(null, /* @ts-ignore */
1026
+ ...(ngDevMode ? [{ debugName: "_resolvedForeground" }] : /* istanbul ignore next */ []));
1027
+ /** @private Native shell host used as the CSS inheritance context. */
1028
+ _host = inject(ElementRef);
1029
+ /** @private Angular destruction hook for frame and observer cleanup. */
1030
+ _destroyRef = inject(DestroyRef);
1031
+ /** @private Identifier of the pending color-resolution animation frame. */
1032
+ _resolutionFrameId = null;
1033
+ /** @private Watches theme and custom-property changes in the shell cascade. */
1034
+ _mutationObserver = null;
1035
+ constructor() {
1036
+ afterRenderEffect(() => {
1037
+ this.color();
1038
+ this.foreground();
1039
+ this._startColorObservation();
1040
+ this._scheduleColorResolution();
1041
+ });
1042
+ this._destroyRef.onDestroy(() => {
1043
+ this._mutationObserver?.disconnect();
1044
+ const view = this._host.nativeElement.ownerDocument.defaultView;
1045
+ if (this._resolutionFrameId !== null && view) {
1046
+ view.cancelAnimationFrame(this._resolutionFrameId);
1047
+ }
1048
+ });
1049
+ }
1050
+ /**
1051
+ * @private Observes the shell and its ancestors for cascade-affecting
1052
+ * attribute changes. One observer can watch every node in the chain.
1053
+ */
1054
+ _startColorObservation() {
1055
+ if (this._mutationObserver) {
1056
+ return;
1057
+ }
1058
+ const host = this._host.nativeElement;
1059
+ const view = host.ownerDocument.defaultView;
1060
+ if (!view || typeof view.MutationObserver === 'undefined') {
1061
+ return;
1062
+ }
1063
+ this._mutationObserver = new view.MutationObserver(() => {
1064
+ this._scheduleColorResolution();
1065
+ });
1066
+ let current = host;
1067
+ while (current) {
1068
+ this._mutationObserver.observe(current, {
1069
+ attributes: true,
1070
+ attributeFilter: [
1071
+ 'class',
1072
+ 'style',
1073
+ 'mlvtheme',
1074
+ 'mlvTheme',
1075
+ 'data-theme',
1076
+ ],
1077
+ });
1078
+ current = current.parentElement;
1079
+ }
1080
+ }
1081
+ /**
1082
+ * @private Coalesces CSS reads and signal writes into the next render frame.
1083
+ */
1084
+ _scheduleColorResolution() {
1085
+ if (this._resolutionFrameId !== null) {
1086
+ return;
1087
+ }
1088
+ const view = this._host.nativeElement.ownerDocument.defaultView;
1089
+ if (!view) {
1090
+ return;
1091
+ }
1092
+ this._resolutionFrameId = view.requestAnimationFrame(() => {
1093
+ this._resolutionFrameId = null;
1094
+ this._resolveColors();
1095
+ });
1096
+ }
1097
+ /**
1098
+ * @private Resolves the input colors and updates the internal host variables.
1099
+ */
1100
+ _resolveColors() {
1101
+ const host = this._host.nativeElement;
1102
+ const background = resolveCssColor(host, this.color());
1103
+ const explicitForeground = resolveCssColor(host, this.foreground());
1104
+ this._resolvedBackground.set(background ? toCssColor(background) : null);
1105
+ if (explicitForeground) {
1106
+ this._resolvedForeground.set(toCssColor(explicitForeground));
1107
+ return;
1108
+ }
1109
+ if (!background) {
1110
+ this._resolvedForeground.set(null);
1111
+ return;
1112
+ }
1113
+ const effectiveBackground = background.alpha < 1
1114
+ ? compositeColors(background, resolveBackdropBackground(host))
1115
+ : background;
1116
+ this._resolvedForeground.set(chooseContrastForeground(effectiveBackground));
1117
+ }
1118
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageShell, deps: [], target: i0.ɵɵFactoryTarget.Component });
1119
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: MlvPageShell, isStandalone: true, selector: "mlv-page-shell", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, foreground: { classPropertyName: "foreground", publicName: "foreground", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--mlv-page-shell-resolved-background": "_resolvedBackground()", "style.--mlv-page-shell-resolved-foreground": "_resolvedForeground()", "style.background": "_resolvedBackground()", "style.color": "_resolvedForeground()" }, classAttribute: "mlv-page-shell" }, ngImport: i0, template: "<ng-content select=\"[mlvPageTopbar]\" />\n<div class=\"mlv-page-shell__body\">\n <ng-content select=\"[mlvPageSidebar]\" />\n <div class=\"mlv-page-shell__content\"><ng-content /></div>\n <ng-content select=\"[mlvPageEndSidebar], mlv-page-end-pane\" />\n</div>\n", styles: ["@layer mlv.components{.mlv-page-shell{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-shell *{box-sizing:border-box}.mlv-page-shell{--mlv-page-shell-chrome-background: var(--mlv-palette-neutral-900);--mlv-page-shell-chrome-foreground: var(--mlv-palette-neutral-50);--mlv-page-shell-effective-background: var( --mlv-page-shell-resolved-background, var(--mlv-page-shell-chrome-background) );--mlv-page-shell-effective-foreground: var( --mlv-page-shell-resolved-foreground, var(--mlv-page-shell-chrome-foreground) );display:flex;flex-direction:column;width:100%;min-width:0;min-height:0;overflow:hidden;background:var(--mlv-page-shell-effective-background);color:var(--mlv-page-shell-effective-foreground)}.mlv-page-shell__topbar{flex:0 0 auto}.mlv-page-shell__topbar.mlv-action-bar{--mlv-action-bar-bg: var(--mlv-page-shell-effective-background);--mlv-action-bar-fg: var(--mlv-page-shell-effective-foreground);--mlv-action-bar-border: transparent;--mlv-action-bar-shadow: none;min-height:3.25rem;background:var(--mlv-page-shell-effective-background);-webkit-backdrop-filter:none;backdrop-filter:none}.mlv-page-shell__body{display:flex;flex:1 1 auto;min-width:0;min-height:0}.mlv-page-shell__body>[mlvPageSidebar]{flex:0 0 auto;min-width:0}.mlv-page-shell__body>[mlvPageSidebar]+[mlvPageSidebar]{border-inline-start:var(--mlv-stroke-width) solid color-mix(in srgb,var(--mlv-page-shell-effective-foreground) 16%,var(--mlv-page-shell-effective-background))}.mlv-page-shell__body>[mlvPageEndSidebar],.mlv-page-shell__body>mlv-page-end-pane{flex:0 0 auto;min-width:0}.mlv-page-shell__content{display:flex;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}.mlv-page-shell__content>.mlv-page{height:100%}.mlv-page-shell__sidebar{flex:0 0 auto;min-height:0}.mlv-page-shell__topbar .mlv-form-control-wrapper,.mlv-page-shell__sidebar .mlv-form-control-wrapper{--container-background-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 10%, var(--mlv-page-shell-effective-background) );--container-border-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 30%, var(--mlv-page-shell-effective-background) );--container-side-content-color: var( --mlv-page-shell-effective-foreground );--container-action-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 78%, var(--mlv-page-shell-effective-background) );--mlv-text-primary: var(--mlv-page-shell-effective-foreground);--mlv-text-secondary: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 78%, var(--mlv-page-shell-effective-background) );--mlv-text-tertiary: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 60%, var(--mlv-page-shell-effective-background) );--mlv-border-focus: var(--mlv-page-shell-effective-foreground)}.mlv-page-shell__topbar .mlv-form-control-wrapper.mlv-form-control-wrapper--state-default:hover,.mlv-page-shell__sidebar .mlv-form-control-wrapper.mlv-form-control-wrapper--state-default:hover{--container-border-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 40%, var(--mlv-page-shell-effective-background) )}.mlv-page-shell__topbar .mlv-form-control-wrapper.mlv-form-control-wrapper--focused,.mlv-page-shell__sidebar .mlv-form-control-wrapper.mlv-form-control-wrapper--focused{--container-border-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 50%, var(--mlv-page-shell-effective-background) )}.mlv-page-shell__sidebar.mlv-sidebar--offcanvas{width:0;min-width:0;overflow:visible}.mlv-page-shell__sidebar.mlv-sidebar{--mlv-sidebar-border-width: 0rem;--mlv-text-secondary: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 78%, var(--mlv-page-shell-effective-background) );--mlv-text-primary: var(--mlv-page-shell-effective-foreground);--mlv-text-action: var(--mlv-page-shell-effective-foreground);--mlv-background-neutral-1: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 8%, var(--mlv-page-shell-effective-background) );--mlv-background-neutral-1-hover: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 8%, var(--mlv-page-shell-effective-background) );--mlv-background-neutral-1-active: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 12%, var(--mlv-page-shell-effective-background) );--mlv-border-focus: var(--mlv-page-shell-effective-foreground);--mlv-sidebar-hover-bg: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 8%, var(--mlv-page-shell-effective-background) );--mlv-sidebar-active-bg: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 12%, var(--mlv-page-shell-effective-background) );--mlv-sidebar-rail-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 24%, var(--mlv-page-shell-effective-background) );--mlv-text-on-selected: var(--mlv-page-shell-effective-foreground);--mlv-background-selected: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 12%, var(--mlv-page-shell-effective-background) );--mlv-background-selected-hover: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 8%, var(--mlv-page-shell-effective-background) );height:100%;border:0;border-radius:0;box-shadow:none;background:transparent}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1120
+ }
1121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageShell, decorators: [{
1122
+ type: Component,
1123
+ args: [{ selector: 'mlv-page-shell', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1124
+ class: 'mlv-page-shell',
1125
+ '[style.--mlv-page-shell-resolved-background]': '_resolvedBackground()',
1126
+ '[style.--mlv-page-shell-resolved-foreground]': '_resolvedForeground()',
1127
+ '[style.background]': '_resolvedBackground()',
1128
+ '[style.color]': '_resolvedForeground()',
1129
+ }, template: "<ng-content select=\"[mlvPageTopbar]\" />\n<div class=\"mlv-page-shell__body\">\n <ng-content select=\"[mlvPageSidebar]\" />\n <div class=\"mlv-page-shell__content\"><ng-content /></div>\n <ng-content select=\"[mlvPageEndSidebar], mlv-page-end-pane\" />\n</div>\n", styles: ["@layer mlv.components{.mlv-page-shell{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-shell *{box-sizing:border-box}.mlv-page-shell{--mlv-page-shell-chrome-background: var(--mlv-palette-neutral-900);--mlv-page-shell-chrome-foreground: var(--mlv-palette-neutral-50);--mlv-page-shell-effective-background: var( --mlv-page-shell-resolved-background, var(--mlv-page-shell-chrome-background) );--mlv-page-shell-effective-foreground: var( --mlv-page-shell-resolved-foreground, var(--mlv-page-shell-chrome-foreground) );display:flex;flex-direction:column;width:100%;min-width:0;min-height:0;overflow:hidden;background:var(--mlv-page-shell-effective-background);color:var(--mlv-page-shell-effective-foreground)}.mlv-page-shell__topbar{flex:0 0 auto}.mlv-page-shell__topbar.mlv-action-bar{--mlv-action-bar-bg: var(--mlv-page-shell-effective-background);--mlv-action-bar-fg: var(--mlv-page-shell-effective-foreground);--mlv-action-bar-border: transparent;--mlv-action-bar-shadow: none;min-height:3.25rem;background:var(--mlv-page-shell-effective-background);-webkit-backdrop-filter:none;backdrop-filter:none}.mlv-page-shell__body{display:flex;flex:1 1 auto;min-width:0;min-height:0}.mlv-page-shell__body>[mlvPageSidebar]{flex:0 0 auto;min-width:0}.mlv-page-shell__body>[mlvPageSidebar]+[mlvPageSidebar]{border-inline-start:var(--mlv-stroke-width) solid color-mix(in srgb,var(--mlv-page-shell-effective-foreground) 16%,var(--mlv-page-shell-effective-background))}.mlv-page-shell__body>[mlvPageEndSidebar],.mlv-page-shell__body>mlv-page-end-pane{flex:0 0 auto;min-width:0}.mlv-page-shell__content{display:flex;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}.mlv-page-shell__content>.mlv-page{height:100%}.mlv-page-shell__sidebar{flex:0 0 auto;min-height:0}.mlv-page-shell__topbar .mlv-form-control-wrapper,.mlv-page-shell__sidebar .mlv-form-control-wrapper{--container-background-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 10%, var(--mlv-page-shell-effective-background) );--container-border-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 30%, var(--mlv-page-shell-effective-background) );--container-side-content-color: var( --mlv-page-shell-effective-foreground );--container-action-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 78%, var(--mlv-page-shell-effective-background) );--mlv-text-primary: var(--mlv-page-shell-effective-foreground);--mlv-text-secondary: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 78%, var(--mlv-page-shell-effective-background) );--mlv-text-tertiary: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 60%, var(--mlv-page-shell-effective-background) );--mlv-border-focus: var(--mlv-page-shell-effective-foreground)}.mlv-page-shell__topbar .mlv-form-control-wrapper.mlv-form-control-wrapper--state-default:hover,.mlv-page-shell__sidebar .mlv-form-control-wrapper.mlv-form-control-wrapper--state-default:hover{--container-border-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 40%, var(--mlv-page-shell-effective-background) )}.mlv-page-shell__topbar .mlv-form-control-wrapper.mlv-form-control-wrapper--focused,.mlv-page-shell__sidebar .mlv-form-control-wrapper.mlv-form-control-wrapper--focused{--container-border-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 50%, var(--mlv-page-shell-effective-background) )}.mlv-page-shell__sidebar.mlv-sidebar--offcanvas{width:0;min-width:0;overflow:visible}.mlv-page-shell__sidebar.mlv-sidebar{--mlv-sidebar-border-width: 0rem;--mlv-text-secondary: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 78%, var(--mlv-page-shell-effective-background) );--mlv-text-primary: var(--mlv-page-shell-effective-foreground);--mlv-text-action: var(--mlv-page-shell-effective-foreground);--mlv-background-neutral-1: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 8%, var(--mlv-page-shell-effective-background) );--mlv-background-neutral-1-hover: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 8%, var(--mlv-page-shell-effective-background) );--mlv-background-neutral-1-active: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 12%, var(--mlv-page-shell-effective-background) );--mlv-border-focus: var(--mlv-page-shell-effective-foreground);--mlv-sidebar-hover-bg: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 8%, var(--mlv-page-shell-effective-background) );--mlv-sidebar-active-bg: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 12%, var(--mlv-page-shell-effective-background) );--mlv-sidebar-rail-color: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 24%, var(--mlv-page-shell-effective-background) );--mlv-text-on-selected: var(--mlv-page-shell-effective-foreground);--mlv-background-selected: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 12%, var(--mlv-page-shell-effective-background) );--mlv-background-selected-hover: color-mix( in srgb, var(--mlv-page-shell-effective-foreground) 8%, var(--mlv-page-shell-effective-background) );height:100%;border:0;border-radius:0;box-shadow:none;background:transparent}}\n"] }]
1130
+ }], ctorParameters: () => [], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], foreground: [{ type: i0.Input, args: [{ isSignal: true, alias: "foreground", required: false }] }] } });
1131
+
1132
+ /** Marks the global top-navigation element projected into `mlv-page-shell`. */
1133
+ class MlvPageTopbar {
1134
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageTopbar, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1135
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageTopbar, isStandalone: true, selector: "[mlvPageTopbar]", host: { classAttribute: "mlv-page-shell__topbar" }, ngImport: i0 });
1136
+ }
1137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageTopbar, decorators: [{
1138
+ type: Directive,
1139
+ args: [{
1140
+ selector: '[mlvPageTopbar]',
1141
+ host: { class: 'mlv-page-shell__topbar' },
1142
+ }]
1143
+ }] });
1144
+ /** Marks the primary navigation sidebar projected into `mlv-page-shell`. */
1145
+ class MlvPageSidebar {
1146
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSidebar, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1147
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageSidebar, isStandalone: true, selector: "[mlvPageSidebar]", host: { classAttribute: "mlv-page-shell__sidebar" }, ngImport: i0 });
1148
+ }
1149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSidebar, decorators: [{
1150
+ type: Directive,
1151
+ args: [{
1152
+ selector: '[mlvPageSidebar]',
1153
+ host: { class: 'mlv-page-shell__sidebar' },
1154
+ }]
1155
+ }] });
1156
+ /** Marks an optional second, trailing sidebar projected into `mlv-page-shell`. */
1157
+ class MlvPageEndSidebar {
1158
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageEndSidebar, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1159
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageEndSidebar, isStandalone: true, selector: "[mlvPageEndSidebar]", host: { classAttribute: "mlv-page-shell__sidebar mlv-page-shell__sidebar--end" }, ngImport: i0 });
1160
+ }
1161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageEndSidebar, decorators: [{
1162
+ type: Directive,
1163
+ args: [{
1164
+ selector: '[mlvPageEndSidebar]',
1165
+ host: {
1166
+ class: 'mlv-page-shell__sidebar mlv-page-shell__sidebar--end',
1167
+ },
1168
+ }]
1169
+ }] });
1170
+
1171
+ /** Owns the single template rendered by a responsive Page end pane. */
1172
+ class MlvPageEndPaneContent {
1173
+ /** Template projected into either the inline aside or compact Drawer. */
1174
+ templateRef = inject(TemplateRef);
1175
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageEndPaneContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1176
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageEndPaneContent, isStandalone: true, selector: "ng-template[mlvPageEndPaneContent]", ngImport: i0 });
1177
+ }
1178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageEndPaneContent, decorators: [{
1179
+ type: Directive,
1180
+ args: [{ selector: 'ng-template[mlvPageEndPaneContent]' }]
1181
+ }] });
1182
+
1183
+ /**
1184
+ * Responsive trailing Page pane that renders one content template inline or
1185
+ * in a modal Drawer while preserving one logical open and focus lifecycle.
1186
+ */
1187
+ class MlvPageEndPane {
1188
+ /** Two-way bindable logical open state shared by both renderers. */
1189
+ opened = model(false, /* @ts-ignore */
1190
+ ...(ngDevMode ? [{ debugName: "opened" }] : /* istanbul ignore next */ []));
1191
+ /** Inline pane width and compact Drawer size. */
1192
+ width = input('20rem', /* @ts-ignore */
1193
+ ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
1194
+ /** Breakpoint below which the pane renders in a modal Drawer. */
1195
+ collapseBelow = input(null, /* @ts-ignore */
1196
+ ...(ngDevMode ? [{ debugName: "collapseBelow" }] : /* istanbul ignore next */ []));
1197
+ /** Accessible name applied to the active aside or dialog surface. */
1198
+ ariaLabel = input.required(/* @ts-ignore */
1199
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
1200
+ /** Whether a compact Drawer's backdrop click closes the logical pane. */
1201
+ closeOnBackdropClick = input(true, { ...(ngDevMode ? { debugName: "closeOnBackdropClick" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
1202
+ /** Whether Escape closes the logical pane in compact Drawer mode. */
1203
+ closeOnEscape = input(true, { ...(ngDevMode ? { debugName: "closeOnEscape" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
1204
+ /** Initial focus strategy used by the compact Drawer renderer. */
1205
+ initialFocus = input('auto', /* @ts-ignore */
1206
+ ...(ngDevMode ? [{ debugName: "initialFocus" }] : /* istanbul ignore next */ []));
1207
+ /** Emitted once for each logical false-to-true open transition. */
1208
+ afterOpened = output();
1209
+ /** Emitted once after a logical close's active renderer is gone. */
1210
+ afterClosed = output();
1211
+ /** Stable id referenced by every Page end-pane trigger. */
1212
+ panelId = mlvNextId('mlv-page-end-pane');
1213
+ /** @protected Single content template shared by both renderers. */
1214
+ _content = contentChild.required(MlvPageEndPaneContent, /* @ts-ignore */
1215
+ ...(ngDevMode ? [{ debugName: "_content" }] : /* istanbul ignore next */ []));
1216
+ /** @protected Whether the configured breakpoint currently selects Drawer rendering. */
1217
+ _compact = computed(() => {
1218
+ const breakpoint = this.collapseBelow();
1219
+ return breakpoint !== null && this._breakpoints.isDown(breakpoint)();
1220
+ }, /* @ts-ignore */
1221
+ ...(ngDevMode ? [{ debugName: "_compact" }] : /* istanbul ignore next */ []));
1222
+ /** @protected Width reserved in Page Shell only for an open inline pane. */
1223
+ _hostWidth = computed(() => this.opened() && !this._compact() ? this.width() : '0px', /* @ts-ignore */
1224
+ ...(ngDevMode ? [{ debugName: "_hostWidth" }] : /* istanbul ignore next */ []));
1225
+ /** @private Shared viewport breakpoint state. */
1226
+ _breakpoints = inject(MlvBreakpointService);
1227
+ /** @private Injector used to finish inline closes after the renderer is removed. */
1228
+ _injector = inject(Injector);
1229
+ /** @private Logical state observed during the preceding effect pass. */
1230
+ _previousOpened = false;
1231
+ /** @private Element focused immediately before the current logical open. */
1232
+ _restoreTarget = null;
1233
+ /** @private Whether a real logical close is waiting for renderer disposal. */
1234
+ _closePending = false;
1235
+ constructor() {
1236
+ effect(() => {
1237
+ const opened = this.opened();
1238
+ if (opened === this._previousOpened) {
1239
+ return;
1240
+ }
1241
+ this._previousOpened = opened;
1242
+ if (opened) {
1243
+ this._closePending = false;
1244
+ this._restoreTarget = document.activeElement;
1245
+ this.afterOpened.emit();
1246
+ return;
1247
+ }
1248
+ this._closePending = true;
1249
+ if (!this._compact()) {
1250
+ this._scheduleInlineCloseCompletion();
1251
+ }
1252
+ });
1253
+ }
1254
+ /** Opens the logical pane. */
1255
+ open() {
1256
+ this.opened.set(true);
1257
+ }
1258
+ /** Closes the logical pane and waits for its active renderer to disappear. */
1259
+ close() {
1260
+ if (!this.opened()) {
1261
+ return;
1262
+ }
1263
+ this._closePending = true;
1264
+ this.opened.set(false);
1265
+ }
1266
+ /** Toggles the logical pane open state. */
1267
+ toggle() {
1268
+ if (this.opened()) {
1269
+ this.close();
1270
+ }
1271
+ else {
1272
+ this.open();
1273
+ }
1274
+ }
1275
+ /** @protected Synchronizes internal Drawer dismissal with the logical model. */
1276
+ _onDrawerOpenedChange(opened) {
1277
+ if (!opened && this.opened()) {
1278
+ this.close();
1279
+ }
1280
+ }
1281
+ /** @protected Completes a pending logical close after the Drawer is disposed. */
1282
+ _onDrawerDisposed() {
1283
+ this._completeClose();
1284
+ }
1285
+ /** @private Defers inline completion until Angular removes the aside view. */
1286
+ _scheduleInlineCloseCompletion() {
1287
+ afterNextRender(() => this._completeClose(), {
1288
+ injector: this._injector,
1289
+ });
1290
+ }
1291
+ /** @private Restores focus and emits one close event for a real logical close. */
1292
+ _completeClose() {
1293
+ if (!this._closePending) {
1294
+ return;
1295
+ }
1296
+ this._closePending = false;
1297
+ const restoreTarget = this._restoreTarget;
1298
+ this._restoreTarget = null;
1299
+ if (restoreTarget?.isConnected) {
1300
+ restoreTarget.focus();
1301
+ }
1302
+ this.afterClosed.emit();
1303
+ }
1304
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageEndPane, deps: [], target: i0.ɵɵFactoryTarget.Component });
1305
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvPageEndPane, isStandalone: true, selector: "mlv-page-end-pane", inputs: { opened: { classPropertyName: "opened", publicName: "opened", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, collapseBelow: { classPropertyName: "collapseBelow", publicName: "collapseBelow", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: true, transformFunction: null }, closeOnBackdropClick: { classPropertyName: "closeOnBackdropClick", publicName: "closeOnBackdropClick", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, initialFocus: { classPropertyName: "initialFocus", publicName: "initialFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "openedChange", afterOpened: "afterOpened", afterClosed: "afterClosed" }, host: { properties: { "class.mlv-page-end-pane--overlay": "_compact()", "attr.id": "panelId", "style.--mlv-page-end-pane-width": "_hostWidth()" }, classAttribute: "mlv-page-end-pane" }, queries: [{ propertyName: "_content", first: true, predicate: MlvPageEndPaneContent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (_compact()) {\n<mlv-drawer\n [opened]=\"opened()\"\n position=\"right\"\n [size]=\"width()\"\n [ariaLabel]=\"ariaLabel()\"\n [closeOnBackdropClick]=\"closeOnBackdropClick()\"\n [closeOnEscape]=\"closeOnEscape()\"\n [initialFocus]=\"initialFocus()\"\n [restoreFocus]=\"false\"\n (openedChange)=\"_onDrawerOpenedChange($event)\"\n (afterClosed)=\"_onDrawerDisposed()\"\n>\n <ng-template mlvDrawerContent>\n <ng-container [ngTemplateOutlet]=\"_content().templateRef\" />\n </ng-template>\n</mlv-drawer>\n} @else if (opened()) {\n<aside class=\"mlv-page-end-pane__surface\" [attr.aria-label]=\"ariaLabel()\">\n <ng-container [ngTemplateOutlet]=\"_content().templateRef\" />\n</aside>\n}\n", styles: ["@layer mlv.components{.mlv-page-end-pane{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-end-pane *{box-sizing:border-box}.mlv-page-end-pane{display:flex;flex:0 0 var(--mlv-page-end-pane-width);width:var(--mlv-page-end-pane-width);min-width:0;min-height:0}.mlv-page-end-pane--overlay{flex-basis:0;width:0;overflow:visible}.mlv-page-end-pane__surface{width:100%;min-width:0;min-height:0;overflow:auto;background:var(--mlv-background-base);border-inline-start:var(--mlv-stroke-width) solid var(--mlv-border-subtle)}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MlvDrawer, selector: "mlv-drawer", inputs: ["position", "ariaLabel", "ariaLabelledBy", "size", "resizable", "snapPoints", "defaultSnap", "minSize", "maxSize"] }, { kind: "directive", type: MlvDrawerContent, selector: "[mlvDrawerContent]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1306
+ }
1307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageEndPane, decorators: [{
1308
+ type: Component,
1309
+ args: [{ selector: 'mlv-page-end-pane', imports: [NgTemplateOutlet, MlvDrawer, MlvDrawerContent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1310
+ class: 'mlv-page-end-pane',
1311
+ '[class.mlv-page-end-pane--overlay]': '_compact()',
1312
+ '[attr.id]': 'panelId',
1313
+ '[style.--mlv-page-end-pane-width]': '_hostWidth()',
1314
+ }, template: "@if (_compact()) {\n<mlv-drawer\n [opened]=\"opened()\"\n position=\"right\"\n [size]=\"width()\"\n [ariaLabel]=\"ariaLabel()\"\n [closeOnBackdropClick]=\"closeOnBackdropClick()\"\n [closeOnEscape]=\"closeOnEscape()\"\n [initialFocus]=\"initialFocus()\"\n [restoreFocus]=\"false\"\n (openedChange)=\"_onDrawerOpenedChange($event)\"\n (afterClosed)=\"_onDrawerDisposed()\"\n>\n <ng-template mlvDrawerContent>\n <ng-container [ngTemplateOutlet]=\"_content().templateRef\" />\n </ng-template>\n</mlv-drawer>\n} @else if (opened()) {\n<aside class=\"mlv-page-end-pane__surface\" [attr.aria-label]=\"ariaLabel()\">\n <ng-container [ngTemplateOutlet]=\"_content().templateRef\" />\n</aside>\n}\n", styles: ["@layer mlv.components{.mlv-page-end-pane{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-end-pane *{box-sizing:border-box}.mlv-page-end-pane{display:flex;flex:0 0 var(--mlv-page-end-pane-width);width:var(--mlv-page-end-pane-width);min-width:0;min-height:0}.mlv-page-end-pane--overlay{flex-basis:0;width:0;overflow:visible}.mlv-page-end-pane__surface{width:100%;min-width:0;min-height:0;overflow:auto;background:var(--mlv-background-base);border-inline-start:var(--mlv-stroke-width) solid var(--mlv-border-subtle)}}\n"] }]
1315
+ }], ctorParameters: () => [], propDecorators: { opened: [{ type: i0.Input, args: [{ isSignal: true, alias: "opened", required: false }] }, { type: i0.Output, args: ["openedChange"] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], collapseBelow: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseBelow", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: true }] }], closeOnBackdropClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnBackdropClick", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], initialFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialFocus", required: false }] }], afterOpened: [{ type: i0.Output, args: ["afterOpened"] }], afterClosed: [{ type: i0.Output, args: ["afterClosed"] }], _content: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPageEndPaneContent), { isSignal: true }] }] } });
1316
+
1317
+ /** Native-button trigger that toggles and describes a Page end pane. */
1318
+ class MlvPageEndPaneTrigger {
1319
+ /** Page end pane controlled by this native button. */
1320
+ mlvPageEndPaneTrigger = input.required(/* @ts-ignore */
1321
+ ...(ngDevMode ? [{ debugName: "mlvPageEndPaneTrigger" }] : /* istanbul ignore next */ []));
1322
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageEndPaneTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1323
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: MlvPageEndPaneTrigger, isStandalone: true, selector: "button[mlvPageEndPaneTrigger]", inputs: { mlvPageEndPaneTrigger: { classPropertyName: "mlvPageEndPaneTrigger", publicName: "mlvPageEndPaneTrigger", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "mlvPageEndPaneTrigger().toggle()" }, properties: { "attr.aria-expanded": "mlvPageEndPaneTrigger().opened()", "attr.aria-controls": "mlvPageEndPaneTrigger().panelId" } }, ngImport: i0 });
1324
+ }
1325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageEndPaneTrigger, decorators: [{
1326
+ type: Directive,
1327
+ args: [{
1328
+ selector: 'button[mlvPageEndPaneTrigger]',
1329
+ host: {
1330
+ '(click)': 'mlvPageEndPaneTrigger().toggle()',
1331
+ '[attr.aria-expanded]': 'mlvPageEndPaneTrigger().opened()',
1332
+ '[attr.aria-controls]': 'mlvPageEndPaneTrigger().panelId',
1333
+ },
1334
+ }]
1335
+ }], propDecorators: { mlvPageEndPaneTrigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "mlvPageEndPaneTrigger", required: true }] }] } });
1336
+
1337
+ /** Marks the breadcrumb template rendered at the start of a page header. */
1338
+ class MlvPageBreadcrumb extends MlvStructural {
1339
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageBreadcrumb, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1340
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageBreadcrumb, isStandalone: true, selector: "[mlvPageBreadcrumb]", usesInheritance: true, ngImport: i0 });
1341
+ }
1342
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageBreadcrumb, decorators: [{
1343
+ type: Directive,
1344
+ args: [{ selector: '[mlvPageBreadcrumb]' }]
1345
+ }] });
1346
+ /** Marks the decorative leading icon beside the page title. */
1347
+ class MlvPageHeaderIcon extends MlvStructural {
1348
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderIcon, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1349
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageHeaderIcon, isStandalone: true, selector: "[mlvPageHeaderIcon]", usesInheritance: true, ngImport: i0 });
1350
+ }
1351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderIcon, decorators: [{
1352
+ type: Directive,
1353
+ args: [{ selector: '[mlvPageHeaderIcon]' }]
1354
+ }] });
1355
+ /** Marks the page title template. Consumers should project one semantic `<h1>`. */
1356
+ class MlvPageTitle extends MlvStructural {
1357
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageTitle, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1358
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageTitle, isStandalone: true, selector: "[mlvPageTitle]", usesInheritance: true, ngImport: i0 });
1359
+ }
1360
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageTitle, decorators: [{
1361
+ type: Directive,
1362
+ args: [{ selector: '[mlvPageTitle]' }]
1363
+ }] });
1364
+ /**
1365
+ * Marks inline status content rendered directly after the page title,
1366
+ * such as draft/live badges or an unsaved-changes indicator.
1367
+ */
1368
+ class MlvPageHeaderStatus extends MlvStructural {
1369
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderStatus, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1370
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageHeaderStatus, isStandalone: true, selector: "[mlvPageHeaderStatus]", usesInheritance: true, ngImport: i0 });
1371
+ }
1372
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderStatus, decorators: [{
1373
+ type: Directive,
1374
+ args: [{ selector: '[mlvPageHeaderStatus]' }]
1375
+ }] });
1376
+ /** Marks the primary actions rendered after the page title. */
1377
+ class MlvPageHeaderActions extends MlvStructural {
1378
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderActions, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1379
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageHeaderActions, isStandalone: true, selector: "[mlvPageHeaderActions]", usesInheritance: true, ngImport: i0 });
1380
+ }
1381
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderActions, decorators: [{
1382
+ type: Directive,
1383
+ args: [{ selector: '[mlvPageHeaderActions]' }]
1384
+ }] });
1385
+ /** Marks supporting descriptive content below the title row. */
1386
+ class MlvPageHeaderDescription extends MlvStructural {
1387
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderDescription, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1388
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageHeaderDescription, isStandalone: true, selector: "[mlvPageHeaderDescription]", usesInheritance: true, ngImport: i0 });
1389
+ }
1390
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderDescription, decorators: [{
1391
+ type: Directive,
1392
+ args: [{ selector: '[mlvPageHeaderDescription]' }]
1393
+ }] });
1394
+ /** Marks page metadata such as ownership, visibility, or last-updated time. */
1395
+ class MlvPageHeaderMeta extends MlvStructural {
1396
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderMeta, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1397
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageHeaderMeta, isStandalone: true, selector: "[mlvPageHeaderMeta]", usesInheritance: true, ngImport: i0 });
1398
+ }
1399
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderMeta, decorators: [{
1400
+ type: Directive,
1401
+ args: [{ selector: '[mlvPageHeaderMeta]' }]
1402
+ }] });
1403
+ /** Marks navigation tabs rendered at the bottom of the header. */
1404
+ class MlvPageHeaderTabs extends MlvStructural {
1405
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderTabs, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1406
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageHeaderTabs, isStandalone: true, selector: "[mlvPageHeaderTabs]", usesInheritance: true, ngImport: i0 });
1407
+ }
1408
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderTabs, decorators: [{
1409
+ type: Directive,
1410
+ args: [{ selector: '[mlvPageHeaderTabs]' }]
1411
+ }] });
1412
+ /** Marks actions aligned to the trailing edge of the page-tabs row. */
1413
+ class MlvPageHeaderTabsActions extends MlvStructural {
1414
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderTabsActions, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1415
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageHeaderTabsActions, isStandalone: true, selector: "[mlvPageHeaderTabsActions]", usesInheritance: true, ngImport: i0 });
1416
+ }
1417
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeaderTabsActions, decorators: [{
1418
+ type: Directive,
1419
+ args: [{ selector: '[mlvPageHeaderTabsActions]' }]
1420
+ }] });
1421
+
1422
+ /**
1423
+ * Structured page heading with optional breadcrumb, actions, status, metadata,
1424
+ * and tabs. `size="s"` renders the compact record-editor header.
1425
+ *
1426
+ * Inside `main[mlvPage]` the header participates in the scroll-scrubbed snap
1427
+ * timeline (`--mlv-page-snap`): the title interpolates down one type scale and
1428
+ * the breadcrumb and tabs rows collapse, each over its own stagger window.
1429
+ * With `snapControls`, chevron/pin controls float on the header's bottom edge
1430
+ * — always visible while the header is sticky. The chevron snaps the chrome
1431
+ * open/closed; the pin freezes the current state regardless of scrolling.
1432
+ */
1433
+ class MlvPageHeader {
1434
+ /** Optional router destination for the built-in back link. */
1435
+ back = input(null, /* @ts-ignore */
1436
+ ...(ngDevMode ? [{ debugName: "back" }] : /* istanbul ignore next */ []));
1437
+ /** Accessible and visible text for the built-in back link. */
1438
+ backLabel = input('Back', /* @ts-ignore */
1439
+ ...(ngDevMode ? [{ debugName: "backLabel" }] : /* istanbul ignore next */ []));
1440
+ /** Makes this header sticky independently of the containing page. */
1441
+ sticky = input(false, { ...(ngDevMode ? { debugName: "sticky" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
1442
+ /**
1443
+ * Visual scale. `'m'` is the default hero header; `'s'` is the compact
1444
+ * single-row variant for record-editor pages, with a smaller title scale.
1445
+ */
1446
+ size = input('m', /* @ts-ignore */
1447
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1448
+ /** Aligns the tabs row to the start (default) or centers it. */
1449
+ tabsAlign = input('start', /* @ts-ignore */
1450
+ ...(ngDevMode ? [{ debugName: "tabsAlign" }] : /* istanbul ignore next */ []));
1451
+ /**
1452
+ * Shows the floating chevron/pin snap controls on the header's bottom edge.
1453
+ * Requires the header to be inside `main[mlvPage]`.
1454
+ */
1455
+ snapControls = input(false, { ...(ngDevMode ? { debugName: "snapControls" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
1456
+ /** Accessible label for the chevron snap-toggle control. */
1457
+ toggleLabel = input('Toggle header', /* @ts-ignore */
1458
+ ...(ngDevMode ? [{ debugName: "toggleLabel" }] : /* istanbul ignore next */ []));
1459
+ /** Accessible label for the pin control. */
1460
+ pinLabel = input('Pin header state', /* @ts-ignore */
1461
+ ...(ngDevMode ? [{ debugName: "pinLabel" }] : /* istanbul ignore next */ []));
1462
+ /** Emits when the built-in back link is activated. */
1463
+ backClick = output();
1464
+ /** @protected Breadcrumb template projected via `[mlvPageBreadcrumb]`. */
1465
+ _breadcrumbRef = contentChild(MlvPageBreadcrumb, /* @ts-ignore */
1466
+ ...(ngDevMode ? [{ debugName: "_breadcrumbRef" }] : /* istanbul ignore next */ []));
1467
+ /** @protected Decorative leading icon projected via `[mlvPageHeaderIcon]`. */
1468
+ _iconRef = contentChild(MlvPageHeaderIcon, /* @ts-ignore */
1469
+ ...(ngDevMode ? [{ debugName: "_iconRef" }] : /* istanbul ignore next */ []));
1470
+ /** @protected Page title template projected via `[mlvPageTitle]`. */
1471
+ _titleRef = contentChild(MlvPageTitle, /* @ts-ignore */
1472
+ ...(ngDevMode ? [{ debugName: "_titleRef" }] : /* istanbul ignore next */ []));
1473
+ /** @protected Inline status content projected via `[mlvPageHeaderStatus]`. */
1474
+ _statusRef = contentChild(MlvPageHeaderStatus, /* @ts-ignore */
1475
+ ...(ngDevMode ? [{ debugName: "_statusRef" }] : /* istanbul ignore next */ []));
1476
+ /** @protected Header actions projected via `[mlvPageHeaderActions]`. */
1477
+ _actionsRef = contentChild(MlvPageHeaderActions, /* @ts-ignore */
1478
+ ...(ngDevMode ? [{ debugName: "_actionsRef" }] : /* istanbul ignore next */ []));
1479
+ /** @protected Description projected via `[mlvPageHeaderDescription]`. */
1480
+ _descriptionRef = contentChild(MlvPageHeaderDescription, /* @ts-ignore */
1481
+ ...(ngDevMode ? [{ debugName: "_descriptionRef" }] : /* istanbul ignore next */ []));
1482
+ /** @protected Metadata projected via `[mlvPageHeaderMeta]`. */
1483
+ _metaRef = contentChild(MlvPageHeaderMeta, /* @ts-ignore */
1484
+ ...(ngDevMode ? [{ debugName: "_metaRef" }] : /* istanbul ignore next */ []));
1485
+ /** @protected Tabs projected via `[mlvPageHeaderTabs]`. */
1486
+ _tabsRef = contentChild(MlvPageHeaderTabs, /* @ts-ignore */
1487
+ ...(ngDevMode ? [{ debugName: "_tabsRef" }] : /* istanbul ignore next */ []));
1488
+ /** @protected Trailing tabs-row actions projected via `[mlvPageHeaderTabsActions]`. */
1489
+ _tabsActionsRef = contentChild(MlvPageHeaderTabsActions, /* @ts-ignore */
1490
+ ...(ngDevMode ? [{ debugName: "_tabsActionsRef" }] : /* istanbul ignore next */ []));
1491
+ /** @private Scroll state of the owning page, when rendered inside one. */
1492
+ _pageScroll = inject(MLV_PAGE_SCROLL, { optional: true });
1493
+ /** @private Snap controller of the owning page, when rendered inside one. */
1494
+ _snap = inject(MlvPageSnapController, { optional: true });
1495
+ /** @protected Controller behind the floating controls, when enabled. */
1496
+ _controls = computed(() => this.snapControls() && this._snap ? this._snap : null, /* @ts-ignore */
1497
+ ...(ngDevMode ? [{ debugName: "_controls" }] : /* istanbul ignore next */ []));
1498
+ /** @protected True while the chrome is closer to snapped than expanded. */
1499
+ _snapped = computed(() => this._snap?.snapped() ?? false, /* @ts-ignore */
1500
+ ...(ngDevMode ? [{ debugName: "_snapped" }] : /* istanbul ignore next */ []));
1501
+ /** @protected True while the snap state is frozen against scrolling. */
1502
+ _pinned = computed(() => this._snap?.pinned() ?? false, /* @ts-ignore */
1503
+ ...(ngDevMode ? [{ debugName: "_pinned" }] : /* istanbul ignore next */ []));
1504
+ /** @protected True while the owning page is scrolled away from the top. */
1505
+ _scrolled = computed(() => this._snap
1506
+ ? this._snap.progress() > 0.02
1507
+ : (this._pageScroll?.scrolled() ?? false), /* @ts-ignore */
1508
+ ...(ngDevMode ? [{ debugName: "_scrolled" }] : /* istanbul ignore next */ []));
1509
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
1510
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvPageHeader, isStandalone: true, selector: "mlv-page-header", inputs: { back: { classPropertyName: "back", publicName: "back", isSignal: true, isRequired: false, transformFunction: null }, backLabel: { classPropertyName: "backLabel", publicName: "backLabel", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, tabsAlign: { classPropertyName: "tabsAlign", publicName: "tabsAlign", isSignal: true, isRequired: false, transformFunction: null }, snapControls: { classPropertyName: "snapControls", publicName: "snapControls", isSignal: true, isRequired: false, transformFunction: null }, toggleLabel: { classPropertyName: "toggleLabel", publicName: "toggleLabel", isSignal: true, isRequired: false, transformFunction: null }, pinLabel: { classPropertyName: "pinLabel", publicName: "pinLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backClick: "backClick" }, host: { properties: { "class.mlv-page-header--sticky": "sticky()", "class.mlv-page-header--size-s": "size() === \"s\"", "class.mlv-page-header--tabs-center": "tabsAlign() === \"center\"", "class.mlv-page-header--scrolled": "_scrolled()" }, classAttribute: "mlv-page-header" }, queries: [{ propertyName: "_breadcrumbRef", first: true, predicate: MlvPageBreadcrumb, descendants: true, isSignal: true }, { propertyName: "_iconRef", first: true, predicate: MlvPageHeaderIcon, descendants: true, isSignal: true }, { propertyName: "_titleRef", first: true, predicate: MlvPageTitle, descendants: true, isSignal: true }, { propertyName: "_statusRef", first: true, predicate: MlvPageHeaderStatus, descendants: true, isSignal: true }, { propertyName: "_actionsRef", first: true, predicate: MlvPageHeaderActions, descendants: true, isSignal: true }, { propertyName: "_descriptionRef", first: true, predicate: MlvPageHeaderDescription, descendants: true, isSignal: true }, { propertyName: "_metaRef", first: true, predicate: MlvPageHeaderMeta, descendants: true, isSignal: true }, { propertyName: "_tabsRef", first: true, predicate: MlvPageHeaderTabs, descendants: true, isSignal: true }, { propertyName: "_tabsActionsRef", first: true, predicate: MlvPageHeaderTabsActions, descendants: true, isSignal: true }], ngImport: i0, template: "@if (_breadcrumbRef()?.templateRef; as breadcrumbTpl) {\n<div\n class=\"mlv-page-header__breadcrumb\"\n mlvPageSnap=\"hide\"\n [snapFrom]=\"0\"\n [snapTo]=\"0.5\"\n snapSize=\"3rem\"\n>\n <ng-template [ngTemplateOutlet]=\"breadcrumbTpl\" />\n</div>\n} @if (back(); as backTarget) {\n<a\n mlvLink\n class=\"mlv-page-header__back\"\n variant=\"subtle\"\n [routerLink]=\"backTarget\"\n (click)=\"backClick.emit($event)\"\n>\n <ng-template mlvLinkBefore>\n <svg lucideChevronLeft [size]=\"16\" aria-hidden=\"true\" />\n </ng-template>\n {{ backLabel() }}\n</a>\n}\n\n<div class=\"mlv-page-header__title-row\">\n @if (_iconRef()?.templateRef; as iconTpl) {\n <span class=\"mlv-page-header__icon\" aria-hidden=\"true\">\n <ng-template [ngTemplateOutlet]=\"iconTpl\" />\n </span>\n } @if (_titleRef()?.templateRef; as titleTpl) {\n <div class=\"mlv-page-header__title\">\n <ng-template [ngTemplateOutlet]=\"titleTpl\" />\n </div>\n } @if (_statusRef()?.templateRef; as statusTpl) {\n <div class=\"mlv-page-header__status\">\n <ng-template [ngTemplateOutlet]=\"statusTpl\" />\n </div>\n }\n <span class=\"mlv-page-header__spacer\" aria-hidden=\"true\"></span>\n @if (_actionsRef()?.templateRef; as actionsTpl) {\n <div class=\"mlv-page-header__actions\">\n <ng-template [ngTemplateOutlet]=\"actionsTpl\" />\n </div>\n }\n</div>\n\n@if (_descriptionRef()?.templateRef; as descriptionTpl) {\n<div class=\"mlv-page-header__description\">\n <ng-template [ngTemplateOutlet]=\"descriptionTpl\" />\n</div>\n} @if (_metaRef()?.templateRef; as metaTpl) {\n<div class=\"mlv-page-header__meta\">\n <ng-template [ngTemplateOutlet]=\"metaTpl\" />\n</div>\n} @if (_tabsRef()?.templateRef || _tabsActionsRef()?.templateRef) {\n<div\n class=\"mlv-page-header__tabs-row\"\n mlvPageSnap=\"hide\"\n [snapFrom]=\"0.3\"\n [snapTo]=\"0.85\"\n snapSize=\"5rem\"\n>\n @if (_tabsRef()?.templateRef; as tabsTpl) {\n <div class=\"mlv-page-header__tabs\">\n <ng-template [ngTemplateOutlet]=\"tabsTpl\" />\n </div>\n }\n <span class=\"mlv-page-header__spacer\" aria-hidden=\"true\"></span>\n @if (_tabsActionsRef()?.templateRef; as tabsActionsTpl) {\n <div class=\"mlv-page-header__tabs-actions\">\n <ng-template [ngTemplateOutlet]=\"tabsActionsTpl\" />\n </div>\n }\n</div>\n}\n\n<!-- A projected summary strip renders as the chrome's bottom row, sharing\n this header's single glass surface. -->\n<ng-content select=\"mlv-page-summary\" />\n\n@if (_controls(); as snap) {\n<div class=\"mlv-page-header__snap-controls\">\n <button\n mlvButton\n type=\"button\"\n variant=\"outlined\"\n shape=\"circle\"\n mlvDensity=\"tight\"\n class=\"mlv-page-header__snap-toggle\"\n [attr.aria-label]=\"toggleLabel()\"\n [attr.aria-expanded]=\"!_snapped()\"\n (click)=\"snap.toggle()\"\n >\n <svg lucideChevronUp [size]=\"12\" aria-hidden=\"true\" />\n </button>\n <button\n mlvButton\n type=\"button\"\n variant=\"outlined\"\n shape=\"circle\"\n mlvDensity=\"tight\"\n class=\"mlv-page-header__snap-pin\"\n [class.mlv-page-header__snap-pin--active]=\"_pinned()\"\n [attr.aria-label]=\"pinLabel()\"\n [attr.aria-pressed]=\"_pinned()\"\n (click)=\"snap.setPinned(!_pinned())\"\n >\n @if (_pinned()) {\n <svg lucidePinOff [size]=\"12\" aria-hidden=\"true\" />\n } @else {\n <svg lucidePin [size]=\"12\" aria-hidden=\"true\" />\n }\n </button>\n</div>\n}\n", styles: ["@layer mlv.components{.mlv-page-header{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-header *{box-sizing:border-box}.mlv-page-header{--mlv-page-header-snap: clamp(0, var(--mlv-page-snap, 0), 1);--mlv-page-chrome-bg: color-mix( in srgb, var(--mlv-elevation-bg-3), transparent 50% );--mlv-page-chrome-border: var(--mlv-border-subtle);position:relative;display:flex;flex-direction:column;gap:var(--mlv-spacing-2);min-width:0;background-color:var(--mlv-page-chrome-bg);border-bottom:.0625rem solid var(--mlv-page-chrome-border);border-radius:var(--mlv-radius-l) var(--mlv-radius-l) 0 0;backdrop-filter:blur(1.25rem);-webkit-backdrop-filter:blur(1.25rem);padding:var(--mlv-spacing-2) max(var(--mlv-page-inset, 0rem),var(--mlv-spacing-3));box-shadow:var(--mlv-shadow-raised);transition:box-shadow var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-page-header--sticky{position:sticky;top:0;z-index:10}.mlv-page-header--scrolled{box-shadow:var(--mlv-shadow-floating)}.mlv-page-header__breadcrumb,.mlv-page-header__description,.mlv-page-header__meta,.mlv-page-header__tabs,.mlv-page-header__title{min-width:0}.mlv-page-header__back{align-self:flex-start}.mlv-page-header__title-row,.mlv-page-header__tabs-row{display:flex;align-items:center;gap:var(--mlv-spacing-3);min-width:0}.mlv-page-header__title-row{min-height:var(--mlv-height-l)}.mlv-page-header__icon{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;color:var(--mlv-text-secondary)}.mlv-page-header__title h1{margin:0;font-size:calc(var(--mlv-typography-heading-h2-size) + (var(--mlv-typography-heading-h4-size) - var(--mlv-typography-heading-h2-size)) * var(--mlv-page-header-snap));line-height:calc(var(--mlv-typography-heading-h2-line-height) + (var(--mlv-typography-heading-h4-line-height) - var(--mlv-typography-heading-h2-line-height)) * var(--mlv-page-header-snap));letter-spacing:var(--mlv-typography-heading-h2-letter-spacing)}.mlv-page-header__spacer{flex:1 1 auto}.mlv-page-header__actions,.mlv-page-header__tabs-actions{display:flex;flex:0 0 auto;align-items:center;gap:var(--mlv-spacing-2)}.mlv-page-header__actions button,.mlv-page-header__actions a,.mlv-page-header__tabs-actions button,.mlv-page-header__tabs-actions a{white-space:nowrap}.mlv-page-header__description{max-width:48rem;color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-m-size);line-height:var(--mlv-typography-body-m-line-height)}.mlv-page-header__meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--mlv-spacing-2);color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-s-size);line-height:var(--mlv-typography-body-s-line-height)}.mlv-page-header__tabs-row{margin-bottom:calc(0rem - var(--mlv-spacing-2))}.mlv-page-header__tabs{flex:1 1 auto;overflow:hidden}.mlv-page-header__tabs>.mlv-tab-group{width:100%}.mlv-page-header__status{display:inline-flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;gap:var(--mlv-spacing-1)}.mlv-page-header__snap-controls{position:absolute;bottom:0;left:50%;z-index:1;display:flex;gap:var(--mlv-spacing-1);transform:translate(-50%,50%)}.mlv-page-header__snap-toggle,.mlv-page-header__snap-pin{background:var(--mlv-background-raised);box-shadow:var(--mlv-shadow-raised)}.mlv-page-header__snap-toggle svg{rotate:calc(180deg * var(--mlv-page-header-snap))}.mlv-page-header__snap-pin--active{color:var(--mlv-text-action);border-color:var(--mlv-border-focus)}.mlv-page-header--tabs-center .mlv-page-header__tabs-row{justify-content:center}.mlv-page-header--tabs-center .mlv-page-header__tabs-row .mlv-page-header__spacer{flex:0 0 0}.mlv-page-header--tabs-center .mlv-page-header__tabs{flex:0 1 auto}.mlv-page-header--tabs-center .mlv-page-header__tabs>.mlv-tab-group{width:auto}.mlv-page-header--size-s{gap:var(--mlv-spacing-1)}.mlv-page-header--size-s .mlv-page-header__title-row{min-height:var(--mlv-height-m)}.mlv-page-header--size-s .mlv-page-header__title h1{font-size:calc(var(--mlv-typography-heading-h4-size) + (var(--mlv-typography-heading-h6-size) - var(--mlv-typography-heading-h4-size)) * var(--mlv-page-header-snap));line-height:calc(var(--mlv-typography-heading-h4-line-height) + (var(--mlv-typography-heading-h6-line-height) - var(--mlv-typography-heading-h4-line-height)) * var(--mlv-page-header-snap));letter-spacing:var(--mlv-letter-spacing-normal)}.mlv-page-header--size-s .mlv-page-header__description{font-size:var(--mlv-typography-body-s-size);line-height:var(--mlv-typography-body-s-line-height)}.mlv-page-header>.mlv-page-summary{position:static;z-index:auto;margin-inline:calc(-1*max(var(--mlv-page-inset, 0rem),var(--mlv-spacing-3)));background:transparent;border-bottom:none;backdrop-filter:none;-webkit-backdrop-filter:none}@container (max-width: 40rem){.mlv-page-header__title-row{flex-wrap:wrap;row-gap:var(--mlv-spacing-1)}.mlv-page-header__title-row .mlv-page-header__spacer{display:none}.mlv-page-header__actions{flex:1 1 100%;flex-wrap:wrap;justify-content:flex-start}}@media(prefers-reduced-motion:reduce){.mlv-page-header,.mlv-page-header *,.mlv-page-header:before,.mlv-page-header:after,[class^=mlv-page-header__],[class*=\" mlv-page-header__\"],[class^=mlv-page-header--],[class*=\" mlv-page-header--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "component", type: LucideChevronLeft, selector: "svg[lucideChevronLeft]" }, { kind: "component", type: LucideChevronUp, selector: "svg[lucideChevronUp]" }, { kind: "component", type: LucidePin, selector: "svg[lucidePin]" }, { kind: "component", type: LucidePinOff, selector: "svg[lucidePinOff]" }, { kind: "component", type: MlvButton, selector: "button[mlvButton], a[mlvButton]", inputs: ["variant", "shape", "disabled", "loading", "selected"] }, { kind: "component", type: MlvLink, selector: "a[mlvLink]", inputs: ["variant", "disabled"] }, { kind: "directive", type: MlvLinkBefore, selector: "[mlvLinkBefore]" }, { kind: "directive", type: MlvPageSnap, selector: "[mlvPageSnap]", inputs: ["mlvPageSnap", "snapFrom", "snapTo", "snapSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1511
+ }
1512
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageHeader, decorators: [{
1513
+ type: Component,
1514
+ args: [{ selector: 'mlv-page-header', imports: [
1515
+ NgTemplateOutlet,
1516
+ RouterLink,
1517
+ LucideChevronLeft,
1518
+ LucideChevronUp,
1519
+ LucidePin,
1520
+ LucidePinOff,
1521
+ MlvButton,
1522
+ MlvLink,
1523
+ MlvLinkBefore,
1524
+ MlvPageSnap,
1525
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1526
+ class: 'mlv-page-header',
1527
+ '[class.mlv-page-header--sticky]': 'sticky()',
1528
+ '[class.mlv-page-header--size-s]': 'size() === "s"',
1529
+ '[class.mlv-page-header--tabs-center]': 'tabsAlign() === "center"',
1530
+ '[class.mlv-page-header--scrolled]': '_scrolled()',
1531
+ }, template: "@if (_breadcrumbRef()?.templateRef; as breadcrumbTpl) {\n<div\n class=\"mlv-page-header__breadcrumb\"\n mlvPageSnap=\"hide\"\n [snapFrom]=\"0\"\n [snapTo]=\"0.5\"\n snapSize=\"3rem\"\n>\n <ng-template [ngTemplateOutlet]=\"breadcrumbTpl\" />\n</div>\n} @if (back(); as backTarget) {\n<a\n mlvLink\n class=\"mlv-page-header__back\"\n variant=\"subtle\"\n [routerLink]=\"backTarget\"\n (click)=\"backClick.emit($event)\"\n>\n <ng-template mlvLinkBefore>\n <svg lucideChevronLeft [size]=\"16\" aria-hidden=\"true\" />\n </ng-template>\n {{ backLabel() }}\n</a>\n}\n\n<div class=\"mlv-page-header__title-row\">\n @if (_iconRef()?.templateRef; as iconTpl) {\n <span class=\"mlv-page-header__icon\" aria-hidden=\"true\">\n <ng-template [ngTemplateOutlet]=\"iconTpl\" />\n </span>\n } @if (_titleRef()?.templateRef; as titleTpl) {\n <div class=\"mlv-page-header__title\">\n <ng-template [ngTemplateOutlet]=\"titleTpl\" />\n </div>\n } @if (_statusRef()?.templateRef; as statusTpl) {\n <div class=\"mlv-page-header__status\">\n <ng-template [ngTemplateOutlet]=\"statusTpl\" />\n </div>\n }\n <span class=\"mlv-page-header__spacer\" aria-hidden=\"true\"></span>\n @if (_actionsRef()?.templateRef; as actionsTpl) {\n <div class=\"mlv-page-header__actions\">\n <ng-template [ngTemplateOutlet]=\"actionsTpl\" />\n </div>\n }\n</div>\n\n@if (_descriptionRef()?.templateRef; as descriptionTpl) {\n<div class=\"mlv-page-header__description\">\n <ng-template [ngTemplateOutlet]=\"descriptionTpl\" />\n</div>\n} @if (_metaRef()?.templateRef; as metaTpl) {\n<div class=\"mlv-page-header__meta\">\n <ng-template [ngTemplateOutlet]=\"metaTpl\" />\n</div>\n} @if (_tabsRef()?.templateRef || _tabsActionsRef()?.templateRef) {\n<div\n class=\"mlv-page-header__tabs-row\"\n mlvPageSnap=\"hide\"\n [snapFrom]=\"0.3\"\n [snapTo]=\"0.85\"\n snapSize=\"5rem\"\n>\n @if (_tabsRef()?.templateRef; as tabsTpl) {\n <div class=\"mlv-page-header__tabs\">\n <ng-template [ngTemplateOutlet]=\"tabsTpl\" />\n </div>\n }\n <span class=\"mlv-page-header__spacer\" aria-hidden=\"true\"></span>\n @if (_tabsActionsRef()?.templateRef; as tabsActionsTpl) {\n <div class=\"mlv-page-header__tabs-actions\">\n <ng-template [ngTemplateOutlet]=\"tabsActionsTpl\" />\n </div>\n }\n</div>\n}\n\n<!-- A projected summary strip renders as the chrome's bottom row, sharing\n this header's single glass surface. -->\n<ng-content select=\"mlv-page-summary\" />\n\n@if (_controls(); as snap) {\n<div class=\"mlv-page-header__snap-controls\">\n <button\n mlvButton\n type=\"button\"\n variant=\"outlined\"\n shape=\"circle\"\n mlvDensity=\"tight\"\n class=\"mlv-page-header__snap-toggle\"\n [attr.aria-label]=\"toggleLabel()\"\n [attr.aria-expanded]=\"!_snapped()\"\n (click)=\"snap.toggle()\"\n >\n <svg lucideChevronUp [size]=\"12\" aria-hidden=\"true\" />\n </button>\n <button\n mlvButton\n type=\"button\"\n variant=\"outlined\"\n shape=\"circle\"\n mlvDensity=\"tight\"\n class=\"mlv-page-header__snap-pin\"\n [class.mlv-page-header__snap-pin--active]=\"_pinned()\"\n [attr.aria-label]=\"pinLabel()\"\n [attr.aria-pressed]=\"_pinned()\"\n (click)=\"snap.setPinned(!_pinned())\"\n >\n @if (_pinned()) {\n <svg lucidePinOff [size]=\"12\" aria-hidden=\"true\" />\n } @else {\n <svg lucidePin [size]=\"12\" aria-hidden=\"true\" />\n }\n </button>\n</div>\n}\n", styles: ["@layer mlv.components{.mlv-page-header{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-header *{box-sizing:border-box}.mlv-page-header{--mlv-page-header-snap: clamp(0, var(--mlv-page-snap, 0), 1);--mlv-page-chrome-bg: color-mix( in srgb, var(--mlv-elevation-bg-3), transparent 50% );--mlv-page-chrome-border: var(--mlv-border-subtle);position:relative;display:flex;flex-direction:column;gap:var(--mlv-spacing-2);min-width:0;background-color:var(--mlv-page-chrome-bg);border-bottom:.0625rem solid var(--mlv-page-chrome-border);border-radius:var(--mlv-radius-l) var(--mlv-radius-l) 0 0;backdrop-filter:blur(1.25rem);-webkit-backdrop-filter:blur(1.25rem);padding:var(--mlv-spacing-2) max(var(--mlv-page-inset, 0rem),var(--mlv-spacing-3));box-shadow:var(--mlv-shadow-raised);transition:box-shadow var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-page-header--sticky{position:sticky;top:0;z-index:10}.mlv-page-header--scrolled{box-shadow:var(--mlv-shadow-floating)}.mlv-page-header__breadcrumb,.mlv-page-header__description,.mlv-page-header__meta,.mlv-page-header__tabs,.mlv-page-header__title{min-width:0}.mlv-page-header__back{align-self:flex-start}.mlv-page-header__title-row,.mlv-page-header__tabs-row{display:flex;align-items:center;gap:var(--mlv-spacing-3);min-width:0}.mlv-page-header__title-row{min-height:var(--mlv-height-l)}.mlv-page-header__icon{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;color:var(--mlv-text-secondary)}.mlv-page-header__title h1{margin:0;font-size:calc(var(--mlv-typography-heading-h2-size) + (var(--mlv-typography-heading-h4-size) - var(--mlv-typography-heading-h2-size)) * var(--mlv-page-header-snap));line-height:calc(var(--mlv-typography-heading-h2-line-height) + (var(--mlv-typography-heading-h4-line-height) - var(--mlv-typography-heading-h2-line-height)) * var(--mlv-page-header-snap));letter-spacing:var(--mlv-typography-heading-h2-letter-spacing)}.mlv-page-header__spacer{flex:1 1 auto}.mlv-page-header__actions,.mlv-page-header__tabs-actions{display:flex;flex:0 0 auto;align-items:center;gap:var(--mlv-spacing-2)}.mlv-page-header__actions button,.mlv-page-header__actions a,.mlv-page-header__tabs-actions button,.mlv-page-header__tabs-actions a{white-space:nowrap}.mlv-page-header__description{max-width:48rem;color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-m-size);line-height:var(--mlv-typography-body-m-line-height)}.mlv-page-header__meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--mlv-spacing-2);color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-s-size);line-height:var(--mlv-typography-body-s-line-height)}.mlv-page-header__tabs-row{margin-bottom:calc(0rem - var(--mlv-spacing-2))}.mlv-page-header__tabs{flex:1 1 auto;overflow:hidden}.mlv-page-header__tabs>.mlv-tab-group{width:100%}.mlv-page-header__status{display:inline-flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;gap:var(--mlv-spacing-1)}.mlv-page-header__snap-controls{position:absolute;bottom:0;left:50%;z-index:1;display:flex;gap:var(--mlv-spacing-1);transform:translate(-50%,50%)}.mlv-page-header__snap-toggle,.mlv-page-header__snap-pin{background:var(--mlv-background-raised);box-shadow:var(--mlv-shadow-raised)}.mlv-page-header__snap-toggle svg{rotate:calc(180deg * var(--mlv-page-header-snap))}.mlv-page-header__snap-pin--active{color:var(--mlv-text-action);border-color:var(--mlv-border-focus)}.mlv-page-header--tabs-center .mlv-page-header__tabs-row{justify-content:center}.mlv-page-header--tabs-center .mlv-page-header__tabs-row .mlv-page-header__spacer{flex:0 0 0}.mlv-page-header--tabs-center .mlv-page-header__tabs{flex:0 1 auto}.mlv-page-header--tabs-center .mlv-page-header__tabs>.mlv-tab-group{width:auto}.mlv-page-header--size-s{gap:var(--mlv-spacing-1)}.mlv-page-header--size-s .mlv-page-header__title-row{min-height:var(--mlv-height-m)}.mlv-page-header--size-s .mlv-page-header__title h1{font-size:calc(var(--mlv-typography-heading-h4-size) + (var(--mlv-typography-heading-h6-size) - var(--mlv-typography-heading-h4-size)) * var(--mlv-page-header-snap));line-height:calc(var(--mlv-typography-heading-h4-line-height) + (var(--mlv-typography-heading-h6-line-height) - var(--mlv-typography-heading-h4-line-height)) * var(--mlv-page-header-snap));letter-spacing:var(--mlv-letter-spacing-normal)}.mlv-page-header--size-s .mlv-page-header__description{font-size:var(--mlv-typography-body-s-size);line-height:var(--mlv-typography-body-s-line-height)}.mlv-page-header>.mlv-page-summary{position:static;z-index:auto;margin-inline:calc(-1*max(var(--mlv-page-inset, 0rem),var(--mlv-spacing-3)));background:transparent;border-bottom:none;backdrop-filter:none;-webkit-backdrop-filter:none}@container (max-width: 40rem){.mlv-page-header__title-row{flex-wrap:wrap;row-gap:var(--mlv-spacing-1)}.mlv-page-header__title-row .mlv-page-header__spacer{display:none}.mlv-page-header__actions{flex:1 1 100%;flex-wrap:wrap;justify-content:flex-start}}@media(prefers-reduced-motion:reduce){.mlv-page-header,.mlv-page-header *,.mlv-page-header:before,.mlv-page-header:after,[class^=mlv-page-header__],[class*=\" mlv-page-header__\"],[class^=mlv-page-header--],[class*=\" mlv-page-header--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"] }]
1532
+ }], propDecorators: { back: [{ type: i0.Input, args: [{ isSignal: true, alias: "back", required: false }] }], backLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "backLabel", required: false }] }], sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], tabsAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabsAlign", required: false }] }], snapControls: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapControls", required: false }] }], toggleLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "toggleLabel", required: false }] }], pinLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "pinLabel", required: false }] }], backClick: [{ type: i0.Output, args: ["backClick"] }], _breadcrumbRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPageBreadcrumb), { isSignal: true }] }], _iconRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPageHeaderIcon), { isSignal: true }] }], _titleRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPageTitle), { isSignal: true }] }], _statusRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPageHeaderStatus), { isSignal: true }] }], _actionsRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPageHeaderActions), { isSignal: true }] }], _descriptionRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPageHeaderDescription), { isSignal: true }] }], _metaRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPageHeaderMeta), { isSignal: true }] }], _tabsRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPageHeaderTabs), { isSignal: true }] }], _tabsActionsRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPageHeaderTabsActions), { isSignal: true }] }] } });
1533
+
1534
+ /** Marks content rendered in the complementary page-aside landmark. */
1535
+ class MlvPageAside extends MlvStructural {
1536
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageAside, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1537
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageAside, isStandalone: true, selector: "[mlvPageAside]", usesInheritance: true, ngImport: i0 });
1538
+ }
1539
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageAside, decorators: [{
1540
+ type: Directive,
1541
+ args: [{ selector: '[mlvPageAside]' }]
1542
+ }] });
1543
+
1544
+ /** Responsive main-content and complementary-aside grid. */
1545
+ class MlvPageContent {
1546
+ /** Places the complementary column before or after the main content. */
1547
+ asidePlacement = input('end', /* @ts-ignore */
1548
+ ...(ngDevMode ? [{ debugName: "asidePlacement" }] : /* istanbul ignore next */ []));
1549
+ /** Preferred width of the complementary column while rendered inline. */
1550
+ asideWidth = input('20rem', /* @ts-ignore */
1551
+ ...(ngDevMode ? [{ debugName: "asideWidth" }] : /* istanbul ignore next */ []));
1552
+ /** Keeps the complementary column visible while the page scrolls. */
1553
+ asideSticky = input(true, { ...(ngDevMode ? { debugName: "asideSticky" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
1554
+ /** Selects the spacing between the main and complementary columns. */
1555
+ gap = input('m', /* @ts-ignore */
1556
+ ...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
1557
+ /** Container width in CSS pixels below which the columns stack. */
1558
+ stackBelow = input(1024, /* @ts-ignore */
1559
+ ...(ngDevMode ? [{ debugName: "stackBelow" }] : /* istanbul ignore next */ []));
1560
+ /** Accessible name for the complementary `<aside>` landmark. */
1561
+ asideLabel = input('Related content', /* @ts-ignore */
1562
+ ...(ngDevMode ? [{ debugName: "asideLabel" }] : /* istanbul ignore next */ []));
1563
+ /** @protected Optional complementary content projected via `[mlvPageAside]`. */
1564
+ _asideRef = contentChild(MlvPageAside, /* @ts-ignore */
1565
+ ...(ngDevMode ? [{ debugName: "_asideRef" }] : /* istanbul ignore next */ []));
1566
+ /**
1567
+ * @protected Whether complementary content is actually projected.
1568
+ *
1569
+ * The grid only reserves the aside track while this is `true`, so a consumer
1570
+ * that projects no `[mlvPageAside]` keeps the full inline size for its main
1571
+ * column instead of silently losing `asideWidth` to an empty track.
1572
+ */
1573
+ _hasAside = computed(() => !!this._asideRef()?.templateRef, /* @ts-ignore */
1574
+ ...(ngDevMode ? [{ debugName: "_hasAside" }] : /* istanbul ignore next */ []));
1575
+ /** @private Host element observed so responsiveness follows available content width. */
1576
+ _elementRef = inject((ElementRef));
1577
+ /** @private Shared observer used to measure the page-content container. */
1578
+ _resizeObserver = inject(MlvResizeObserverService);
1579
+ /** @private Destroy scope for the resize-observer subscription. */
1580
+ _destroyRef = inject(DestroyRef);
1581
+ /** @private Latest measured inline size in CSS pixels. */
1582
+ _containerWidth = signal(0, /* @ts-ignore */
1583
+ ...(ngDevMode ? [{ debugName: "_containerWidth" }] : /* istanbul ignore next */ []));
1584
+ /** @protected Whether the current container is narrower than `stackBelow`. */
1585
+ _stacked = computed(() => {
1586
+ const width = this._containerWidth();
1587
+ return width > 0 && width < this.stackBelow();
1588
+ }, /* @ts-ignore */
1589
+ ...(ngDevMode ? [{ debugName: "_stacked" }] : /* istanbul ignore next */ []));
1590
+ constructor() {
1591
+ this._resizeObserver
1592
+ .observe(this._elementRef)
1593
+ .pipe(takeUntilDestroyed(this._destroyRef))
1594
+ .subscribe((entries) => {
1595
+ const width = entries[entries.length - 1]?.contentRect.width;
1596
+ if (width !== undefined)
1597
+ this._containerWidth.set(width);
1598
+ });
1599
+ }
1600
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1601
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvPageContent, isStandalone: true, selector: "mlv-page-content", inputs: { asidePlacement: { classPropertyName: "asidePlacement", publicName: "asidePlacement", isSignal: true, isRequired: false, transformFunction: null }, asideWidth: { classPropertyName: "asideWidth", publicName: "asideWidth", isSignal: true, isRequired: false, transformFunction: null }, asideSticky: { classPropertyName: "asideSticky", publicName: "asideSticky", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, stackBelow: { classPropertyName: "stackBelow", publicName: "stackBelow", isSignal: true, isRequired: false, transformFunction: null }, asideLabel: { classPropertyName: "asideLabel", publicName: "asideLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.mlv-page-content--aside-start": "asidePlacement() === \"start\"", "class.mlv-page-content--aside-end": "asidePlacement() === \"end\"", "class.mlv-page-content--aside-sticky": "asideSticky()", "class.mlv-page-content--gap-s": "gap() === \"s\"", "class.mlv-page-content--gap-m": "gap() === \"m\"", "class.mlv-page-content--gap-l": "gap() === \"l\"", "class.mlv-page-content--stacked": "_stacked()", "class.mlv-page-content--has-aside": "_hasAside()", "style.--mlv-page-aside-width": "asideWidth()" }, classAttribute: "mlv-page-content" }, queries: [{ propertyName: "_asideRef", first: true, predicate: MlvPageAside, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"mlv-page-content__main\"><ng-content /></div>\n\n@if (_asideRef()?.templateRef; as asideTpl) {\n<aside class=\"mlv-page-content__aside\" [attr.aria-label]=\"asideLabel()\">\n <ng-template [ngTemplateOutlet]=\"asideTpl\" />\n</aside>\n}\n", styles: ["@layer mlv.components{.mlv-page-content{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-content *{box-sizing:border-box}.mlv-page-content{display:grid;grid-template-columns:minmax(0,1fr);grid-template-areas:\"main\";align-items:start;min-width:0;padding-top:var(--mlv-spacing-2)}.mlv-page-content--gap-s{gap:var(--mlv-spacing-2)}.mlv-page-content--gap-m{gap:var(--mlv-spacing-4)}.mlv-page-content--gap-l{gap:var(--mlv-spacing-6)}.mlv-page-content--has-aside:not(.mlv-page-content--stacked){grid-template-columns:minmax(0,1fr) minmax(0,var(--mlv-page-aside-width, 20rem));grid-template-areas:\"main aside\"}.mlv-page-content--has-aside:not(.mlv-page-content--stacked).mlv-page-content--aside-start{grid-template-columns:minmax(0,var(--mlv-page-aside-width, 20rem)) minmax(0,1fr);grid-template-areas:\"aside main\"}.mlv-page-content__main{grid-area:main;min-width:0}.mlv-page-content__aside{grid-area:aside;min-width:0}.mlv-page-content--aside-sticky .mlv-page-content__aside{position:sticky;top:var(--mlv-page-aside-offset, var(--mlv-spacing-4))}.mlv-page-content--stacked{grid-template-columns:minmax(0,1fr);grid-template-areas:\"main\"}.mlv-page-content--stacked.mlv-page-content--has-aside{grid-template-areas:\"main\" \"aside\"}.mlv-page-content--stacked.mlv-page-content--has-aside.mlv-page-content--aside-start{grid-template-areas:\"aside\" \"main\"}.mlv-page-content--stacked .mlv-page-content__aside{position:static}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1602
+ }
1603
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageContent, decorators: [{
1604
+ type: Component,
1605
+ args: [{ selector: 'mlv-page-content', imports: [NgTemplateOutlet], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1606
+ class: 'mlv-page-content',
1607
+ '[class.mlv-page-content--aside-start]': 'asidePlacement() === "start"',
1608
+ '[class.mlv-page-content--aside-end]': 'asidePlacement() === "end"',
1609
+ '[class.mlv-page-content--aside-sticky]': 'asideSticky()',
1610
+ '[class.mlv-page-content--gap-s]': 'gap() === "s"',
1611
+ '[class.mlv-page-content--gap-m]': 'gap() === "m"',
1612
+ '[class.mlv-page-content--gap-l]': 'gap() === "l"',
1613
+ '[class.mlv-page-content--stacked]': '_stacked()',
1614
+ '[class.mlv-page-content--has-aside]': '_hasAside()',
1615
+ '[style.--mlv-page-aside-width]': 'asideWidth()',
1616
+ }, template: "<div class=\"mlv-page-content__main\"><ng-content /></div>\n\n@if (_asideRef()?.templateRef; as asideTpl) {\n<aside class=\"mlv-page-content__aside\" [attr.aria-label]=\"asideLabel()\">\n <ng-template [ngTemplateOutlet]=\"asideTpl\" />\n</aside>\n}\n", styles: ["@layer mlv.components{.mlv-page-content{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-content *{box-sizing:border-box}.mlv-page-content{display:grid;grid-template-columns:minmax(0,1fr);grid-template-areas:\"main\";align-items:start;min-width:0;padding-top:var(--mlv-spacing-2)}.mlv-page-content--gap-s{gap:var(--mlv-spacing-2)}.mlv-page-content--gap-m{gap:var(--mlv-spacing-4)}.mlv-page-content--gap-l{gap:var(--mlv-spacing-6)}.mlv-page-content--has-aside:not(.mlv-page-content--stacked){grid-template-columns:minmax(0,1fr) minmax(0,var(--mlv-page-aside-width, 20rem));grid-template-areas:\"main aside\"}.mlv-page-content--has-aside:not(.mlv-page-content--stacked).mlv-page-content--aside-start{grid-template-columns:minmax(0,var(--mlv-page-aside-width, 20rem)) minmax(0,1fr);grid-template-areas:\"aside main\"}.mlv-page-content__main{grid-area:main;min-width:0}.mlv-page-content__aside{grid-area:aside;min-width:0}.mlv-page-content--aside-sticky .mlv-page-content__aside{position:sticky;top:var(--mlv-page-aside-offset, var(--mlv-spacing-4))}.mlv-page-content--stacked{grid-template-columns:minmax(0,1fr);grid-template-areas:\"main\"}.mlv-page-content--stacked.mlv-page-content--has-aside{grid-template-areas:\"main\" \"aside\"}.mlv-page-content--stacked.mlv-page-content--has-aside.mlv-page-content--aside-start{grid-template-areas:\"aside\" \"main\"}.mlv-page-content--stacked .mlv-page-content__aside{position:static}}\n"] }]
1617
+ }], ctorParameters: () => [], propDecorators: { asidePlacement: [{ type: i0.Input, args: [{ isSignal: true, alias: "asidePlacement", required: false }] }], asideWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "asideWidth", required: false }] }], asideSticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "asideSticky", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], stackBelow: [{ type: i0.Input, args: [{ isSignal: true, alias: "stackBelow", required: false }] }], asideLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "asideLabel", required: false }] }], _asideRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPageAside), { isSignal: true }] }] } });
1618
+
1619
+ /**
1620
+ * Key-facts strip rendered under a page header. Projects
1621
+ * `mlv-page-summary-item` children in a wrapping row.
1622
+ *
1623
+ * Inside `main[mlvPage]` the strip participates in the scroll-scrubbed snap
1624
+ * timeline: its height and opacity are interpolated from the page-level
1625
+ * `--mlv-page-snap` progress over the `snapFrom`..`snapTo` stagger window.
1626
+ * Collapse/expand and pinning are controlled by the header's snap controls
1627
+ * (`mlv-page-header[snapControls]`) through `MlvPageSnapController` — the
1628
+ * strip itself is purely presentational.
1629
+ *
1630
+ * A fully collapsed strip is `visibility: hidden` and therefore leaves the
1631
+ * accessibility tree and the tab order — except while it holds focus, when it
1632
+ * reveals itself instead (`mlv-page-summary--revealed`) so that scrolling can
1633
+ * never blur a focused control into `<body>`. See {@link MlvPageSnapRegionBase}.
1634
+ */
1635
+ class MlvPageSummary extends MlvPageSnapRegionBase {
1636
+ /** Accessible name for the facts region. */
1637
+ summaryLabel = input('Page summary', /* @ts-ignore */
1638
+ ...(ngDevMode ? [{ debugName: "summaryLabel" }] : /* istanbul ignore next */ []));
1639
+ /** Progress at which the strip starts collapsing (0..1). */
1640
+ snapFrom = input(0.1, /* @ts-ignore */
1641
+ ...(ngDevMode ? [{ debugName: "snapFrom" }] : /* istanbul ignore next */ []));
1642
+ /** Progress at which the strip is fully collapsed (0..1). */
1643
+ snapTo = input(0.95, /* @ts-ignore */
1644
+ ...(ngDevMode ? [{ debugName: "snapTo" }] : /* istanbul ignore next */ []));
1645
+ /** @protected Multiplier remapping page progress into the stagger window. */
1646
+ _scale = computed(() => 1 / Math.max(this.snapTo() - this.snapFrom(), 0.001), /* @ts-ignore */
1647
+ ...(ngDevMode ? [{ debugName: "_scale" }] : /* istanbul ignore next */ []));
1648
+ /**
1649
+ * @protected True once the strip has fully collapsed; unless it holds
1650
+ * focus, that also removes it from the accessibility tree and tab order.
1651
+ */
1652
+ _elapsed = computed(() => (this._snapController?.progress() ?? 0) >= Math.min(this.snapTo(), 1), /* @ts-ignore */
1653
+ ...(ngDevMode ? [{ debugName: "_elapsed" }] : /* istanbul ignore next */ []));
1654
+ /** @protected Natural height of the items row, driving the height scrub. */
1655
+ _measuredHeight = signal(null, /* @ts-ignore */
1656
+ ...(ngDevMode ? [{ debugName: "_measuredHeight" }] : /* istanbul ignore next */ []));
1657
+ /** @private The measured items row. */
1658
+ _items = viewChild.required('items', /* @ts-ignore */
1659
+ ...(ngDevMode ? [{ debugName: "_items" }] : /* istanbul ignore next */ []));
1660
+ constructor() {
1661
+ super();
1662
+ const resizeObserver = inject(MlvResizeObserverService);
1663
+ const destroyRef = inject(DestroyRef);
1664
+ afterNextRender(() => {
1665
+ const itemsEl = this._items().nativeElement;
1666
+ // offsetHeight includes the row's own padding, matching the host
1667
+ // max-height the scrub interpolates against.
1668
+ this._measuredHeight.set(itemsEl.offsetHeight);
1669
+ const subscription = resizeObserver.observe(itemsEl).subscribe(() => {
1670
+ if (itemsEl.offsetHeight > 0) {
1671
+ this._measuredHeight.set(itemsEl.offsetHeight);
1672
+ }
1673
+ });
1674
+ destroyRef.onDestroy(() => subscription.unsubscribe());
1675
+ });
1676
+ }
1677
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSummary, deps: [], target: i0.ɵɵFactoryTarget.Component });
1678
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: MlvPageSummary, isStandalone: true, selector: "mlv-page-summary", inputs: { summaryLabel: { classPropertyName: "summaryLabel", publicName: "summaryLabel", isSignal: true, isRequired: false, transformFunction: null }, snapFrom: { classPropertyName: "snapFrom", publicName: "snapFrom", isSignal: true, isRequired: false, transformFunction: null }, snapTo: { classPropertyName: "snapTo", publicName: "snapTo", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "focusin": "_onRegionFocusIn()", "focusout": "_onRegionFocusOut($event)" }, properties: { "class.mlv-page-summary--snapped": "_elapsed()", "class.mlv-page-summary--revealed": "_revealed()", "style.--mlv-snap-from": "snapFrom()", "style.--mlv-snap-scale": "_scale()", "style.--mlv-page-summary-size": "_measuredHeight()", "style.visibility": "_hidden() ? \"hidden\" : null" }, classAttribute: "mlv-page-summary" }, viewQueries: [{ propertyName: "_items", first: true, predicate: ["items"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `<div
1679
+ #items
1680
+ class="mlv-page-summary__items"
1681
+ role="group"
1682
+ [attr.aria-label]="summaryLabel()"
1683
+ >
1684
+ <ng-content />
1685
+ </div>`, isInline: true, styles: ["@layer mlv.components{.mlv-page-summary{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-summary *{box-sizing:border-box}.mlv-page-summary{--mlv-page-summary-snap: clamp( 0, (var(--mlv-page-snap, 0) - var(--mlv-snap-from, .1)) * var(--mlv-snap-scale, 1.18), 1 );position:relative;z-index:9;display:block;min-width:0;max-height:calc(var(--mlv-page-summary-size, 480) * 1px * (1 - var(--mlv-page-summary-snap)));overflow:hidden;background-color:var(--mlv-page-chrome-bg, color-mix(in srgb, var(--mlv-elevation-bg-3), transparent 50%));border-bottom:.0625rem solid var(--mlv-page-chrome-border, var(--mlv-border-subtle));backdrop-filter:blur(1.25rem);-webkit-backdrop-filter:blur(1.25rem);opacity:calc(1 - var(--mlv-page-summary-snap) * 1.25)}.mlv-page-summary--revealed{--mlv-page-summary-snap: 0}.mlv-page-summary__items{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--mlv-spacing-2) var(--mlv-spacing-4);padding:var(--mlv-spacing-2) max(var(--mlv-page-inset, 0rem),var(--mlv-spacing-3)) var(--mlv-spacing-4)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1686
+ }
1687
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSummary, decorators: [{
1688
+ type: Component,
1689
+ args: [{ selector: 'mlv-page-summary', template: `<div
1690
+ #items
1691
+ class="mlv-page-summary__items"
1692
+ role="group"
1693
+ [attr.aria-label]="summaryLabel()"
1694
+ >
1695
+ <ng-content />
1696
+ </div>`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1697
+ class: 'mlv-page-summary',
1698
+ '[class.mlv-page-summary--snapped]': '_elapsed()',
1699
+ '[class.mlv-page-summary--revealed]': '_revealed()',
1700
+ '[style.--mlv-snap-from]': 'snapFrom()',
1701
+ '[style.--mlv-snap-scale]': '_scale()',
1702
+ '[style.--mlv-page-summary-size]': '_measuredHeight()',
1703
+ '[style.visibility]': '_hidden() ? "hidden" : null',
1704
+ '(focusin)': '_onRegionFocusIn()',
1705
+ '(focusout)': '_onRegionFocusOut($event)',
1706
+ }, styles: ["@layer mlv.components{.mlv-page-summary{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-summary *{box-sizing:border-box}.mlv-page-summary{--mlv-page-summary-snap: clamp( 0, (var(--mlv-page-snap, 0) - var(--mlv-snap-from, .1)) * var(--mlv-snap-scale, 1.18), 1 );position:relative;z-index:9;display:block;min-width:0;max-height:calc(var(--mlv-page-summary-size, 480) * 1px * (1 - var(--mlv-page-summary-snap)));overflow:hidden;background-color:var(--mlv-page-chrome-bg, color-mix(in srgb, var(--mlv-elevation-bg-3), transparent 50%));border-bottom:.0625rem solid var(--mlv-page-chrome-border, var(--mlv-border-subtle));backdrop-filter:blur(1.25rem);-webkit-backdrop-filter:blur(1.25rem);opacity:calc(1 - var(--mlv-page-summary-snap) * 1.25)}.mlv-page-summary--revealed{--mlv-page-summary-snap: 0}.mlv-page-summary__items{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--mlv-spacing-2) var(--mlv-spacing-4);padding:var(--mlv-spacing-2) max(var(--mlv-page-inset, 0rem),var(--mlv-spacing-3)) var(--mlv-spacing-4)}}\n"] }]
1707
+ }], ctorParameters: () => [], propDecorators: { summaryLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "summaryLabel", required: false }] }], snapFrom: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapFrom", required: false }] }], snapTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapTo", required: false }] }], _items: [{ type: i0.ViewChild, args: ['items', { isSignal: true }] }] } });
1708
+
1709
+ /**
1710
+ * One labelled key fact inside `mlv-page-summary`. The label renders above
1711
+ * the projected value content.
1712
+ */
1713
+ class MlvPageSummaryItem {
1714
+ /** Visible label describing the projected value. */
1715
+ label = input.required(/* @ts-ignore */
1716
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1717
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSummaryItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
1718
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: MlvPageSummaryItem, isStandalone: true, selector: "mlv-page-summary-item", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "mlv-page-summary-item" }, ngImport: i0, template: `
1719
+ <span class="mlv-page-summary-item__label">{{ label() }}</span>
1720
+ <div class="mlv-page-summary-item__value"><ng-content /></div>
1721
+ `, isInline: true, styles: ["@layer mlv.components{.mlv-page-summary-item{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-summary-item *{box-sizing:border-box}.mlv-page-summary-item{display:flex;flex:1 1 10rem;flex-direction:column;gap:var(--mlv-spacing-0-5);min-width:0}.mlv-page-summary-item__label{color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-s-size);line-height:var(--mlv-typography-body-s-line-height)}.mlv-page-summary-item__value{overflow:hidden;color:var(--mlv-text-primary);font-size:var(--mlv-typography-body-m-size);line-height:var(--mlv-typography-body-m-line-height);text-overflow:ellipsis;white-space:nowrap}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1722
+ }
1723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageSummaryItem, decorators: [{
1724
+ type: Component,
1725
+ args: [{ selector: 'mlv-page-summary-item', template: `
1726
+ <span class="mlv-page-summary-item__label">{{ label() }}</span>
1727
+ <div class="mlv-page-summary-item__value"><ng-content /></div>
1728
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1729
+ class: 'mlv-page-summary-item',
1730
+ }, styles: ["@layer mlv.components{.mlv-page-summary-item{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-summary-item *{box-sizing:border-box}.mlv-page-summary-item{display:flex;flex:1 1 10rem;flex-direction:column;gap:var(--mlv-spacing-0-5);min-width:0}.mlv-page-summary-item__label{color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-s-size);line-height:var(--mlv-typography-body-s-line-height)}.mlv-page-summary-item__value{overflow:hidden;color:var(--mlv-text-primary);font-size:var(--mlv-typography-body-m-size);line-height:var(--mlv-typography-body-m-line-height);text-overflow:ellipsis;white-space:nowrap}}\n"] }]
1731
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }] } });
1732
+
1733
+ /**
1734
+ * Custom property published on `document.documentElement` while at least one
1735
+ * sticky dock is on screen. Viewport-anchored overlays — most importantly the
1736
+ * bottom toast positions — read it so they never render underneath the dock.
1737
+ */
1738
+ const DOCK_HEIGHT_PROPERTY = '--mlv-page-dock-height';
1739
+ /**
1740
+ * @internal Heights contributed by the sticky docks currently alive, keyed by
1741
+ * the owning component. Two pages can be mounted at once (a route transition,
1742
+ * a page inside a dialog), so the published value is the tallest contribution
1743
+ * rather than whichever dock rendered last.
1744
+ */
1745
+ const stickyDockHeights = new Map();
1746
+ /**
1747
+ * @internal Republishes {@link DOCK_HEIGHT_PROPERTY} after a contribution
1748
+ * changed. Passing `null` withdraws the owner's contribution; the property is
1749
+ * removed entirely once the last sticky dock is gone, so a page without a dock
1750
+ * never leaves a stale offset behind.
1751
+ */
1752
+ function publishStickyDockHeight(owner, height) {
1753
+ // The teardown path also runs during server rendering, where there is no
1754
+ // document to publish to.
1755
+ if (typeof document === 'undefined') {
1756
+ return;
1757
+ }
1758
+ if (height === null) {
1759
+ stickyDockHeights.delete(owner);
1760
+ }
1761
+ else {
1762
+ stickyDockHeights.set(owner, height);
1763
+ }
1764
+ const root = document.documentElement;
1765
+ if (stickyDockHeights.size === 0) {
1766
+ root.style.removeProperty(DOCK_HEIGHT_PROPERTY);
1767
+ return;
1768
+ }
1769
+ const tallest = Math.max(...stickyDockHeights.values());
1770
+ root.style.setProperty(DOCK_HEIGHT_PROPERTY, `${Math.round(tallest * 100) / 100}px`);
1771
+ }
1772
+ /**
1773
+ * Bottom action bar for workflow pages. Projects content marked with
1774
+ * `[mlvPageDockStart]`, `[mlvPageDockCenter]`, and `[mlvPageDockEnd]` into a
1775
+ * three-region row and, by default, sticks to the bottom edge of the owning
1776
+ * page's scroll area. Typical composition: pending-change status at the
1777
+ * start, a floating tool cluster in the center, and discard/schedule/save/
1778
+ * publish actions at the end.
1779
+ *
1780
+ * `appearance="floating"` drops the dock's own glass surface — whatever floats
1781
+ * inside it, e.g. a pill action bar, brings its own — and replaces it with the
1782
+ * `mlvFloatingContainer` recipe from `@malva-ui/cdk/floating-container`: a
1783
+ * gradient-masked backdrop plus safe-area block-end padding, so content fades
1784
+ * out beneath the actions instead of scrolling straight into them. Override
1785
+ * the backdrop fill with `--mlv-page-dock-backdrop` (defaults to
1786
+ * `--mlv-background-base`).
1787
+ *
1788
+ * The dock derives its full-bleed margins from the inherited
1789
+ * `--mlv-page-inset`, so the geometry survives a wrapper element (a `<form>`,
1790
+ * a `<section>`) between the page canvas and the dock, and collapses to zero
1791
+ * outside a page.
1792
+ *
1793
+ * While `sticky`, the dock publishes its measured height as
1794
+ * `--mlv-page-dock-height` on `document.documentElement`; bottom-anchored
1795
+ * toasts offset themselves by it so they are never covered by the dock.
1796
+ */
1797
+ class MlvPageDock {
1798
+ /** Keeps the dock attached to the bottom edge of the page scroll area. */
1799
+ sticky = input(true, { ...(ngDevMode ? { debugName: "sticky" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
1800
+ /** Solid bar with a top border, or a floating gradient-masked backdrop. */
1801
+ appearance = input('bar', /* @ts-ignore */
1802
+ ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
1803
+ /** @private Host element whose border-box height is published. */
1804
+ _host = inject(ElementRef);
1805
+ /** @private Shared resize observation used to track the dock's height. */
1806
+ _resizeObserver = inject(MlvResizeObserverService);
1807
+ /** @private Withdraws this dock's height contribution on teardown. */
1808
+ _destroyRef = inject(DestroyRef);
1809
+ /**
1810
+ * @private Latest measured border-box height of the dock, in pixels. Only
1811
+ * written in a browser — during server rendering it stays at 0 and nothing
1812
+ * is published.
1813
+ */
1814
+ _measuredHeight = signal(0, /* @ts-ignore */
1815
+ ...(ngDevMode ? [{ debugName: "_measuredHeight" }] : /* istanbul ignore next */ []));
1816
+ constructor() {
1817
+ // `afterNextRender` / `afterRenderEffect` never run on the server, so the
1818
+ // document is only touched in a browser.
1819
+ afterNextRender(() => {
1820
+ this._measuredHeight.set(this._host.nativeElement.offsetHeight);
1821
+ this._resizeObserver
1822
+ .observe(this._host)
1823
+ .pipe(takeUntilDestroyed(this._destroyRef))
1824
+ .subscribe(() => {
1825
+ this._measuredHeight.set(this._host.nativeElement.offsetHeight);
1826
+ });
1827
+ });
1828
+ afterRenderEffect(() => {
1829
+ // A non-sticky dock scrolls away with the content, so it never covers a
1830
+ // viewport-anchored overlay and must not reserve space for one.
1831
+ const height = this.sticky() ? this._measuredHeight() : null;
1832
+ publishStickyDockHeight(this, height);
1833
+ });
1834
+ this._destroyRef.onDestroy(() => publishStickyDockHeight(this, null));
1835
+ }
1836
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageDock, deps: [], target: i0.ɵɵFactoryTarget.Component });
1837
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: MlvPageDock, isStandalone: true, selector: "mlv-page-dock", inputs: { sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.mlv-page-dock--sticky": "sticky()", "class.mlv-page-dock--floating": "appearance() === \"floating\"" }, classAttribute: "mlv-page-dock" }, ngImport: i0, template: `
1838
+ <ng-content select="[mlvPageDockStart]" />
1839
+ <ng-content select="[mlvPageDockCenter]" />
1840
+ <ng-content select="[mlvPageDockEnd]" />
1841
+ `, isInline: true, styles: ["@layer mlv.components{.mlv-page-dock{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-dock *{box-sizing:border-box}.mlv-page-dock{position:relative;display:grid;grid-template-columns:1fr minmax(0,auto) 1fr;align-items:center;gap:var(--mlv-spacing-2);min-width:0;margin-inline:calc(-1 * var(--mlv-page-inset, 0rem));margin-bottom:calc(-1 * var(--mlv-page-inset, 0rem));padding:var(--mlv-spacing-1-5) max(var(--mlv-page-inset, 0rem),var(--mlv-spacing-3));background-color:var(--mlv-page-chrome-bg, color-mix(in srgb, var(--mlv-elevation-bg-3), transparent 50%));border-top:.0625rem solid var(--mlv-page-chrome-border, var(--mlv-border-subtle));backdrop-filter:blur(1.25rem);-webkit-backdrop-filter:blur(1.25rem)}.mlv-page-dock button,.mlv-page-dock a{white-space:nowrap}.mlv-page-dock--sticky{position:sticky;bottom:0;z-index:10}.mlv-page-dock--floating:before{content:\"\";position:absolute;inset:-2.5rem 0 0;z-index:-1;background:var(--mlv-page-dock-backdrop, var(--mlv-background-base));-webkit-mask-image:linear-gradient(180deg,transparent,black 2.5rem);mask-image:linear-gradient(180deg,transparent,black 2.5rem);pointer-events:none}.mlv-page-dock--floating{padding-block-end:max(var(--mlv-spacing-1-5),env(safe-area-inset-bottom));isolation:isolate;background:transparent;border-top:none;backdrop-filter:none;-webkit-backdrop-filter:none}.mlv-page-dock__start,.mlv-page-dock__center,.mlv-page-dock__end{flex-wrap:wrap}.mlv-page-dock__start{display:flex;align-items:center;gap:var(--mlv-spacing-2);min-width:0;color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-s-size);line-height:var(--mlv-typography-body-s-line-height)}.mlv-page-dock__center{display:flex;grid-column:2;align-items:center;gap:var(--mlv-spacing-1);min-width:0}.mlv-page-dock__end{display:flex;grid-column:3;align-items:center;justify-content:flex-end;gap:var(--mlv-spacing-2)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1842
+ }
1843
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageDock, decorators: [{
1844
+ type: Component,
1845
+ args: [{ selector: 'mlv-page-dock', template: `
1846
+ <ng-content select="[mlvPageDockStart]" />
1847
+ <ng-content select="[mlvPageDockCenter]" />
1848
+ <ng-content select="[mlvPageDockEnd]" />
1849
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1850
+ class: 'mlv-page-dock',
1851
+ '[class.mlv-page-dock--sticky]': 'sticky()',
1852
+ '[class.mlv-page-dock--floating]': 'appearance() === "floating"',
1853
+ }, styles: ["@layer mlv.components{.mlv-page-dock{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-page-dock *{box-sizing:border-box}.mlv-page-dock{position:relative;display:grid;grid-template-columns:1fr minmax(0,auto) 1fr;align-items:center;gap:var(--mlv-spacing-2);min-width:0;margin-inline:calc(-1 * var(--mlv-page-inset, 0rem));margin-bottom:calc(-1 * var(--mlv-page-inset, 0rem));padding:var(--mlv-spacing-1-5) max(var(--mlv-page-inset, 0rem),var(--mlv-spacing-3));background-color:var(--mlv-page-chrome-bg, color-mix(in srgb, var(--mlv-elevation-bg-3), transparent 50%));border-top:.0625rem solid var(--mlv-page-chrome-border, var(--mlv-border-subtle));backdrop-filter:blur(1.25rem);-webkit-backdrop-filter:blur(1.25rem)}.mlv-page-dock button,.mlv-page-dock a{white-space:nowrap}.mlv-page-dock--sticky{position:sticky;bottom:0;z-index:10}.mlv-page-dock--floating:before{content:\"\";position:absolute;inset:-2.5rem 0 0;z-index:-1;background:var(--mlv-page-dock-backdrop, var(--mlv-background-base));-webkit-mask-image:linear-gradient(180deg,transparent,black 2.5rem);mask-image:linear-gradient(180deg,transparent,black 2.5rem);pointer-events:none}.mlv-page-dock--floating{padding-block-end:max(var(--mlv-spacing-1-5),env(safe-area-inset-bottom));isolation:isolate;background:transparent;border-top:none;backdrop-filter:none;-webkit-backdrop-filter:none}.mlv-page-dock__start,.mlv-page-dock__center,.mlv-page-dock__end{flex-wrap:wrap}.mlv-page-dock__start{display:flex;align-items:center;gap:var(--mlv-spacing-2);min-width:0;color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-s-size);line-height:var(--mlv-typography-body-s-line-height)}.mlv-page-dock__center{display:flex;grid-column:2;align-items:center;gap:var(--mlv-spacing-1);min-width:0}.mlv-page-dock__end{display:flex;grid-column:3;align-items:center;justify-content:flex-end;gap:var(--mlv-spacing-2)}}\n"] }]
1854
+ }], ctorParameters: () => [], propDecorators: { sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }] } });
1855
+
1856
+ /** Marks leading dock content, typically pending-change status text. */
1857
+ class MlvPageDockStart {
1858
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageDockStart, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1859
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageDockStart, isStandalone: true, selector: "[mlvPageDockStart]", host: { classAttribute: "mlv-page-dock__start" }, ngImport: i0 });
1860
+ }
1861
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageDockStart, decorators: [{
1862
+ type: Directive,
1863
+ args: [{
1864
+ selector: '[mlvPageDockStart]',
1865
+ host: { class: 'mlv-page-dock__start' },
1866
+ }]
1867
+ }] });
1868
+ /** Marks the centered dock content, typically a floating tool cluster. */
1869
+ class MlvPageDockCenter {
1870
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageDockCenter, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1871
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageDockCenter, isStandalone: true, selector: "[mlvPageDockCenter]", host: { classAttribute: "mlv-page-dock__center" }, ngImport: i0 });
1872
+ }
1873
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageDockCenter, decorators: [{
1874
+ type: Directive,
1875
+ args: [{
1876
+ selector: '[mlvPageDockCenter]',
1877
+ host: { class: 'mlv-page-dock__center' },
1878
+ }]
1879
+ }] });
1880
+ /** Marks trailing dock content, typically the primary workflow actions. */
1881
+ class MlvPageDockEnd {
1882
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageDockEnd, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1883
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPageDockEnd, isStandalone: true, selector: "[mlvPageDockEnd]", host: { classAttribute: "mlv-page-dock__end" }, ngImport: i0 });
1884
+ }
1885
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPageDockEnd, decorators: [{
1886
+ type: Directive,
1887
+ args: [{
1888
+ selector: '[mlvPageDockEnd]',
1889
+ host: { class: 'mlv-page-dock__end' },
1890
+ }]
1891
+ }] });
1892
+
1893
+ /**
1894
+ * Generated bundle index. Do not edit.
1895
+ */
1896
+
1897
+ export { MLV_PAGE_SCROLL, MlvPage, MlvPageAside, MlvPageBreadcrumb, MlvPageContent, MlvPageDock, MlvPageDockCenter, MlvPageDockEnd, MlvPageDockStart, MlvPageEndPane, MlvPageEndPaneContent, MlvPageEndPaneTrigger, MlvPageEndSidebar, MlvPageHeader, MlvPageHeaderActions, MlvPageHeaderDescription, MlvPageHeaderIcon, MlvPageHeaderMeta, MlvPageHeaderStatus, MlvPageHeaderTabs, MlvPageHeaderTabsActions, MlvPageShell, MlvPageSidebar, MlvPageSnap, MlvPageSnapController, MlvPageSnapRegionBase, MlvPageSummary, MlvPageSummaryItem, MlvPageTitle, MlvPageTopbar };
1898
+ //# sourceMappingURL=malva-ui-core-page.mjs.map