@malva-ui/core 0.1.13 → 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 (1618) hide show
  1. package/AGENTS.md +4 -1
  2. package/README.md +15 -0
  3. package/docs/ai/avatar.md +2 -0
  4. package/docs/ai/breadcrumb.md +67 -7
  5. package/docs/ai/button.md +74 -19
  6. package/docs/ai/card.md +8 -6
  7. package/docs/ai/chat.md +59 -45
  8. package/docs/ai/checkbox.md +12 -0
  9. package/docs/ai/combobox.md +18 -2
  10. package/docs/ai/copy-to-clipboard.md +1 -1
  11. package/docs/ai/core.md +15 -0
  12. package/docs/ai/data-table.md +89 -54
  13. package/docs/ai/dialog.md +76 -67
  14. package/docs/ai/drawer.md +15 -12
  15. package/docs/ai/dropdown.md +24 -19
  16. package/docs/ai/empty-state.md +3 -3
  17. package/docs/ai/filter.md +24 -5
  18. package/docs/ai/form-utils.md +160 -5
  19. package/docs/ai/icon-toggle.md +160 -0
  20. package/docs/ai/input.md +30 -0
  21. package/docs/ai/layout.md +23 -0
  22. package/docs/ai/list.md +10 -6
  23. package/docs/ai/menu.md +75 -1
  24. package/docs/ai/page.md +220 -60
  25. package/docs/ai/radio.md +9 -0
  26. package/docs/ai/scrollbar.md +30 -8
  27. package/docs/ai/segmented.md +35 -35
  28. package/docs/ai/select.md +30 -5
  29. package/docs/ai/sidebar.md +45 -27
  30. package/docs/ai/switch.md +114 -19
  31. package/docs/ai/table.md +69 -0
  32. package/docs/ai/tabs.md +2 -1
  33. package/docs/ai/tile.md +311 -85
  34. package/docs/ai/timeline.md +63 -39
  35. package/docs/ai/tokenizer.md +21 -5
  36. package/docs/ai/tooltip.md +5 -5
  37. package/docs/ai/view-variant.md +75 -0
  38. package/fesm2022/malva-ui-core-accordion.mjs +167 -0
  39. package/fesm2022/malva-ui-core-accordion.mjs.map +1 -0
  40. package/fesm2022/malva-ui-core-action-bar.mjs +111 -0
  41. package/fesm2022/malva-ui-core-action-bar.mjs.map +1 -0
  42. package/fesm2022/malva-ui-core-alert.mjs +173 -0
  43. package/fesm2022/malva-ui-core-alert.mjs.map +1 -0
  44. package/fesm2022/malva-ui-core-autocomplete.mjs +775 -0
  45. package/fesm2022/malva-ui-core-autocomplete.mjs.map +1 -0
  46. package/fesm2022/malva-ui-core-avatar-group.mjs +224 -0
  47. package/fesm2022/malva-ui-core-avatar-group.mjs.map +1 -0
  48. package/fesm2022/malva-ui-core-avatar.mjs +247 -0
  49. package/fesm2022/malva-ui-core-avatar.mjs.map +1 -0
  50. package/fesm2022/malva-ui-core-badge.mjs +122 -0
  51. package/fesm2022/malva-ui-core-badge.mjs.map +1 -0
  52. package/fesm2022/malva-ui-core-bottom-nav.mjs +161 -0
  53. package/fesm2022/malva-ui-core-bottom-nav.mjs.map +1 -0
  54. package/fesm2022/malva-ui-core-breadcrumb.mjs +494 -0
  55. package/fesm2022/malva-ui-core-breadcrumb.mjs.map +1 -0
  56. package/fesm2022/malva-ui-core-button.mjs +406 -0
  57. package/fesm2022/malva-ui-core-button.mjs.map +1 -0
  58. package/fesm2022/malva-ui-core-calendar.mjs +938 -0
  59. package/fesm2022/malva-ui-core-calendar.mjs.map +1 -0
  60. package/fesm2022/malva-ui-core-card.mjs +164 -0
  61. package/fesm2022/malva-ui-core-card.mjs.map +1 -0
  62. package/fesm2022/malva-ui-core-chat.mjs +825 -0
  63. package/fesm2022/malva-ui-core-chat.mjs.map +1 -0
  64. package/fesm2022/malva-ui-core-checkbox.mjs +272 -0
  65. package/fesm2022/malva-ui-core-checkbox.mjs.map +1 -0
  66. package/fesm2022/malva-ui-core-chip.mjs +176 -0
  67. package/fesm2022/malva-ui-core-chip.mjs.map +1 -0
  68. package/fesm2022/malva-ui-core-color-picker.mjs +1204 -0
  69. package/fesm2022/malva-ui-core-color-picker.mjs.map +1 -0
  70. package/fesm2022/malva-ui-core-combobox.mjs +945 -0
  71. package/fesm2022/malva-ui-core-combobox.mjs.map +1 -0
  72. package/fesm2022/malva-ui-core-copy-to-clipboard.mjs +255 -0
  73. package/fesm2022/malva-ui-core-copy-to-clipboard.mjs.map +1 -0
  74. package/fesm2022/malva-ui-core-data-table.mjs +2696 -0
  75. package/fesm2022/malva-ui-core-data-table.mjs.map +1 -0
  76. package/fesm2022/malva-ui-core-date-range-picker.mjs +276 -0
  77. package/fesm2022/malva-ui-core-date-range-picker.mjs.map +1 -0
  78. package/fesm2022/malva-ui-core-day-picker.mjs +131 -0
  79. package/fesm2022/malva-ui-core-day-picker.mjs.map +1 -0
  80. package/fesm2022/malva-ui-core-dialog-routable-dialog-CvjXMtlD.mjs +94 -0
  81. package/fesm2022/malva-ui-core-dialog-routable-dialog-CvjXMtlD.mjs.map +1 -0
  82. package/fesm2022/malva-ui-core-dialog.mjs +1223 -0
  83. package/fesm2022/malva-ui-core-dialog.mjs.map +1 -0
  84. package/fesm2022/malva-ui-core-divider.mjs +80 -0
  85. package/fesm2022/malva-ui-core-divider.mjs.map +1 -0
  86. package/fesm2022/malva-ui-core-drawer-routable-drawer-qUk6Etnx.mjs +94 -0
  87. package/fesm2022/malva-ui-core-drawer-routable-drawer-qUk6Etnx.mjs.map +1 -0
  88. package/fesm2022/malva-ui-core-drawer.mjs +814 -0
  89. package/fesm2022/malva-ui-core-drawer.mjs.map +1 -0
  90. package/fesm2022/malva-ui-core-dropdown.mjs +994 -0
  91. package/fesm2022/malva-ui-core-dropdown.mjs.map +1 -0
  92. package/fesm2022/malva-ui-core-empty-state.mjs +50 -0
  93. package/fesm2022/malva-ui-core-empty-state.mjs.map +1 -0
  94. package/fesm2022/malva-ui-core-expand.mjs +130 -0
  95. package/fesm2022/malva-ui-core-expand.mjs.map +1 -0
  96. package/fesm2022/malva-ui-core-file-upload.mjs +451 -0
  97. package/fesm2022/malva-ui-core-file-upload.mjs.map +1 -0
  98. package/fesm2022/malva-ui-core-filter.mjs +1627 -0
  99. package/fesm2022/malva-ui-core-filter.mjs.map +1 -0
  100. package/fesm2022/malva-ui-core-form-utils-testing.mjs +39 -0
  101. package/fesm2022/malva-ui-core-form-utils-testing.mjs.map +1 -0
  102. package/fesm2022/malva-ui-core-form-utils.mjs +977 -0
  103. package/fesm2022/malva-ui-core-form-utils.mjs.map +1 -0
  104. package/fesm2022/malva-ui-core-form.mjs +283 -0
  105. package/fesm2022/malva-ui-core-form.mjs.map +1 -0
  106. package/fesm2022/malva-ui-core-icon-toggle.mjs +120 -0
  107. package/fesm2022/malva-ui-core-icon-toggle.mjs.map +1 -0
  108. package/fesm2022/malva-ui-core-input.mjs +375 -0
  109. package/fesm2022/malva-ui-core-input.mjs.map +1 -0
  110. package/fesm2022/malva-ui-core-kbd.mjs +131 -0
  111. package/fesm2022/malva-ui-core-kbd.mjs.map +1 -0
  112. package/fesm2022/malva-ui-core-layout.mjs +212 -0
  113. package/fesm2022/malva-ui-core-layout.mjs.map +1 -0
  114. package/fesm2022/malva-ui-core-link.mjs +89 -0
  115. package/fesm2022/malva-ui-core-link.mjs.map +1 -0
  116. package/fesm2022/malva-ui-core-list.mjs +413 -0
  117. package/fesm2022/malva-ui-core-list.mjs.map +1 -0
  118. package/fesm2022/malva-ui-core-loader.mjs +141 -0
  119. package/fesm2022/malva-ui-core-loader.mjs.map +1 -0
  120. package/fesm2022/malva-ui-core-menu.mjs +2540 -0
  121. package/fesm2022/malva-ui-core-menu.mjs.map +1 -0
  122. package/fesm2022/malva-ui-core-notification.mjs +201 -0
  123. package/fesm2022/malva-ui-core-notification.mjs.map +1 -0
  124. package/fesm2022/malva-ui-core-number-input.mjs +404 -0
  125. package/fesm2022/malva-ui-core-number-input.mjs.map +1 -0
  126. package/fesm2022/malva-ui-core-page.mjs +1898 -0
  127. package/fesm2022/malva-ui-core-page.mjs.map +1 -0
  128. package/fesm2022/malva-ui-core-pagination.mjs +458 -0
  129. package/fesm2022/malva-ui-core-pagination.mjs.map +1 -0
  130. package/fesm2022/malva-ui-core-pin-input.mjs +405 -0
  131. package/fesm2022/malva-ui-core-pin-input.mjs.map +1 -0
  132. package/fesm2022/malva-ui-core-popup.mjs +1488 -0
  133. package/fesm2022/malva-ui-core-popup.mjs.map +1 -0
  134. package/fesm2022/malva-ui-core-progress.mjs +109 -0
  135. package/fesm2022/malva-ui-core-progress.mjs.map +1 -0
  136. package/fesm2022/malva-ui-core-radio.mjs +317 -0
  137. package/fesm2022/malva-ui-core-radio.mjs.map +1 -0
  138. package/fesm2022/malva-ui-core-rating.mjs +236 -0
  139. package/fesm2022/malva-ui-core-rating.mjs.map +1 -0
  140. package/fesm2022/malva-ui-core-scrollbar.mjs +430 -0
  141. package/fesm2022/malva-ui-core-scrollbar.mjs.map +1 -0
  142. package/fesm2022/malva-ui-core-search-field.mjs +578 -0
  143. package/fesm2022/malva-ui-core-search-field.mjs.map +1 -0
  144. package/fesm2022/malva-ui-core-segmented.mjs +458 -0
  145. package/fesm2022/malva-ui-core-segmented.mjs.map +1 -0
  146. package/fesm2022/malva-ui-core-select.mjs +855 -0
  147. package/fesm2022/malva-ui-core-select.mjs.map +1 -0
  148. package/fesm2022/malva-ui-core-sidebar.mjs +1504 -0
  149. package/fesm2022/malva-ui-core-sidebar.mjs.map +1 -0
  150. package/fesm2022/malva-ui-core-skeleton.mjs +85 -0
  151. package/fesm2022/malva-ui-core-skeleton.mjs.map +1 -0
  152. package/fesm2022/malva-ui-core-slider.mjs +514 -0
  153. package/fesm2022/malva-ui-core-slider.mjs.map +1 -0
  154. package/fesm2022/malva-ui-core-split-pane.mjs +359 -0
  155. package/fesm2022/malva-ui-core-split-pane.mjs.map +1 -0
  156. package/fesm2022/malva-ui-core-status-indicator.mjs +78 -0
  157. package/fesm2022/malva-ui-core-status-indicator.mjs.map +1 -0
  158. package/fesm2022/malva-ui-core-stepper.mjs +332 -0
  159. package/fesm2022/malva-ui-core-stepper.mjs.map +1 -0
  160. package/fesm2022/malva-ui-core-switch.mjs +272 -0
  161. package/fesm2022/malva-ui-core-switch.mjs.map +1 -0
  162. package/fesm2022/malva-ui-core-table.mjs +79 -0
  163. package/fesm2022/malva-ui-core-table.mjs.map +1 -0
  164. package/fesm2022/malva-ui-core-tabs.mjs +794 -0
  165. package/fesm2022/malva-ui-core-tabs.mjs.map +1 -0
  166. package/fesm2022/malva-ui-core-textarea.mjs +201 -0
  167. package/fesm2022/malva-ui-core-textarea.mjs.map +1 -0
  168. package/fesm2022/malva-ui-core-tile.mjs +1404 -0
  169. package/fesm2022/malva-ui-core-tile.mjs.map +1 -0
  170. package/fesm2022/malva-ui-core-time-picker.mjs +533 -0
  171. package/fesm2022/malva-ui-core-time-picker.mjs.map +1 -0
  172. package/fesm2022/malva-ui-core-timeline.mjs +216 -0
  173. package/fesm2022/malva-ui-core-timeline.mjs.map +1 -0
  174. package/fesm2022/malva-ui-core-title.mjs +178 -0
  175. package/fesm2022/malva-ui-core-title.mjs.map +1 -0
  176. package/fesm2022/malva-ui-core-toast.mjs +749 -0
  177. package/fesm2022/malva-ui-core-toast.mjs.map +1 -0
  178. package/fesm2022/malva-ui-core-tokenizer.mjs +502 -0
  179. package/fesm2022/malva-ui-core-tokenizer.mjs.map +1 -0
  180. package/fesm2022/malva-ui-core-toolbar.mjs +141 -0
  181. package/fesm2022/malva-ui-core-toolbar.mjs.map +1 -0
  182. package/fesm2022/malva-ui-core-tooltip.mjs +432 -0
  183. package/fesm2022/malva-ui-core-tooltip.mjs.map +1 -0
  184. package/fesm2022/malva-ui-core-tree.mjs +505 -0
  185. package/fesm2022/malva-ui-core-tree.mjs.map +1 -0
  186. package/fesm2022/malva-ui-core-view-variant.mjs +292 -0
  187. package/fesm2022/malva-ui-core-view-variant.mjs.map +1 -0
  188. package/fesm2022/malva-ui-core.mjs +77 -0
  189. package/fesm2022/malva-ui-core.mjs.map +1 -0
  190. package/package.json +179 -156
  191. package/styles/malva-ui.css +253 -220
  192. package/styles/tokens.md +174 -173
  193. package/table/README.md +46 -0
  194. package/types/malva-ui-core-accordion.d.ts +121 -0
  195. package/types/malva-ui-core-action-bar.d.ts +82 -0
  196. package/types/malva-ui-core-alert.d.ts +131 -0
  197. package/types/malva-ui-core-autocomplete.d.ts +301 -0
  198. package/types/malva-ui-core-avatar-group.d.ts +119 -0
  199. package/types/malva-ui-core-avatar.d.ts +156 -0
  200. package/types/malva-ui-core-badge.d.ts +97 -0
  201. package/types/malva-ui-core-bottom-nav.d.ts +104 -0
  202. package/types/malva-ui-core-breadcrumb.d.ts +308 -0
  203. package/types/malva-ui-core-button.d.ts +194 -0
  204. package/types/malva-ui-core-calendar.d.ts +339 -0
  205. package/types/malva-ui-core-card.d.ts +88 -0
  206. package/types/malva-ui-core-chat.d.ts +375 -0
  207. package/types/malva-ui-core-checkbox.d.ts +158 -0
  208. package/types/malva-ui-core-chip.d.ts +128 -0
  209. package/types/malva-ui-core-color-picker.d.ts +442 -0
  210. package/types/malva-ui-core-combobox.d.ts +419 -0
  211. package/types/malva-ui-core-copy-to-clipboard.d.ts +148 -0
  212. package/types/malva-ui-core-data-table.d.ts +1074 -0
  213. package/types/malva-ui-core-date-range-picker.d.ts +149 -0
  214. package/types/malva-ui-core-day-picker.d.ts +55 -0
  215. package/types/malva-ui-core-dialog.d.ts +597 -0
  216. package/types/malva-ui-core-divider.d.ts +68 -0
  217. package/types/malva-ui-core-drawer.d.ts +333 -0
  218. package/types/malva-ui-core-dropdown.d.ts +592 -0
  219. package/types/malva-ui-core-empty-state.d.ts +37 -0
  220. package/types/malva-ui-core-expand.d.ts +102 -0
  221. package/types/malva-ui-core-file-upload.d.ts +267 -0
  222. package/types/malva-ui-core-filter.d.ts +552 -0
  223. package/types/malva-ui-core-form-utils-testing.d.ts +50 -0
  224. package/types/malva-ui-core-form-utils.d.ts +579 -0
  225. package/types/malva-ui-core-form.d.ts +176 -0
  226. package/types/malva-ui-core-icon-toggle.d.ts +80 -0
  227. package/types/malva-ui-core-input.d.ts +262 -0
  228. package/types/malva-ui-core-kbd.d.ts +56 -0
  229. package/types/malva-ui-core-layout.d.ts +70 -0
  230. package/types/malva-ui-core-link.d.ts +28 -0
  231. package/types/malva-ui-core-list.d.ts +252 -0
  232. package/types/malva-ui-core-loader.d.ts +89 -0
  233. package/types/malva-ui-core-menu.d.ts +954 -0
  234. package/types/malva-ui-core-notification.d.ts +122 -0
  235. package/types/malva-ui-core-number-input.d.ts +167 -0
  236. package/types/malva-ui-core-page.d.ts +799 -0
  237. package/types/malva-ui-core-pagination.d.ts +261 -0
  238. package/types/malva-ui-core-pin-input.d.ts +203 -0
  239. package/types/malva-ui-core-popup.d.ts +834 -0
  240. package/types/malva-ui-core-progress.d.ts +73 -0
  241. package/types/malva-ui-core-radio.d.ts +130 -0
  242. package/types/malva-ui-core-rating.d.ts +115 -0
  243. package/types/malva-ui-core-scrollbar.d.ts +203 -0
  244. package/types/malva-ui-core-search-field.d.ts +408 -0
  245. package/types/malva-ui-core-segmented.d.ts +206 -0
  246. package/types/malva-ui-core-select.d.ts +456 -0
  247. package/types/malva-ui-core-sidebar.d.ts +698 -0
  248. package/types/malva-ui-core-skeleton.d.ts +64 -0
  249. package/types/malva-ui-core-slider.d.ts +219 -0
  250. package/types/malva-ui-core-split-pane.d.ts +149 -0
  251. package/types/malva-ui-core-status-indicator.d.ts +65 -0
  252. package/types/malva-ui-core-stepper.d.ts +168 -0
  253. package/types/malva-ui-core-switch.d.ts +146 -0
  254. package/types/malva-ui-core-table.d.ts +37 -0
  255. package/types/malva-ui-core-tabs.d.ts +339 -0
  256. package/types/malva-ui-core-textarea.d.ts +79 -0
  257. package/types/malva-ui-core-tile.d.ts +373 -0
  258. package/types/malva-ui-core-time-picker.d.ts +141 -0
  259. package/types/malva-ui-core-timeline.d.ts +188 -0
  260. package/types/malva-ui-core-title.d.ts +66 -0
  261. package/types/malva-ui-core-toast.d.ts +432 -0
  262. package/types/malva-ui-core-tokenizer.d.ts +217 -0
  263. package/types/malva-ui-core-toolbar.d.ts +91 -0
  264. package/types/malva-ui-core-tooltip.d.ts +200 -0
  265. package/types/malva-ui-core-tree.d.ts +289 -0
  266. package/types/malva-ui-core-view-variant.d.ts +207 -0
  267. package/types/malva-ui-core.d.ts +72 -0
  268. package/view-variant/README.md +3 -0
  269. package/accordion/index.d.ts +0 -3
  270. package/accordion/lib/accordion/accordion.d.ts +0 -47
  271. package/accordion/lib/accordion-item/accordion-header.d.ts +0 -22
  272. package/accordion/lib/accordion-item/accordion-item.d.ts +0 -49
  273. package/accordion/malva-ui-core-accordion.d.ts +0 -5
  274. package/action-bar/index.d.ts +0 -4
  275. package/action-bar/lib/action-bar/action-bar.d.ts +0 -59
  276. package/action-bar/lib/action-bar/components/action-bar-actions.d.ts +0 -9
  277. package/action-bar/lib/action-bar/components/action-bar-logo.d.ts +0 -5
  278. package/action-bar/lib/action-bar/components/action-bar-spacer.d.ts +0 -5
  279. package/action-bar/malva-ui-core-action-bar.d.ts +0 -5
  280. package/alert/index.d.ts +0 -2
  281. package/alert/lib/alert/alert.d.ts +0 -84
  282. package/alert/lib/alert/alert.directives.d.ts +0 -44
  283. package/alert/malva-ui-core-alert.d.ts +0 -5
  284. package/autocomplete/index.d.ts +0 -1
  285. package/autocomplete/lib/autocomplete/autocomplete.d.ts +0 -296
  286. package/autocomplete/malva-ui-core-autocomplete.d.ts +0 -5
  287. package/avatar/index.d.ts +0 -2
  288. package/avatar/lib/avatar/avatar.d.ts +0 -125
  289. package/avatar/lib/color-from-text.pipe.d.ts +0 -21
  290. package/avatar/malva-ui-core-avatar.d.ts +0 -5
  291. package/avatar-group/index.d.ts +0 -1
  292. package/avatar-group/lib/avatar-group/avatar-group.d.ts +0 -115
  293. package/avatar-group/malva-ui-core-avatar-group.d.ts +0 -5
  294. package/badge/index.d.ts +0 -2
  295. package/badge/lib/badge/badge.d.ts +0 -59
  296. package/badge/lib/badge-icon.d.ts +0 -35
  297. package/badge/malva-ui-core-badge.d.ts +0 -5
  298. package/bottom-nav/index.d.ts +0 -1
  299. package/bottom-nav/lib/bottom-nav/bottom-nav.d.ts +0 -99
  300. package/bottom-nav/malva-ui-core-bottom-nav.d.ts +0 -5
  301. package/breadcrumb/index.d.ts +0 -5
  302. package/breadcrumb/lib/breadcrumb/breadcrumb-item-host.d.ts +0 -32
  303. package/breadcrumb/lib/breadcrumb/breadcrumb-item.d.ts +0 -41
  304. package/breadcrumb/lib/breadcrumb/breadcrumb-separator.d.ts +0 -31
  305. package/breadcrumb/lib/breadcrumb/breadcrumb.d.ts +0 -151
  306. package/breadcrumb/lib/breadcrumb/breadcrumb.types.d.ts +0 -26
  307. package/breadcrumb/malva-ui-core-breadcrumb.d.ts +0 -5
  308. package/button/index.d.ts +0 -7
  309. package/button/lib/button/button.d.ts +0 -61
  310. package/button/lib/button-close/button-close.d.ts +0 -24
  311. package/button/lib/button-group/button-group.d.ts +0 -21
  312. package/button/lib/button-split/button-split.d.ts +0 -21
  313. package/button/lib/button-toggle/button-toggle.d.ts +0 -33
  314. package/button/lib/button-variant.token.d.ts +0 -13
  315. package/button/lib/button.directives.d.ts +0 -14
  316. package/button/lib/button.types.d.ts +0 -8
  317. package/button/malva-ui-core-button.d.ts +0 -5
  318. package/calendar/index.d.ts +0 -3
  319. package/calendar/lib/calendar/calendar.d.ts +0 -182
  320. package/calendar/lib/date-provider/date-adapter.d.ts +0 -92
  321. package/calendar/lib/date-provider/native-date-adapter.d.ts +0 -60
  322. package/calendar/malva-ui-core-calendar.d.ts +0 -5
  323. package/card/index.d.ts +0 -5
  324. package/card/lib/card/card.d.ts +0 -43
  325. package/card/lib/card-actions-def.d.ts +0 -10
  326. package/card/lib/card-footer-def.d.ts +0 -13
  327. package/card/lib/card-header-def.d.ts +0 -10
  328. package/card/lib/card-subheader-def.d.ts +0 -16
  329. package/card/malva-ui-core-card.d.ts +0 -5
  330. package/chat/index.d.ts +0 -9
  331. package/chat/lib/chat/chat.d.ts +0 -133
  332. package/chat/lib/chat-audio/chat-audio.d.ts +0 -51
  333. package/chat/lib/chat-audio/chat-audio.service.d.ts +0 -21
  334. package/chat/lib/chat-date/chat-date.d.ts +0 -16
  335. package/chat/lib/chat-format.d.ts +0 -5
  336. package/chat/lib/chat-media-grid/chat-media-grid.d.ts +0 -32
  337. package/chat/lib/chat-message/chat-message.d.ts +0 -45
  338. package/chat/lib/chat-render-list.d.ts +0 -16
  339. package/chat/lib/chat-tokens.d.ts +0 -25
  340. package/chat/lib/chat-typing/chat-typing.d.ts +0 -16
  341. package/chat/lib/chat.types.d.ts +0 -80
  342. package/chat/lib/defs/chat-author-def.d.ts +0 -30
  343. package/chat/lib/defs/chat-date-def.d.ts +0 -22
  344. package/chat/lib/defs/chat-message-def.d.ts +0 -23
  345. package/chat/malva-ui-core-chat.d.ts +0 -5
  346. package/checkbox/index.d.ts +0 -3
  347. package/checkbox/lib/checkbox/checkbox.d.ts +0 -129
  348. package/checkbox/lib/checkbox-group/checkbox-group.d.ts +0 -24
  349. package/checkbox/lib/checkbox-group-token.d.ts +0 -6
  350. package/checkbox/malva-ui-core-checkbox.d.ts +0 -5
  351. package/chip/index.d.ts +0 -2
  352. package/chip/lib/chip/chip.d.ts +0 -107
  353. package/chip/lib/chip/chip.directives.d.ts +0 -18
  354. package/chip/malva-ui-core-chip.d.ts +0 -5
  355. package/color-picker/index.d.ts +0 -3
  356. package/color-picker/lib/color-picker/color-picker.d.ts +0 -188
  357. package/color-picker/lib/color-picker-popup/color-picker-popup.d.ts +0 -151
  358. package/color-picker/lib/color-utils/color-utils.d.ts +0 -102
  359. package/color-picker/malva-ui-core-color-picker.d.ts +0 -5
  360. package/combobox/index.d.ts +0 -2
  361. package/combobox/lib/combobox/combobox.d.ts +0 -400
  362. package/combobox/lib/combobox-template.directives.d.ts +0 -10
  363. package/combobox/malva-ui-core-combobox.d.ts +0 -5
  364. package/copy-to-clipboard/index.d.ts +0 -1
  365. package/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.d.ts +0 -130
  366. package/copy-to-clipboard/malva-ui-core-copy-to-clipboard.d.ts +0 -5
  367. package/data-table/index.d.ts +0 -8
  368. package/data-table/lib/data-source.d.ts +0 -5
  369. package/data-table/lib/data-table/data-table-layout.d.ts +0 -31
  370. package/data-table/lib/data-table/data-table.d.ts +0 -699
  371. package/data-table/lib/data-table/services/data-table-column-visibility.service.d.ts +0 -19
  372. package/data-table/lib/data-table/services/data-table-editing.service.d.ts +0 -37
  373. package/data-table/lib/data-table/services/data-table-pinning.service.d.ts +0 -37
  374. package/data-table/lib/data-table-cell.d.ts +0 -44
  375. package/data-table/lib/data-table-edit-cell.d.ts +0 -44
  376. package/data-table/lib/data-table-error.d.ts +0 -37
  377. package/data-table/lib/data-table-footer.d.ts +0 -26
  378. package/data-table/lib/data-table-no-data.d.ts +0 -19
  379. package/data-table/lib/filter-dropdown/filter-dropdown.d.ts +0 -54
  380. package/data-table/lib/types.d.ts +0 -134
  381. package/data-table/malva-ui-core-data-table.d.ts +0 -5
  382. package/date-range-picker/index.d.ts +0 -1
  383. package/date-range-picker/lib/date-range-picker/date-range-picker.d.ts +0 -145
  384. package/date-range-picker/malva-ui-core-date-range-picker.d.ts +0 -5
  385. package/day-picker/index.d.ts +0 -1
  386. package/day-picker/lib/day-picker/day-picker.d.ts +0 -51
  387. package/day-picker/malva-ui-core-day-picker.d.ts +0 -5
  388. package/dialog/index.d.ts +0 -11
  389. package/dialog/lib/confirm-dialog-options.d.ts +0 -41
  390. package/dialog/lib/confirm-dialog.d.ts +0 -52
  391. package/dialog/lib/dialog/dialog.d.ts +0 -22
  392. package/dialog/lib/dialog-body.d.ts +0 -9
  393. package/dialog/lib/dialog-close.d.ts +0 -27
  394. package/dialog/lib/dialog-config.d.ts +0 -112
  395. package/dialog/lib/dialog-container.d.ts +0 -40
  396. package/dialog/lib/dialog-footer.d.ts +0 -13
  397. package/dialog/lib/dialog-header.d.ts +0 -74
  398. package/dialog/lib/dialog-ref.d.ts +0 -95
  399. package/dialog/lib/dialog-template.d.ts +0 -65
  400. package/dialog/lib/dialog-text-content.d.ts +0 -24
  401. package/dialog/lib/dialog.service.d.ts +0 -63
  402. package/dialog/lib/generate-routable-dialog-route.d.ts +0 -49
  403. package/dialog/lib/inject-dialog-ref.d.ts +0 -8
  404. package/dialog/lib/routable-dialog.d.ts +0 -30
  405. package/dialog/malva-ui-core-dialog.d.ts +0 -5
  406. package/divider/index.d.ts +0 -1
  407. package/divider/lib/divider/divider.d.ts +0 -64
  408. package/divider/malva-ui-core-divider.d.ts +0 -5
  409. package/drawer/index.d.ts +0 -11
  410. package/drawer/lib/drawer/drawer.d.ts +0 -106
  411. package/drawer/lib/drawer-body.d.ts +0 -8
  412. package/drawer/lib/drawer-content.d.ts +0 -6
  413. package/drawer/lib/drawer-footer.d.ts +0 -5
  414. package/drawer/lib/drawer-header.d.ts +0 -5
  415. package/drawer/lib/drawer-ref.d.ts +0 -29
  416. package/drawer/lib/drawer-resize.d.ts +0 -65
  417. package/drawer/lib/drawer-section/drawer-section.d.ts +0 -15
  418. package/drawer/lib/drawer-sections/drawer-sections.d.ts +0 -22
  419. package/drawer/lib/drawer-sections.service.d.ts +0 -42
  420. package/drawer/lib/drawer.service.d.ts +0 -66
  421. package/drawer/lib/generate-routable-drawer-route.d.ts +0 -42
  422. package/drawer/lib/routable-drawer.d.ts +0 -30
  423. package/drawer/malva-ui-core-drawer.d.ts +0 -5
  424. package/dropdown/index.d.ts +0 -9
  425. package/dropdown/lib/active-descendant.d.ts +0 -64
  426. package/dropdown/lib/dropdown-panel/dropdown-panel.d.ts +0 -178
  427. package/dropdown/lib/highlight-match.pipe.d.ts +0 -27
  428. package/dropdown/lib/option-matcher.d.ts +0 -87
  429. package/dropdown/lib/options-adapter.d.ts +0 -142
  430. package/dropdown/lib/options-result.d.ts +0 -6
  431. package/dropdown/lib/reconciliation.d.ts +0 -19
  432. package/dropdown/lib/select-data-source.d.ts +0 -18
  433. package/dropdown/lib/select-option.d.ts +0 -37
  434. package/dropdown/malva-ui-core-dropdown.d.ts +0 -5
  435. package/empty-state/index.d.ts +0 -1
  436. package/empty-state/lib/empty-state/empty-state.d.ts +0 -34
  437. package/empty-state/malva-ui-core-empty-state.d.ts +0 -5
  438. package/esm2022/accordion/index.js +0 -4
  439. package/esm2022/accordion/index.js.map +0 -1
  440. package/esm2022/accordion/lib/accordion/accordion.js +0 -65
  441. package/esm2022/accordion/lib/accordion/accordion.js.map +0 -1
  442. package/esm2022/accordion/lib/accordion-item/accordion-header.js +0 -30
  443. package/esm2022/accordion/lib/accordion-item/accordion-header.js.map +0 -1
  444. package/esm2022/accordion/lib/accordion-item/accordion-item.js +0 -70
  445. package/esm2022/accordion/lib/accordion-item/accordion-item.js.map +0 -1
  446. package/esm2022/accordion/malva-ui-core-accordion.js +0 -5
  447. package/esm2022/accordion/malva-ui-core-accordion.js.map +0 -1
  448. package/esm2022/action-bar/index.js +0 -5
  449. package/esm2022/action-bar/index.js.map +0 -1
  450. package/esm2022/action-bar/lib/action-bar/action-bar.js +0 -64
  451. package/esm2022/action-bar/lib/action-bar/action-bar.js.map +0 -1
  452. package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js +0 -20
  453. package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js.map +0 -1
  454. package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js +0 -13
  455. package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js.map +0 -1
  456. package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js +0 -13
  457. package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js.map +0 -1
  458. package/esm2022/action-bar/malva-ui-core-action-bar.js +0 -5
  459. package/esm2022/action-bar/malva-ui-core-action-bar.js.map +0 -1
  460. package/esm2022/alert/index.js +0 -3
  461. package/esm2022/alert/index.js.map +0 -1
  462. package/esm2022/alert/lib/alert/alert.directives.js +0 -53
  463. package/esm2022/alert/lib/alert/alert.directives.js.map +0 -1
  464. package/esm2022/alert/lib/alert/alert.js +0 -118
  465. package/esm2022/alert/lib/alert/alert.js.map +0 -1
  466. package/esm2022/alert/malva-ui-core-alert.js +0 -5
  467. package/esm2022/alert/malva-ui-core-alert.js.map +0 -1
  468. package/esm2022/autocomplete/index.js +0 -2
  469. package/esm2022/autocomplete/index.js.map +0 -1
  470. package/esm2022/autocomplete/lib/autocomplete/autocomplete.js +0 -765
  471. package/esm2022/autocomplete/lib/autocomplete/autocomplete.js.map +0 -1
  472. package/esm2022/autocomplete/malva-ui-core-autocomplete.js +0 -5
  473. package/esm2022/autocomplete/malva-ui-core-autocomplete.js.map +0 -1
  474. package/esm2022/avatar/index.js +0 -3
  475. package/esm2022/avatar/index.js.map +0 -1
  476. package/esm2022/avatar/lib/avatar/avatar.js +0 -192
  477. package/esm2022/avatar/lib/avatar/avatar.js.map +0 -1
  478. package/esm2022/avatar/lib/color-from-text.pipe.js +0 -39
  479. package/esm2022/avatar/lib/color-from-text.pipe.js.map +0 -1
  480. package/esm2022/avatar/malva-ui-core-avatar.js +0 -5
  481. package/esm2022/avatar/malva-ui-core-avatar.js.map +0 -1
  482. package/esm2022/avatar-group/index.js +0 -2
  483. package/esm2022/avatar-group/index.js.map +0 -1
  484. package/esm2022/avatar-group/lib/avatar-group/avatar-group.js +0 -217
  485. package/esm2022/avatar-group/lib/avatar-group/avatar-group.js.map +0 -1
  486. package/esm2022/avatar-group/malva-ui-core-avatar-group.js +0 -5
  487. package/esm2022/avatar-group/malva-ui-core-avatar-group.js.map +0 -1
  488. package/esm2022/badge/index.js +0 -3
  489. package/esm2022/badge/index.js.map +0 -1
  490. package/esm2022/badge/lib/badge/badge.js +0 -71
  491. package/esm2022/badge/lib/badge/badge.js.map +0 -1
  492. package/esm2022/badge/lib/badge-icon.js +0 -47
  493. package/esm2022/badge/lib/badge-icon.js.map +0 -1
  494. package/esm2022/badge/malva-ui-core-badge.js +0 -5
  495. package/esm2022/badge/malva-ui-core-badge.js.map +0 -1
  496. package/esm2022/bottom-nav/index.js +0 -2
  497. package/esm2022/bottom-nav/index.js.map +0 -1
  498. package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js +0 -155
  499. package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js.map +0 -1
  500. package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js +0 -5
  501. package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js.map +0 -1
  502. package/esm2022/breadcrumb/index.js +0 -6
  503. package/esm2022/breadcrumb/index.js.map +0 -1
  504. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js +0 -43
  505. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js.map +0 -1
  506. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js +0 -110
  507. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js.map +0 -1
  508. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js +0 -38
  509. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js.map +0 -1
  510. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js +0 -284
  511. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js.map +0 -1
  512. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js +0 -1
  513. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js.map +0 -1
  514. package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js +0 -5
  515. package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js.map +0 -1
  516. package/esm2022/button/index.js +0 -8
  517. package/esm2022/button/index.js.map +0 -1
  518. package/esm2022/button/lib/button/button.js +0 -137
  519. package/esm2022/button/lib/button/button.js.map +0 -1
  520. package/esm2022/button/lib/button-close/button-close.js +0 -52
  521. package/esm2022/button/lib/button-close/button-close.js.map +0 -1
  522. package/esm2022/button/lib/button-group/button-group.js +0 -44
  523. package/esm2022/button/lib/button-group/button-group.js.map +0 -1
  524. package/esm2022/button/lib/button-split/button-split.js +0 -44
  525. package/esm2022/button/lib/button-split/button-split.js.map +0 -1
  526. package/esm2022/button/lib/button-toggle/button-toggle.js +0 -94
  527. package/esm2022/button/lib/button-toggle/button-toggle.js.map +0 -1
  528. package/esm2022/button/lib/button-variant.token.js +0 -4
  529. package/esm2022/button/lib/button-variant.token.js.map +0 -1
  530. package/esm2022/button/lib/button.directives.js +0 -37
  531. package/esm2022/button/lib/button.directives.js.map +0 -1
  532. package/esm2022/button/lib/button.types.js +0 -1
  533. package/esm2022/button/lib/button.types.js.map +0 -1
  534. package/esm2022/button/malva-ui-core-button.js +0 -5
  535. package/esm2022/button/malva-ui-core-button.js.map +0 -1
  536. package/esm2022/calendar/index.js +0 -4
  537. package/esm2022/calendar/index.js.map +0 -1
  538. package/esm2022/calendar/lib/calendar/calendar.js +0 -672
  539. package/esm2022/calendar/lib/calendar/calendar.js.map +0 -1
  540. package/esm2022/calendar/lib/date-provider/date-adapter.js +0 -111
  541. package/esm2022/calendar/lib/date-provider/date-adapter.js.map +0 -1
  542. package/esm2022/calendar/lib/date-provider/native-date-adapter.js +0 -151
  543. package/esm2022/calendar/lib/date-provider/native-date-adapter.js.map +0 -1
  544. package/esm2022/calendar/malva-ui-core-calendar.js +0 -5
  545. package/esm2022/calendar/malva-ui-core-calendar.js.map +0 -1
  546. package/esm2022/card/index.js +0 -6
  547. package/esm2022/card/index.js.map +0 -1
  548. package/esm2022/card/lib/card/card.js +0 -54
  549. package/esm2022/card/lib/card/card.js.map +0 -1
  550. package/esm2022/card/lib/card-actions-def.js +0 -27
  551. package/esm2022/card/lib/card-actions-def.js.map +0 -1
  552. package/esm2022/card/lib/card-footer-def.js +0 -32
  553. package/esm2022/card/lib/card-footer-def.js.map +0 -1
  554. package/esm2022/card/lib/card-header-def.js +0 -27
  555. package/esm2022/card/lib/card-header-def.js.map +0 -1
  556. package/esm2022/card/lib/card-subheader-def.js +0 -33
  557. package/esm2022/card/lib/card-subheader-def.js.map +0 -1
  558. package/esm2022/card/malva-ui-core-card.js +0 -5
  559. package/esm2022/card/malva-ui-core-card.js.map +0 -1
  560. package/esm2022/chat/index.js +0 -10
  561. package/esm2022/chat/index.js.map +0 -1
  562. package/esm2022/chat/lib/chat/chat.js +0 -326
  563. package/esm2022/chat/lib/chat/chat.js.map +0 -1
  564. package/esm2022/chat/lib/chat-audio/chat-audio.js +0 -110
  565. package/esm2022/chat/lib/chat-audio/chat-audio.js.map +0 -1
  566. package/esm2022/chat/lib/chat-audio/chat-audio.service.js +0 -28
  567. package/esm2022/chat/lib/chat-audio/chat-audio.service.js.map +0 -1
  568. package/esm2022/chat/lib/chat-date/chat-date.js +0 -46
  569. package/esm2022/chat/lib/chat-date/chat-date.js.map +0 -1
  570. package/esm2022/chat/lib/chat-format.js +0 -11
  571. package/esm2022/chat/lib/chat-format.js.map +0 -1
  572. package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js +0 -53
  573. package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js.map +0 -1
  574. package/esm2022/chat/lib/chat-message/chat-message.js +0 -86
  575. package/esm2022/chat/lib/chat-message/chat-message.js.map +0 -1
  576. package/esm2022/chat/lib/chat-render-list.js +0 -55
  577. package/esm2022/chat/lib/chat-render-list.js.map +0 -1
  578. package/esm2022/chat/lib/chat-tokens.js +0 -9
  579. package/esm2022/chat/lib/chat-tokens.js.map +0 -1
  580. package/esm2022/chat/lib/chat-typing/chat-typing.js +0 -50
  581. package/esm2022/chat/lib/chat-typing/chat-typing.js.map +0 -1
  582. package/esm2022/chat/lib/chat.types.js +0 -1
  583. package/esm2022/chat/lib/chat.types.js.map +0 -1
  584. package/esm2022/chat/lib/defs/chat-author-def.js +0 -27
  585. package/esm2022/chat/lib/defs/chat-author-def.js.map +0 -1
  586. package/esm2022/chat/lib/defs/chat-date-def.js +0 -24
  587. package/esm2022/chat/lib/defs/chat-date-def.js.map +0 -1
  588. package/esm2022/chat/lib/defs/chat-message-def.js +0 -30
  589. package/esm2022/chat/lib/defs/chat-message-def.js.map +0 -1
  590. package/esm2022/chat/malva-ui-core-chat.js +0 -5
  591. package/esm2022/chat/malva-ui-core-chat.js.map +0 -1
  592. package/esm2022/checkbox/index.js +0 -4
  593. package/esm2022/checkbox/index.js.map +0 -1
  594. package/esm2022/checkbox/lib/checkbox/checkbox.js +0 -201
  595. package/esm2022/checkbox/lib/checkbox/checkbox.js.map +0 -1
  596. package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js +0 -68
  597. package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js.map +0 -1
  598. package/esm2022/checkbox/lib/checkbox-group-token.js +0 -3
  599. package/esm2022/checkbox/lib/checkbox-group-token.js.map +0 -1
  600. package/esm2022/checkbox/malva-ui-core-checkbox.js +0 -5
  601. package/esm2022/checkbox/malva-ui-core-checkbox.js.map +0 -1
  602. package/esm2022/chip/index.js +0 -3
  603. package/esm2022/chip/index.js.map +0 -1
  604. package/esm2022/chip/lib/chip/chip.directives.js +0 -32
  605. package/esm2022/chip/lib/chip/chip.directives.js.map +0 -1
  606. package/esm2022/chip/lib/chip/chip.js +0 -140
  607. package/esm2022/chip/lib/chip/chip.js.map +0 -1
  608. package/esm2022/chip/malva-ui-core-chip.js +0 -5
  609. package/esm2022/chip/malva-ui-core-chip.js.map +0 -1
  610. package/esm2022/color-picker/index.js +0 -4
  611. package/esm2022/color-picker/index.js.map +0 -1
  612. package/esm2022/color-picker/lib/color-picker/color-picker.js +0 -530
  613. package/esm2022/color-picker/lib/color-picker/color-picker.js.map +0 -1
  614. package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js +0 -419
  615. package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js.map +0 -1
  616. package/esm2022/color-picker/lib/color-utils/color-utils.js +0 -256
  617. package/esm2022/color-picker/lib/color-utils/color-utils.js.map +0 -1
  618. package/esm2022/color-picker/malva-ui-core-color-picker.js +0 -5
  619. package/esm2022/color-picker/malva-ui-core-color-picker.js.map +0 -1
  620. package/esm2022/combobox/index.js +0 -3
  621. package/esm2022/combobox/index.js.map +0 -1
  622. package/esm2022/combobox/lib/combobox/combobox.js +0 -911
  623. package/esm2022/combobox/lib/combobox/combobox.js.map +0 -1
  624. package/esm2022/combobox/lib/combobox-template.directives.js +0 -24
  625. package/esm2022/combobox/lib/combobox-template.directives.js.map +0 -1
  626. package/esm2022/combobox/malva-ui-core-combobox.js +0 -5
  627. package/esm2022/combobox/malva-ui-core-combobox.js.map +0 -1
  628. package/esm2022/copy-to-clipboard/index.js +0 -2
  629. package/esm2022/copy-to-clipboard/index.js.map +0 -1
  630. package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js +0 -201
  631. package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js.map +0 -1
  632. package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js +0 -5
  633. package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js.map +0 -1
  634. package/esm2022/data-table/index.js +0 -9
  635. package/esm2022/data-table/index.js.map +0 -1
  636. package/esm2022/data-table/lib/data-source.js +0 -6
  637. package/esm2022/data-table/lib/data-source.js.map +0 -1
  638. package/esm2022/data-table/lib/data-table/data-table-layout.js +0 -84
  639. package/esm2022/data-table/lib/data-table/data-table-layout.js.map +0 -1
  640. package/esm2022/data-table/lib/data-table/data-table.js +0 -1846
  641. package/esm2022/data-table/lib/data-table/data-table.js.map +0 -1
  642. package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js +0 -37
  643. package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js.map +0 -1
  644. package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js +0 -63
  645. package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js.map +0 -1
  646. package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js +0 -68
  647. package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js.map +0 -1
  648. package/esm2022/data-table/lib/data-table-cell.js +0 -46
  649. package/esm2022/data-table/lib/data-table-cell.js.map +0 -1
  650. package/esm2022/data-table/lib/data-table-edit-cell.js +0 -46
  651. package/esm2022/data-table/lib/data-table-edit-cell.js.map +0 -1
  652. package/esm2022/data-table/lib/data-table-error.js +0 -37
  653. package/esm2022/data-table/lib/data-table-error.js.map +0 -1
  654. package/esm2022/data-table/lib/data-table-footer.js +0 -33
  655. package/esm2022/data-table/lib/data-table-footer.js.map +0 -1
  656. package/esm2022/data-table/lib/data-table-no-data.js +0 -26
  657. package/esm2022/data-table/lib/data-table-no-data.js.map +0 -1
  658. package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js +0 -224
  659. package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js.map +0 -1
  660. package/esm2022/data-table/lib/types.js +0 -1
  661. package/esm2022/data-table/lib/types.js.map +0 -1
  662. package/esm2022/data-table/malva-ui-core-data-table.js +0 -5
  663. package/esm2022/data-table/malva-ui-core-data-table.js.map +0 -1
  664. package/esm2022/date-range-picker/index.js +0 -2
  665. package/esm2022/date-range-picker/index.js.map +0 -1
  666. package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js +0 -269
  667. package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js.map +0 -1
  668. package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js +0 -5
  669. package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js.map +0 -1
  670. package/esm2022/day-picker/index.js +0 -2
  671. package/esm2022/day-picker/index.js.map +0 -1
  672. package/esm2022/day-picker/lib/day-picker/day-picker.js +0 -124
  673. package/esm2022/day-picker/lib/day-picker/day-picker.js.map +0 -1
  674. package/esm2022/day-picker/malva-ui-core-day-picker.js +0 -5
  675. package/esm2022/day-picker/malva-ui-core-day-picker.js.map +0 -1
  676. package/esm2022/dialog/index.js +0 -12
  677. package/esm2022/dialog/index.js.map +0 -1
  678. package/esm2022/dialog/lib/confirm-dialog-options.js +0 -1
  679. package/esm2022/dialog/lib/confirm-dialog-options.js.map +0 -1
  680. package/esm2022/dialog/lib/confirm-dialog.js +0 -155
  681. package/esm2022/dialog/lib/confirm-dialog.js.map +0 -1
  682. package/esm2022/dialog/lib/dialog/dialog.js +0 -40
  683. package/esm2022/dialog/lib/dialog/dialog.js.map +0 -1
  684. package/esm2022/dialog/lib/dialog-body.js +0 -33
  685. package/esm2022/dialog/lib/dialog-body.js.map +0 -1
  686. package/esm2022/dialog/lib/dialog-close.js +0 -45
  687. package/esm2022/dialog/lib/dialog-close.js.map +0 -1
  688. package/esm2022/dialog/lib/dialog-config.js +0 -23
  689. package/esm2022/dialog/lib/dialog-config.js.map +0 -1
  690. package/esm2022/dialog/lib/dialog-container.js +0 -69
  691. package/esm2022/dialog/lib/dialog-container.js.map +0 -1
  692. package/esm2022/dialog/lib/dialog-footer.js +0 -29
  693. package/esm2022/dialog/lib/dialog-footer.js.map +0 -1
  694. package/esm2022/dialog/lib/dialog-header.js +0 -181
  695. package/esm2022/dialog/lib/dialog-header.js.map +0 -1
  696. package/esm2022/dialog/lib/dialog-ref.js +0 -167
  697. package/esm2022/dialog/lib/dialog-ref.js.map +0 -1
  698. package/esm2022/dialog/lib/dialog-template.js +0 -136
  699. package/esm2022/dialog/lib/dialog-template.js.map +0 -1
  700. package/esm2022/dialog/lib/dialog-text-content.js +0 -59
  701. package/esm2022/dialog/lib/dialog-text-content.js.map +0 -1
  702. package/esm2022/dialog/lib/dialog.service.js +0 -205
  703. package/esm2022/dialog/lib/dialog.service.js.map +0 -1
  704. package/esm2022/dialog/lib/generate-routable-dialog-route.js +0 -59
  705. package/esm2022/dialog/lib/generate-routable-dialog-route.js.map +0 -1
  706. package/esm2022/dialog/lib/inject-dialog-ref.js +0 -16
  707. package/esm2022/dialog/lib/inject-dialog-ref.js.map +0 -1
  708. package/esm2022/dialog/lib/routable-dialog.js +0 -91
  709. package/esm2022/dialog/lib/routable-dialog.js.map +0 -1
  710. package/esm2022/dialog/malva-ui-core-dialog.js +0 -5
  711. package/esm2022/dialog/malva-ui-core-dialog.js.map +0 -1
  712. package/esm2022/divider/index.js +0 -2
  713. package/esm2022/divider/index.js.map +0 -1
  714. package/esm2022/divider/lib/divider/divider.js +0 -73
  715. package/esm2022/divider/lib/divider/divider.js.map +0 -1
  716. package/esm2022/divider/malva-ui-core-divider.js +0 -5
  717. package/esm2022/divider/malva-ui-core-divider.js.map +0 -1
  718. package/esm2022/drawer/index.js +0 -12
  719. package/esm2022/drawer/index.js.map +0 -1
  720. package/esm2022/drawer/lib/drawer/drawer.js +0 -180
  721. package/esm2022/drawer/lib/drawer/drawer.js.map +0 -1
  722. package/esm2022/drawer/lib/drawer-body.js +0 -32
  723. package/esm2022/drawer/lib/drawer-body.js.map +0 -1
  724. package/esm2022/drawer/lib/drawer-content.js +0 -14
  725. package/esm2022/drawer/lib/drawer-content.js.map +0 -1
  726. package/esm2022/drawer/lib/drawer-footer.js +0 -14
  727. package/esm2022/drawer/lib/drawer-footer.js.map +0 -1
  728. package/esm2022/drawer/lib/drawer-header.js +0 -14
  729. package/esm2022/drawer/lib/drawer-header.js.map +0 -1
  730. package/esm2022/drawer/lib/drawer-ref.js +0 -31
  731. package/esm2022/drawer/lib/drawer-ref.js.map +0 -1
  732. package/esm2022/drawer/lib/drawer-resize.js +0 -243
  733. package/esm2022/drawer/lib/drawer-resize.js.map +0 -1
  734. package/esm2022/drawer/lib/drawer-section/drawer-section.js +0 -26
  735. package/esm2022/drawer/lib/drawer-section/drawer-section.js.map +0 -1
  736. package/esm2022/drawer/lib/drawer-sections/drawer-sections.js +0 -58
  737. package/esm2022/drawer/lib/drawer-sections/drawer-sections.js.map +0 -1
  738. package/esm2022/drawer/lib/drawer-sections.service.js +0 -83
  739. package/esm2022/drawer/lib/drawer-sections.service.js.map +0 -1
  740. package/esm2022/drawer/lib/drawer.service.js +0 -86
  741. package/esm2022/drawer/lib/drawer.service.js.map +0 -1
  742. package/esm2022/drawer/lib/generate-routable-drawer-route.js +0 -52
  743. package/esm2022/drawer/lib/generate-routable-drawer-route.js.map +0 -1
  744. package/esm2022/drawer/lib/routable-drawer.js +0 -91
  745. package/esm2022/drawer/lib/routable-drawer.js.map +0 -1
  746. package/esm2022/drawer/malva-ui-core-drawer.js +0 -5
  747. package/esm2022/drawer/malva-ui-core-drawer.js.map +0 -1
  748. package/esm2022/dropdown/index.js +0 -10
  749. package/esm2022/dropdown/index.js.map +0 -1
  750. package/esm2022/dropdown/lib/active-descendant.js +0 -92
  751. package/esm2022/dropdown/lib/active-descendant.js.map +0 -1
  752. package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js +0 -295
  753. package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js.map +0 -1
  754. package/esm2022/dropdown/lib/highlight-match.pipe.js +0 -36
  755. package/esm2022/dropdown/lib/highlight-match.pipe.js.map +0 -1
  756. package/esm2022/dropdown/lib/option-matcher.js +0 -124
  757. package/esm2022/dropdown/lib/option-matcher.js.map +0 -1
  758. package/esm2022/dropdown/lib/options-adapter.js +0 -356
  759. package/esm2022/dropdown/lib/options-adapter.js.map +0 -1
  760. package/esm2022/dropdown/lib/options-result.js +0 -11
  761. package/esm2022/dropdown/lib/options-result.js.map +0 -1
  762. package/esm2022/dropdown/lib/reconciliation.js +0 -32
  763. package/esm2022/dropdown/lib/reconciliation.js.map +0 -1
  764. package/esm2022/dropdown/lib/select-data-source.js +0 -21
  765. package/esm2022/dropdown/lib/select-data-source.js.map +0 -1
  766. package/esm2022/dropdown/lib/select-option.js +0 -25
  767. package/esm2022/dropdown/lib/select-option.js.map +0 -1
  768. package/esm2022/dropdown/malva-ui-core-dropdown.js +0 -5
  769. package/esm2022/dropdown/malva-ui-core-dropdown.js.map +0 -1
  770. package/esm2022/empty-state/index.js +0 -2
  771. package/esm2022/empty-state/index.js.map +0 -1
  772. package/esm2022/empty-state/lib/empty-state/empty-state.js +0 -43
  773. package/esm2022/empty-state/lib/empty-state/empty-state.js.map +0 -1
  774. package/esm2022/empty-state/malva-ui-core-empty-state.js +0 -5
  775. package/esm2022/empty-state/malva-ui-core-empty-state.js.map +0 -1
  776. package/esm2022/expand/index.js +0 -3
  777. package/esm2022/expand/index.js.map +0 -1
  778. package/esm2022/expand/lib/expand/expand-content.js +0 -33
  779. package/esm2022/expand/lib/expand/expand-content.js.map +0 -1
  780. package/esm2022/expand/lib/expand/expand.js +0 -93
  781. package/esm2022/expand/lib/expand/expand.js.map +0 -1
  782. package/esm2022/expand/malva-ui-core-expand.js +0 -5
  783. package/esm2022/expand/malva-ui-core-expand.js.map +0 -1
  784. package/esm2022/file-upload/index.js +0 -5
  785. package/esm2022/file-upload/index.js.map +0 -1
  786. package/esm2022/file-upload/lib/file-upload/file-upload.js +0 -324
  787. package/esm2022/file-upload/lib/file-upload/file-upload.js.map +0 -1
  788. package/esm2022/file-upload/lib/file-upload/file-upload.types.js +0 -1
  789. package/esm2022/file-upload/lib/file-upload/file-upload.types.js.map +0 -1
  790. package/esm2022/file-upload/lib/file-upload-action.js +0 -65
  791. package/esm2022/file-upload/lib/file-upload-action.js.map +0 -1
  792. package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js +0 -55
  793. package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js.map +0 -1
  794. package/esm2022/file-upload/malva-ui-core-file-upload.js +0 -5
  795. package/esm2022/file-upload/malva-ui-core-file-upload.js.map +0 -1
  796. package/esm2022/filter/index.js +0 -4
  797. package/esm2022/filter/index.js.map +0 -1
  798. package/esm2022/filter/lib/filter/filter.js +0 -552
  799. package/esm2022/filter/lib/filter/filter.js.map +0 -1
  800. package/esm2022/filter/lib/filter.types.js +0 -1
  801. package/esm2022/filter/lib/filter.types.js.map +0 -1
  802. package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js +0 -518
  803. package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js.map +0 -1
  804. package/esm2022/filter/malva-ui-core-filter.js +0 -5
  805. package/esm2022/filter/malva-ui-core-filter.js.map +0 -1
  806. package/esm2022/form/index.js +0 -7
  807. package/esm2022/form/index.js.map +0 -1
  808. package/esm2022/form/lib/fieldset/fieldset.js +0 -101
  809. package/esm2022/form/lib/fieldset/fieldset.js.map +0 -1
  810. package/esm2022/form/lib/fieldset-span.js +0 -49
  811. package/esm2022/form/lib/fieldset-span.js.map +0 -1
  812. package/esm2022/form/lib/form/form.js +0 -60
  813. package/esm2022/form/lib/form/form.js.map +0 -1
  814. package/esm2022/form/lib/form-actions.js +0 -34
  815. package/esm2022/form/lib/form-actions.js.map +0 -1
  816. package/esm2022/form/lib/form-gap.js +0 -15
  817. package/esm2022/form/lib/form-gap.js.map +0 -1
  818. package/esm2022/form/lib/form-header.js +0 -27
  819. package/esm2022/form/lib/form-header.js.map +0 -1
  820. package/esm2022/form/lib/form.types.js +0 -1
  821. package/esm2022/form/lib/form.types.js.map +0 -1
  822. package/esm2022/form/malva-ui-core-form.js +0 -5
  823. package/esm2022/form/malva-ui-core-form.js.map +0 -1
  824. package/esm2022/form-utils/index.js +0 -16
  825. package/esm2022/form-utils/index.js.map +0 -1
  826. package/esm2022/form-utils/lib/aria-value-bridge.js +0 -57
  827. package/esm2022/form-utils/lib/aria-value-bridge.js.map +0 -1
  828. package/esm2022/form-utils/lib/description/description.js +0 -24
  829. package/esm2022/form-utils/lib/description/description.js.map +0 -1
  830. package/esm2022/form-utils/lib/focusable-group-base.js +0 -87
  831. package/esm2022/form-utils/lib/focusable-group-base.js.map +0 -1
  832. package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js +0 -192
  833. package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js.map +0 -1
  834. package/esm2022/form-utils/lib/form-control-sides.js +0 -34
  835. package/esm2022/form-utils/lib/form-control-sides.js.map +0 -1
  836. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js +0 -14
  837. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js.map +0 -1
  838. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js +0 -47
  839. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js.map +0 -1
  840. package/esm2022/form-utils/lib/form-field/form-field.js +0 -245
  841. package/esm2022/form-utils/lib/form-field/form-field.js.map +0 -1
  842. package/esm2022/form-utils/lib/hint/hint.js +0 -11
  843. package/esm2022/form-utils/lib/hint/hint.js.map +0 -1
  844. package/esm2022/form-utils/lib/label/label.js +0 -55
  845. package/esm2022/form-utils/lib/label/label.js.map +0 -1
  846. package/esm2022/form-utils/lib/message/message.js +0 -20
  847. package/esm2022/form-utils/lib/message/message.js.map +0 -1
  848. package/esm2022/form-utils/lib/models/error-display-strategy.js +0 -1
  849. package/esm2022/form-utils/lib/models/error-display-strategy.js.map +0 -1
  850. package/esm2022/form-utils/lib/models/form-control-connector.js +0 -3
  851. package/esm2022/form-utils/lib/models/form-control-connector.js.map +0 -1
  852. package/esm2022/form-utils/lib/models/form-state.js +0 -1
  853. package/esm2022/form-utils/lib/models/form-state.js.map +0 -1
  854. package/esm2022/form-utils/lib/selection.service.js +0 -81
  855. package/esm2022/form-utils/lib/selection.service.js.map +0 -1
  856. package/esm2022/form-utils/malva-ui-core-form-utils.js +0 -5
  857. package/esm2022/form-utils/malva-ui-core-form-utils.js.map +0 -1
  858. package/esm2022/form-utils/testing/index.js +0 -2
  859. package/esm2022/form-utils/testing/index.js.map +0 -1
  860. package/esm2022/form-utils/testing/lib/forms-binding-matrix.js +0 -32
  861. package/esm2022/form-utils/testing/lib/forms-binding-matrix.js.map +0 -1
  862. package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js +0 -5
  863. package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js.map +0 -1
  864. package/esm2022/index.js +0 -70
  865. package/esm2022/index.js.map +0 -1
  866. package/esm2022/input/index.js +0 -4
  867. package/esm2022/input/index.js.map +0 -1
  868. package/esm2022/input/lib/input/input-native.js +0 -49
  869. package/esm2022/input/lib/input/input-native.js.map +0 -1
  870. package/esm2022/input/lib/input/input-value-accessor.js +0 -4
  871. package/esm2022/input/lib/input/input-value-accessor.js.map +0 -1
  872. package/esm2022/input/lib/input/input.js +0 -277
  873. package/esm2022/input/lib/input/input.js.map +0 -1
  874. package/esm2022/input/lib/input/password-strength.js +0 -46
  875. package/esm2022/input/lib/input/password-strength.js.map +0 -1
  876. package/esm2022/input/malva-ui-core-input.js +0 -5
  877. package/esm2022/input/malva-ui-core-input.js.map +0 -1
  878. package/esm2022/kbd/index.js +0 -2
  879. package/esm2022/kbd/index.js.map +0 -1
  880. package/esm2022/kbd/lib/kbd/kbd.js +0 -124
  881. package/esm2022/kbd/lib/kbd/kbd.js.map +0 -1
  882. package/esm2022/kbd/malva-ui-core-kbd.js +0 -5
  883. package/esm2022/kbd/malva-ui-core-kbd.js.map +0 -1
  884. package/esm2022/layout/index.js +0 -5
  885. package/esm2022/layout/index.js.map +0 -1
  886. package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js +0 -14
  887. package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js.map +0 -1
  888. package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js +0 -14
  889. package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js.map +0 -1
  890. package/esm2022/layout/lib/layout/layout.js +0 -43
  891. package/esm2022/layout/lib/layout/layout.js.map +0 -1
  892. package/esm2022/layout/lib/layout/services/theme.service.js +0 -121
  893. package/esm2022/layout/lib/layout/services/theme.service.js.map +0 -1
  894. package/esm2022/layout/malva-ui-core-layout.js +0 -5
  895. package/esm2022/layout/malva-ui-core-layout.js.map +0 -1
  896. package/esm2022/link/index.js +0 -3
  897. package/esm2022/link/index.js.map +0 -1
  898. package/esm2022/link/lib/link/link.directives.js +0 -24
  899. package/esm2022/link/lib/link/link.directives.js.map +0 -1
  900. package/esm2022/link/lib/link/link.js +0 -61
  901. package/esm2022/link/lib/link/link.js.map +0 -1
  902. package/esm2022/link/malva-ui-core-link.js +0 -5
  903. package/esm2022/link/malva-ui-core-link.js.map +0 -1
  904. package/esm2022/list/index.js +0 -14
  905. package/esm2022/list/index.js.map +0 -1
  906. package/esm2022/list/lib/list/list.js +0 -28
  907. package/esm2022/list/lib/list/list.js.map +0 -1
  908. package/esm2022/list/lib/list-item/list-item.js +0 -125
  909. package/esm2022/list/lib/list-item/list-item.js.map +0 -1
  910. package/esm2022/list/lib/list-item-actions.js +0 -23
  911. package/esm2022/list/lib/list-item-actions.js.map +0 -1
  912. package/esm2022/list/lib/list-item-byline.js +0 -13
  913. package/esm2022/list/lib/list-item-byline.js.map +0 -1
  914. package/esm2022/list/lib/list-item-group/list-item-group.js +0 -25
  915. package/esm2022/list/lib/list-item-group/list-item-group.js.map +0 -1
  916. package/esm2022/list/lib/list-item-link/list-item-link.js +0 -20
  917. package/esm2022/list/lib/list-item-link/list-item-link.js.map +0 -1
  918. package/esm2022/list/lib/list-item-media.js +0 -13
  919. package/esm2022/list/lib/list-item-media.js.map +0 -1
  920. package/esm2022/list/lib/list-item-meta.js +0 -13
  921. package/esm2022/list/lib/list-item-meta.js.map +0 -1
  922. package/esm2022/list/lib/list-item-prefix.js +0 -13
  923. package/esm2022/list/lib/list-item-prefix.js.map +0 -1
  924. package/esm2022/list/lib/list-item-suffix.js +0 -13
  925. package/esm2022/list/lib/list-item-suffix.js.map +0 -1
  926. package/esm2022/list/lib/list-item-template.js +0 -14
  927. package/esm2022/list/lib/list-item-template.js.map +0 -1
  928. package/esm2022/list/lib/list-item-title.js +0 -13
  929. package/esm2022/list/lib/list-item-title.js.map +0 -1
  930. package/esm2022/list/lib/list-selectable.js +0 -116
  931. package/esm2022/list/lib/list-selectable.js.map +0 -1
  932. package/esm2022/list/malva-ui-core-list.js +0 -5
  933. package/esm2022/list/malva-ui-core-list.js.map +0 -1
  934. package/esm2022/loader/index.js +0 -2
  935. package/esm2022/loader/index.js.map +0 -1
  936. package/esm2022/loader/lib/loader/loader.js +0 -134
  937. package/esm2022/loader/lib/loader/loader.js.map +0 -1
  938. package/esm2022/loader/malva-ui-core-loader.js +0 -5
  939. package/esm2022/loader/malva-ui-core-loader.js.map +0 -1
  940. package/esm2022/malva-ui-core.js +0 -5
  941. package/esm2022/malva-ui-core.js.map +0 -1
  942. package/esm2022/menu/index.js +0 -10
  943. package/esm2022/menu/index.js.map +0 -1
  944. package/esm2022/menu/lib/menu/menu-group-label.js +0 -35
  945. package/esm2022/menu/lib/menu/menu-group-label.js.map +0 -1
  946. package/esm2022/menu/lib/menu/menu-group.js +0 -44
  947. package/esm2022/menu/lib/menu/menu-group.js.map +0 -1
  948. package/esm2022/menu/lib/menu/menu-item.js +0 -117
  949. package/esm2022/menu/lib/menu/menu-item.js.map +0 -1
  950. package/esm2022/menu/lib/menu/menu-separator.js +0 -41
  951. package/esm2022/menu/lib/menu/menu-separator.js.map +0 -1
  952. package/esm2022/menu/lib/menu/menu-trigger.js +0 -653
  953. package/esm2022/menu/lib/menu/menu-trigger.js.map +0 -1
  954. package/esm2022/menu/lib/menu/menu.js +0 -308
  955. package/esm2022/menu/lib/menu/menu.js.map +0 -1
  956. package/esm2022/menu/lib/menu/menu.types.js +0 -4
  957. package/esm2022/menu/lib/menu/menu.types.js.map +0 -1
  958. package/esm2022/menu/lib/menu/menubar.js +0 -257
  959. package/esm2022/menu/lib/menu/menubar.js.map +0 -1
  960. package/esm2022/menu/lib/menu/menubar.types.js +0 -4
  961. package/esm2022/menu/lib/menu/menubar.types.js.map +0 -1
  962. package/esm2022/menu/lib/menu/submenu-aim.js +0 -30
  963. package/esm2022/menu/lib/menu/submenu-aim.js.map +0 -1
  964. package/esm2022/menu/malva-ui-core-menu.js +0 -5
  965. package/esm2022/menu/malva-ui-core-menu.js.map +0 -1
  966. package/esm2022/notification/index.js +0 -5
  967. package/esm2022/notification/index.js.map +0 -1
  968. package/esm2022/notification/lib/notification-item/notification-item.js +0 -65
  969. package/esm2022/notification/lib/notification-item/notification-item.js.map +0 -1
  970. package/esm2022/notification/lib/notification-ref.js +0 -13
  971. package/esm2022/notification/lib/notification-ref.js.map +0 -1
  972. package/esm2022/notification/lib/notification.service.js +0 -118
  973. package/esm2022/notification/lib/notification.service.js.map +0 -1
  974. package/esm2022/notification/lib/notification.types.js +0 -6
  975. package/esm2022/notification/lib/notification.types.js.map +0 -1
  976. package/esm2022/notification/malva-ui-core-notification.js +0 -5
  977. package/esm2022/notification/malva-ui-core-notification.js.map +0 -1
  978. package/esm2022/number-input/index.js +0 -2
  979. package/esm2022/number-input/index.js.map +0 -1
  980. package/esm2022/number-input/lib/number-input/number-input.js +0 -395
  981. package/esm2022/number-input/lib/number-input/number-input.js.map +0 -1
  982. package/esm2022/number-input/malva-ui-core-number-input.js +0 -5
  983. package/esm2022/number-input/malva-ui-core-number-input.js.map +0 -1
  984. package/esm2022/page/index.js +0 -15
  985. package/esm2022/page/index.js.map +0 -1
  986. package/esm2022/page/lib/page/page-scroll.token.js +0 -9
  987. package/esm2022/page/lib/page/page-scroll.token.js.map +0 -1
  988. package/esm2022/page/lib/page/page-snap-controller.js +0 -170
  989. package/esm2022/page/lib/page/page-snap-controller.js.map +0 -1
  990. package/esm2022/page/lib/page/page-snap.directive.js +0 -65
  991. package/esm2022/page/lib/page/page-snap.directive.js.map +0 -1
  992. package/esm2022/page/lib/page/page.js +0 -173
  993. package/esm2022/page/lib/page/page.js.map +0 -1
  994. package/esm2022/page/lib/page-content/page-aside.js +0 -13
  995. package/esm2022/page/lib/page-content/page-aside.js.map +0 -1
  996. package/esm2022/page/lib/page-content/page-content.js +0 -72
  997. package/esm2022/page/lib/page-content/page-content.js.map +0 -1
  998. package/esm2022/page/lib/page-dock/page-dock.js +0 -128
  999. package/esm2022/page/lib/page-dock/page-dock.js.map +0 -1
  1000. package/esm2022/page/lib/page-dock/page-dock.slots.js +0 -39
  1001. package/esm2022/page/lib/page-dock/page-dock.slots.js.map +0 -1
  1002. package/esm2022/page/lib/page-header/page-header.directives.js +0 -88
  1003. package/esm2022/page/lib/page-header/page-header.directives.js.map +0 -1
  1004. package/esm2022/page/lib/page-header/page-header.js +0 -124
  1005. package/esm2022/page/lib/page-header/page-header.js.map +0 -1
  1006. package/esm2022/page/lib/page-shell/page-shell-color.js +0 -193
  1007. package/esm2022/page/lib/page-shell/page-shell-color.js.map +0 -1
  1008. package/esm2022/page/lib/page-shell/page-shell-css-color.js +0 -207
  1009. package/esm2022/page/lib/page-shell/page-shell-css-color.js.map +0 -1
  1010. package/esm2022/page/lib/page-shell/page-shell.js +0 -131
  1011. package/esm2022/page/lib/page-shell/page-shell.js.map +0 -1
  1012. package/esm2022/page/lib/page-shell/page-shell.slots.js +0 -41
  1013. package/esm2022/page/lib/page-shell/page-shell.slots.js.map +0 -1
  1014. package/esm2022/page/lib/page-summary/page-summary-item.js +0 -26
  1015. package/esm2022/page/lib/page-summary/page-summary-item.js.map +0 -1
  1016. package/esm2022/page/lib/page-summary/page-summary.js +0 -87
  1017. package/esm2022/page/lib/page-summary/page-summary.js.map +0 -1
  1018. package/esm2022/page/malva-ui-core-page.js +0 -5
  1019. package/esm2022/page/malva-ui-core-page.js.map +0 -1
  1020. package/esm2022/pagination/index.js +0 -5
  1021. package/esm2022/pagination/index.js.map +0 -1
  1022. package/esm2022/pagination/lib/pagination/pagination.directives.js +0 -58
  1023. package/esm2022/pagination/lib/pagination/pagination.directives.js.map +0 -1
  1024. package/esm2022/pagination/lib/pagination/pagination.js +0 -293
  1025. package/esm2022/pagination/lib/pagination/pagination.js.map +0 -1
  1026. package/esm2022/pagination/lib/pagination/pagination.model.js +0 -1
  1027. package/esm2022/pagination/lib/pagination/pagination.model.js.map +0 -1
  1028. package/esm2022/pagination/lib/pagination/pagination.service.js +0 -108
  1029. package/esm2022/pagination/lib/pagination/pagination.service.js.map +0 -1
  1030. package/esm2022/pagination/malva-ui-core-pagination.js +0 -5
  1031. package/esm2022/pagination/malva-ui-core-pagination.js.map +0 -1
  1032. package/esm2022/pin-input/index.js +0 -3
  1033. package/esm2022/pin-input/index.js.map +0 -1
  1034. package/esm2022/pin-input/lib/pin-input/pin-input-separator.js +0 -31
  1035. package/esm2022/pin-input/lib/pin-input/pin-input-separator.js.map +0 -1
  1036. package/esm2022/pin-input/lib/pin-input/pin-input.js +0 -365
  1037. package/esm2022/pin-input/lib/pin-input/pin-input.js.map +0 -1
  1038. package/esm2022/pin-input/malva-ui-core-pin-input.js +0 -5
  1039. package/esm2022/pin-input/malva-ui-core-pin-input.js.map +0 -1
  1040. package/esm2022/popup/index.js +0 -10
  1041. package/esm2022/popup/index.js.map +0 -1
  1042. package/esm2022/popup/lib/popup/popup.js +0 -500
  1043. package/esm2022/popup/lib/popup/popup.js.map +0 -1
  1044. package/esm2022/popup/lib/popup-container/popup-container.js +0 -169
  1045. package/esm2022/popup/lib/popup-container/popup-container.js.map +0 -1
  1046. package/esm2022/popup/lib/popup-container/popup-container.token.js +0 -9
  1047. package/esm2022/popup/lib/popup-container/popup-container.token.js.map +0 -1
  1048. package/esm2022/popup/lib/popup-content.js +0 -14
  1049. package/esm2022/popup/lib/popup-content.js.map +0 -1
  1050. package/esm2022/popup/lib/popup-header-content.js +0 -26
  1051. package/esm2022/popup/lib/popup-header-content.js.map +0 -1
  1052. package/esm2022/popup/lib/popup-pinned-content.js +0 -25
  1053. package/esm2022/popup/lib/popup-pinned-content.js.map +0 -1
  1054. package/esm2022/popup/lib/popup-positions.js +0 -252
  1055. package/esm2022/popup/lib/popup-positions.js.map +0 -1
  1056. package/esm2022/popup/lib/popup-trigger/popup-trigger.js +0 -308
  1057. package/esm2022/popup/lib/popup-trigger/popup-trigger.js.map +0 -1
  1058. package/esm2022/popup/lib/popup.service.js +0 -188
  1059. package/esm2022/popup/lib/popup.service.js.map +0 -1
  1060. package/esm2022/popup/malva-ui-core-popup.js +0 -5
  1061. package/esm2022/popup/malva-ui-core-popup.js.map +0 -1
  1062. package/esm2022/progress/index.js +0 -2
  1063. package/esm2022/progress/index.js.map +0 -1
  1064. package/esm2022/progress/lib/progress/progress.js +0 -102
  1065. package/esm2022/progress/lib/progress/progress.js.map +0 -1
  1066. package/esm2022/progress/malva-ui-core-progress.js +0 -5
  1067. package/esm2022/progress/malva-ui-core-progress.js.map +0 -1
  1068. package/esm2022/radio/index.js +0 -3
  1069. package/esm2022/radio/index.js.map +0 -1
  1070. package/esm2022/radio/lib/radio/radio.js +0 -134
  1071. package/esm2022/radio/lib/radio/radio.js.map +0 -1
  1072. package/esm2022/radio/lib/radio-group/radio-group.js +0 -176
  1073. package/esm2022/radio/lib/radio-group/radio-group.js.map +0 -1
  1074. package/esm2022/radio/lib/radio-group-token.js +0 -3
  1075. package/esm2022/radio/lib/radio-group-token.js.map +0 -1
  1076. package/esm2022/radio/malva-ui-core-radio.js +0 -5
  1077. package/esm2022/radio/malva-ui-core-radio.js.map +0 -1
  1078. package/esm2022/rating/index.js +0 -2
  1079. package/esm2022/rating/index.js.map +0 -1
  1080. package/esm2022/rating/lib/rating/rating.js +0 -208
  1081. package/esm2022/rating/lib/rating/rating.js.map +0 -1
  1082. package/esm2022/rating/malva-ui-core-rating.js +0 -5
  1083. package/esm2022/rating/malva-ui-core-rating.js.map +0 -1
  1084. package/esm2022/scrollbar/index.js +0 -2
  1085. package/esm2022/scrollbar/index.js.map +0 -1
  1086. package/esm2022/scrollbar/lib/scrollbar/scrollbar.js +0 -388
  1087. package/esm2022/scrollbar/lib/scrollbar/scrollbar.js.map +0 -1
  1088. package/esm2022/scrollbar/malva-ui-core-scrollbar.js +0 -5
  1089. package/esm2022/scrollbar/malva-ui-core-scrollbar.js.map +0 -1
  1090. package/esm2022/search-field/index.js +0 -3
  1091. package/esm2022/search-field/index.js.map +0 -1
  1092. package/esm2022/search-field/lib/search-field/search-field.js +0 -535
  1093. package/esm2022/search-field/lib/search-field/search-field.js.map +0 -1
  1094. package/esm2022/search-field/lib/search-field/search-overlay-content.js +0 -35
  1095. package/esm2022/search-field/lib/search-field/search-overlay-content.js.map +0 -1
  1096. package/esm2022/search-field/malva-ui-core-search-field.js +0 -5
  1097. package/esm2022/search-field/malva-ui-core-search-field.js.map +0 -1
  1098. package/esm2022/segmented/index.js +0 -5
  1099. package/esm2022/segmented/index.js.map +0 -1
  1100. package/esm2022/segmented/lib/segmented/segmented.js +0 -248
  1101. package/esm2022/segmented/lib/segmented/segmented.js.map +0 -1
  1102. package/esm2022/segmented/lib/segmented-item/segmented-item.js +0 -194
  1103. package/esm2022/segmented/lib/segmented-item/segmented-item.js.map +0 -1
  1104. package/esm2022/segmented/lib/segmented-token.js +0 -4
  1105. package/esm2022/segmented/lib/segmented-token.js.map +0 -1
  1106. package/esm2022/segmented/lib/segmented.types.js +0 -1
  1107. package/esm2022/segmented/lib/segmented.types.js.map +0 -1
  1108. package/esm2022/segmented/malva-ui-core-segmented.js +0 -5
  1109. package/esm2022/segmented/malva-ui-core-segmented.js.map +0 -1
  1110. package/esm2022/select/index.js +0 -4
  1111. package/esm2022/select/index.js.map +0 -1
  1112. package/esm2022/select/lib/select/select.js +0 -685
  1113. package/esm2022/select/lib/select/select.js.map +0 -1
  1114. package/esm2022/select/lib/select-option.js +0 -2
  1115. package/esm2022/select/lib/select-option.js.map +0 -1
  1116. package/esm2022/select/lib/select-template.directives.js +0 -34
  1117. package/esm2022/select/lib/select-template.directives.js.map +0 -1
  1118. package/esm2022/select/malva-ui-core-select.js +0 -5
  1119. package/esm2022/select/malva-ui-core-select.js.map +0 -1
  1120. package/esm2022/sidebar/index.js +0 -16
  1121. package/esm2022/sidebar/index.js.map +0 -1
  1122. package/esm2022/sidebar/lib/sidebar/sidebar.js +0 -251
  1123. package/esm2022/sidebar/lib/sidebar/sidebar.js.map +0 -1
  1124. package/esm2022/sidebar/lib/sidebar-content.js +0 -37
  1125. package/esm2022/sidebar/lib/sidebar-content.js.map +0 -1
  1126. package/esm2022/sidebar/lib/sidebar-context.js +0 -3
  1127. package/esm2022/sidebar/lib/sidebar-context.js.map +0 -1
  1128. package/esm2022/sidebar/lib/sidebar-footer.js +0 -20
  1129. package/esm2022/sidebar/lib/sidebar-footer.js.map +0 -1
  1130. package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js +0 -341
  1131. package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js.map +0 -1
  1132. package/esm2022/sidebar/lib/sidebar-header.js +0 -20
  1133. package/esm2022/sidebar/lib/sidebar-header.js.map +0 -1
  1134. package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js +0 -216
  1135. package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js.map +0 -1
  1136. package/esm2022/sidebar/lib/sidebar-item-host.js +0 -39
  1137. package/esm2022/sidebar/lib/sidebar-item-host.js.map +0 -1
  1138. package/esm2022/sidebar/lib/sidebar-item-icon.js +0 -14
  1139. package/esm2022/sidebar/lib/sidebar-item-icon.js.map +0 -1
  1140. package/esm2022/sidebar/lib/sidebar-mode.js +0 -1
  1141. package/esm2022/sidebar/lib/sidebar-mode.js.map +0 -1
  1142. package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js +0 -202
  1143. package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js.map +0 -1
  1144. package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js +0 -159
  1145. package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js.map +0 -1
  1146. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js +0 -35
  1147. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js.map +0 -1
  1148. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js +0 -107
  1149. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js.map +0 -1
  1150. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js +0 -1
  1151. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js.map +0 -1
  1152. package/esm2022/sidebar/malva-ui-core-sidebar.js +0 -5
  1153. package/esm2022/sidebar/malva-ui-core-sidebar.js.map +0 -1
  1154. package/esm2022/skeleton/index.js +0 -2
  1155. package/esm2022/skeleton/index.js.map +0 -1
  1156. package/esm2022/skeleton/lib/skeleton/skeleton.js +0 -78
  1157. package/esm2022/skeleton/lib/skeleton/skeleton.js.map +0 -1
  1158. package/esm2022/skeleton/malva-ui-core-skeleton.js +0 -5
  1159. package/esm2022/skeleton/malva-ui-core-skeleton.js.map +0 -1
  1160. package/esm2022/slider/index.js +0 -3
  1161. package/esm2022/slider/index.js.map +0 -1
  1162. package/esm2022/slider/lib/slider/slider-tooltip-def.js +0 -31
  1163. package/esm2022/slider/lib/slider/slider-tooltip-def.js.map +0 -1
  1164. package/esm2022/slider/lib/slider/slider.js +0 -468
  1165. package/esm2022/slider/lib/slider/slider.js.map +0 -1
  1166. package/esm2022/slider/malva-ui-core-slider.js +0 -5
  1167. package/esm2022/slider/malva-ui-core-slider.js.map +0 -1
  1168. package/esm2022/split-pane/index.js +0 -4
  1169. package/esm2022/split-pane/index.js.map +0 -1
  1170. package/esm2022/split-pane/lib/split-pane/split-pane-panel.js +0 -49
  1171. package/esm2022/split-pane/lib/split-pane/split-pane-panel.js.map +0 -1
  1172. package/esm2022/split-pane/lib/split-pane/split-pane.js +0 -290
  1173. package/esm2022/split-pane/lib/split-pane/split-pane.js.map +0 -1
  1174. package/esm2022/split-pane/lib/split-pane/split-pane.types.js +0 -1
  1175. package/esm2022/split-pane/lib/split-pane/split-pane.types.js.map +0 -1
  1176. package/esm2022/split-pane/malva-ui-core-split-pane.js +0 -5
  1177. package/esm2022/split-pane/malva-ui-core-split-pane.js.map +0 -1
  1178. package/esm2022/status-indicator/index.js +0 -2
  1179. package/esm2022/status-indicator/index.js.map +0 -1
  1180. package/esm2022/status-indicator/lib/status-indicator/status-indicator.js +0 -71
  1181. package/esm2022/status-indicator/lib/status-indicator/status-indicator.js.map +0 -1
  1182. package/esm2022/status-indicator/malva-ui-core-status-indicator.js +0 -5
  1183. package/esm2022/status-indicator/malva-ui-core-status-indicator.js.map +0 -1
  1184. package/esm2022/stepper/index.js +0 -5
  1185. package/esm2022/stepper/index.js.map +0 -1
  1186. package/esm2022/stepper/lib/stepper/step-header.js +0 -46
  1187. package/esm2022/stepper/lib/stepper/step-header.js.map +0 -1
  1188. package/esm2022/stepper/lib/stepper/step.js +0 -65
  1189. package/esm2022/stepper/lib/stepper/step.js.map +0 -1
  1190. package/esm2022/stepper/lib/stepper/stepper-token.js +0 -4
  1191. package/esm2022/stepper/lib/stepper/stepper-token.js.map +0 -1
  1192. package/esm2022/stepper/lib/stepper/stepper.js +0 -216
  1193. package/esm2022/stepper/lib/stepper/stepper.js.map +0 -1
  1194. package/esm2022/stepper/lib/stepper/stepper.types.js +0 -1
  1195. package/esm2022/stepper/lib/stepper/stepper.types.js.map +0 -1
  1196. package/esm2022/stepper/malva-ui-core-stepper.js +0 -5
  1197. package/esm2022/stepper/malva-ui-core-stepper.js.map +0 -1
  1198. package/esm2022/switch/index.js +0 -3
  1199. package/esm2022/switch/index.js.map +0 -1
  1200. package/esm2022/switch/lib/switch/switch.js +0 -190
  1201. package/esm2022/switch/lib/switch/switch.js.map +0 -1
  1202. package/esm2022/switch/lib/switch-group/switch-group.js +0 -68
  1203. package/esm2022/switch/lib/switch-group/switch-group.js.map +0 -1
  1204. package/esm2022/switch/lib/switch-group-token.js +0 -3
  1205. package/esm2022/switch/lib/switch-group-token.js.map +0 -1
  1206. package/esm2022/switch/malva-ui-core-switch.js +0 -5
  1207. package/esm2022/switch/malva-ui-core-switch.js.map +0 -1
  1208. package/esm2022/tabs/index.js +0 -9
  1209. package/esm2022/tabs/index.js.map +0 -1
  1210. package/esm2022/tabs/lib/tab/tab.js +0 -72
  1211. package/esm2022/tabs/lib/tab/tab.js.map +0 -1
  1212. package/esm2022/tabs/lib/tab-content/tab-content.js +0 -19
  1213. package/esm2022/tabs/lib/tab-content/tab-content.js.map +0 -1
  1214. package/esm2022/tabs/lib/tab-content-def.js +0 -14
  1215. package/esm2022/tabs/lib/tab-content-def.js.map +0 -1
  1216. package/esm2022/tabs/lib/tab-def.js +0 -17
  1217. package/esm2022/tabs/lib/tab-def.js.map +0 -1
  1218. package/esm2022/tabs/lib/tab-group-token.js +0 -3
  1219. package/esm2022/tabs/lib/tab-group-token.js.map +0 -1
  1220. package/esm2022/tabs/lib/tab-item/tab-item.js +0 -44
  1221. package/esm2022/tabs/lib/tab-item/tab-item.js.map +0 -1
  1222. package/esm2022/tabs/lib/tabs/tabs.js +0 -542
  1223. package/esm2022/tabs/lib/tabs/tabs.js.map +0 -1
  1224. package/esm2022/tabs/lib/tabs.service.js +0 -83
  1225. package/esm2022/tabs/lib/tabs.service.js.map +0 -1
  1226. package/esm2022/tabs/malva-ui-core-tabs.js +0 -5
  1227. package/esm2022/tabs/malva-ui-core-tabs.js.map +0 -1
  1228. package/esm2022/textarea/index.js +0 -2
  1229. package/esm2022/textarea/index.js.map +0 -1
  1230. package/esm2022/textarea/lib/textarea/textarea.js +0 -194
  1231. package/esm2022/textarea/lib/textarea/textarea.js.map +0 -1
  1232. package/esm2022/textarea/malva-ui-core-textarea.js +0 -5
  1233. package/esm2022/textarea/malva-ui-core-textarea.js.map +0 -1
  1234. package/esm2022/tile/index.js +0 -3
  1235. package/esm2022/tile/index.js.map +0 -1
  1236. package/esm2022/tile/lib/tile/tile.js +0 -39
  1237. package/esm2022/tile/lib/tile/tile.js.map +0 -1
  1238. package/esm2022/tile/lib/tile-header.js +0 -14
  1239. package/esm2022/tile/lib/tile-header.js.map +0 -1
  1240. package/esm2022/tile/malva-ui-core-tile.js +0 -5
  1241. package/esm2022/tile/malva-ui-core-tile.js.map +0 -1
  1242. package/esm2022/time-picker/index.js +0 -2
  1243. package/esm2022/time-picker/index.js.map +0 -1
  1244. package/esm2022/time-picker/lib/time-picker/time-picker.js +0 -310
  1245. package/esm2022/time-picker/lib/time-picker/time-picker.js.map +0 -1
  1246. package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js +0 -216
  1247. package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js.map +0 -1
  1248. package/esm2022/time-picker/malva-ui-core-time-picker.js +0 -5
  1249. package/esm2022/time-picker/malva-ui-core-time-picker.js.map +0 -1
  1250. package/esm2022/timeline/index.js +0 -6
  1251. package/esm2022/timeline/index.js.map +0 -1
  1252. package/esm2022/timeline/lib/timeline/timeline-item-icon.js +0 -31
  1253. package/esm2022/timeline/lib/timeline/timeline-item-icon.js.map +0 -1
  1254. package/esm2022/timeline/lib/timeline/timeline-item-meta.js +0 -31
  1255. package/esm2022/timeline/lib/timeline/timeline-item-meta.js.map +0 -1
  1256. package/esm2022/timeline/lib/timeline/timeline-item.js +0 -69
  1257. package/esm2022/timeline/lib/timeline/timeline-item.js.map +0 -1
  1258. package/esm2022/timeline/lib/timeline/timeline.js +0 -36
  1259. package/esm2022/timeline/lib/timeline/timeline.js.map +0 -1
  1260. package/esm2022/timeline/lib/timeline/timeline.types.js +0 -1
  1261. package/esm2022/timeline/lib/timeline/timeline.types.js.map +0 -1
  1262. package/esm2022/timeline/malva-ui-core-timeline.js +0 -5
  1263. package/esm2022/timeline/malva-ui-core-timeline.js.map +0 -1
  1264. package/esm2022/title/index.js +0 -2
  1265. package/esm2022/title/index.js.map +0 -1
  1266. package/esm2022/title/lib/title/title.js +0 -171
  1267. package/esm2022/title/lib/title/title.js.map +0 -1
  1268. package/esm2022/title/malva-ui-core-title.js +0 -5
  1269. package/esm2022/title/malva-ui-core-title.js.map +0 -1
  1270. package/esm2022/toast/index.js +0 -13
  1271. package/esm2022/toast/index.js.map +0 -1
  1272. package/esm2022/toast/lib/abstract-toast-container.js +0 -50
  1273. package/esm2022/toast/lib/abstract-toast-container.js.map +0 -1
  1274. package/esm2022/toast/lib/abstract-toast-item.js +0 -75
  1275. package/esm2022/toast/lib/abstract-toast-item.js.map +0 -1
  1276. package/esm2022/toast/lib/abstract-toast.service.js +0 -176
  1277. package/esm2022/toast/lib/abstract-toast.service.js.map +0 -1
  1278. package/esm2022/toast/lib/toast-container/toast-container.js +0 -61
  1279. package/esm2022/toast/lib/toast-container/toast-container.js.map +0 -1
  1280. package/esm2022/toast/lib/toast-item/toast-item.js +0 -62
  1281. package/esm2022/toast/lib/toast-item/toast-item.js.map +0 -1
  1282. package/esm2022/toast/lib/toast-ref.js +0 -54
  1283. package/esm2022/toast/lib/toast-ref.js.map +0 -1
  1284. package/esm2022/toast/lib/toast-timer.js +0 -37
  1285. package/esm2022/toast/lib/toast-timer.js.map +0 -1
  1286. package/esm2022/toast/lib/toast.directives.js +0 -76
  1287. package/esm2022/toast/lib/toast.directives.js.map +0 -1
  1288. package/esm2022/toast/lib/toast.service.js +0 -127
  1289. package/esm2022/toast/lib/toast.service.js.map +0 -1
  1290. package/esm2022/toast/lib/toast.types.js +0 -39
  1291. package/esm2022/toast/lib/toast.types.js.map +0 -1
  1292. package/esm2022/toast/malva-ui-core-toast.js +0 -5
  1293. package/esm2022/toast/malva-ui-core-toast.js.map +0 -1
  1294. package/esm2022/tokenizer/index.js +0 -4
  1295. package/esm2022/tokenizer/index.js.map +0 -1
  1296. package/esm2022/tokenizer/lib/token/token.js +0 -123
  1297. package/esm2022/tokenizer/lib/token/token.js.map +0 -1
  1298. package/esm2022/tokenizer/lib/token-template.js +0 -23
  1299. package/esm2022/tokenizer/lib/token-template.js.map +0 -1
  1300. package/esm2022/tokenizer/lib/tokenizer/tokenizer.js +0 -324
  1301. package/esm2022/tokenizer/lib/tokenizer/tokenizer.js.map +0 -1
  1302. package/esm2022/tokenizer/malva-ui-core-tokenizer.js +0 -5
  1303. package/esm2022/tokenizer/malva-ui-core-tokenizer.js.map +0 -1
  1304. package/esm2022/toolbar/index.js +0 -4
  1305. package/esm2022/toolbar/index.js.map +0 -1
  1306. package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js +0 -13
  1307. package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js.map +0 -1
  1308. package/esm2022/toolbar/lib/toolbar/toolbar-widget.js +0 -106
  1309. package/esm2022/toolbar/lib/toolbar/toolbar-widget.js.map +0 -1
  1310. package/esm2022/toolbar/lib/toolbar/toolbar.js +0 -19
  1311. package/esm2022/toolbar/lib/toolbar/toolbar.js.map +0 -1
  1312. package/esm2022/toolbar/malva-ui-core-toolbar.js +0 -5
  1313. package/esm2022/toolbar/malva-ui-core-toolbar.js.map +0 -1
  1314. package/esm2022/tooltip/index.js +0 -4
  1315. package/esm2022/tooltip/index.js.map +0 -1
  1316. package/esm2022/tooltip/lib/tooltip/tooltip-panel.js +0 -69
  1317. package/esm2022/tooltip/lib/tooltip/tooltip-panel.js.map +0 -1
  1318. package/esm2022/tooltip/lib/tooltip/tooltip.js +0 -352
  1319. package/esm2022/tooltip/lib/tooltip/tooltip.js.map +0 -1
  1320. package/esm2022/tooltip/lib/tooltip/tooltip.types.js +0 -1
  1321. package/esm2022/tooltip/lib/tooltip/tooltip.types.js.map +0 -1
  1322. package/esm2022/tooltip/malva-ui-core-tooltip.js +0 -5
  1323. package/esm2022/tooltip/malva-ui-core-tooltip.js.map +0 -1
  1324. package/esm2022/tree/index.js +0 -5
  1325. package/esm2022/tree/index.js.map +0 -1
  1326. package/esm2022/tree/lib/tree/tree-context.js +0 -7
  1327. package/esm2022/tree/lib/tree/tree-context.js.map +0 -1
  1328. package/esm2022/tree/lib/tree/tree-node-def.js +0 -34
  1329. package/esm2022/tree/lib/tree/tree-node-def.js.map +0 -1
  1330. package/esm2022/tree/lib/tree/tree-node.js +0 -1
  1331. package/esm2022/tree/lib/tree/tree-node.js.map +0 -1
  1332. package/esm2022/tree/lib/tree/tree-subtree.js +0 -107
  1333. package/esm2022/tree/lib/tree/tree-subtree.js.map +0 -1
  1334. package/esm2022/tree/lib/tree/tree.js +0 -362
  1335. package/esm2022/tree/lib/tree/tree.js.map +0 -1
  1336. package/esm2022/tree/malva-ui-core-tree.js +0 -5
  1337. package/esm2022/tree/malva-ui-core-tree.js.map +0 -1
  1338. package/expand/index.d.ts +0 -2
  1339. package/expand/lib/expand/expand-content.d.ts +0 -26
  1340. package/expand/lib/expand/expand.d.ts +0 -74
  1341. package/expand/malva-ui-core-expand.d.ts +0 -5
  1342. package/file-upload/index.d.ts +0 -4
  1343. package/file-upload/lib/file-upload/file-upload.d.ts +0 -138
  1344. package/file-upload/lib/file-upload/file-upload.types.d.ts +0 -42
  1345. package/file-upload/lib/file-upload-action.d.ts +0 -53
  1346. package/file-upload/lib/file-upload-item/file-upload-item.d.ts +0 -30
  1347. package/file-upload/malva-ui-core-file-upload.d.ts +0 -5
  1348. package/filter/index.d.ts +0 -3
  1349. package/filter/lib/filter/filter.d.ts +0 -156
  1350. package/filter/lib/filter.types.d.ts +0 -75
  1351. package/filter/lib/smart-filter-bar/smart-filter-bar.d.ts +0 -153
  1352. package/filter/malva-ui-core-filter.d.ts +0 -5
  1353. package/form/index.d.ts +0 -6
  1354. package/form/lib/fieldset/fieldset.d.ts +0 -58
  1355. package/form/lib/fieldset-span.d.ts +0 -28
  1356. package/form/lib/form/form.d.ts +0 -37
  1357. package/form/lib/form-actions.d.ts +0 -20
  1358. package/form/lib/form-gap.d.ts +0 -5
  1359. package/form/lib/form-header.d.ts +0 -18
  1360. package/form/lib/form.types.d.ts +0 -13
  1361. package/form/malva-ui-core-form.d.ts +0 -5
  1362. package/form-utils/index.d.ts +0 -15
  1363. package/form-utils/lib/aria-value-bridge.d.ts +0 -45
  1364. package/form-utils/lib/description/description.d.ts +0 -16
  1365. package/form-utils/lib/focusable-group-base.d.ts +0 -76
  1366. package/form-utils/lib/form-control-base/signal-form-control-base.d.ts +0 -159
  1367. package/form-utils/lib/form-control-sides.d.ts +0 -20
  1368. package/form-utils/lib/form-control-wrapper/form-control-wrapper-control.d.ts +0 -6
  1369. package/form-utils/lib/form-control-wrapper/form-control-wrapper.d.ts +0 -20
  1370. package/form-utils/lib/form-field/form-field.d.ts +0 -68
  1371. package/form-utils/lib/hint/hint.d.ts +0 -5
  1372. package/form-utils/lib/label/label.d.ts +0 -22
  1373. package/form-utils/lib/message/message.d.ts +0 -7
  1374. package/form-utils/lib/models/error-display-strategy.d.ts +0 -1
  1375. package/form-utils/lib/models/form-control-connector.d.ts +0 -41
  1376. package/form-utils/lib/models/form-state.d.ts +0 -1
  1377. package/form-utils/lib/selection.service.d.ts +0 -27
  1378. package/form-utils/malva-ui-core-form-utils.d.ts +0 -5
  1379. package/form-utils/testing/index.d.ts +0 -1
  1380. package/form-utils/testing/lib/forms-binding-matrix.d.ts +0 -47
  1381. package/form-utils/testing/malva-ui-core-form-utils-testing.d.ts +0 -5
  1382. package/index.d.ts +0 -69
  1383. package/input/index.d.ts +0 -3
  1384. package/input/lib/input/input-native.d.ts +0 -36
  1385. package/input/lib/input/input-value-accessor.d.ts +0 -11
  1386. package/input/lib/input/input.d.ts +0 -189
  1387. package/input/lib/input/password-strength.d.ts +0 -34
  1388. package/input/malva-ui-core-input.d.ts +0 -5
  1389. package/kbd/index.d.ts +0 -1
  1390. package/kbd/lib/kbd/kbd.d.ts +0 -52
  1391. package/kbd/malva-ui-core-kbd.d.ts +0 -5
  1392. package/layout/index.d.ts +0 -4
  1393. package/layout/lib/layout/directives/MlvLayoutSide.d.ts +0 -6
  1394. package/layout/lib/layout/directives/MlvLayoutTop.d.ts +0 -6
  1395. package/layout/lib/layout/layout.d.ts +0 -20
  1396. package/layout/lib/layout/services/theme.service.d.ts +0 -33
  1397. package/layout/malva-ui-core-layout.d.ts +0 -5
  1398. package/link/index.d.ts +0 -2
  1399. package/link/lib/link/link.d.ts +0 -15
  1400. package/link/lib/link/link.directives.d.ts +0 -10
  1401. package/link/malva-ui-core-link.d.ts +0 -5
  1402. package/list/index.d.ts +0 -13
  1403. package/list/lib/list/list.d.ts +0 -25
  1404. package/list/lib/list-item/list-item.d.ts +0 -67
  1405. package/list/lib/list-item-actions.d.ts +0 -12
  1406. package/list/lib/list-item-byline.d.ts +0 -5
  1407. package/list/lib/list-item-group/list-item-group.d.ts +0 -11
  1408. package/list/lib/list-item-link/list-item-link.d.ts +0 -8
  1409. package/list/lib/list-item-media.d.ts +0 -5
  1410. package/list/lib/list-item-meta.d.ts +0 -5
  1411. package/list/lib/list-item-prefix.d.ts +0 -5
  1412. package/list/lib/list-item-suffix.d.ts +0 -5
  1413. package/list/lib/list-item-template.d.ts +0 -10
  1414. package/list/lib/list-item-title.d.ts +0 -5
  1415. package/list/lib/list-selectable.d.ts +0 -73
  1416. package/list/malva-ui-core-list.d.ts +0 -5
  1417. package/loader/index.d.ts +0 -1
  1418. package/loader/lib/loader/loader.d.ts +0 -84
  1419. package/loader/malva-ui-core-loader.d.ts +0 -5
  1420. package/malva-ui-core.d.ts +0 -5
  1421. package/menu/index.d.ts +0 -9
  1422. package/menu/lib/menu/menu-group-label.d.ts +0 -22
  1423. package/menu/lib/menu/menu-group.d.ts +0 -27
  1424. package/menu/lib/menu/menu-item.d.ts +0 -76
  1425. package/menu/lib/menu/menu-separator.d.ts +0 -18
  1426. package/menu/lib/menu/menu-trigger.d.ts +0 -255
  1427. package/menu/lib/menu/menu.d.ts +0 -149
  1428. package/menu/lib/menu/menu.types.d.ts +0 -13
  1429. package/menu/lib/menu/menubar.d.ts +0 -131
  1430. package/menu/lib/menu/menubar.types.d.ts +0 -82
  1431. package/menu/lib/menu/submenu-aim.d.ts +0 -10
  1432. package/menu/malva-ui-core-menu.d.ts +0 -5
  1433. package/notification/index.d.ts +0 -4
  1434. package/notification/lib/notification-item/notification-item.d.ts +0 -20
  1435. package/notification/lib/notification-ref.d.ts +0 -12
  1436. package/notification/lib/notification.service.d.ts +0 -43
  1437. package/notification/lib/notification.types.d.ts +0 -52
  1438. package/notification/malva-ui-core-notification.d.ts +0 -5
  1439. package/number-input/index.d.ts +0 -1
  1440. package/number-input/lib/number-input/number-input.d.ts +0 -162
  1441. package/number-input/malva-ui-core-number-input.d.ts +0 -5
  1442. package/page/index.d.ts +0 -14
  1443. package/page/lib/page/page-scroll.token.d.ts +0 -19
  1444. package/page/lib/page/page-snap-controller.d.ts +0 -87
  1445. package/page/lib/page/page-snap.directive.d.ts +0 -40
  1446. package/page/lib/page/page.d.ts +0 -74
  1447. package/page/lib/page-content/page-aside.d.ts +0 -7
  1448. package/page/lib/page-content/page-content.d.ts +0 -37
  1449. package/page/lib/page-dock/page-dock.d.ts +0 -50
  1450. package/page/lib/page-dock/page-dock.slots.d.ts +0 -16
  1451. package/page/lib/page-header/page-header.d.ts +0 -77
  1452. package/page/lib/page-header/page-header.directives.d.ts +0 -50
  1453. package/page/lib/page-shell/page-shell-color.d.ts +0 -48
  1454. package/page/lib/page-shell/page-shell-css-color.d.ts +0 -20
  1455. package/page/lib/page-shell/page-shell.d.ts +0 -44
  1456. package/page/lib/page-shell/page-shell.slots.d.ts +0 -16
  1457. package/page/lib/page-summary/page-summary-item.d.ts +0 -11
  1458. package/page/lib/page-summary/page-summary.d.ts +0 -36
  1459. package/page/malva-ui-core-page.d.ts +0 -5
  1460. package/pagination/index.d.ts +0 -4
  1461. package/pagination/lib/pagination/pagination.d.ts +0 -182
  1462. package/pagination/lib/pagination/pagination.directives.d.ts +0 -44
  1463. package/pagination/lib/pagination/pagination.model.d.ts +0 -6
  1464. package/pagination/lib/pagination/pagination.service.d.ts +0 -26
  1465. package/pagination/malva-ui-core-pagination.d.ts +0 -5
  1466. package/pin-input/index.d.ts +0 -2
  1467. package/pin-input/lib/pin-input/pin-input-separator.d.ts +0 -24
  1468. package/pin-input/lib/pin-input/pin-input.d.ts +0 -176
  1469. package/pin-input/malva-ui-core-pin-input.d.ts +0 -5
  1470. package/popup/index.d.ts +0 -9
  1471. package/popup/lib/popup/popup.d.ts +0 -343
  1472. package/popup/lib/popup-container/popup-container.d.ts +0 -61
  1473. package/popup/lib/popup-container/popup-container.token.d.ts +0 -34
  1474. package/popup/lib/popup-content.d.ts +0 -6
  1475. package/popup/lib/popup-header-content.d.ts +0 -18
  1476. package/popup/lib/popup-pinned-content.d.ts +0 -17
  1477. package/popup/lib/popup-positions.d.ts +0 -105
  1478. package/popup/lib/popup-trigger/popup-trigger.d.ts +0 -102
  1479. package/popup/lib/popup.service.d.ts +0 -159
  1480. package/popup/malva-ui-core-popup.d.ts +0 -5
  1481. package/progress/index.d.ts +0 -1
  1482. package/progress/lib/progress/progress.d.ts +0 -69
  1483. package/progress/malva-ui-core-progress.d.ts +0 -5
  1484. package/radio/index.d.ts +0 -2
  1485. package/radio/lib/radio/radio.d.ts +0 -87
  1486. package/radio/lib/radio-group/radio-group.d.ts +0 -35
  1487. package/radio/lib/radio-group-token.d.ts +0 -7
  1488. package/radio/malva-ui-core-radio.d.ts +0 -5
  1489. package/rating/index.d.ts +0 -1
  1490. package/rating/lib/rating/rating.d.ts +0 -100
  1491. package/rating/malva-ui-core-rating.d.ts +0 -5
  1492. package/scrollbar/index.d.ts +0 -1
  1493. package/scrollbar/lib/scrollbar/scrollbar.d.ts +0 -166
  1494. package/scrollbar/malva-ui-core-scrollbar.d.ts +0 -5
  1495. package/search-field/index.d.ts +0 -2
  1496. package/search-field/lib/search-field/search-field.d.ts +0 -347
  1497. package/search-field/lib/search-field/search-overlay-content.d.ts +0 -59
  1498. package/search-field/malva-ui-core-search-field.d.ts +0 -5
  1499. package/segmented/index.d.ts +0 -4
  1500. package/segmented/lib/segmented/segmented.d.ts +0 -80
  1501. package/segmented/lib/segmented-item/segmented-item.d.ts +0 -89
  1502. package/segmented/lib/segmented-token.d.ts +0 -22
  1503. package/segmented/lib/segmented.types.d.ts +0 -9
  1504. package/segmented/malva-ui-core-segmented.d.ts +0 -5
  1505. package/select/index.d.ts +0 -3
  1506. package/select/lib/select/select.d.ts +0 -379
  1507. package/select/lib/select-option.d.ts +0 -1
  1508. package/select/lib/select-template.directives.d.ts +0 -14
  1509. package/select/malva-ui-core-select.d.ts +0 -5
  1510. package/sidebar/index.d.ts +0 -15
  1511. package/sidebar/lib/sidebar/sidebar.d.ts +0 -134
  1512. package/sidebar/lib/sidebar-content.d.ts +0 -11
  1513. package/sidebar/lib/sidebar-context.d.ts +0 -23
  1514. package/sidebar/lib/sidebar-footer.d.ts +0 -9
  1515. package/sidebar/lib/sidebar-group/sidebar-group.d.ts +0 -127
  1516. package/sidebar/lib/sidebar-header.d.ts +0 -9
  1517. package/sidebar/lib/sidebar-item/sidebar-item.d.ts +0 -104
  1518. package/sidebar/lib/sidebar-item-host.d.ts +0 -18
  1519. package/sidebar/lib/sidebar-item-icon.d.ts +0 -6
  1520. package/sidebar/lib/sidebar-mode.d.ts +0 -2
  1521. package/sidebar/lib/sidebar-rail/sidebar-rail.d.ts +0 -54
  1522. package/sidebar/lib/sidebar-trigger/sidebar-trigger.d.ts +0 -67
  1523. package/sidebar/lib/sidebar-workspace/sidebar-workspace.d.ts +0 -54
  1524. package/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.d.ts +0 -19
  1525. package/sidebar/lib/sidebar-workspace/sidebar-workspace.types.d.ts +0 -20
  1526. package/sidebar/malva-ui-core-sidebar.d.ts +0 -5
  1527. package/skeleton/index.d.ts +0 -1
  1528. package/skeleton/lib/skeleton/skeleton.d.ts +0 -60
  1529. package/skeleton/malva-ui-core-skeleton.d.ts +0 -5
  1530. package/slider/index.d.ts +0 -2
  1531. package/slider/lib/slider/slider-tooltip-def.d.ts +0 -39
  1532. package/slider/lib/slider/slider.d.ts +0 -171
  1533. package/slider/malva-ui-core-slider.d.ts +0 -5
  1534. package/split-pane/index.d.ts +0 -3
  1535. package/split-pane/lib/split-pane/split-pane-panel.d.ts +0 -34
  1536. package/split-pane/lib/split-pane/split-pane.d.ts +0 -98
  1537. package/split-pane/lib/split-pane/split-pane.types.d.ts +0 -7
  1538. package/split-pane/malva-ui-core-split-pane.d.ts +0 -5
  1539. package/status-indicator/index.d.ts +0 -1
  1540. package/status-indicator/lib/status-indicator/status-indicator.d.ts +0 -61
  1541. package/status-indicator/malva-ui-core-status-indicator.d.ts +0 -5
  1542. package/stepper/index.d.ts +0 -4
  1543. package/stepper/lib/stepper/step-header.d.ts +0 -34
  1544. package/stepper/lib/stepper/step.d.ts +0 -51
  1545. package/stepper/lib/stepper/stepper-token.d.ts +0 -13
  1546. package/stepper/lib/stepper/stepper.d.ts +0 -98
  1547. package/stepper/lib/stepper/stepper.types.d.ts +0 -4
  1548. package/stepper/malva-ui-core-stepper.d.ts +0 -5
  1549. package/switch/index.d.ts +0 -2
  1550. package/switch/lib/switch/switch.d.ts +0 -118
  1551. package/switch/lib/switch-group/switch-group.d.ts +0 -24
  1552. package/switch/lib/switch-group-token.d.ts +0 -6
  1553. package/switch/malva-ui-core-switch.d.ts +0 -5
  1554. package/tabs/index.d.ts +0 -8
  1555. package/tabs/lib/tab/tab.d.ts +0 -46
  1556. package/tabs/lib/tab-content/tab-content.d.ts +0 -11
  1557. package/tabs/lib/tab-content-def.d.ts +0 -6
  1558. package/tabs/lib/tab-def.d.ts +0 -11
  1559. package/tabs/lib/tab-group-token.d.ts +0 -10
  1560. package/tabs/lib/tab-item/tab-item.d.ts +0 -28
  1561. package/tabs/lib/tabs/tabs.d.ts +0 -202
  1562. package/tabs/lib/tabs.service.d.ts +0 -24
  1563. package/tabs/malva-ui-core-tabs.d.ts +0 -5
  1564. package/textarea/index.d.ts +0 -1
  1565. package/textarea/lib/textarea/textarea.d.ts +0 -77
  1566. package/textarea/malva-ui-core-textarea.d.ts +0 -5
  1567. package/tile/index.d.ts +0 -2
  1568. package/tile/lib/tile/tile.d.ts +0 -20
  1569. package/tile/lib/tile-header.d.ts +0 -6
  1570. package/tile/malva-ui-core-tile.d.ts +0 -5
  1571. package/time-picker/index.d.ts +0 -1
  1572. package/time-picker/lib/time-picker/time-picker.d.ts +0 -135
  1573. package/time-picker/lib/time-picker-column/time-picker-column.d.ts +0 -111
  1574. package/time-picker/malva-ui-core-time-picker.d.ts +0 -5
  1575. package/timeline/index.d.ts +0 -5
  1576. package/timeline/lib/timeline/timeline-item-icon.d.ts +0 -24
  1577. package/timeline/lib/timeline/timeline-item-meta.d.ts +0 -24
  1578. package/timeline/lib/timeline/timeline-item.d.ts +0 -52
  1579. package/timeline/lib/timeline/timeline.d.ts +0 -27
  1580. package/timeline/lib/timeline/timeline.types.d.ts +0 -18
  1581. package/timeline/malva-ui-core-timeline.d.ts +0 -5
  1582. package/title/index.d.ts +0 -1
  1583. package/title/lib/title/title.d.ts +0 -63
  1584. package/title/malva-ui-core-title.d.ts +0 -5
  1585. package/toast/index.d.ts +0 -10
  1586. package/toast/lib/abstract-toast-container.d.ts +0 -29
  1587. package/toast/lib/abstract-toast-item.d.ts +0 -44
  1588. package/toast/lib/abstract-toast.service.d.ts +0 -75
  1589. package/toast/lib/toast-container/toast-container.d.ts +0 -23
  1590. package/toast/lib/toast-item/toast-item.d.ts +0 -25
  1591. package/toast/lib/toast-ref.d.ts +0 -33
  1592. package/toast/lib/toast-timer.d.ts +0 -24
  1593. package/toast/lib/toast.directives.d.ts +0 -13
  1594. package/toast/lib/toast.service.d.ts +0 -41
  1595. package/toast/lib/toast.types.d.ts +0 -139
  1596. package/toast/malva-ui-core-toast.d.ts +0 -5
  1597. package/tokenizer/index.d.ts +0 -3
  1598. package/tokenizer/lib/token/token.d.ts +0 -60
  1599. package/tokenizer/lib/token-template.d.ts +0 -29
  1600. package/tokenizer/lib/tokenizer/tokenizer.d.ts +0 -109
  1601. package/tokenizer/malva-ui-core-tokenizer.d.ts +0 -5
  1602. package/toolbar/index.d.ts +0 -3
  1603. package/toolbar/lib/toolbar/toolbar-spacer.d.ts +0 -5
  1604. package/toolbar/lib/toolbar/toolbar-widget.d.ts +0 -75
  1605. package/toolbar/lib/toolbar/toolbar.d.ts +0 -8
  1606. package/toolbar/malva-ui-core-toolbar.d.ts +0 -5
  1607. package/tooltip/index.d.ts +0 -3
  1608. package/tooltip/lib/tooltip/tooltip-panel.d.ts +0 -26
  1609. package/tooltip/lib/tooltip/tooltip.d.ts +0 -148
  1610. package/tooltip/lib/tooltip/tooltip.types.d.ts +0 -17
  1611. package/tooltip/malva-ui-core-tooltip.d.ts +0 -5
  1612. package/tree/index.d.ts +0 -4
  1613. package/tree/lib/tree/tree-context.d.ts +0 -62
  1614. package/tree/lib/tree/tree-node-def.d.ts +0 -33
  1615. package/tree/lib/tree/tree-node.d.ts +0 -45
  1616. package/tree/lib/tree/tree-subtree.d.ts +0 -63
  1617. package/tree/lib/tree/tree.d.ts +0 -156
  1618. 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