@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,1504 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Directive, ChangeDetectionStrategy, ViewEncapsulation, Component, inject, model, input, computed, contentChild, signal, effect, untracked, forwardRef, ElementRef, viewChild, DestroyRef, afterRenderEffect, contentChildren, NgZone, TemplateRef } from '@angular/core';
3
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
+ import { DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';
5
+ import { MlvBreakpointService, MlvRtlService, clamp, MlvStructural, mlvNextId } from '@malva-ui/cdk/utils';
6
+ import { MlvScrollbar } from '@malva-ui/core/scrollbar';
7
+ import { DOCUMENT, NgTemplateOutlet } from '@angular/common';
8
+ import { MlvDrawer, MlvDrawerContent } from '@malva-ui/core/drawer';
9
+ import { MLV_SIDEBAR_I18N, MlvI18nResolverService } from '@malva-ui/i18n';
10
+ import { LucideChevronDown, LucideMenu, LucidePanelLeftClose, LucidePanelLeftOpen, LucideX, LucideCheck, LucideChevronsUpDown } from '@lucide/angular';
11
+ import { MlvPopupContainer, MlvPopup, MlvPopupContent, MlvPopupTrigger } from '@malva-ui/core/popup';
12
+ import { MlvExpand } from '@malva-ui/core/expand';
13
+ import { MlvBadge } from '@malva-ui/core/badge';
14
+ import { MlvStatusIndicator } from '@malva-ui/core/status-indicator';
15
+ import { RouterLinkActive } from '@angular/router';
16
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
17
+ import { startWith } from 'rxjs';
18
+ import { MlvButton } from '@malva-ui/core/button';
19
+ import { MlvListItem } from '@malva-ui/core/list';
20
+ import { MlvMenu, MlvMenuItem, MlvMenuTrigger } from '@malva-ui/core/menu';
21
+
22
+ const SIDEBAR_CONTEXT = new InjectionToken('SIDEBAR_CONTEXT');
23
+
24
+ /**
25
+ * Marks a sticky top region inside the sidebar.
26
+ * Applied to a container element that should remain visible at the top when content scrolls.
27
+ */
28
+ class MlvSidebarHeader {
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarHeader, deps: [], target: i0.ɵɵFactoryTarget.Directive });
30
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvSidebarHeader, isStandalone: true, selector: "[mlvSidebarHeader]", host: { classAttribute: "mlv-sidebar__header" }, ngImport: i0 });
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarHeader, decorators: [{
33
+ type: Directive,
34
+ args: [{
35
+ selector: '[mlvSidebarHeader]',
36
+ host: {
37
+ class: 'mlv-sidebar__header',
38
+ },
39
+ }]
40
+ }] });
41
+
42
+ /**
43
+ * Marks a sticky bottom region inside the sidebar.
44
+ * Applied to a container element that should remain visible at the bottom when content scrolls.
45
+ */
46
+ class MlvSidebarFooter {
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarFooter, deps: [], target: i0.ɵɵFactoryTarget.Directive });
48
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvSidebarFooter, isStandalone: true, selector: "[mlvSidebarFooter]", host: { classAttribute: "mlv-sidebar__footer" }, ngImport: i0 });
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarFooter, decorators: [{
51
+ type: Directive,
52
+ args: [{
53
+ selector: '[mlvSidebarFooter]',
54
+ host: {
55
+ class: 'mlv-sidebar__footer',
56
+ },
57
+ }]
58
+ }] });
59
+
60
+ /**
61
+ * Marks the scrollable middle region between header and footer inside the sidebar.
62
+ * Gets `flex: 1 1 0` so it fills the remaining space. Intended to hold sidebar items and groups.
63
+ */
64
+ class MlvSidebarContent {
65
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
66
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.7", type: MlvSidebarContent, isStandalone: true, selector: "[mlvSidebarContent]", host: { classAttribute: "mlv-sidebar__content" }, ngImport: i0, template: `
67
+ <mlv-scrollbar class="mlv-sidebar__content-scrollbar">
68
+ <ng-content />
69
+ </mlv-scrollbar>
70
+ `, isInline: true, dependencies: [{ kind: "component", type: MlvScrollbar, selector: "mlv-scrollbar", inputs: ["orientation", "scrollbarSize", "disabled", "ariaLabel", "viewportTabIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarContent, decorators: [{
73
+ type: Component,
74
+ args: [{
75
+ // Attribute-selector component intentionally enhances the consumer's content container.
76
+ // eslint-disable-next-line @angular-eslint/component-selector
77
+ selector: '[mlvSidebarContent]',
78
+ template: `
79
+ <mlv-scrollbar class="mlv-sidebar__content-scrollbar">
80
+ <ng-content />
81
+ </mlv-scrollbar>
82
+ `,
83
+ imports: [MlvScrollbar],
84
+ encapsulation: ViewEncapsulation.None,
85
+ changeDetection: ChangeDetectionStrategy.OnPush,
86
+ host: {
87
+ class: 'mlv-sidebar__content',
88
+ },
89
+ }]
90
+ }] });
91
+
92
+ class MlvSidebar {
93
+ /** @protected The component's i18n strings signal. */
94
+ _i18n = inject(MLV_SIDEBAR_I18N);
95
+ /**
96
+ * @private Signal-based viewport breakpoint service. Wraps the CDK
97
+ * `BreakpointObserver`, so it is SSR-safe — no direct `matchMedia` access.
98
+ */
99
+ _breakpoint = inject(MlvBreakpointService);
100
+ _rtlService = inject(MlvRtlService);
101
+ /** @private Owning document used to preserve focus when activation opens another modal. */
102
+ _document = inject(DOCUMENT);
103
+ /**
104
+ * @private Collapsed value captured when the responsive override kicked in,
105
+ * so leaving the breakpoint restores what the author/user had before.
106
+ * `null` while no responsive override is active.
107
+ */
108
+ _collapsedBeforeAutoOffcanvas = null;
109
+ /**
110
+ * Controls expanded vs. collapsed (icon-only) mode.
111
+ * Accepts truthy strings via `coerceBooleanProperty`.
112
+ * Two-way bindable via `[(collapsed)]`.
113
+ */
114
+ collapsed = model(false, /* @ts-ignore */
115
+ ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
116
+ /**
117
+ * Total width of the sidebar host when expanded, including border and padding.
118
+ * Two-way bindable — updated by `setWidth()` during rail drag.
119
+ */
120
+ width = model('260px', /* @ts-ignore */
121
+ ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
122
+ /**
123
+ * Total width of the sidebar host when collapsed, including border and padding.
124
+ */
125
+ collapsedWidth = input('56px', /* @ts-ignore */
126
+ ...(ngDevMode ? [{ debugName: "collapsedWidth" }] : /* istanbul ignore next */ []));
127
+ /**
128
+ * MlvLayout mode controlling how the sidebar renders and collapses.
129
+ * - `'icon'` — collapses to an icon-only rail (default).
130
+ * - `'offcanvas'` — slides off-screen when collapsed.
131
+ * - `'floating'` — floats over content when expanded.
132
+ * - `'fixed'` — always fully expanded; collapse is a no-op.
133
+ */
134
+ mode = input('icon', /* @ts-ignore */
135
+ ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
136
+ /** Outer surface treatment for an inline sidebar. */
137
+ appearance = input('raised', /* @ts-ignore */
138
+ ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
139
+ /**
140
+ * Viewport breakpoint below which the sidebar automatically behaves as an
141
+ * `'offcanvas'` drawer, regardless of {@link mode}.
142
+ *
143
+ * `null` (the default) keeps the sidebar on {@link mode} at every width.
144
+ * Setting it to `'md'` makes the sidebar an overlay drawer below 768px — it
145
+ * closes itself on entering that range, opens from a `mlv-sidebar-trigger`,
146
+ * and dismisses on Escape, backdrop click, or focus leaving the drawer, like
147
+ * any `mode="offcanvas"` sidebar. The previous collapsed state is restored
148
+ * when the viewport grows back past the breakpoint.
149
+ *
150
+ * Thresholds come from `MLV_BREAKPOINT_CONFIG` (`provideMlvBreakpoints()`),
151
+ * so they stay in sync with the SCSS `breakpoint-*` mixins.
152
+ */
153
+ collapseBelow = input(null, /* @ts-ignore */
154
+ ...(ngDevMode ? [{ debugName: "collapseBelow" }] : /* istanbul ignore next */ []));
155
+ /**
156
+ * Closes an open offcanvas Sidebar when an enabled projected action is
157
+ * activated. Inline Sidebar modes are unaffected.
158
+ *
159
+ * Disabled by default so existing navigation keeps its authored behavior.
160
+ */
161
+ closeOnActivation = input(false, { ...(ngDevMode ? { debugName: "closeOnActivation" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
162
+ /**
163
+ * When true, the sidebar stretches to full viewport height.
164
+ * Adds the `mlv-sidebar--full-height` modifier class.
165
+ */
166
+ fullHeight = input(false, { ...(ngDevMode ? { debugName: "fullHeight" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
167
+ /**
168
+ * Accessible name for the `navigation` landmark.
169
+ *
170
+ * Set this whenever a page renders more than one sidebar (or another
171
+ * `navigation` landmark) so assistive technology can tell them apart.
172
+ * When omitted, the localized `MLV_SIDEBAR_I18N.navigation` default is used.
173
+ *
174
+ * Note: a plain `aria-label` attribute on `<mlv-sidebar>` cannot be used for
175
+ * this — the host binding owns the attribute and would overwrite it.
176
+ */
177
+ ariaLabel = input(undefined, /* @ts-ignore */
178
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
179
+ /**
180
+ * Minimum width in pixels the sidebar may be resized to via the drag rail.
181
+ */
182
+ minWidth = input(200, /* @ts-ignore */
183
+ ...(ngDevMode ? [{ debugName: "minWidth" }] : /* istanbul ignore next */ []));
184
+ /**
185
+ * Maximum width in pixels the sidebar may be resized to via the drag rail.
186
+ */
187
+ maxWidth = input(480, /* @ts-ignore */
188
+ ...(ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []));
189
+ /**
190
+ * @private True when {@link collapseBelow} is set and the viewport is
191
+ * narrower than that breakpoint.
192
+ */
193
+ _isBelowCollapseBreakpoint = computed(() => {
194
+ const breakpoint = this.collapseBelow();
195
+ return breakpoint !== null && this._breakpoint.isDown(breakpoint)();
196
+ }, /* @ts-ignore */
197
+ ...(ngDevMode ? [{ debugName: "_isBelowCollapseBreakpoint" }] : /* istanbul ignore next */ []));
198
+ /**
199
+ * The layout mode actually in effect.
200
+ *
201
+ * Equals {@link mode} unless {@link collapseBelow} is set and the viewport is
202
+ * narrower than that breakpoint, in which case it is `'offcanvas'`. Bind
203
+ * against this (not `mode`) when mirroring the sidebar's layout elsewhere.
204
+ */
205
+ effectiveMode = computed(() => this._isBelowCollapseBreakpoint() ? 'offcanvas' : this.mode(), /* @ts-ignore */
206
+ ...(ngDevMode ? [{ debugName: "effectiveMode" }] : /* istanbul ignore next */ []));
207
+ /**
208
+ * Effective collapsed state. Always `false` in `'fixed'` mode so the sidebar
209
+ * never visually collapses regardless of the `collapsed` model value.
210
+ */
211
+ _effectiveCollapsed = computed(() => this.effectiveMode() !== 'fixed' && this.collapsed(), /* @ts-ignore */
212
+ ...(ngDevMode ? [{ debugName: "_effectiveCollapsed" }] : /* istanbul ignore next */ []));
213
+ /**
214
+ * @protected Accessible name bound to the host `aria-label`. Prefers the
215
+ * author-supplied {@link ariaLabel} and falls back to the localized default.
216
+ */
217
+ _resolvedAriaLabel = computed(() => this.ariaLabel() ?? this._i18n().navigation, /* @ts-ignore */
218
+ ...(ngDevMode ? [{ debugName: "_resolvedAriaLabel" }] : /* istanbul ignore next */ []));
219
+ /** @protected Header slot directive reference. */
220
+ _headerRef = contentChild(MlvSidebarHeader, /* @ts-ignore */
221
+ ...(ngDevMode ? [{ debugName: "_headerRef" }] : /* istanbul ignore next */ []));
222
+ /** @protected Footer slot directive reference. */
223
+ _footerRef = contentChild(MlvSidebarFooter, /* @ts-ignore */
224
+ ...(ngDevMode ? [{ debugName: "_footerRef" }] : /* istanbul ignore next */ []));
225
+ /** @protected Content slot directive reference. */
226
+ _contentRef = contentChild(MlvSidebarContent, /* @ts-ignore */
227
+ ...(ngDevMode ? [{ debugName: "_contentRef" }] : /* istanbul ignore next */ []));
228
+ /** @protected True when at least one slot directive is projected. */
229
+ _hasSlots = computed(() => !!(this._headerRef() || this._footerRef() || this._contentRef()), /* @ts-ignore */
230
+ ...(ngDevMode ? [{ debugName: "_hasSlots" }] : /* istanbul ignore next */ []));
231
+ /** @protected Whether the current drawer leave was requested by projected activation. */
232
+ _activationClosePending = signal(false, /* @ts-ignore */
233
+ ...(ngDevMode ? [{ debugName: "_activationClosePending" }] : /* istanbul ignore next */ []));
234
+ constructor() {
235
+ // Entering the responsive offcanvas range must start closed — an open
236
+ // drawer covering the page on a viewport change is never what the author
237
+ // asked for. Leaving the range restores the pre-override collapsed value.
238
+ effect(() => {
239
+ const below = this._isBelowCollapseBreakpoint();
240
+ untracked(() => {
241
+ if (below) {
242
+ if (this._collapsedBeforeAutoOffcanvas === null) {
243
+ this._collapsedBeforeAutoOffcanvas = this.collapsed();
244
+ this.collapsed.set(true);
245
+ }
246
+ return;
247
+ }
248
+ if (this._collapsedBeforeAutoOffcanvas !== null) {
249
+ this.collapsed.set(this._collapsedBeforeAutoOffcanvas);
250
+ this._collapsedBeforeAutoOffcanvas = null;
251
+ }
252
+ });
253
+ });
254
+ }
255
+ /**
256
+ * Toggles the sidebar between collapsed and expanded.
257
+ * This is a no-op when the effective mode is `'fixed'`.
258
+ */
259
+ toggle() {
260
+ if (this.effectiveMode() === 'fixed')
261
+ return;
262
+ this.collapsed.update((v) => !v);
263
+ }
264
+ /** Set the sidebar width in pixels. Clamps to the [minWidth, maxWidth] range. */
265
+ setWidth(px) {
266
+ const clamped = clamp(px, this.minWidth(), this.maxWidth());
267
+ this.width.set(`${clamped}px`);
268
+ }
269
+ /** @protected Syncs drawer open/close back to collapsed model. */
270
+ _onDrawerOpenedChange(opened) {
271
+ if (opened)
272
+ this._activationClosePending.set(false);
273
+ this.collapsed.set(!opened);
274
+ }
275
+ /**
276
+ * @protected Closes only an open offcanvas Sidebar after a real enabled
277
+ * projected action. Search fields and non-interactive layout do not dismiss.
278
+ */
279
+ _onContainerClick(event) {
280
+ if (!this.closeOnActivation() ||
281
+ this.effectiveMode() !== 'offcanvas' ||
282
+ this._effectiveCollapsed()) {
283
+ return;
284
+ }
285
+ const container = event.currentTarget;
286
+ const target = event.target;
287
+ if (!target?.closest)
288
+ return;
289
+ const action = target.closest('button, a[href], [role="button"], [role="menuitem"]');
290
+ if (!action ||
291
+ !container.contains(action) ||
292
+ action.getAttribute('aria-disabled') === 'true' ||
293
+ action.matches('button:disabled')) {
294
+ return;
295
+ }
296
+ this._activationClosePending.set(true);
297
+ this.collapsed.set(true);
298
+ }
299
+ /** @private Finds a modal that an activation opened above the closing Drawer. */
300
+ _findOpenModal() {
301
+ const modals = this._document.querySelectorAll('.mlv-dialog-container[role="dialog"], .mlv-dialog-container[role="alertdialog"], [role="dialog"][aria-modal="true"]:not(.mlv-drawer), [role="alertdialog"][aria-modal="true"]:not(.mlv-drawer)');
302
+ return modals.item(modals.length - 1);
303
+ }
304
+ /**
305
+ * @protected Lets a newly opened modal retain focus; otherwise the Drawer
306
+ * restores the external Sidebar trigger that opened it.
307
+ */
308
+ _shouldRestoreDrawerFocus() {
309
+ if (!this._activationClosePending())
310
+ return true;
311
+ return this._findOpenModal() === null;
312
+ }
313
+ /**
314
+ * @protected Clears activation-specific focus policy after Drawer disposal
315
+ * and keeps focus in a still-open modal if removing the projected opener
316
+ * caused the browser to drop focus.
317
+ */
318
+ _onDrawerAfterClosed() {
319
+ const modal = this._activationClosePending() ? this._findOpenModal() : null;
320
+ this._activationClosePending.set(false);
321
+ if (modal?.isConnected) {
322
+ const active = this._document.activeElement;
323
+ const focusTarget = active instanceof HTMLElement && modal.contains(active)
324
+ ? active
325
+ : modal;
326
+ // Re-assert focus synchronously after the lower overlay is disposed.
327
+ // Browsers may otherwise drop focus when its captured opener disappears,
328
+ // even though focus had already moved into the still-connected modal.
329
+ focusTarget.focus();
330
+ }
331
+ }
332
+ /**
333
+ * @protected Handles `ArrowDown`/`ArrowUp` keydown events on the sidebar container
334
+ * to move focus between focusable sidebar items and group triggers in DOM order.
335
+ * Wraps around at the list boundaries and skips elements inside `.cdk-overlay-container`.
336
+ */
337
+ onContainerKeydown(event) {
338
+ const e = event;
339
+ const key = this._rtlService.normalizeArrowKey(e);
340
+ if (key !== DOWN_ARROW && key !== UP_ARROW)
341
+ return;
342
+ e.preventDefault();
343
+ const container = e.currentTarget;
344
+ // Collect the focus target for each navigable row in DOM order. A
345
+ // `mlv-sidebar-item` may itself be focusable (button-style rows) or defer
346
+ // to a projected link/button (navigational rows), so resolve each to its
347
+ // actual focus target and de-duplicate.
348
+ const items = [];
349
+ const seen = new Set();
350
+ const add = (el) => {
351
+ if (el && !seen.has(el) && !el.closest('.cdk-overlay-container')) {
352
+ seen.add(el);
353
+ items.push(el);
354
+ }
355
+ };
356
+ container
357
+ .querySelectorAll('mlv-sidebar-item, .mlv-sidebar-group__header, .mlv-sidebar-group__icon-btn, button, a[href]')
358
+ .forEach((el) => {
359
+ if (el.tagName.toLowerCase() === 'mlv-sidebar-item') {
360
+ add(el.hasAttribute('tabindex')
361
+ ? el
362
+ : el.querySelector('a[href], button, [tabindex]'));
363
+ return;
364
+ }
365
+ // Focusable elements inside a sidebar item are resolved via the item above.
366
+ if (el.closest('mlv-sidebar-item'))
367
+ return;
368
+ add(el);
369
+ });
370
+ const idx = items.indexOf(document.activeElement);
371
+ if (idx === -1)
372
+ return;
373
+ if (key === DOWN_ARROW) {
374
+ items[(idx + 1) % items.length]?.focus();
375
+ }
376
+ else {
377
+ items[(idx - 1 + items.length) % items.length]?.focus();
378
+ }
379
+ }
380
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebar, deps: [], target: i0.ɵɵFactoryTarget.Component });
381
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvSidebar, isStandalone: true, selector: "mlv-sidebar", inputs: { collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, collapsedWidth: { classPropertyName: "collapsedWidth", publicName: "collapsedWidth", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, collapseBelow: { classPropertyName: "collapseBelow", publicName: "collapseBelow", isSignal: true, isRequired: false, transformFunction: null }, closeOnActivation: { classPropertyName: "closeOnActivation", publicName: "closeOnActivation", isSignal: true, isRequired: false, transformFunction: null }, fullHeight: { classPropertyName: "fullHeight", publicName: "fullHeight", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange", width: "widthChange" }, host: { attributes: { "role": "navigation" }, properties: { "class.mlv-sidebar--collapsed": "_effectiveCollapsed()", "class": "\"mlv-sidebar--\" + effectiveMode()", "class.mlv-sidebar--raised": "appearance() === \"raised\"", "class.mlv-sidebar--flat": "appearance() === \"flat\"", "class.mlv-sidebar--full-height": "fullHeight()", "style.--mlv-sidebar-expanded-width": "width()", "style.--mlv-sidebar-collapsed-width": "collapsedWidth()", "attr.aria-label": "_resolvedAriaLabel()" }, classAttribute: "mlv-sidebar" }, providers: [
382
+ {
383
+ provide: SIDEBAR_CONTEXT,
384
+ useExisting: forwardRef(() => MlvSidebar),
385
+ },
386
+ ], queries: [{ propertyName: "_headerRef", first: true, predicate: MlvSidebarHeader, descendants: true, isSignal: true }, { propertyName: "_footerRef", first: true, predicate: MlvSidebarFooter, descendants: true, isSignal: true }, { propertyName: "_contentRef", first: true, predicate: MlvSidebarContent, descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Container captured once so the single <ng-content/> projection works in\n both the offcanvas (drawer overlay) and the inline branches. Two default\n <ng-content> slots would leave one empty (Angular projects into the last). -->\n<ng-template #projectedContent>\n <ng-content />\n</ng-template>\n\n<ng-template #body>\n <div\n class=\"mlv-sidebar__container\"\n (click)=\"_onContainerClick($event)\"\n (keydown)=\"onContainerKeydown($event)\"\n tabindex=\"-1\"\n >\n @if (_hasSlots()) {\n <ng-container [ngTemplateOutlet]=\"projectedContent\" />\n } @else {\n <mlv-scrollbar class=\"mlv-sidebar__scrollbar\">\n <ng-container [ngTemplateOutlet]=\"projectedContent\" />\n </mlv-scrollbar>\n }\n </div>\n</ng-template>\n\n@if (effectiveMode() === 'offcanvas') {\n<mlv-drawer\n [opened]=\"!_effectiveCollapsed()\"\n position=\"left\"\n [size]=\"width()\"\n [hasBackdrop]=\"true\"\n [restoreFocus]=\"_shouldRestoreDrawerFocus()\"\n (openedChange)=\"_onDrawerOpenedChange($event)\"\n (afterClosed)=\"_onDrawerAfterClosed()\"\n>\n <ng-template mlvDrawerContent>\n <ng-container [ngTemplateOutlet]=\"body\" />\n </ng-template>\n</mlv-drawer>\n} @else {\n<ng-container [ngTemplateOutlet]=\"body\" />\n}\n", styles: ["@charset \"UTF-8\";@layer mlv.components{.mlv-sidebar{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-sidebar *{box-sizing:border-box}.mlv-sidebar{--mlv-sidebar-border-width: .0625rem;--mlv-sidebar-gutter: var(--mlv-spacing-2);--mlv-sidebar-row-height: 2.25rem;--mlv-sidebar-hover-bg: var(--mlv-background-neutral-1);--mlv-sidebar-active-bg: var(--mlv-background-selected);--mlv-sidebar-rail-color: var(--mlv-border-normal);--mlv-sidebar-icon-column-min: 1.75rem;--mlv-sidebar-icon-column-width: max( var(--mlv-sidebar-icon-column-min, 1.75rem), calc( var(--mlv-sidebar-collapsed-width, 3.5rem) - var( --mlv-sidebar-gutter ) - var(--mlv-sidebar-gutter) - var(--mlv-sidebar-border-width) - var( --mlv-sidebar-border-width ) ) );display:block;position:relative;width:var(--mlv-sidebar-expanded-width, 16.25rem);border:var(--mlv-sidebar-border-width) solid var(--mlv-border-subtle);border-radius:calc(var(--mlv-radius-m) + var(--mlv-spacing-2));box-shadow:var(--mlv-shadow-raised);padding:var(--mlv-sidebar-gutter);background:var(--mlv-background-raised);overflow:visible;transition:width var(--mlv-duration-normal) var(--mlv-ease-in-out-strong)}.mlv-sidebar__container{display:flex;flex-direction:column;height:100%;gap:.0625rem;width:100%;overflow:hidden}.mlv-sidebar--collapsed{width:var(--mlv-sidebar-collapsed-width, 3.5rem)}.mlv-sidebar--flat{border-radius:0;box-shadow:var(--mlv-shadow-flat)}.mlv-sidebar__header{flex-shrink:0;width:100%}.mlv-sidebar__content{flex:1 1 0;display:flex;overflow:hidden;min-height:0;width:100%}.mlv-sidebar__scrollbar,.mlv-sidebar__content-scrollbar{flex:1 1 auto;width:100%;min-height:0}.mlv-sidebar__scrollbar>.mlv-scrollbar__viewport>.mlv-scrollbar__content,.mlv-sidebar__content-scrollbar>.mlv-scrollbar__viewport>.mlv-scrollbar__content{display:flex;flex-direction:column;gap:.0625rem}.mlv-sidebar__scrollbar>.mlv-scrollbar__viewport,.mlv-sidebar__content-scrollbar>.mlv-scrollbar__viewport{overflow-x:hidden}.mlv-sidebar__footer{flex-shrink:0;width:100%}.mlv-sidebar--offcanvas{width:0;min-width:0;flex:0 0 auto;overflow:hidden;border:none;box-shadow:none;padding:0;background:transparent}.mlv-sidebar--floating{position:absolute;z-index:100;box-shadow:var(--mlv-shadow-overlay);height:100%;transition:width var(--mlv-duration-normal) var(--mlv-ease-in-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-drawer)}.mlv-sidebar--floating.mlv-sidebar--collapsed{transform:translate(calc(-100% * var(--mlv-inline-direction)))}.mlv-sidebar--full-height{position:sticky;top:var(--mlv-sidebar-offset-top, 0px);height:calc(100dvh - var(--mlv-sidebar-offset-top, 0px) - var(--mlv-sidebar-offset-bottom, 0px));align-self:flex-start}.mlv-sidebar--full-height .mlv-sidebar__container{overflow:hidden}[class*=--tight] .mlv-sidebar:not([class*=--compact],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-sidebar[class*=--tight]{--mlv-sidebar-row-height: var(--mlv-spacing-6)}[class*=--compact] .mlv-sidebar:not([class*=--tight],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-sidebar[class*=--compact]{--mlv-sidebar-row-height: var(--mlv-height-xs)}[class*=--spacious] .mlv-sidebar:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--airy]),.mlv-sidebar[class*=--spacious]{--mlv-sidebar-row-height: var(--mlv-height-s)}[class*=--airy] .mlv-sidebar:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--spacious]),.mlv-sidebar[class*=--airy]{--mlv-sidebar-row-height: var(--mlv-height-m)}@media(prefers-reduced-motion:reduce){.mlv-sidebar,.mlv-sidebar--floating{transition-duration:var(--mlv-duration-instant)}}.mlv-drawer .mlv-sidebar,.mlv-drawer .mlv-sidebar .mlv-sidebar__container{width:100%}.mlv-drawer .mlv-sidebar .mlv-sidebar-item__label{display:block;width:auto;opacity:1}}\n"], dependencies: [{ kind: "component", type: MlvDrawer, selector: "mlv-drawer", inputs: ["position", "ariaLabel", "ariaLabelledBy", "size", "resizable", "snapPoints", "defaultSnap", "minSize", "maxSize"] }, { kind: "directive", type: MlvDrawerContent, selector: "[mlvDrawerContent]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MlvScrollbar, selector: "mlv-scrollbar", inputs: ["orientation", "scrollbarSize", "disabled", "ariaLabel", "viewportTabIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
387
+ }
388
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebar, decorators: [{
389
+ type: Component,
390
+ args: [{ selector: 'mlv-sidebar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MlvDrawer, MlvDrawerContent, NgTemplateOutlet, MlvScrollbar], providers: [
391
+ {
392
+ provide: SIDEBAR_CONTEXT,
393
+ useExisting: forwardRef(() => MlvSidebar),
394
+ },
395
+ ], host: {
396
+ class: 'mlv-sidebar',
397
+ '[class.mlv-sidebar--collapsed]': '_effectiveCollapsed()',
398
+ '[class]': '"mlv-sidebar--" + effectiveMode()',
399
+ '[class.mlv-sidebar--raised]': 'appearance() === "raised"',
400
+ '[class.mlv-sidebar--flat]': 'appearance() === "flat"',
401
+ '[class.mlv-sidebar--full-height]': 'fullHeight()',
402
+ '[style.--mlv-sidebar-expanded-width]': 'width()',
403
+ '[style.--mlv-sidebar-collapsed-width]': 'collapsedWidth()',
404
+ role: 'navigation',
405
+ '[attr.aria-label]': '_resolvedAriaLabel()',
406
+ }, template: "<!-- Container captured once so the single <ng-content/> projection works in\n both the offcanvas (drawer overlay) and the inline branches. Two default\n <ng-content> slots would leave one empty (Angular projects into the last). -->\n<ng-template #projectedContent>\n <ng-content />\n</ng-template>\n\n<ng-template #body>\n <div\n class=\"mlv-sidebar__container\"\n (click)=\"_onContainerClick($event)\"\n (keydown)=\"onContainerKeydown($event)\"\n tabindex=\"-1\"\n >\n @if (_hasSlots()) {\n <ng-container [ngTemplateOutlet]=\"projectedContent\" />\n } @else {\n <mlv-scrollbar class=\"mlv-sidebar__scrollbar\">\n <ng-container [ngTemplateOutlet]=\"projectedContent\" />\n </mlv-scrollbar>\n }\n </div>\n</ng-template>\n\n@if (effectiveMode() === 'offcanvas') {\n<mlv-drawer\n [opened]=\"!_effectiveCollapsed()\"\n position=\"left\"\n [size]=\"width()\"\n [hasBackdrop]=\"true\"\n [restoreFocus]=\"_shouldRestoreDrawerFocus()\"\n (openedChange)=\"_onDrawerOpenedChange($event)\"\n (afterClosed)=\"_onDrawerAfterClosed()\"\n>\n <ng-template mlvDrawerContent>\n <ng-container [ngTemplateOutlet]=\"body\" />\n </ng-template>\n</mlv-drawer>\n} @else {\n<ng-container [ngTemplateOutlet]=\"body\" />\n}\n", styles: ["@charset \"UTF-8\";@layer mlv.components{.mlv-sidebar{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-sidebar *{box-sizing:border-box}.mlv-sidebar{--mlv-sidebar-border-width: .0625rem;--mlv-sidebar-gutter: var(--mlv-spacing-2);--mlv-sidebar-row-height: 2.25rem;--mlv-sidebar-hover-bg: var(--mlv-background-neutral-1);--mlv-sidebar-active-bg: var(--mlv-background-selected);--mlv-sidebar-rail-color: var(--mlv-border-normal);--mlv-sidebar-icon-column-min: 1.75rem;--mlv-sidebar-icon-column-width: max( var(--mlv-sidebar-icon-column-min, 1.75rem), calc( var(--mlv-sidebar-collapsed-width, 3.5rem) - var( --mlv-sidebar-gutter ) - var(--mlv-sidebar-gutter) - var(--mlv-sidebar-border-width) - var( --mlv-sidebar-border-width ) ) );display:block;position:relative;width:var(--mlv-sidebar-expanded-width, 16.25rem);border:var(--mlv-sidebar-border-width) solid var(--mlv-border-subtle);border-radius:calc(var(--mlv-radius-m) + var(--mlv-spacing-2));box-shadow:var(--mlv-shadow-raised);padding:var(--mlv-sidebar-gutter);background:var(--mlv-background-raised);overflow:visible;transition:width var(--mlv-duration-normal) var(--mlv-ease-in-out-strong)}.mlv-sidebar__container{display:flex;flex-direction:column;height:100%;gap:.0625rem;width:100%;overflow:hidden}.mlv-sidebar--collapsed{width:var(--mlv-sidebar-collapsed-width, 3.5rem)}.mlv-sidebar--flat{border-radius:0;box-shadow:var(--mlv-shadow-flat)}.mlv-sidebar__header{flex-shrink:0;width:100%}.mlv-sidebar__content{flex:1 1 0;display:flex;overflow:hidden;min-height:0;width:100%}.mlv-sidebar__scrollbar,.mlv-sidebar__content-scrollbar{flex:1 1 auto;width:100%;min-height:0}.mlv-sidebar__scrollbar>.mlv-scrollbar__viewport>.mlv-scrollbar__content,.mlv-sidebar__content-scrollbar>.mlv-scrollbar__viewport>.mlv-scrollbar__content{display:flex;flex-direction:column;gap:.0625rem}.mlv-sidebar__scrollbar>.mlv-scrollbar__viewport,.mlv-sidebar__content-scrollbar>.mlv-scrollbar__viewport{overflow-x:hidden}.mlv-sidebar__footer{flex-shrink:0;width:100%}.mlv-sidebar--offcanvas{width:0;min-width:0;flex:0 0 auto;overflow:hidden;border:none;box-shadow:none;padding:0;background:transparent}.mlv-sidebar--floating{position:absolute;z-index:100;box-shadow:var(--mlv-shadow-overlay);height:100%;transition:width var(--mlv-duration-normal) var(--mlv-ease-in-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-drawer)}.mlv-sidebar--floating.mlv-sidebar--collapsed{transform:translate(calc(-100% * var(--mlv-inline-direction)))}.mlv-sidebar--full-height{position:sticky;top:var(--mlv-sidebar-offset-top, 0px);height:calc(100dvh - var(--mlv-sidebar-offset-top, 0px) - var(--mlv-sidebar-offset-bottom, 0px));align-self:flex-start}.mlv-sidebar--full-height .mlv-sidebar__container{overflow:hidden}[class*=--tight] .mlv-sidebar:not([class*=--compact],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-sidebar[class*=--tight]{--mlv-sidebar-row-height: var(--mlv-spacing-6)}[class*=--compact] .mlv-sidebar:not([class*=--tight],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-sidebar[class*=--compact]{--mlv-sidebar-row-height: var(--mlv-height-xs)}[class*=--spacious] .mlv-sidebar:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--airy]),.mlv-sidebar[class*=--spacious]{--mlv-sidebar-row-height: var(--mlv-height-s)}[class*=--airy] .mlv-sidebar:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--spacious]),.mlv-sidebar[class*=--airy]{--mlv-sidebar-row-height: var(--mlv-height-m)}@media(prefers-reduced-motion:reduce){.mlv-sidebar,.mlv-sidebar--floating{transition-duration:var(--mlv-duration-instant)}}.mlv-drawer .mlv-sidebar,.mlv-drawer .mlv-sidebar .mlv-sidebar__container{width:100%}.mlv-drawer .mlv-sidebar .mlv-sidebar-item__label{display:block;width:auto;opacity:1}}\n"] }]
407
+ }], ctorParameters: () => [], propDecorators: { collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }, { type: i0.Output, args: ["collapsedChange"] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }, { type: i0.Output, args: ["widthChange"] }], collapsedWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsedWidth", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], collapseBelow: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseBelow", required: false }] }], closeOnActivation: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnActivation", required: false }] }], fullHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullHeight", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], _headerRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvSidebarHeader), { isSignal: true }] }], _footerRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvSidebarFooter), { isSignal: true }] }], _contentRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvSidebarContent), { isSignal: true }] }] } });
408
+
409
+ class MlvSidebarItemIcon extends MlvStructural {
410
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarItemIcon, deps: null, target: i0.ɵɵFactoryTarget.Directive });
411
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvSidebarItemIcon, isStandalone: true, selector: "[mlvSidebarItemIcon]", usesInheritance: true, ngImport: i0 });
412
+ }
413
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarItemIcon, decorators: [{
414
+ type: Directive,
415
+ args: [{
416
+ selector: '[mlvSidebarItemIcon]',
417
+ }]
418
+ }] });
419
+
420
+ class MlvSidebarItemHost {
421
+ /** Whether the item is the currently active navigation target. */
422
+ active = input(false, { ...(ngDevMode ? { debugName: "active" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
423
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarItemHost, deps: [], target: i0.ɵɵFactoryTarget.Directive });
424
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: MlvSidebarItemHost, isStandalone: true, selector: "[mlvSidebarItem]", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "treeitem", "tabindex": "0" }, properties: { "class.mlv-sidebar-item--active": "active()", "attr.aria-selected": "active()" }, classAttribute: "mlv-sidebar-item" }, ngImport: i0 });
425
+ }
426
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarItemHost, decorators: [{
427
+ type: Directive,
428
+ args: [{
429
+ selector: '[mlvSidebarItem]',
430
+ host: {
431
+ class: 'mlv-sidebar-item',
432
+ '[class.mlv-sidebar-item--active]': 'active()',
433
+ role: 'treeitem',
434
+ '[attr.aria-selected]': 'active()',
435
+ tabindex: '0',
436
+ },
437
+ }]
438
+ }], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }] } });
439
+ class MlvSidebarItemTitle extends MlvStructural {
440
+ /**
441
+ * Optional active state on the directive (available but not currently
442
+ * consumed by `MlvSidebarItem`).
443
+ */
444
+ active = input(false, { ...(ngDevMode ? { debugName: "active" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
445
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarItemTitle, deps: null, target: i0.ɵɵFactoryTarget.Directive });
446
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: MlvSidebarItemTitle, isStandalone: true, selector: "[mlvSidebarItemTitle]", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 });
447
+ }
448
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarItemTitle, decorators: [{
449
+ type: Directive,
450
+ args: [{
451
+ selector: '[mlvSidebarItemTitle]',
452
+ }]
453
+ }], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }] } });
454
+
455
+ class MlvSidebarItem {
456
+ /** @private Parent sidebar context providing collapsed/flyout state. */
457
+ _ctx = inject(SIDEBAR_CONTEXT, { optional: true });
458
+ /** @private Host element, scanned for a genuinely focusable projected control. */
459
+ _host = inject((ElementRef));
460
+ /** Accessible label; used as aria-label, fallback text, and tooltip in collapsed mode. */
461
+ label = input.required(/* @ts-ignore */
462
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
463
+ /** Explicit active state; combined with router link detection in computedActive. */
464
+ active = input(false, { ...(ngDevMode ? { debugName: "active" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
465
+ /**
466
+ * Optional badge/count shown on this item. Rendered as a trailing
467
+ * `mlv-badge` when the sidebar is expanded, and as a `mlv-status-indicator`
468
+ * dot (top-right of the icon) when the sidebar is collapsed — where a full
469
+ * badge does not fit the icon rail. `null`/`''` renders nothing.
470
+ *
471
+ * This is the sanctioned way to attach a badge; it composes with a projected
472
+ * `[mlvSidebarItemTitle]` (the badge renders after the custom title).
473
+ */
474
+ badge = input(null, /* @ts-ignore */
475
+ ...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
476
+ /** Semantic tone applied to both the expanded badge and the collapsed status dot. */
477
+ badgeTone = input('default', /* @ts-ignore */
478
+ ...(ngDevMode ? [{ debugName: "badgeTone" }] : /* istanbul ignore next */ []));
479
+ /** When true, the collapsed-mode status dot pulses to draw attention. */
480
+ badgePulse = input(false, { ...(ngDevMode ? { debugName: "badgePulse" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
481
+ /** @private Sidebar i18n slice (used to phrase the badge count in the aria-label). */
482
+ _i18n = inject(MLV_SIDEBAR_I18N);
483
+ /** @private ICU resolver for the pluralised notification count. */
484
+ _resolver = inject(MlvI18nResolverService);
485
+ /** @protected Icon slot template projected via `[mlvSidebarItemIcon]`. */
486
+ iconRef = contentChild(MlvSidebarItemIcon, /* @ts-ignore */
487
+ ...(ngDevMode ? [{ debugName: "iconRef" }] : /* istanbul ignore next */ []));
488
+ /** @protected Custom title template projected via `[mlvSidebarItemTitle]`. */
489
+ titleRef = contentChild(MlvSidebarItemTitle, /* @ts-ignore */
490
+ ...(ngDevMode ? [{ debugName: "titleRef" }] : /* istanbul ignore next */ []));
491
+ /** @private Detects Angular router active state from a projected routerLinkActive directive. */
492
+ _routerLink = contentChild(RouterLinkActive, { ...(ngDevMode ? { debugName: "_routerLink" } : /* istanbul ignore next */ {}), descendants: true });
493
+ /** True if active() or the nested RouterLinkActive reports active. */
494
+ computedActive = computed(() => {
495
+ return this.active() || this._routerLinkActive();
496
+ }, /* @ts-ignore */
497
+ ...(ngDevMode ? [{ debugName: "computedActive" }] : /* istanbul ignore next */ []));
498
+ /** True when the sidebar is collapsed and this item is not inside a flyout. */
499
+ isCollapsed = computed(() => {
500
+ const collapsed = this._ctx?.collapsed() ?? false;
501
+ const inFlyout = this._ctx?.inFlyout?.() ?? false;
502
+ return collapsed && !inFlyout;
503
+ }, /* @ts-ignore */
504
+ ...(ngDevMode ? [{ debugName: "isCollapsed" }] : /* istanbul ignore next */ []));
505
+ /**
506
+ * @private True when the projected content contains a genuinely focusable
507
+ * control (an `<a href>`, `<button>`, form field, or `[tabindex="0"]`).
508
+ * Populated after render by scanning the host subtree — a projected
509
+ * `[mlvSidebarItemTitle]` that only contains text/badges does NOT count.
510
+ */
511
+ _hasProjectedFocusable = signal(false, /* @ts-ignore */
512
+ ...(ngDevMode ? [{ debugName: "_hasProjectedFocusable" }] : /* istanbul ignore next */ []));
513
+ /**
514
+ * Whether the host itself is the interactive control. `true` unless the
515
+ * projected content already contains its own focusable control — the host
516
+ * then behaves as a `role="button"` (or `role="menuitem"` inside a flyout)
517
+ * row with `tabindex="0"` and an `aria-label`. When a focusable control IS
518
+ * projected (e.g. a router `<a>` link), that element is the single
519
+ * interactive target and the host stays a presentational wrapper, avoiding an
520
+ * invalid `role="listitem"` (no `role="list"` ancestor) and nested focusable
521
+ * controls. Detection is by actual focusable content, not by the mere
522
+ * presence of a title template, so text/badge-only titles stay interactive.
523
+ */
524
+ _interactiveHost = computed(() => !this._hasProjectedFocusable(), /* @ts-ignore */
525
+ ...(ngDevMode ? [{ debugName: "_interactiveHost" }] : /* istanbul ignore next */ []));
526
+ /** @protected True while this item renders inside a collapsed-mode group flyout (a `role="menu"`). */
527
+ _inFlyout = computed(() => this._ctx?.inFlyout?.() ?? false, /* @ts-ignore */
528
+ ...(ngDevMode ? [{ debugName: "_inFlyout" }] : /* istanbul ignore next */ []));
529
+ /**
530
+ * @protected Resolved host `role`. `null` when the host is a presentational
531
+ * wrapper around a projected focusable control; otherwise `menuitem` inside a
532
+ * flyout menu, or `button` for a standalone interactive row.
533
+ */
534
+ _hostRole = computed(() => {
535
+ if (!this._interactiveHost())
536
+ return null;
537
+ return this._inFlyout() ? 'menuitem' : 'button';
538
+ }, /* @ts-ignore */
539
+ ...(ngDevMode ? [{ debugName: "_hostRole" }] : /* istanbul ignore next */ []));
540
+ /** @protected True when a non-empty badge value is set. */
541
+ _hasBadge = computed(() => {
542
+ const b = this.badge();
543
+ return b !== null && b !== '';
544
+ }, /* @ts-ignore */
545
+ ...(ngDevMode ? [{ debugName: "_hasBadge" }] : /* istanbul ignore next */ []));
546
+ /**
547
+ * @protected Resolved host `aria-label`. `null` when the host is a
548
+ * presentational wrapper around a projected control. Otherwise the item
549
+ * `label()`, with the badge folded in when set (e.g. `"Inbox, 3
550
+ * notifications"`) — since the host `aria-label` overrides the visible badge
551
+ * text, this keeps the count announced in both expanded and collapsed states,
552
+ * and is the only carrier of the count when the collapsed dot replaces the
553
+ * badge.
554
+ */
555
+ _resolvedAriaLabel = computed(() => {
556
+ if (!this._interactiveHost())
557
+ return null;
558
+ const base = this.label();
559
+ if (!this._hasBadge())
560
+ return base;
561
+ return `${base}, ${this._announceBadge(this.badge())}`;
562
+ }, /* @ts-ignore */
563
+ ...(ngDevMode ? [{ debugName: "_resolvedAriaLabel" }] : /* istanbul ignore next */ []));
564
+ /** @private Router link active state tracked via afterRenderEffect. */
565
+ _routerLinkActive = signal(false, /* @ts-ignore */
566
+ ...(ngDevMode ? [{ debugName: "_routerLinkActive" }] : /* istanbul ignore next */ []));
567
+ /** @private Reference to the tooltip container for programmatic open/close. */
568
+ _tooltipContainer = viewChild('tooltipContainer', /* @ts-ignore */
569
+ ...(ngDevMode ? [{ debugName: "_tooltipContainer" }] : /* istanbul ignore next */ []));
570
+ /** @private Registered for automatic cleanup of the routerLinkActive subscription. */
571
+ _destroyRef = inject(DestroyRef);
572
+ constructor() {
573
+ // Detect whether the projected content contributes its own focusable control.
574
+ // Re-runs when the title template or collapsed state changes, since the
575
+ // collapsed link overlay can alter the row's focusable descendants.
576
+ afterRenderEffect(() => {
577
+ this.titleRef();
578
+ this.isCollapsed();
579
+ // `querySelector` inspects descendants only, so the host's own (reactive)
580
+ // tabindex is never matched — we detect a genuinely focusable *projected*
581
+ // control (e.g. a router `<a href>`), independent of layout geometry.
582
+ const focusable = this._host.nativeElement.querySelector('a[href], button, input, select, textarea, [tabindex]:not([tabindex="-1"])');
583
+ this._hasProjectedFocusable.set(!!focusable);
584
+ });
585
+ afterRenderEffect(() => {
586
+ const rla = this._routerLink();
587
+ rla?.isActiveChange
588
+ .pipe(startWith(rla.isActive), takeUntilDestroyed(this._destroyRef))
589
+ .subscribe((isActive) => {
590
+ this._routerLinkActive.set(isActive);
591
+ });
592
+ });
593
+ }
594
+ /**
595
+ * @private Phrases a badge value for the accessible name. A pure numeric
596
+ * value is pluralised via the `notifications` ICU key (e.g. `"3
597
+ * notifications"`); any other value is announced verbatim (e.g. `"New"`).
598
+ */
599
+ _announceBadge(badge) {
600
+ const str = String(badge).trim();
601
+ if (/^\d+$/.test(str)) {
602
+ return this._resolver.resolve(this._i18n(), 'notifications', { count: Number(str) });
603
+ }
604
+ return str;
605
+ }
606
+ /** @protected Activates the host on Enter/Space when it is the interactive control. */
607
+ _onKeyActivate(event) {
608
+ // When a projected title link is present it is the interactive element and
609
+ // handles its own keyboard activation natively — do nothing here to avoid
610
+ // activating twice.
611
+ if (!this._interactiveHost())
612
+ return;
613
+ event.preventDefault();
614
+ event.currentTarget.click();
615
+ }
616
+ /** @protected Opens the collapsed-mode tooltip on hover/focus. */
617
+ _onMouseEnter() {
618
+ if (this.isCollapsed()) {
619
+ this._tooltipContainer()?.open();
620
+ }
621
+ }
622
+ /** @protected Closes the collapsed-mode tooltip on mouse-leave/blur. */
623
+ _onMouseLeave() {
624
+ this._tooltipContainer()?.close();
625
+ }
626
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
627
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvSidebarItem, isStandalone: true, selector: "mlv-sidebar-item", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, badgeTone: { classPropertyName: "badgeTone", publicName: "badgeTone", isSignal: true, isRequired: false, transformFunction: null }, badgePulse: { classPropertyName: "badgePulse", publicName: "badgePulse", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown.enter": "_onKeyActivate($event)", "keydown.space": "_onKeyActivate($event)", "mouseenter": "_onMouseEnter()", "mouseleave": "_onMouseLeave()", "focusin": "_onMouseEnter()", "focusout": "_onMouseLeave()" }, properties: { "class.mlv-sidebar-item--active": "computedActive()", "class.mlv-sidebar-item--collapsed": "isCollapsed()", "attr.role": "_hostRole()", "attr.tabindex": "_interactiveHost() ? 0 : null", "attr.aria-label": "_resolvedAriaLabel()", "attr.aria-current": "computedActive() ? \"page\" : null" }, classAttribute: "mlv-sidebar-item" }, queries: [{ propertyName: "iconRef", first: true, predicate: MlvSidebarItemIcon, descendants: true, isSignal: true }, { propertyName: "titleRef", first: true, predicate: MlvSidebarItemTitle, descendants: true, isSignal: true }, { propertyName: "_routerLink", first: true, predicate: RouterLinkActive, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_tooltipContainer", first: true, predicate: ["tooltipContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<span class=\"mlv-sidebar-item__icon\" aria-hidden=\"true\">\n <ng-template [ngTemplateOutlet]=\"iconRef()?.templateRef ?? null\" />\n\n <!-- Collapsed rail: status dot replaces the badge, pinned to the icon's top-right corner. Decorative \u2014 the count is folded into the host aria-label. -->\n @if (isCollapsed() && _hasBadge()) {\n <mlv-status-indicator\n class=\"mlv-sidebar-item__status\"\n [tone]=\"badgeTone()\"\n [pulse]=\"badgePulse()\"\n />\n }\n</span>\n\n<!-- The label stays mounted for an interruptible CSS fade, but becomes inert and clipped immediately. -->\n<span\n class=\"mlv-sidebar-item__label\"\n [attr.aria-hidden]=\"isCollapsed() ? 'true' : null\"\n [attr.inert]=\"isCollapsed() ? '' : null\"\n>\n @if (titleRef()?.templateRef; as titleTpl) {\n <ng-template [ngTemplateOutlet]=\"titleTpl\"></ng-template>\n } @else { {{ label() }} }\n</span>\n@if (_hasBadge()) {\n<mlv-badge\n class=\"mlv-sidebar-item__badge\"\n [tone]=\"badgeTone()\"\n muted\n mlvDensity=\"tight\"\n aria-hidden=\"true\"\n >{{ badge() }}</mlv-badge\n>\n}\n\n<!-- Link overlay: covers the icon area when fully collapsed so the router link is still clickable -->\n@if ( isCollapsed() && _hasProjectedFocusable() && titleRef()?.templateRef; as\nlinkTpl ) {\n<span class=\"mlv-sidebar-item__link-overlay\">\n <ng-template [ngTemplateOutlet]=\"linkTpl\" />\n</span>\n}\n\n<!-- Tooltip \u2014 shown on hover/focus in collapsed mode via mlv-popup -->\n<mlv-popup-container #tooltipContainer class=\"mlv-sidebar-item__tooltip-anchor\">\n <mlv-popup\n panelRole=\"tooltip\"\n position=\"right-start\"\n [hasShadow]=\"true\"\n [hasBackdrop]=\"false\"\n scrollStrategy=\"close\"\n class=\"mlv-sidebar-item__tooltip-container\"\n >\n <ng-template mlvPopupContent>{{ label() }}</ng-template>\n </mlv-popup>\n</mlv-popup-container>\n", styles: ["@layer mlv.components{.mlv-sidebar-item{position:relative;display:grid;grid-template-columns:var(--mlv-sidebar-icon-column-width, 3.5rem) minmax(0,1fr) auto;align-items:center;width:100%;min-height:var(--mlv-sidebar-row-height, 2.25rem);padding:0;border-radius:var(--mlv-radius-m);font-size:var(--mlv-font-size-l);color:var(--mlv-text-secondary);line-height:var(--mlv-line-height-snug);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:background-color var(--mlv-duration-fast) var(--mlv-ease-default),color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-sidebar-item *{color:inherit}.mlv-sidebar-item__icon{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:0}.mlv-sidebar-item__icon>*{flex-shrink:0}.mlv-sidebar-item svg{flex-shrink:0;width:1.25rem;height:1.25rem}.mlv-sidebar-item:hover,.mlv-sidebar-item:focus-visible{background-color:var(--mlv-sidebar-hover-bg, var(--mlv-background-neutral-1));color:var(--mlv-text-primary)}.mlv-sidebar-item:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-item--active{color:var(--mlv-text-on-selected)!important;font-weight:600}.mlv-sidebar-item.mlv-sidebar-item--active,.mlv-sidebar-item.mlv-sidebar-item--active:hover,.mlv-sidebar-item.mlv-sidebar-item--active:focus-visible{background-color:var(--mlv-sidebar-active-bg, var(--mlv-background-selected))}.mlv-sidebar-item__label{min-width:0;padding-inline-end:var(--mlv-spacing-2);font-size:var(--mlv-font-size-l);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:1;transform:translate(0);visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-item__label>a{color:inherit;text-decoration:inherit;display:block}.mlv-sidebar-item__badge{flex-shrink:0;margin-inline-end:var(--mlv-spacing-2);opacity:1;visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-item__status{position:absolute;top:calc(50% - .625rem);inset-inline-end:calc(50% - .625rem);transform:translate(calc(50% * var(--mlv-inline-direction)),-50%);pointer-events:none}.mlv-sidebar-item__link-overlay{position:absolute;inset:0;pointer-events:none}.mlv-sidebar-item__link-overlay>a{display:block;position:absolute;inset:0;pointer-events:auto;font-size:0;color:transparent;text-decoration:none;border-radius:var(--mlv-radius-m)}.mlv-sidebar-item__link-overlay>a:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-item__tooltip-anchor{position:absolute;inset:0;pointer-events:none;padding:var(--mlv-padding-s)}.mlv-sidebar-item__tooltip-container.mlv-popup{padding:var(--mlv-padding-m)}.mlv-sidebar-item--collapsed .mlv-sidebar-item__label{opacity:0;transform:translate(calc(-.25rem * var(--mlv-inline-direction)));visibility:hidden;pointer-events:none;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear var(--mlv-duration-normal)}.mlv-sidebar-item--collapsed .mlv-sidebar-item__badge{margin-inline-end:0;opacity:0;visibility:hidden;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear var(--mlv-duration-normal)}@media(prefers-reduced-motion:reduce){.mlv-sidebar-item__label,.mlv-sidebar-item__badge{transition-duration:var(--mlv-duration-instant)}}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MlvPopupContainer, selector: "mlv-popup-container" }, { kind: "component", type: MlvPopup, selector: "mlv-popup", inputs: ["position", "positions", "width", "height", "minWidth", "minHeight", "maxWidth", "maxHeight", "hasArrow", "hasShadow", "class", "mlvDensity", "flexibleDimensions", "scrollStrategy", "hasBackdrop", "restrictPosition", "panelRole", "modal", "ariaLabel", "dismissExcludeElements", "mobileMode", "mobileBreakpoint", "mobileTitle", "mobileCloseLabel", "opened"], outputs: ["openedChange", "afterOpened", "afterClosed"] }, { kind: "directive", type: MlvPopupContent, selector: "[mlvPopupContent]" }, { kind: "component", type: MlvBadge, selector: "mlv-badge", inputs: ["tone", "rounded", "muted"] }, { kind: "component", type: MlvStatusIndicator, selector: "mlv-status-indicator", inputs: ["tone", "pulse", "size", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
628
+ }
629
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarItem, decorators: [{
630
+ type: Component,
631
+ args: [{ selector: 'mlv-sidebar-item', imports: [
632
+ NgTemplateOutlet,
633
+ MlvPopupContainer,
634
+ MlvPopup,
635
+ MlvPopupContent,
636
+ MlvBadge,
637
+ MlvStatusIndicator,
638
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
639
+ class: 'mlv-sidebar-item',
640
+ '[class.mlv-sidebar-item--active]': 'computedActive()',
641
+ '[class.mlv-sidebar-item--collapsed]': 'isCollapsed()',
642
+ '[attr.role]': '_hostRole()',
643
+ '[attr.tabindex]': '_interactiveHost() ? 0 : null',
644
+ '[attr.aria-label]': '_resolvedAriaLabel()',
645
+ '[attr.aria-current]': 'computedActive() ? "page" : null',
646
+ '(keydown.enter)': '_onKeyActivate($event)',
647
+ '(keydown.space)': '_onKeyActivate($event)',
648
+ '(mouseenter)': '_onMouseEnter()',
649
+ '(mouseleave)': '_onMouseLeave()',
650
+ '(focusin)': '_onMouseEnter()',
651
+ '(focusout)': '_onMouseLeave()',
652
+ }, template: "<span class=\"mlv-sidebar-item__icon\" aria-hidden=\"true\">\n <ng-template [ngTemplateOutlet]=\"iconRef()?.templateRef ?? null\" />\n\n <!-- Collapsed rail: status dot replaces the badge, pinned to the icon's top-right corner. Decorative \u2014 the count is folded into the host aria-label. -->\n @if (isCollapsed() && _hasBadge()) {\n <mlv-status-indicator\n class=\"mlv-sidebar-item__status\"\n [tone]=\"badgeTone()\"\n [pulse]=\"badgePulse()\"\n />\n }\n</span>\n\n<!-- The label stays mounted for an interruptible CSS fade, but becomes inert and clipped immediately. -->\n<span\n class=\"mlv-sidebar-item__label\"\n [attr.aria-hidden]=\"isCollapsed() ? 'true' : null\"\n [attr.inert]=\"isCollapsed() ? '' : null\"\n>\n @if (titleRef()?.templateRef; as titleTpl) {\n <ng-template [ngTemplateOutlet]=\"titleTpl\"></ng-template>\n } @else { {{ label() }} }\n</span>\n@if (_hasBadge()) {\n<mlv-badge\n class=\"mlv-sidebar-item__badge\"\n [tone]=\"badgeTone()\"\n muted\n mlvDensity=\"tight\"\n aria-hidden=\"true\"\n >{{ badge() }}</mlv-badge\n>\n}\n\n<!-- Link overlay: covers the icon area when fully collapsed so the router link is still clickable -->\n@if ( isCollapsed() && _hasProjectedFocusable() && titleRef()?.templateRef; as\nlinkTpl ) {\n<span class=\"mlv-sidebar-item__link-overlay\">\n <ng-template [ngTemplateOutlet]=\"linkTpl\" />\n</span>\n}\n\n<!-- Tooltip \u2014 shown on hover/focus in collapsed mode via mlv-popup -->\n<mlv-popup-container #tooltipContainer class=\"mlv-sidebar-item__tooltip-anchor\">\n <mlv-popup\n panelRole=\"tooltip\"\n position=\"right-start\"\n [hasShadow]=\"true\"\n [hasBackdrop]=\"false\"\n scrollStrategy=\"close\"\n class=\"mlv-sidebar-item__tooltip-container\"\n >\n <ng-template mlvPopupContent>{{ label() }}</ng-template>\n </mlv-popup>\n</mlv-popup-container>\n", styles: ["@layer mlv.components{.mlv-sidebar-item{position:relative;display:grid;grid-template-columns:var(--mlv-sidebar-icon-column-width, 3.5rem) minmax(0,1fr) auto;align-items:center;width:100%;min-height:var(--mlv-sidebar-row-height, 2.25rem);padding:0;border-radius:var(--mlv-radius-m);font-size:var(--mlv-font-size-l);color:var(--mlv-text-secondary);line-height:var(--mlv-line-height-snug);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:background-color var(--mlv-duration-fast) var(--mlv-ease-default),color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-sidebar-item *{color:inherit}.mlv-sidebar-item__icon{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:0}.mlv-sidebar-item__icon>*{flex-shrink:0}.mlv-sidebar-item svg{flex-shrink:0;width:1.25rem;height:1.25rem}.mlv-sidebar-item:hover,.mlv-sidebar-item:focus-visible{background-color:var(--mlv-sidebar-hover-bg, var(--mlv-background-neutral-1));color:var(--mlv-text-primary)}.mlv-sidebar-item:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-item--active{color:var(--mlv-text-on-selected)!important;font-weight:600}.mlv-sidebar-item.mlv-sidebar-item--active,.mlv-sidebar-item.mlv-sidebar-item--active:hover,.mlv-sidebar-item.mlv-sidebar-item--active:focus-visible{background-color:var(--mlv-sidebar-active-bg, var(--mlv-background-selected))}.mlv-sidebar-item__label{min-width:0;padding-inline-end:var(--mlv-spacing-2);font-size:var(--mlv-font-size-l);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:1;transform:translate(0);visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-item__label>a{color:inherit;text-decoration:inherit;display:block}.mlv-sidebar-item__badge{flex-shrink:0;margin-inline-end:var(--mlv-spacing-2);opacity:1;visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-item__status{position:absolute;top:calc(50% - .625rem);inset-inline-end:calc(50% - .625rem);transform:translate(calc(50% * var(--mlv-inline-direction)),-50%);pointer-events:none}.mlv-sidebar-item__link-overlay{position:absolute;inset:0;pointer-events:none}.mlv-sidebar-item__link-overlay>a{display:block;position:absolute;inset:0;pointer-events:auto;font-size:0;color:transparent;text-decoration:none;border-radius:var(--mlv-radius-m)}.mlv-sidebar-item__link-overlay>a:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-item__tooltip-anchor{position:absolute;inset:0;pointer-events:none;padding:var(--mlv-padding-s)}.mlv-sidebar-item__tooltip-container.mlv-popup{padding:var(--mlv-padding-m)}.mlv-sidebar-item--collapsed .mlv-sidebar-item__label{opacity:0;transform:translate(calc(-.25rem * var(--mlv-inline-direction)));visibility:hidden;pointer-events:none;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear var(--mlv-duration-normal)}.mlv-sidebar-item--collapsed .mlv-sidebar-item__badge{margin-inline-end:0;opacity:0;visibility:hidden;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear var(--mlv-duration-normal)}@media(prefers-reduced-motion:reduce){.mlv-sidebar-item__label,.mlv-sidebar-item__badge{transition-duration:var(--mlv-duration-instant)}}}\n"] }]
653
+ }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], badgeTone: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeTone", required: false }] }], badgePulse: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgePulse", required: false }] }], iconRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvSidebarItemIcon), { isSignal: true }] }], titleRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvSidebarItemTitle), { isSignal: true }] }], _routerLink: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RouterLinkActive), { ...{
654
+ descendants: true,
655
+ }, isSignal: true }] }], _tooltipContainer: [{ type: i0.ViewChild, args: ['tooltipContainer', { isSignal: true }] }] } });
656
+
657
+ class MlvSidebarGroup {
658
+ /** @private Parent sidebar context (skipSelf) used to read collapsed/mode state and proxy toggles. */
659
+ _parentCtx = inject(SIDEBAR_CONTEXT, {
660
+ skipSelf: true,
661
+ optional: true,
662
+ });
663
+ /** @private Document handle used to resolve the overlay-rendered flyout panel by id. */
664
+ _document = inject(DOCUMENT);
665
+ _rtlService = inject(MlvRtlService);
666
+ /** @protected Stable id linking the collapsed-mode flyout panel so its focusable items can be resolved. */
667
+ _flyoutId = mlvNextId('mlv-sidebar-flyout');
668
+ /** Required label for the group header and flyout title. */
669
+ label = input.required(/* @ts-ignore */
670
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
671
+ /**
672
+ * Optional badge/count for the group. Rendered as a trailing `mlv-badge` in
673
+ * the expanded accordion header and next to the flyout title, and as a
674
+ * `mlv-status-indicator` dot (top-right of the icon button) when the sidebar
675
+ * is collapsed. `null`/`''` renders nothing.
676
+ */
677
+ badge = input(null, /* @ts-ignore */
678
+ ...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
679
+ /** Semantic tone applied to the group badge and the collapsed status dot. */
680
+ badgeTone = input('default', /* @ts-ignore */
681
+ ...(ngDevMode ? [{ debugName: "badgeTone" }] : /* istanbul ignore next */ []));
682
+ /** When true, the collapsed-mode status dot pulses to draw attention. */
683
+ badgePulse = input(false, { ...(ngDevMode ? { debugName: "badgePulse" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
684
+ /** @private Sidebar i18n slice (used to phrase the badge count in the aria-label). */
685
+ _i18n = inject(MLV_SIDEBAR_I18N);
686
+ /** @private ICU resolver for the pluralised notification count. */
687
+ _resolver = inject(MlvI18nResolverService);
688
+ /** @protected True when a non-empty badge value is set. */
689
+ _hasBadge = computed(() => {
690
+ const b = this.badge();
691
+ return b !== null && b !== '';
692
+ }, /* @ts-ignore */
693
+ ...(ngDevMode ? [{ debugName: "_hasBadge" }] : /* istanbul ignore next */ []));
694
+ /**
695
+ * @protected Collapsed icon-button `aria-label`: the group `label()` with the
696
+ * badge count folded in (e.g. `"Projects, 3 notifications"`), since the
697
+ * collapsed dot is decorative and carries no text.
698
+ */
699
+ _resolvedAriaLabel = computed(() => {
700
+ const base = this.label();
701
+ if (!this._hasBadge())
702
+ return base;
703
+ return `${base}, ${this._announceBadge(this.badge())}`;
704
+ }, /* @ts-ignore */
705
+ ...(ngDevMode ? [{ debugName: "_resolvedAriaLabel" }] : /* istanbul ignore next */ []));
706
+ /** @protected Projected group icon template, rendered in the header and flyout. */
707
+ iconRef = contentChild(MlvSidebarItemIcon, /* @ts-ignore */
708
+ ...(ngDevMode ? [{ debugName: "iconRef" }] : /* istanbul ignore next */ []));
709
+ /** @protected Projected sidebar items, used to derive the active-child highlight. */
710
+ _childItems = contentChildren(MlvSidebarItem, { ...(ngDevMode ? { debugName: "_childItems" } : /* istanbul ignore next */ {}), descendants: true });
711
+ /** @protected Template of the group's child items, rendered in the accordion and flyout. */
712
+ childrenTpl = viewChild.required('childrenRef', /* @ts-ignore */
713
+ ...(ngDevMode ? [{ debugName: "childrenTpl" }] : /* istanbul ignore next */ []));
714
+ /** @protected Icon trigger button element, used as the flyout/tooltip anchor and focus target. */
715
+ _triggerBtn = viewChild('triggerBtn', /* @ts-ignore */
716
+ ...(ngDevMode ? [{ debugName: "_triggerBtn" }] : /* istanbul ignore next */ []));
717
+ /** @protected Reference to the flyout popup container (collapsed mode). */
718
+ _flyoutContainer = viewChild('flyoutContainer', /* @ts-ignore */
719
+ ...(ngDevMode ? [{ debugName: "_flyoutContainer" }] : /* istanbul ignore next */ []));
720
+ /** @protected Reference to the flyout popup component for state reading. */
721
+ _flyoutPopup = viewChild('flyoutPopup', /* @ts-ignore */
722
+ ...(ngDevMode ? [{ debugName: "_flyoutPopup" }] : /* istanbul ignore next */ []));
723
+ /** @protected Tooltip popup shown on hover in collapsed mode. */
724
+ _tooltipContainer = viewChild('tooltipContainer', /* @ts-ignore */
725
+ ...(ngDevMode ? [{ debugName: "_tooltipContainer" }] : /* istanbul ignore next */ []));
726
+ /** Whether the accordion is expanded (expanded sidebar mode). */
727
+ expanded = signal(false, /* @ts-ignore */
728
+ ...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
729
+ /**
730
+ * Whether the flyout popup is currently open.
731
+ * Derived from the popup component's `opened` signal.
732
+ */
733
+ flyoutOpen = computed(() => this._flyoutPopup()?.opened() ?? false, /* @ts-ignore */
734
+ ...(ngDevMode ? [{ debugName: "flyoutOpen" }] : /* istanbul ignore next */ []));
735
+ /** True when the parent sidebar is in collapsed (icon-only) mode. */
736
+ isSidebarCollapsed = computed(() => this._parentCtx?.collapsed() ?? false, /* @ts-ignore */
737
+ ...(ngDevMode ? [{ debugName: "isSidebarCollapsed" }] : /* istanbul ignore next */ []));
738
+ /** True when at least one child item is active — drives active highlight on the group. */
739
+ hasActiveChild = computed(() => this._childItems().some((item) => item.computedActive()), /* @ts-ignore */
740
+ ...(ngDevMode ? [{ debugName: "hasActiveChild" }] : /* istanbul ignore next */ []));
741
+ /**
742
+ * @protected Effective open state of the accordion panel.
743
+ *
744
+ * `expanded` is public and writable, so a host that auto-expands the group
745
+ * owning the active route can set it while the sidebar is collapsed. The
746
+ * accordion stays mounted in that state (its header fades but keeps the icon
747
+ * column in place), so honouring the write would open an empty panel inside
748
+ * the icon rail — a ghost tree line and reserved height — and, because
749
+ * `#childrenRef` can only be projected once, it would also pull the children
750
+ * out of the open flyout and leave it showing just its header. Gating on the
751
+ * collapsed state here makes that unreachable regardless of write order; the
752
+ * constructor effect still resets `expanded` when collapse begins.
753
+ */
754
+ _accordionOpen = computed(() => this.expanded() && !this.isSidebarCollapsed(), /* @ts-ignore */
755
+ ...(ngDevMode ? [{ debugName: "_accordionOpen" }] : /* istanbul ignore next */ []));
756
+ constructor() {
757
+ // Close whichever disclosure belongs to the representation that is
758
+ // becoming inactive. The group header itself remains mounted so its label
759
+ // can fade while the fixed icon track stays in place.
760
+ effect(() => {
761
+ if (this.isSidebarCollapsed()) {
762
+ this.expanded.set(false);
763
+ }
764
+ else {
765
+ this._flyoutContainer()?.close();
766
+ }
767
+ });
768
+ // Register the icon button as the anchor for the tooltip.
769
+ effect(() => {
770
+ const btn = this._triggerBtn();
771
+ const tooltipContainer = this._tooltipContainer();
772
+ if (btn && tooltipContainer) {
773
+ tooltipContainer.registerTrigger(btn, false);
774
+ }
775
+ });
776
+ // Dismiss tooltip and move focus into the flyout when it opens (menu-button
777
+ // pattern). The panel is rendered into a CDK overlay, so wait one frame for
778
+ // the portal to attach before focusing its first item.
779
+ effect(() => {
780
+ if (this.flyoutOpen()) {
781
+ this._tooltipContainer()?.close();
782
+ requestAnimationFrame(() => {
783
+ if (this.flyoutOpen())
784
+ this._focusFirstFlyoutItem();
785
+ });
786
+ }
787
+ });
788
+ }
789
+ /**
790
+ * @private Phrases a badge value for the accessible name. A pure numeric
791
+ * value is pluralised via the `notifications` ICU key (e.g. `"3
792
+ * notifications"`); any other value is announced verbatim (e.g. `"New"`).
793
+ */
794
+ _announceBadge(badge) {
795
+ const str = String(badge).trim();
796
+ if (/^\d+$/.test(str)) {
797
+ return this._resolver.resolve(this._i18n(), 'notifications', { count: Number(str) });
798
+ }
799
+ return str;
800
+ }
801
+ // ─── Accordion (expanded sidebar) ──────────────────────────────────────────
802
+ /** Toggles the accordion open/closed state. */
803
+ toggle() {
804
+ this.expanded.update((v) => !v);
805
+ }
806
+ // ─── Flyout (collapsed sidebar) ─────────────────────────────────────────────
807
+ /** @protected Roving keyboard navigation (Arrow/Home/End/Escape) within the open flyout panel. */
808
+ onFlyoutKeydown(event) {
809
+ const e = event;
810
+ const panel = e.currentTarget;
811
+ const key = this._rtlService.normalizeArrowKey(e);
812
+ // Close flyout and return focus to trigger
813
+ if (key === LEFT_ARROW || e.key === 'Escape') {
814
+ e.preventDefault();
815
+ e.stopPropagation();
816
+ this._flyoutContainer()?.close();
817
+ this._triggerBtn()?.nativeElement.focus();
818
+ return;
819
+ }
820
+ // Sidebar items in the flyout may be focusable via their own host
821
+ // (button-style rows) or via a projected link/button (navigational rows).
822
+ const items = Array.from(panel.querySelectorAll('a[href], button, [tabindex="0"]')).filter((el) => !el.hasAttribute('disabled'));
823
+ if (!items.length)
824
+ return;
825
+ const idx = items.indexOf(document.activeElement);
826
+ if (key === DOWN_ARROW) {
827
+ e.preventDefault();
828
+ items[(idx + 1) % items.length].focus();
829
+ }
830
+ else if (key === UP_ARROW) {
831
+ e.preventDefault();
832
+ items[(idx - 1 + items.length) % items.length].focus();
833
+ }
834
+ else if (e.key === 'Home') {
835
+ e.preventDefault();
836
+ items[0].focus();
837
+ }
838
+ else if (e.key === 'End') {
839
+ e.preventDefault();
840
+ items[items.length - 1].focus();
841
+ }
842
+ }
843
+ /**
844
+ * @protected Handles Enter/Space (toggle) and ArrowRight (open) on the
845
+ * collapsed-mode icon trigger. When the flyout is already open, ArrowDown
846
+ * enters it (focuses the first item) instead of bubbling to the sidebar
847
+ * container's roving nav — so an open flyout is never skipped past.
848
+ */
849
+ onTriggerKeydown(event) {
850
+ const e = event;
851
+ const key = this._rtlService.normalizeArrowKey(e);
852
+ if (e.key === 'Enter' || e.key === ' ') {
853
+ e.preventDefault();
854
+ this._flyoutContainer()?.toggle();
855
+ }
856
+ else if (key === RIGHT_ARROW) {
857
+ e.preventDefault();
858
+ if (this.flyoutOpen()) {
859
+ this._focusFirstFlyoutItem();
860
+ }
861
+ else {
862
+ this._flyoutContainer()?.open();
863
+ }
864
+ }
865
+ else if (key === DOWN_ARROW && this.flyoutOpen()) {
866
+ // Enter the open flyout rather than letting the sidebar container move
867
+ // focus to the next trigger (which would orphan this flyout).
868
+ e.preventDefault();
869
+ e.stopPropagation();
870
+ this._focusFirstFlyoutItem();
871
+ }
872
+ }
873
+ /**
874
+ * @protected Closes the flyout and returns focus to the icon trigger when a
875
+ * child item inside it is activated.
876
+ *
877
+ * The menu-button pattern expects the menu to close once a command is
878
+ * chosen — without this a `routerLink` navigation left the flyout hanging
879
+ * over the new page. Enter/Space are covered too: `MlvSidebarItem` activates
880
+ * a button-style row by calling `.click()` on its host, and a projected
881
+ * anchor dispatches a real click, so both reach this bubbling handler.
882
+ *
883
+ * Clicks on the flyout header or on empty panel space are ignored — only a
884
+ * target inside a `.mlv-sidebar-item` (its host, projected link or button)
885
+ * counts as an activation.
886
+ */
887
+ onFlyoutClick(event) {
888
+ const target = event.target;
889
+ if (!target?.closest('.mlv-sidebar-item'))
890
+ return;
891
+ this._flyoutContainer()?.close();
892
+ this._triggerBtn()?.nativeElement.focus();
893
+ }
894
+ /**
895
+ * @protected Closes the flyout when keyboard focus leaves it entirely (Tab
896
+ * out, or focus moving to another trigger) so it is never left orphaned-open.
897
+ * Focus moves between items inside the panel, or back to the owning trigger,
898
+ * are ignored.
899
+ */
900
+ onFlyoutFocusOut(event) {
901
+ const next = event.relatedTarget;
902
+ // Focus lost to nothing (e.g. window blur) — keep the flyout open.
903
+ if (!next)
904
+ return;
905
+ const panel = this._document.getElementById(this._flyoutId);
906
+ const trigger = this._triggerBtn()?.nativeElement ?? null;
907
+ if (panel?.contains(next) || next === trigger)
908
+ return;
909
+ this._flyoutContainer()?.close();
910
+ }
911
+ /** @private Moves focus to the first focusable item inside the open flyout panel. */
912
+ _focusFirstFlyoutItem() {
913
+ const panel = this._document.getElementById(this._flyoutId);
914
+ const first = panel?.querySelector('a[href], button:not([disabled]), [tabindex="0"]');
915
+ first?.focus();
916
+ }
917
+ /** Opens the tooltip when hovering the icon button (collapsed mode, flyout not open). */
918
+ onIconBtnMouseEnter() {
919
+ if (!this.flyoutOpen()) {
920
+ this._tooltipContainer()?.open();
921
+ }
922
+ }
923
+ /** Closes the tooltip when the pointer leaves the icon button. */
924
+ onIconBtnMouseLeave() {
925
+ this._tooltipContainer()?.close();
926
+ }
927
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
928
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvSidebarGroup, isStandalone: true, selector: "mlv-sidebar-group", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, badgeTone: { classPropertyName: "badgeTone", publicName: "badgeTone", isSignal: true, isRequired: false, transformFunction: null }, badgePulse: { classPropertyName: "badgePulse", publicName: "badgePulse", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "mlv-sidebar-group-host" }, providers: [
929
+ {
930
+ provide: SIDEBAR_CONTEXT,
931
+ useFactory: () => {
932
+ const group = inject(forwardRef(() => MlvSidebarGroup));
933
+ const parentCtx = inject(SIDEBAR_CONTEXT, {
934
+ skipSelf: true,
935
+ optional: true,
936
+ });
937
+ return {
938
+ collapsed: parentCtx?.collapsed ?? signal(false),
939
+ inFlyout: group.flyoutOpen,
940
+ mode: parentCtx?.mode ?? signal('icon'),
941
+ effectiveMode: parentCtx?.effectiveMode ?? parentCtx?.mode,
942
+ // Proxy to parent — intentionally no-op when group is the root context provider
943
+ toggle: () => parentCtx?.toggle(),
944
+ setWidth: (px) => parentCtx?.setWidth(px),
945
+ };
946
+ },
947
+ },
948
+ ], queries: [{ propertyName: "iconRef", first: true, predicate: MlvSidebarItemIcon, descendants: true, isSignal: true }, { propertyName: "_childItems", predicate: MlvSidebarItem, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "childrenTpl", first: true, predicate: ["childrenRef"], descendants: true, isSignal: true }, { propertyName: "_triggerBtn", first: true, predicate: ["triggerBtn"], descendants: true, isSignal: true }, { propertyName: "_flyoutContainer", first: true, predicate: ["flyoutContainer"], descendants: true, isSignal: true }, { propertyName: "_flyoutPopup", first: true, predicate: ["flyoutPopup"], descendants: true, isSignal: true }, { propertyName: "_tooltipContainer", first: true, predicate: ["tooltipContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- \u2500\u2500\u2500 Children captured once \u2014 rendered in accordion OR flyout \u2500\u2500\u2500 -->\n<ng-template #childrenRef>\n <ng-content />\n</ng-template>\n\n<!-- The expanded header remains mounted during collapse so its text can fade\n without moving the icon out of the shared fixed-width column. -->\n<div\n class=\"mlv-sidebar-group\"\n [class.mlv-sidebar-group--expanded]=\"expanded()\"\n [class.mlv-sidebar-group--collapsed]=\"isSidebarCollapsed()\"\n [attr.aria-hidden]=\"isSidebarCollapsed() ? 'true' : null\"\n [attr.inert]=\"isSidebarCollapsed() ? '' : null\"\n>\n <button\n class=\"mlv-sidebar-group__header\"\n type=\"button\"\n [class.mlv-sidebar-group__header--active]=\"hasActiveChild()\"\n [attr.aria-expanded]=\"expanded()\"\n (click)=\"toggle()\"\n >\n @if (iconRef(); as iconTpl) {\n <span class=\"mlv-sidebar-group__icon\">\n <ng-container [ngTemplateOutlet]=\"iconTpl.templateRef\" />\n </span>\n }\n <span class=\"mlv-sidebar-group__label\">{{ label() }}</span>\n @if (_hasBadge()) {\n <mlv-badge\n class=\"mlv-sidebar-group__badge\"\n [tone]=\"badgeTone()\"\n muted\n mlvDensity=\"tight\"\n aria-hidden=\"true\"\n >{{ badge() }}</mlv-badge\n >\n }\n <svg\n class=\"mlv-sidebar-group__arrow\"\n [class.mlv-sidebar-group__arrow--open]=\"expanded()\"\n lucideChevronDown\n size=\"16\"\n />\n </button>\n\n <mlv-expand\n class=\"mlv-sidebar-group__content\"\n [opened]=\"_accordionOpen()\"\n (openedChange)=\"expanded.set($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"childrenTpl()\" />\n </mlv-expand>\n</div>\n\n<!-- \u2500\u2500\u2500 COLLAPSED sidebar: icon button + popup flyout on click \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n@if (isSidebarCollapsed()) {\n<mlv-popup-container #flyoutContainer class=\"mlv-sidebar-group__collapsed\">\n <button\n #triggerBtn\n mlvPopupTrigger\n [triggerOn]=\"'click'\"\n class=\"mlv-sidebar-group__icon-btn\"\n type=\"button\"\n [class.mlv-sidebar-group__icon-btn--active]=\"hasActiveChild()\"\n [attr.aria-label]=\"_resolvedAriaLabel()\"\n [attr.aria-expanded]=\"flyoutOpen()\"\n [ariaHasPopup]=\"'menu'\"\n (keydown)=\"onTriggerKeydown($event)\"\n (mouseenter)=\"onIconBtnMouseEnter()\"\n (mouseleave)=\"onIconBtnMouseLeave()\"\n (focus)=\"onIconBtnMouseEnter()\"\n (blur)=\"onIconBtnMouseLeave()\"\n >\n @if (iconRef(); as iconTpl) {\n <ng-container [ngTemplateOutlet]=\"iconTpl.templateRef\" />\n } @if (_hasBadge()) {\n <mlv-status-indicator\n class=\"mlv-sidebar-group__status\"\n [tone]=\"badgeTone()\"\n [pulse]=\"badgePulse()\"\n />\n }\n </button>\n\n <mlv-popup\n #flyoutPopup\n position=\"right-start\"\n [minWidth]=\"180\"\n scrollStrategy=\"close\"\n class=\"mlv-sidebar-group__flyout-popup\"\n >\n <ng-template mlvPopupContent>\n <div\n class=\"mlv-sidebar-group__flyout\"\n [id]=\"_flyoutId\"\n role=\"menu\"\n [attr.aria-label]=\"label()\"\n (keydown)=\"onFlyoutKeydown($event)\"\n (click)=\"onFlyoutClick($event)\"\n (focusout)=\"onFlyoutFocusOut($event)\"\n tabindex=\"-1\"\n >\n <div class=\"mlv-sidebar-group__flyout-header\" aria-hidden=\"true\">\n <span class=\"mlv-sidebar-group__flyout-title\">{{ label() }}</span>\n @if (_hasBadge()) {\n <mlv-badge\n class=\"mlv-sidebar-group__flyout-badge\"\n [tone]=\"badgeTone()\"\n muted\n mlvDensity=\"tight\"\n >{{ badge() }}</mlv-badge\n >\n }\n </div>\n <ng-container [ngTemplateOutlet]=\"childrenTpl()\" />\n </div>\n </ng-template>\n </mlv-popup>\n</mlv-popup-container>\n\n<!-- Tooltip anchored to the icon button (registered via effect) -->\n<mlv-popup-container #tooltipContainer>\n <mlv-popup\n panelRole=\"tooltip\"\n position=\"right\"\n [hasShadow]=\"true\"\n [hasBackdrop]=\"false\"\n scrollStrategy=\"close\"\n class=\"mlv-sidebar-group__tooltip-container\"\n >\n <ng-template mlvPopupContent>{{ label() }}</ng-template>\n </mlv-popup>\n</mlv-popup-container>\n}\n", styles: ["@charset \"UTF-8\";@layer mlv.components{.mlv-sidebar-group-host{display:grid;width:100%;min-width:0}.mlv-sidebar-group-host>.mlv-sidebar-group,.mlv-sidebar-group-host>.mlv-sidebar-group__collapsed{grid-area:1/1;min-width:0}.mlv-sidebar-group{width:100%;min-width:0}.mlv-sidebar-group--collapsed{pointer-events:none}.mlv-sidebar-group__header{display:grid;grid-template-columns:var(--mlv-sidebar-icon-column-width, 3.5rem) minmax(0,1fr) auto auto;align-items:center;width:100%;min-height:var(--mlv-sidebar-row-height, 2.25rem);padding:0;border:none;border-radius:var(--mlv-radius-m);background:transparent;cursor:pointer;font-size:var(--mlv-font-size-l);color:var(--mlv-text-secondary);text-align:start;transition-property:background-color,color;transition-duration:var(--mlv-duration-normal);transition-timing-function:var(--mlv-ease-default);line-height:var(--mlv-line-height-snug);outline:none}.mlv-sidebar-group__header *{color:inherit}.mlv-sidebar-group__header:hover,.mlv-sidebar-group__header:focus-visible{background-color:var(--mlv-sidebar-hover-bg, var(--mlv-background-neutral-1));color:var(--mlv-text-primary)}.mlv-sidebar-group__header:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-group__header--active{color:var(--mlv-text-on-selected);font-weight:600}.mlv-sidebar-group__icon{display:flex;align-items:center;justify-content:center}.mlv-sidebar-group__label{font-size:var(--mlv-font-size-l);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:1;transform:translate(0);visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-group__badge{flex-shrink:0;margin-inline-end:var(--mlv-spacing-2);opacity:1;visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-group__arrow{flex-shrink:0;margin-inline-end:var(--mlv-spacing-2);transition:transform var(--mlv-duration-normal) var(--mlv-ease-default)}.mlv-sidebar-group__arrow--open{transform:rotate(180deg)}.mlv-sidebar-group--collapsed .mlv-sidebar-group__label{opacity:0;transform:translate(calc(-.25rem * var(--mlv-inline-direction)));visibility:hidden;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear var(--mlv-duration-normal)}.mlv-sidebar-group--collapsed .mlv-sidebar-group__badge,.mlv-sidebar-group--collapsed .mlv-sidebar-group__arrow{opacity:0;visibility:hidden;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear var(--mlv-duration-normal)}.mlv-sidebar-group__content{margin-inline-start:calc(var(--mlv-sidebar-icon-column-width, 3.5rem) / 2);border-inline-start:.09375rem solid transparent;padding-inline-start:.53125rem;padding-top:0;transition:border-color var(--mlv-duration-normal) var(--mlv-ease-default),padding-top var(--mlv-duration-normal) var(--mlv-ease-default)}.mlv-sidebar-group__content.mlv-expand--open{border-color:var(--mlv-sidebar-rail-color, var(--mlv-border-normal));padding-top:.125rem}.mlv-sidebar-group__content .mlv-expand__body-inner{display:flex;flex-direction:column;gap:.0625rem}.mlv-sidebar-group__tooltip-container.mlv-popup{padding:var(--mlv-padding-m)}.mlv-sidebar-group__icon-btn{position:relative;display:flex;align-items:center;justify-content:center;width:var(--mlv-sidebar-icon-column-width, 3.5rem);min-height:var(--mlv-sidebar-row-height, 2.25rem);padding:0;border:none;border-radius:var(--mlv-radius-m);background:transparent;cursor:pointer;color:var(--mlv-text-secondary);transition:background-color var(--mlv-duration-fast) var(--mlv-ease-default),color var(--mlv-duration-fast) var(--mlv-ease-default);outline:none}.mlv-sidebar-group__icon-btn:after{content:\"\\203a\";position:absolute;inset-inline-end:.1875rem;bottom:.0625rem;font-size:.875rem;font-weight:700;line-height:1;opacity:.8;pointer-events:none}.mlv-sidebar-group__icon-btn:hover,.mlv-sidebar-group__icon-btn:focus-visible{background-color:var(--mlv-sidebar-hover-bg, var(--mlv-background-neutral-1));color:var(--mlv-text-primary)}.mlv-sidebar-group__icon-btn:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-group__icon-btn.mlv-sidebar-group__icon-btn--active,.mlv-sidebar-group__icon-btn.mlv-sidebar-group__icon-btn--active:hover,.mlv-sidebar-group__icon-btn.mlv-sidebar-group__icon-btn--active:focus-visible{color:var(--mlv-text-on-selected);background-color:var(--mlv-sidebar-active-bg, var(--mlv-background-selected))}.mlv-sidebar-group__icon-btn:active{transform:scale(.97)}.mlv-sidebar-group__icon-btn .mlv-sidebar-group__status{position:absolute;top:calc(50% - .625rem);inset-inline-end:calc(50% - .625rem);transform:translate(calc(50% * var(--mlv-inline-direction)),-50%);pointer-events:none}@media(prefers-reduced-motion:reduce){.mlv-sidebar-group__icon-btn,.mlv-sidebar-group__arrow,.mlv-sidebar-group__label,.mlv-sidebar-group__badge,.mlv-sidebar-group__content{transition-duration:var(--mlv-duration-instant)}}.mlv-sidebar-group__flyout-popup.mlv-popup{padding:var(--mlv-spacing-2)}.mlv-sidebar-group__flyout{display:flex;flex-direction:column;gap:.0625rem}.mlv-sidebar-group__flyout-header{display:flex;align-items:center;gap:var(--mlv-spacing-2);padding:.3125rem .625rem .5rem;font-size:var(--mlv-font-size-m);font-weight:600;color:var(--mlv-text-secondary);border-bottom:.0625rem solid var(--mlv-border-normal);margin-bottom:.125rem;white-space:nowrap}.mlv-sidebar-group__flyout-title{flex:1;overflow:hidden;text-overflow:ellipsis}.mlv-sidebar-group__flyout-badge{flex-shrink:0}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LucideChevronDown, selector: "svg[lucideChevronDown]" }, { kind: "component", type: MlvPopupContainer, selector: "mlv-popup-container" }, { kind: "component", type: MlvPopup, selector: "mlv-popup", inputs: ["position", "positions", "width", "height", "minWidth", "minHeight", "maxWidth", "maxHeight", "hasArrow", "hasShadow", "class", "mlvDensity", "flexibleDimensions", "scrollStrategy", "hasBackdrop", "restrictPosition", "panelRole", "modal", "ariaLabel", "dismissExcludeElements", "mobileMode", "mobileBreakpoint", "mobileTitle", "mobileCloseLabel", "opened"], outputs: ["openedChange", "afterOpened", "afterClosed"] }, { kind: "directive", type: MlvPopupContent, selector: "[mlvPopupContent]" }, { kind: "directive", type: MlvPopupTrigger, selector: "[mlvPopupTrigger]", inputs: ["mlvPopupTrigger", "triggerOn", "ariaHasPopup"], exportAs: ["mlvPopupTrigger"] }, { kind: "component", type: MlvExpand, selector: "mlv-expand", inputs: ["opened", "disabled", "ariaLabel", "ariaLabelledBy"], outputs: ["openedChange"] }, { kind: "component", type: MlvBadge, selector: "mlv-badge", inputs: ["tone", "rounded", "muted"] }, { kind: "component", type: MlvStatusIndicator, selector: "mlv-status-indicator", inputs: ["tone", "pulse", "size", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
949
+ }
950
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarGroup, decorators: [{
951
+ type: Component,
952
+ args: [{ selector: 'mlv-sidebar-group', imports: [
953
+ NgTemplateOutlet,
954
+ LucideChevronDown,
955
+ MlvPopupContainer,
956
+ MlvPopup,
957
+ MlvPopupContent,
958
+ MlvPopupTrigger,
959
+ MlvExpand,
960
+ MlvBadge,
961
+ MlvStatusIndicator,
962
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'mlv-sidebar-group-host' }, providers: [
963
+ {
964
+ provide: SIDEBAR_CONTEXT,
965
+ useFactory: () => {
966
+ const group = inject(forwardRef(() => MlvSidebarGroup));
967
+ const parentCtx = inject(SIDEBAR_CONTEXT, {
968
+ skipSelf: true,
969
+ optional: true,
970
+ });
971
+ return {
972
+ collapsed: parentCtx?.collapsed ?? signal(false),
973
+ inFlyout: group.flyoutOpen,
974
+ mode: parentCtx?.mode ?? signal('icon'),
975
+ effectiveMode: parentCtx?.effectiveMode ?? parentCtx?.mode,
976
+ // Proxy to parent — intentionally no-op when group is the root context provider
977
+ toggle: () => parentCtx?.toggle(),
978
+ setWidth: (px) => parentCtx?.setWidth(px),
979
+ };
980
+ },
981
+ },
982
+ ], template: "<!-- \u2500\u2500\u2500 Children captured once \u2014 rendered in accordion OR flyout \u2500\u2500\u2500 -->\n<ng-template #childrenRef>\n <ng-content />\n</ng-template>\n\n<!-- The expanded header remains mounted during collapse so its text can fade\n without moving the icon out of the shared fixed-width column. -->\n<div\n class=\"mlv-sidebar-group\"\n [class.mlv-sidebar-group--expanded]=\"expanded()\"\n [class.mlv-sidebar-group--collapsed]=\"isSidebarCollapsed()\"\n [attr.aria-hidden]=\"isSidebarCollapsed() ? 'true' : null\"\n [attr.inert]=\"isSidebarCollapsed() ? '' : null\"\n>\n <button\n class=\"mlv-sidebar-group__header\"\n type=\"button\"\n [class.mlv-sidebar-group__header--active]=\"hasActiveChild()\"\n [attr.aria-expanded]=\"expanded()\"\n (click)=\"toggle()\"\n >\n @if (iconRef(); as iconTpl) {\n <span class=\"mlv-sidebar-group__icon\">\n <ng-container [ngTemplateOutlet]=\"iconTpl.templateRef\" />\n </span>\n }\n <span class=\"mlv-sidebar-group__label\">{{ label() }}</span>\n @if (_hasBadge()) {\n <mlv-badge\n class=\"mlv-sidebar-group__badge\"\n [tone]=\"badgeTone()\"\n muted\n mlvDensity=\"tight\"\n aria-hidden=\"true\"\n >{{ badge() }}</mlv-badge\n >\n }\n <svg\n class=\"mlv-sidebar-group__arrow\"\n [class.mlv-sidebar-group__arrow--open]=\"expanded()\"\n lucideChevronDown\n size=\"16\"\n />\n </button>\n\n <mlv-expand\n class=\"mlv-sidebar-group__content\"\n [opened]=\"_accordionOpen()\"\n (openedChange)=\"expanded.set($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"childrenTpl()\" />\n </mlv-expand>\n</div>\n\n<!-- \u2500\u2500\u2500 COLLAPSED sidebar: icon button + popup flyout on click \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n@if (isSidebarCollapsed()) {\n<mlv-popup-container #flyoutContainer class=\"mlv-sidebar-group__collapsed\">\n <button\n #triggerBtn\n mlvPopupTrigger\n [triggerOn]=\"'click'\"\n class=\"mlv-sidebar-group__icon-btn\"\n type=\"button\"\n [class.mlv-sidebar-group__icon-btn--active]=\"hasActiveChild()\"\n [attr.aria-label]=\"_resolvedAriaLabel()\"\n [attr.aria-expanded]=\"flyoutOpen()\"\n [ariaHasPopup]=\"'menu'\"\n (keydown)=\"onTriggerKeydown($event)\"\n (mouseenter)=\"onIconBtnMouseEnter()\"\n (mouseleave)=\"onIconBtnMouseLeave()\"\n (focus)=\"onIconBtnMouseEnter()\"\n (blur)=\"onIconBtnMouseLeave()\"\n >\n @if (iconRef(); as iconTpl) {\n <ng-container [ngTemplateOutlet]=\"iconTpl.templateRef\" />\n } @if (_hasBadge()) {\n <mlv-status-indicator\n class=\"mlv-sidebar-group__status\"\n [tone]=\"badgeTone()\"\n [pulse]=\"badgePulse()\"\n />\n }\n </button>\n\n <mlv-popup\n #flyoutPopup\n position=\"right-start\"\n [minWidth]=\"180\"\n scrollStrategy=\"close\"\n class=\"mlv-sidebar-group__flyout-popup\"\n >\n <ng-template mlvPopupContent>\n <div\n class=\"mlv-sidebar-group__flyout\"\n [id]=\"_flyoutId\"\n role=\"menu\"\n [attr.aria-label]=\"label()\"\n (keydown)=\"onFlyoutKeydown($event)\"\n (click)=\"onFlyoutClick($event)\"\n (focusout)=\"onFlyoutFocusOut($event)\"\n tabindex=\"-1\"\n >\n <div class=\"mlv-sidebar-group__flyout-header\" aria-hidden=\"true\">\n <span class=\"mlv-sidebar-group__flyout-title\">{{ label() }}</span>\n @if (_hasBadge()) {\n <mlv-badge\n class=\"mlv-sidebar-group__flyout-badge\"\n [tone]=\"badgeTone()\"\n muted\n mlvDensity=\"tight\"\n >{{ badge() }}</mlv-badge\n >\n }\n </div>\n <ng-container [ngTemplateOutlet]=\"childrenTpl()\" />\n </div>\n </ng-template>\n </mlv-popup>\n</mlv-popup-container>\n\n<!-- Tooltip anchored to the icon button (registered via effect) -->\n<mlv-popup-container #tooltipContainer>\n <mlv-popup\n panelRole=\"tooltip\"\n position=\"right\"\n [hasShadow]=\"true\"\n [hasBackdrop]=\"false\"\n scrollStrategy=\"close\"\n class=\"mlv-sidebar-group__tooltip-container\"\n >\n <ng-template mlvPopupContent>{{ label() }}</ng-template>\n </mlv-popup>\n</mlv-popup-container>\n}\n", styles: ["@charset \"UTF-8\";@layer mlv.components{.mlv-sidebar-group-host{display:grid;width:100%;min-width:0}.mlv-sidebar-group-host>.mlv-sidebar-group,.mlv-sidebar-group-host>.mlv-sidebar-group__collapsed{grid-area:1/1;min-width:0}.mlv-sidebar-group{width:100%;min-width:0}.mlv-sidebar-group--collapsed{pointer-events:none}.mlv-sidebar-group__header{display:grid;grid-template-columns:var(--mlv-sidebar-icon-column-width, 3.5rem) minmax(0,1fr) auto auto;align-items:center;width:100%;min-height:var(--mlv-sidebar-row-height, 2.25rem);padding:0;border:none;border-radius:var(--mlv-radius-m);background:transparent;cursor:pointer;font-size:var(--mlv-font-size-l);color:var(--mlv-text-secondary);text-align:start;transition-property:background-color,color;transition-duration:var(--mlv-duration-normal);transition-timing-function:var(--mlv-ease-default);line-height:var(--mlv-line-height-snug);outline:none}.mlv-sidebar-group__header *{color:inherit}.mlv-sidebar-group__header:hover,.mlv-sidebar-group__header:focus-visible{background-color:var(--mlv-sidebar-hover-bg, var(--mlv-background-neutral-1));color:var(--mlv-text-primary)}.mlv-sidebar-group__header:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-group__header--active{color:var(--mlv-text-on-selected);font-weight:600}.mlv-sidebar-group__icon{display:flex;align-items:center;justify-content:center}.mlv-sidebar-group__label{font-size:var(--mlv-font-size-l);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:1;transform:translate(0);visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-group__badge{flex-shrink:0;margin-inline-end:var(--mlv-spacing-2);opacity:1;visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-group__arrow{flex-shrink:0;margin-inline-end:var(--mlv-spacing-2);transition:transform var(--mlv-duration-normal) var(--mlv-ease-default)}.mlv-sidebar-group__arrow--open{transform:rotate(180deg)}.mlv-sidebar-group--collapsed .mlv-sidebar-group__label{opacity:0;transform:translate(calc(-.25rem * var(--mlv-inline-direction)));visibility:hidden;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear var(--mlv-duration-normal)}.mlv-sidebar-group--collapsed .mlv-sidebar-group__badge,.mlv-sidebar-group--collapsed .mlv-sidebar-group__arrow{opacity:0;visibility:hidden;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear var(--mlv-duration-normal)}.mlv-sidebar-group__content{margin-inline-start:calc(var(--mlv-sidebar-icon-column-width, 3.5rem) / 2);border-inline-start:.09375rem solid transparent;padding-inline-start:.53125rem;padding-top:0;transition:border-color var(--mlv-duration-normal) var(--mlv-ease-default),padding-top var(--mlv-duration-normal) var(--mlv-ease-default)}.mlv-sidebar-group__content.mlv-expand--open{border-color:var(--mlv-sidebar-rail-color, var(--mlv-border-normal));padding-top:.125rem}.mlv-sidebar-group__content .mlv-expand__body-inner{display:flex;flex-direction:column;gap:.0625rem}.mlv-sidebar-group__tooltip-container.mlv-popup{padding:var(--mlv-padding-m)}.mlv-sidebar-group__icon-btn{position:relative;display:flex;align-items:center;justify-content:center;width:var(--mlv-sidebar-icon-column-width, 3.5rem);min-height:var(--mlv-sidebar-row-height, 2.25rem);padding:0;border:none;border-radius:var(--mlv-radius-m);background:transparent;cursor:pointer;color:var(--mlv-text-secondary);transition:background-color var(--mlv-duration-fast) var(--mlv-ease-default),color var(--mlv-duration-fast) var(--mlv-ease-default);outline:none}.mlv-sidebar-group__icon-btn:after{content:\"\\203a\";position:absolute;inset-inline-end:.1875rem;bottom:.0625rem;font-size:.875rem;font-weight:700;line-height:1;opacity:.8;pointer-events:none}.mlv-sidebar-group__icon-btn:hover,.mlv-sidebar-group__icon-btn:focus-visible{background-color:var(--mlv-sidebar-hover-bg, var(--mlv-background-neutral-1));color:var(--mlv-text-primary)}.mlv-sidebar-group__icon-btn:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-group__icon-btn.mlv-sidebar-group__icon-btn--active,.mlv-sidebar-group__icon-btn.mlv-sidebar-group__icon-btn--active:hover,.mlv-sidebar-group__icon-btn.mlv-sidebar-group__icon-btn--active:focus-visible{color:var(--mlv-text-on-selected);background-color:var(--mlv-sidebar-active-bg, var(--mlv-background-selected))}.mlv-sidebar-group__icon-btn:active{transform:scale(.97)}.mlv-sidebar-group__icon-btn .mlv-sidebar-group__status{position:absolute;top:calc(50% - .625rem);inset-inline-end:calc(50% - .625rem);transform:translate(calc(50% * var(--mlv-inline-direction)),-50%);pointer-events:none}@media(prefers-reduced-motion:reduce){.mlv-sidebar-group__icon-btn,.mlv-sidebar-group__arrow,.mlv-sidebar-group__label,.mlv-sidebar-group__badge,.mlv-sidebar-group__content{transition-duration:var(--mlv-duration-instant)}}.mlv-sidebar-group__flyout-popup.mlv-popup{padding:var(--mlv-spacing-2)}.mlv-sidebar-group__flyout{display:flex;flex-direction:column;gap:.0625rem}.mlv-sidebar-group__flyout-header{display:flex;align-items:center;gap:var(--mlv-spacing-2);padding:.3125rem .625rem .5rem;font-size:var(--mlv-font-size-m);font-weight:600;color:var(--mlv-text-secondary);border-bottom:.0625rem solid var(--mlv-border-normal);margin-bottom:.125rem;white-space:nowrap}.mlv-sidebar-group__flyout-title{flex:1;overflow:hidden;text-overflow:ellipsis}.mlv-sidebar-group__flyout-badge{flex-shrink:0}}\n"] }]
983
+ }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], badgeTone: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeTone", required: false }] }], badgePulse: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgePulse", required: false }] }], iconRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvSidebarItemIcon), { isSignal: true }] }], _childItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => MlvSidebarItem), { ...{
984
+ descendants: true,
985
+ }, isSignal: true }] }], childrenTpl: [{ type: i0.ViewChild, args: ['childrenRef', { isSignal: true }] }], _triggerBtn: [{ type: i0.ViewChild, args: ['triggerBtn', { isSignal: true }] }], _flyoutContainer: [{ type: i0.ViewChild, args: ['flyoutContainer', { isSignal: true }] }], _flyoutPopup: [{ type: i0.ViewChild, args: ['flyoutPopup', { isSignal: true }] }], _tooltipContainer: [{ type: i0.ViewChild, args: ['tooltipContainer', { isSignal: true }] }] } });
986
+
987
+ class MlvSidebarRail {
988
+ /** Minimum sidebar width in px during drag. */
989
+ minWidth = input(200, /* @ts-ignore */
990
+ ...(ngDevMode ? [{ debugName: "minWidth" }] : /* istanbul ignore next */ []));
991
+ /** Maximum sidebar width in px during drag. */
992
+ maxWidth = input(480, /* @ts-ignore */
993
+ ...(ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []));
994
+ /** Width below which the sidebar snaps to collapsed. */
995
+ snapThreshold = input(100, /* @ts-ignore */
996
+ ...(ngDevMode ? [{ debugName: "snapThreshold" }] : /* istanbul ignore next */ []));
997
+ /** @private Sidebar context for reading/writing state. */
998
+ _context = inject(SIDEBAR_CONTEXT);
999
+ /** @private Reference to the host element. */
1000
+ _elementRef = inject((ElementRef));
1001
+ /** @private Angular zone for running outside zone during drag. */
1002
+ _ngZone = inject(NgZone);
1003
+ /** @private Destroy reference for cleanup. */
1004
+ _destroyRef = inject(DestroyRef);
1005
+ /** @private Normalizes horizontal resize arrows for RTL layouts. */
1006
+ _rtlService = inject(MlvRtlService);
1007
+ /** @protected Whether a drag is in progress. */
1008
+ _isDragging = signal(false, /* @ts-ignore */
1009
+ ...(ngDevMode ? [{ debugName: "_isDragging" }] : /* istanbul ignore next */ []));
1010
+ /** @protected Current sidebar width in pixels (for ARIA). */
1011
+ _currentWidthPx = signal(260, /* @ts-ignore */
1012
+ ...(ngDevMode ? [{ debugName: "_currentWidthPx" }] : /* istanbul ignore next */ []));
1013
+ /** @private Sidebar container element reference, resolved on first drag. */
1014
+ _sidebarEl = null;
1015
+ /** @private Stored transition value to restore after drag. */
1016
+ _savedTransition = '';
1017
+ /** @private Bound pointermove handler for cleanup. */
1018
+ _onPointerMoveBound = this._onPointerMove.bind(this);
1019
+ /** @private Bound pointerup handler for cleanup. */
1020
+ _onPointerUpBound = this._onPointerUp.bind(this);
1021
+ /** @private Animation frame ID for drag throttle. */
1022
+ _rafId = 0;
1023
+ /** @private Whether to snap to collapsed on pointerup. */
1024
+ _shouldSnap = false;
1025
+ /** @private Whether to expand from collapsed on pointerup. */
1026
+ _shouldExpand = false;
1027
+ /** @private Width to apply after expanding from collapsed state. */
1028
+ _expandWidth = 0;
1029
+ constructor() {
1030
+ this._destroyRef.onDestroy(() => {
1031
+ this._cleanup();
1032
+ });
1033
+ }
1034
+ /** @protected Handle double-click to toggle collapsed state. */
1035
+ _onDoubleClick() {
1036
+ this._context.toggle();
1037
+ }
1038
+ /** @protected Handle keyboard navigation. */
1039
+ _onKeydown(event) {
1040
+ const step = 10;
1041
+ switch (this._rtlService.normalizeArrowKey(event) ?? event.key) {
1042
+ case LEFT_ARROW:
1043
+ event.preventDefault();
1044
+ if (!this._context.collapsed()) {
1045
+ this._adjustWidth(-step);
1046
+ }
1047
+ break;
1048
+ case RIGHT_ARROW:
1049
+ event.preventDefault();
1050
+ if (this._context.collapsed()) {
1051
+ this._context.toggle();
1052
+ }
1053
+ else {
1054
+ this._adjustWidth(step);
1055
+ }
1056
+ break;
1057
+ case 'Home':
1058
+ event.preventDefault();
1059
+ if (!this._context.collapsed()) {
1060
+ this._context.toggle();
1061
+ }
1062
+ break;
1063
+ case 'End':
1064
+ event.preventDefault();
1065
+ if (this._context.collapsed()) {
1066
+ this._context.toggle();
1067
+ }
1068
+ break;
1069
+ }
1070
+ }
1071
+ /** @protected Handle pointer down to start drag. */
1072
+ _onPointerDown(event) {
1073
+ event.preventDefault();
1074
+ this._isDragging.set(true);
1075
+ this._shouldSnap = false;
1076
+ this._shouldExpand = false;
1077
+ this._expandWidth = 0;
1078
+ // Width is owned by the sidebar host so its border, gutter, and content
1079
+ // stay in one box-model calculation during resize and collapse.
1080
+ this._sidebarEl = this._elementRef.nativeElement.closest('.mlv-sidebar');
1081
+ if (this._sidebarEl) {
1082
+ this._savedTransition = this._sidebarEl.style.transition;
1083
+ this._sidebarEl.style.transition = 'none';
1084
+ this._currentWidthPx.set(this._sidebarEl.getBoundingClientRect().width);
1085
+ }
1086
+ this._elementRef.nativeElement.setPointerCapture(event.pointerId);
1087
+ this._ngZone.runOutsideAngular(() => {
1088
+ document.addEventListener('pointermove', this._onPointerMoveBound);
1089
+ document.addEventListener('pointerup', this._onPointerUpBound);
1090
+ });
1091
+ document.body.style.userSelect = 'none';
1092
+ document.body.style.cursor = 'col-resize';
1093
+ }
1094
+ /** @private Handle pointer move during drag. */
1095
+ _onPointerMove(event) {
1096
+ const sidebarEl = this._sidebarEl;
1097
+ if (!sidebarEl)
1098
+ return;
1099
+ if (this._rafId)
1100
+ cancelAnimationFrame(this._rafId);
1101
+ this._rafId = requestAnimationFrame(() => {
1102
+ const sidebarRect = sidebarEl.getBoundingClientRect();
1103
+ const newWidth = event.clientX - sidebarRect.left;
1104
+ const isCollapsed = this._context.collapsed();
1105
+ if (isCollapsed) {
1106
+ // Dragging right from collapsed — mark for expansion on pointerup
1107
+ if (newWidth >= this.snapThreshold()) {
1108
+ this._shouldExpand = true;
1109
+ this._expandWidth = clamp(newWidth, this.minWidth(), this.maxWidth());
1110
+ }
1111
+ else {
1112
+ this._shouldExpand = false;
1113
+ }
1114
+ }
1115
+ else if (newWidth < this.snapThreshold()) {
1116
+ // Dragging left below threshold — mark for collapse on pointerup
1117
+ this._shouldSnap = true;
1118
+ }
1119
+ else {
1120
+ this._shouldSnap = false;
1121
+ const clamped = clamp(newWidth, this.minWidth(), this.maxWidth());
1122
+ this._ngZone.run(() => {
1123
+ this._context.setWidth(clamped);
1124
+ this._currentWidthPx.set(clamped);
1125
+ });
1126
+ }
1127
+ });
1128
+ }
1129
+ /** @private Handle pointer up to end drag. */
1130
+ _onPointerUp(_event) {
1131
+ this._cleanup();
1132
+ if (this._sidebarEl) {
1133
+ this._sidebarEl.style.transition = this._savedTransition;
1134
+ }
1135
+ this._ngZone.run(() => {
1136
+ this._isDragging.set(false);
1137
+ if (this._shouldSnap) {
1138
+ this._context.toggle();
1139
+ }
1140
+ else if (this._shouldExpand) {
1141
+ this._context.toggle();
1142
+ this._context.setWidth(this._expandWidth);
1143
+ this._currentWidthPx.set(this._expandWidth);
1144
+ }
1145
+ });
1146
+ }
1147
+ /** @private Remove document listeners and reset drag state. */
1148
+ _cleanup() {
1149
+ document.removeEventListener('pointermove', this._onPointerMoveBound);
1150
+ document.removeEventListener('pointerup', this._onPointerUpBound);
1151
+ document.body.style.userSelect = '';
1152
+ document.body.style.cursor = '';
1153
+ if (this._rafId) {
1154
+ cancelAnimationFrame(this._rafId);
1155
+ this._rafId = 0;
1156
+ }
1157
+ }
1158
+ /** @private Adjust width by a delta, clamping to min/max. */
1159
+ _adjustWidth(delta) {
1160
+ const current = this._currentWidthPx();
1161
+ const next = clamp(current + delta, this.minWidth(), this.maxWidth());
1162
+ this._context.setWidth(next);
1163
+ this._currentWidthPx.set(next);
1164
+ }
1165
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarRail, deps: [], target: i0.ɵɵFactoryTarget.Component });
1166
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: MlvSidebarRail, isStandalone: true, selector: "mlv-sidebar-rail", inputs: { minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, snapThreshold: { classPropertyName: "snapThreshold", publicName: "snapThreshold", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "separator", "aria-orientation": "vertical", "tabindex": "0", "aria-label": "Resize sidebar" }, listeners: { "pointerdown": "_onPointerDown($event)", "dblclick": "_onDoubleClick()", "keydown": "_onKeydown($event)" }, properties: { "class.mlv-sidebar-rail--dragging": "_isDragging()", "attr.aria-valuetext": "_currentWidthPx() + \"px\"", "attr.aria-valuenow": "_currentWidthPx()", "attr.aria-valuemin": "minWidth()", "attr.aria-valuemax": "maxWidth()" }, classAttribute: "mlv-sidebar-rail" }, ngImport: i0, template: '', isInline: true, styles: ["@layer mlv.components{.mlv-sidebar-rail{position:absolute;top:0;inset-inline-end:-.0625rem;width:.125rem;height:100%;background-color:transparent;cursor:col-resize;z-index:1;transition:width var(--mlv-duration-fast) var(--mlv-ease-default),background-color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-sidebar-rail:before{content:\"\";position:absolute;top:0;inset-inline:-.25rem;bottom:0}.mlv-sidebar-rail:hover{width:.25rem;background-color:var(--mlv-background-accent-1)}.mlv-sidebar-rail:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:var(--mlv-focus-ring-offset)}.mlv-sidebar-rail--dragging{width:.25rem;background-color:var(--mlv-background-accent-1)}@media(prefers-reduced-motion:reduce){.mlv-sidebar-rail,.mlv-sidebar-rail *,.mlv-sidebar-rail:before,.mlv-sidebar-rail:after,[class^=mlv-sidebar-rail__],[class*=\" mlv-sidebar-rail__\"],[class^=mlv-sidebar-rail--],[class*=\" mlv-sidebar-rail--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1167
+ }
1168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarRail, decorators: [{
1169
+ type: Component,
1170
+ args: [{ selector: 'mlv-sidebar-rail', template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1171
+ class: 'mlv-sidebar-rail',
1172
+ '[class.mlv-sidebar-rail--dragging]': '_isDragging()',
1173
+ role: 'separator',
1174
+ 'aria-orientation': 'vertical',
1175
+ tabindex: '0',
1176
+ 'aria-label': 'Resize sidebar',
1177
+ '[attr.aria-valuetext]': '_currentWidthPx() + "px"',
1178
+ '[attr.aria-valuenow]': '_currentWidthPx()',
1179
+ '[attr.aria-valuemin]': 'minWidth()',
1180
+ '[attr.aria-valuemax]': 'maxWidth()',
1181
+ '(pointerdown)': '_onPointerDown($event)',
1182
+ '(dblclick)': '_onDoubleClick()',
1183
+ '(keydown)': '_onKeydown($event)',
1184
+ }, styles: ["@layer mlv.components{.mlv-sidebar-rail{position:absolute;top:0;inset-inline-end:-.0625rem;width:.125rem;height:100%;background-color:transparent;cursor:col-resize;z-index:1;transition:width var(--mlv-duration-fast) var(--mlv-ease-default),background-color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-sidebar-rail:before{content:\"\";position:absolute;top:0;inset-inline:-.25rem;bottom:0}.mlv-sidebar-rail:hover{width:.25rem;background-color:var(--mlv-background-accent-1)}.mlv-sidebar-rail:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:var(--mlv-focus-ring-offset)}.mlv-sidebar-rail--dragging{width:.25rem;background-color:var(--mlv-background-accent-1)}@media(prefers-reduced-motion:reduce){.mlv-sidebar-rail,.mlv-sidebar-rail *,.mlv-sidebar-rail:before,.mlv-sidebar-rail:after,[class^=mlv-sidebar-rail__],[class*=\" mlv-sidebar-rail__\"],[class^=mlv-sidebar-rail--],[class*=\" mlv-sidebar-rail--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"] }]
1185
+ }], ctorParameters: () => [], propDecorators: { minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], snapThreshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapThreshold", required: false }] }] } });
1186
+
1187
+ /**
1188
+ * Sidebar trigger button that toggles the sidebar's collapsed state.
1189
+ * Renders as a transparent icon button visually matching collapsed sidebar
1190
+ * items, so it sits flush with the rest of the sidebar chrome.
1191
+ * Automatically hides itself in fixed mode.
1192
+ *
1193
+ * When the sidebar's effective mode is `'offcanvas'` (either `mode="offcanvas"`
1194
+ * or a `collapseBelow` breakpoint override) the trigger renders as a
1195
+ * hamburger/close menu button instead of the rail collapse chevrons.
1196
+ *
1197
+ * Usage:
1198
+ * ```html
1199
+ * <mlv-sidebar [collapsed]="collapsed()">
1200
+ * <mlv-sidebar-trigger />
1201
+ * </mlv-sidebar>
1202
+ * ```
1203
+ *
1204
+ * An offcanvas sidebar does not render its projected content while closed, so
1205
+ * a trigger that must reopen the drawer has to live outside `<mlv-sidebar>`.
1206
+ * Point it at the sidebar with the `sidebar` input:
1207
+ *
1208
+ * ```html
1209
+ * <mlv-sidebar #nav collapseBelow="md">…</mlv-sidebar>
1210
+ * <mlv-sidebar-trigger [sidebar]="nav" />
1211
+ * ```
1212
+ */
1213
+ class MlvSidebarTrigger {
1214
+ /** @private Native button query backing the public focus target. */
1215
+ _triggerButton = viewChild('triggerButton', /* @ts-ignore */
1216
+ ...(ngDevMode ? [{ debugName: "_triggerButton" }] : /* istanbul ignore next */ []));
1217
+ /**
1218
+ * The sidebar this trigger controls, for triggers rendered outside
1219
+ * `<mlv-sidebar>`. Pass the sidebar's template reference
1220
+ * (`<mlv-sidebar #nav />` → `[sidebar]="nav"`). Required whenever the sidebar
1221
+ * can be an offcanvas drawer, because a closed drawer does not render its
1222
+ * projected content — an inner trigger would disappear with it.
1223
+ *
1224
+ * When omitted, the trigger uses the `SIDEBAR_CONTEXT` of its ancestor
1225
+ * sidebar.
1226
+ */
1227
+ sidebar = input(undefined, /* @ts-ignore */
1228
+ ...(ngDevMode ? [{ debugName: "sidebar" }] : /* istanbul ignore next */ []));
1229
+ /**
1230
+ * The connected native button rendered by this trigger, or `null` before
1231
+ * its view exists. Pass this to an overlay's explicit focus-restoration
1232
+ * option when the activating control can disappear with an offcanvas view.
1233
+ */
1234
+ focusTarget = computed(() => this._triggerButton()?.nativeElement ?? null, /* @ts-ignore */
1235
+ ...(ngDevMode ? [{ debugName: "focusTarget" }] : /* istanbul ignore next */ []));
1236
+ /** @protected Localised labels for the sidebar trigger. */
1237
+ _i18n = inject(MLV_SIDEBAR_I18N);
1238
+ /** @private Ancestor sidebar context, when this trigger is nested in one. */
1239
+ _injectedContext = inject(SIDEBAR_CONTEXT, {
1240
+ optional: true,
1241
+ });
1242
+ /**
1243
+ * @private The context actually driven by this trigger — the explicit
1244
+ * `sidebar` input wins over the injected ancestor context.
1245
+ */
1246
+ _context = computed(() => this.sidebar() ?? this._injectedContext, /* @ts-ignore */
1247
+ ...(ngDevMode ? [{ debugName: "_context" }] : /* istanbul ignore next */ []));
1248
+ /** @protected Whether the sidebar is collapsed (drawer closed in offcanvas). */
1249
+ _collapsed = computed(() => this._context()?.collapsed() ?? false, /* @ts-ignore */
1250
+ ...(ngDevMode ? [{ debugName: "_collapsed" }] : /* istanbul ignore next */ []));
1251
+ /** @private The sidebar's effective layout mode, responsive override included. */
1252
+ _mode = computed(() => {
1253
+ const context = this._context();
1254
+ if (!context)
1255
+ return 'icon';
1256
+ return context.effectiveMode?.() ?? context.mode();
1257
+ }, /* @ts-ignore */
1258
+ ...(ngDevMode ? [{ debugName: "_mode" }] : /* istanbul ignore next */ []));
1259
+ /**
1260
+ * @protected True when the sidebar currently behaves as an overlay drawer, so
1261
+ * the trigger renders as a menu button rather than a rail collapse toggle.
1262
+ */
1263
+ _isDrawerTrigger = computed(() => this._mode() === 'offcanvas', /* @ts-ignore */
1264
+ ...(ngDevMode ? [{ debugName: "_isDrawerTrigger" }] : /* istanbul ignore next */ []));
1265
+ /**
1266
+ * The connected native trigger button while its sidebar currently behaves
1267
+ * as an offcanvas drawer; otherwise `null`. Use this as an explicit overlay
1268
+ * focus fallback when a projected activator can disappear with the drawer,
1269
+ * while retaining the overlay's default opener restoration in inline modes.
1270
+ */
1271
+ offcanvasFocusTarget() {
1272
+ const target = this.focusTarget();
1273
+ return this._isDrawerTrigger() && target?.isConnected ? target : null;
1274
+ }
1275
+ /**
1276
+ * Late-bound overlay focus policy. Pass the function itself to a dynamic
1277
+ * restore-focus option: it resolves to the connected external trigger in
1278
+ * offcanvas mode and to the overlay's captured-opener default otherwise.
1279
+ */
1280
+ restoreFocusResolver = () => this.offcanvasFocusTarget() ?? true;
1281
+ /** @protected Whether the trigger should be hidden (fixed mode). */
1282
+ _isHidden = computed(() => this._mode() === 'fixed', /* @ts-ignore */
1283
+ ...(ngDevMode ? [{ debugName: "_isHidden" }] : /* istanbul ignore next */ []));
1284
+ /** @protected Accessible name matching the current affordance and state. */
1285
+ _resolvedAriaLabel = computed(() => {
1286
+ const strings = this._i18n();
1287
+ if (this._isDrawerTrigger()) {
1288
+ return this._collapsed()
1289
+ ? strings.openNavigation
1290
+ : strings.closeNavigation;
1291
+ }
1292
+ return this._collapsed() ? strings.expand : strings.collapse;
1293
+ }, /* @ts-ignore */
1294
+ ...(ngDevMode ? [{ debugName: "_resolvedAriaLabel" }] : /* istanbul ignore next */ []));
1295
+ /** @protected Toggle the sidebar collapsed state. */
1296
+ _toggle() {
1297
+ this._context()?.toggle();
1298
+ }
1299
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarTrigger, deps: [], target: i0.ɵɵFactoryTarget.Component });
1300
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvSidebarTrigger, isStandalone: true, selector: "mlv-sidebar-trigger", inputs: { sidebar: { classPropertyName: "sidebar", publicName: "sidebar", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.mlv-sidebar-trigger--hidden": "_isHidden()", "class.mlv-sidebar-trigger--menu": "_isDrawerTrigger()" }, classAttribute: "mlv-sidebar-trigger" }, viewQueries: [{ propertyName: "_triggerButton", first: true, predicate: ["triggerButton"], descendants: true, isSignal: true }], ngImport: i0, template: `
1301
+ <button
1302
+ #triggerButton
1303
+ type="button"
1304
+ class="mlv-sidebar-trigger__btn"
1305
+ [attr.aria-label]="_resolvedAriaLabel()"
1306
+ [attr.aria-expanded]="!_collapsed()"
1307
+ (click)="_toggle()"
1308
+ >
1309
+ @if (_isDrawerTrigger()) {
1310
+ @if (_collapsed()) {
1311
+ <svg lucideMenu [size]="20" class="mlv-sidebar-trigger__icon" />
1312
+ } @else {
1313
+ <svg lucideX [size]="20" class="mlv-sidebar-trigger__icon" />
1314
+ }
1315
+ } @else if (_collapsed()) {
1316
+ <svg
1317
+ lucidePanelLeftOpen
1318
+ [size]="20"
1319
+ class="mlv-sidebar-trigger__icon"
1320
+ />
1321
+ } @else {
1322
+ <svg
1323
+ lucidePanelLeftClose
1324
+ [size]="20"
1325
+ class="mlv-sidebar-trigger__icon"
1326
+ />
1327
+ }
1328
+ </button>
1329
+ `, isInline: true, styles: ["@layer mlv.components{.mlv-sidebar-trigger{display:flex;width:100%}.mlv-sidebar-trigger--hidden{display:none}.mlv-sidebar-trigger--menu{width:auto}.mlv-sidebar-trigger--menu .mlv-sidebar-trigger__btn{width:var(--mlv-sidebar-row-height, 2.25rem)}.mlv-sidebar-trigger__btn{display:inline-flex;align-items:center;justify-content:center;width:var(--mlv-sidebar-icon-column-width, 3.5rem);min-height:var(--mlv-sidebar-row-height, 2.25rem);padding:0;border:none;border-radius:var(--mlv-radius-m);background:transparent;color:var(--mlv-text-secondary);cursor:pointer;outline:none;transition:background-color var(--mlv-duration-fast) var(--mlv-ease-default),color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-sidebar-trigger__btn:hover{background-color:var(--mlv-sidebar-hover-bg, var(--mlv-background-neutral-1));color:var(--mlv-text-primary)}.mlv-sidebar-trigger__btn:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-trigger__btn:active{transform:scale(.97)}.mlv-sidebar-trigger__icon{transition:transform var(--mlv-duration-normal) var(--mlv-ease-in-out)}@media(prefers-reduced-motion:reduce){.mlv-sidebar-trigger__icon,.mlv-sidebar-trigger__btn{transition-duration:var(--mlv-duration-instant)}}}\n"], dependencies: [{ kind: "component", type: LucideMenu, selector: "svg[lucideMenu]" }, { kind: "component", type: LucidePanelLeftClose, selector: "svg[lucidePanelLeftClose], svg[lucideSidebarClose]" }, { kind: "component", type: LucidePanelLeftOpen, selector: "svg[lucidePanelLeftOpen], svg[lucideSidebarOpen]" }, { kind: "component", type: LucideX, selector: "svg[lucideX]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1330
+ }
1331
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarTrigger, decorators: [{
1332
+ type: Component,
1333
+ args: [{ selector: 'mlv-sidebar-trigger', template: `
1334
+ <button
1335
+ #triggerButton
1336
+ type="button"
1337
+ class="mlv-sidebar-trigger__btn"
1338
+ [attr.aria-label]="_resolvedAriaLabel()"
1339
+ [attr.aria-expanded]="!_collapsed()"
1340
+ (click)="_toggle()"
1341
+ >
1342
+ @if (_isDrawerTrigger()) {
1343
+ @if (_collapsed()) {
1344
+ <svg lucideMenu [size]="20" class="mlv-sidebar-trigger__icon" />
1345
+ } @else {
1346
+ <svg lucideX [size]="20" class="mlv-sidebar-trigger__icon" />
1347
+ }
1348
+ } @else if (_collapsed()) {
1349
+ <svg
1350
+ lucidePanelLeftOpen
1351
+ [size]="20"
1352
+ class="mlv-sidebar-trigger__icon"
1353
+ />
1354
+ } @else {
1355
+ <svg
1356
+ lucidePanelLeftClose
1357
+ [size]="20"
1358
+ class="mlv-sidebar-trigger__icon"
1359
+ />
1360
+ }
1361
+ </button>
1362
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LucideMenu, LucidePanelLeftClose, LucidePanelLeftOpen, LucideX], host: {
1363
+ class: 'mlv-sidebar-trigger',
1364
+ '[class.mlv-sidebar-trigger--hidden]': '_isHidden()',
1365
+ '[class.mlv-sidebar-trigger--menu]': '_isDrawerTrigger()',
1366
+ }, styles: ["@layer mlv.components{.mlv-sidebar-trigger{display:flex;width:100%}.mlv-sidebar-trigger--hidden{display:none}.mlv-sidebar-trigger--menu{width:auto}.mlv-sidebar-trigger--menu .mlv-sidebar-trigger__btn{width:var(--mlv-sidebar-row-height, 2.25rem)}.mlv-sidebar-trigger__btn{display:inline-flex;align-items:center;justify-content:center;width:var(--mlv-sidebar-icon-column-width, 3.5rem);min-height:var(--mlv-sidebar-row-height, 2.25rem);padding:0;border:none;border-radius:var(--mlv-radius-m);background:transparent;color:var(--mlv-text-secondary);cursor:pointer;outline:none;transition:background-color var(--mlv-duration-fast) var(--mlv-ease-default),color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-sidebar-trigger__btn:hover{background-color:var(--mlv-sidebar-hover-bg, var(--mlv-background-neutral-1));color:var(--mlv-text-primary)}.mlv-sidebar-trigger__btn:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-trigger__btn:active{transform:scale(.97)}.mlv-sidebar-trigger__icon{transition:transform var(--mlv-duration-normal) var(--mlv-ease-in-out)}@media(prefers-reduced-motion:reduce){.mlv-sidebar-trigger__icon,.mlv-sidebar-trigger__btn{transition-duration:var(--mlv-duration-instant)}}}\n"] }]
1367
+ }], propDecorators: { _triggerButton: [{ type: i0.ViewChild, args: ['triggerButton', { isSignal: true }] }], sidebar: [{ type: i0.Input, args: [{ isSignal: true, alias: "sidebar", required: false }] }] } });
1368
+
1369
+ class MlvSidebarWorkspaceLogo {
1370
+ /** Template rendered in both the active trigger and every workspace option. */
1371
+ templateRef = inject((TemplateRef));
1372
+ /** Enables strongly typed `let-workspace` and `let-selected="selected"`. */
1373
+ static ngTemplateContextGuard(_directive, _context) {
1374
+ return true;
1375
+ }
1376
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarWorkspaceLogo, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1377
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvSidebarWorkspaceLogo, isStandalone: true, selector: "[mlvSidebarWorkspaceLogo]", ngImport: i0 });
1378
+ }
1379
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarWorkspaceLogo, decorators: [{
1380
+ type: Directive,
1381
+ args: [{
1382
+ selector: '[mlvSidebarWorkspaceLogo]',
1383
+ }]
1384
+ }] });
1385
+ class MlvSidebarWorkspaceText {
1386
+ /** Template rendered in both the active trigger and every workspace option. */
1387
+ templateRef = inject((TemplateRef));
1388
+ /** Enables strongly typed `let-workspace` and `let-selected="selected"`. */
1389
+ static ngTemplateContextGuard(_directive, _context) {
1390
+ return true;
1391
+ }
1392
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarWorkspaceText, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1393
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvSidebarWorkspaceText, isStandalone: true, selector: "[mlvSidebarWorkspaceText]", ngImport: i0 });
1394
+ }
1395
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarWorkspaceText, decorators: [{
1396
+ type: Directive,
1397
+ args: [{
1398
+ selector: '[mlvSidebarWorkspaceText]',
1399
+ }]
1400
+ }] });
1401
+
1402
+ class MlvSidebarWorkspace {
1403
+ /** @private Parent sidebar context supplying the effective collapsed state. */
1404
+ _sidebarContext = inject(SIDEBAR_CONTEXT, {
1405
+ optional: true,
1406
+ });
1407
+ /** @protected Localized strings for the workspace switcher. */
1408
+ _i18n = inject(MLV_SIDEBAR_I18N);
1409
+ /** @private ICU message resolver used by the trigger's accessible name. */
1410
+ _i18nResolver = inject(MlvI18nResolverService);
1411
+ /**
1412
+ * Workspaces available to the user. A switcher menu is rendered only when
1413
+ * the collection contains more than one workspace.
1414
+ */
1415
+ workspaces = input.required(/* @ts-ignore */
1416
+ ...(ngDevMode ? [{ debugName: "workspaces" }] : /* istanbul ignore next */ []));
1417
+ /**
1418
+ * Currently active workspace. Two-way bind with `[(workspace)]` to receive
1419
+ * user selections made in the workspace menu.
1420
+ */
1421
+ workspace = model.required(/* @ts-ignore */
1422
+ ...(ngDevMode ? [{ debugName: "workspace" }] : /* istanbul ignore next */ []));
1423
+ /** @protected Optional structural template for workspace logos. */
1424
+ _logoTemplate = contentChild(MlvSidebarWorkspaceLogo, /* @ts-ignore */
1425
+ ...(ngDevMode ? [{ debugName: "_logoTemplate" }] : /* istanbul ignore next */ []));
1426
+ /** @protected Optional structural template for workspace text. */
1427
+ _textTemplate = contentChild(MlvSidebarWorkspaceText, /* @ts-ignore */
1428
+ ...(ngDevMode ? [{ debugName: "_textTemplate" }] : /* istanbul ignore next */ []));
1429
+ /** @protected Whether the switcher menu is currently open. */
1430
+ _opened = signal(false, /* @ts-ignore */
1431
+ ...(ngDevMode ? [{ debugName: "_opened" }] : /* istanbul ignore next */ []));
1432
+ /** @protected True when choosing between multiple workspaces is possible. */
1433
+ _hasMultiple = computed(() => this.workspaces().length > 1, /* @ts-ignore */
1434
+ ...(ngDevMode ? [{ debugName: "_hasMultiple" }] : /* istanbul ignore next */ []));
1435
+ /**
1436
+ * @protected Whether the parent sidebar is collapsed. Workspace switchers
1437
+ * outside a sidebar remain expanded.
1438
+ */
1439
+ _isCollapsed = computed(() => this._sidebarContext?.collapsed() ?? false, /* @ts-ignore */
1440
+ ...(ngDevMode ? [{ debugName: "_isCollapsed" }] : /* istanbul ignore next */ []));
1441
+ /**
1442
+ * @protected Accessible trigger name including the current workspace.
1443
+ */
1444
+ _triggerAriaLabel = computed(() => this._i18nResolver.resolve(this._i18n(), 'switchWorkspace', { workspace: this.workspace().label }), /* @ts-ignore */
1445
+ ...(ngDevMode ? [{ debugName: "_triggerAriaLabel" }] : /* istanbul ignore next */ []));
1446
+ /**
1447
+ * @protected Selects a workspace from the menu. The menu item directive
1448
+ * closes the overlay and restores focus to the trigger after this handler.
1449
+ */
1450
+ _selectWorkspace(workspace) {
1451
+ this.workspace.set(workspace);
1452
+ }
1453
+ /** @protected Tracks whether an option represents the active workspace. */
1454
+ _isSelected(workspace) {
1455
+ return workspace.id === this.workspace().id;
1456
+ }
1457
+ /**
1458
+ * @protected Builds the strongly typed context supplied to the logo and text
1459
+ * structural templates.
1460
+ */
1461
+ _templateContext(workspace) {
1462
+ return {
1463
+ $implicit: workspace,
1464
+ selected: this._isSelected(workspace),
1465
+ };
1466
+ }
1467
+ /** @protected Produces a compact fallback monogram when no logo is supplied. */
1468
+ _initials(label) {
1469
+ return label
1470
+ .trim()
1471
+ .split(/\s+/)
1472
+ .slice(0, 2)
1473
+ .map((word) => word.charAt(0))
1474
+ .join('')
1475
+ .toUpperCase();
1476
+ }
1477
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarWorkspace, deps: [], target: i0.ɵɵFactoryTarget.Component });
1478
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvSidebarWorkspace, isStandalone: true, selector: "mlv-sidebar-workspace", inputs: { workspaces: { classPropertyName: "workspaces", publicName: "workspaces", isSignal: true, isRequired: true, transformFunction: null }, workspace: { classPropertyName: "workspace", publicName: "workspace", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { workspace: "workspaceChange" }, host: { properties: { "class.mlv-sidebar-workspace--collapsed": "_isCollapsed()", "class.mlv-sidebar-workspace--multiple": "_hasMultiple()", "class.mlv-sidebar-workspace--open": "_opened()" }, classAttribute: "mlv-sidebar-workspace" }, queries: [{ propertyName: "_logoTemplate", first: true, predicate: MlvSidebarWorkspaceLogo, descendants: true, isSignal: true }, { propertyName: "_textTemplate", first: true, predicate: MlvSidebarWorkspaceText, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #workspaceRow let-option let-location=\"location\">\n <span class=\"mlv-sidebar-workspace__logo\" aria-hidden=\"true\">\n @if (_logoTemplate(); as logoTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"logoTemplate.templateRef\"\n [ngTemplateOutletContext]=\"_templateContext(option)\"\n />\n } @else {\n <span class=\"mlv-sidebar-workspace__monogram\">\n {{ _initials(option.label) }}\n </span>\n }\n </span>\n\n <span class=\"mlv-sidebar-workspace__text\">\n @if (_textTemplate(); as textTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"textTemplate.templateRef\"\n [ngTemplateOutletContext]=\"_templateContext(option)\"\n />\n } @else {\n <span class=\"mlv-sidebar-workspace__label\">{{ option.label }}</span>\n @if (option.description) {\n <span class=\"mlv-sidebar-workspace__description\">\n {{ option.description }}\n </span>\n } }\n </span>\n\n @if (location === 'trigger' && _hasMultiple()) {\n <svg\n class=\"mlv-sidebar-workspace__chevron\"\n lucideChevronsUpDown\n [size]=\"16\"\n aria-hidden=\"true\"\n ></svg>\n } @if (location === 'option' && _isSelected(option)) {\n <svg\n class=\"mlv-sidebar-workspace__check\"\n lucideCheck\n [size]=\"16\"\n aria-hidden=\"true\"\n ></svg>\n }\n</ng-template>\n\n@if (_hasMultiple()) {\n<button\n type=\"button\"\n mlvButton\n variant=\"transparent\"\n class=\"mlv-sidebar-workspace__trigger\"\n [mlvMenuTrigger]=\"workspaceMenu\"\n [attr.aria-label]=\"_triggerAriaLabel()\"\n (menuOpened)=\"_opened.set(true)\"\n (menuClosed)=\"_opened.set(false)\"\n>\n <ng-container\n [ngTemplateOutlet]=\"workspaceRow\"\n [ngTemplateOutletContext]=\"{ $implicit: workspace(), location: 'trigger' }\"\n />\n</button>\n\n<mlv-menu #workspaceMenu [label]=\"_i18n().workspaceMenu\">\n @for (option of workspaces(); track option.id) {\n <mlv-list-item\n mlvMenuItem\n class=\"mlv-sidebar-workspace__option\"\n [attr.aria-current]=\"_isSelected(option) ? 'true' : null\"\n (itemClick)=\"_selectWorkspace(option)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"workspaceRow\"\n [ngTemplateOutletContext]=\"{ $implicit: option, location: 'option' }\"\n />\n </mlv-list-item>\n }\n</mlv-menu>\n} @else {\n<div class=\"mlv-sidebar-workspace__trigger\">\n <ng-container\n [ngTemplateOutlet]=\"workspaceRow\"\n [ngTemplateOutletContext]=\"{ $implicit: workspace(), location: 'trigger' }\"\n />\n</div>\n}\n", styles: ["@layer mlv.components{.mlv-sidebar-workspace{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-sidebar-workspace *{box-sizing:border-box}.mlv-sidebar-workspace{display:block;width:100%;min-width:0}.mlv-sidebar-workspace__trigger,.mlv-sidebar-workspace__option .mlv-list-item__content{display:grid;grid-template-columns:var(--mlv-sidebar-icon-column-width, 2.375rem) minmax(0,1fr) auto;align-items:center;gap:0;width:100%;min-width:0}.mlv-sidebar-workspace__trigger{min-height:2.5rem;padding:0;border:none;border-radius:var(--mlv-radius-m);background-color:transparent;color:var(--mlv-text-primary);font:inherit;text-align:start;outline:none}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger{cursor:pointer;transition:background-color var(--mlv-duration-fast) var(--mlv-ease-out),color var(--mlv-duration-fast) var(--mlv-ease-out),transform var(--mlv-duration-fast) var(--mlv-ease-out-strong)}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger:hover,.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger:focus-visible{background-color:var(--mlv-sidebar-hover-bg, var(--mlv-background-neutral-1))}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger:active{transform:scale(.985)}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger>.mlv-button__text{display:contents}.mlv-sidebar-workspace--open .mlv-sidebar-workspace__trigger{background-color:var(--mlv-background-neutral-1-active)}.mlv-sidebar-workspace__logo{display:flex;align-items:center;justify-content:center;justify-self:center;width:1.75rem;height:1.75rem;overflow:hidden;flex-shrink:0;border-radius:var(--mlv-radius-s);background-color:var(--mlv-background-accent-1);color:var(--mlv-text-primary-on-accent-1)}.mlv-sidebar-workspace__logo>*{max-width:100%;max-height:100%}.mlv-sidebar-workspace__monogram{font-size:var(--mlv-typography-body-s-size);font-weight:var(--mlv-font-weight-semibold);line-height:1}.mlv-sidebar-workspace__text{display:flex;flex-direction:column;min-width:0;overflow:hidden;opacity:1;transform:translate(0);visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-workspace__text>*,.mlv-sidebar-workspace__label,.mlv-sidebar-workspace__description{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mlv-sidebar-workspace__label,.mlv-sidebar-workspace__text>:first-child{color:var(--mlv-text-primary);font-size:var(--mlv-typography-body-m-size);font-weight:var(--mlv-font-weight-semibold);line-height:var(--mlv-typography-body-m-line-height)}.mlv-sidebar-workspace__description,.mlv-sidebar-workspace__text>:not(:first-child){color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-s-size);font-weight:var(--mlv-typography-body-s-weight);line-height:var(--mlv-typography-body-s-line-height)}.mlv-sidebar-workspace__chevron,.mlv-sidebar-workspace__check{margin-inline:var(--mlv-spacing-2);flex-shrink:0;color:var(--mlv-text-secondary)}.mlv-sidebar-workspace__chevron{opacity:1;visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-workspace__check{color:var(--mlv-text-action)}.mlv-sidebar-workspace--collapsed .mlv-sidebar-workspace__trigger{grid-template-columns:var(--mlv-sidebar-icon-column-width, 2.375rem) minmax(0,0fr) 0}.mlv-sidebar-workspace--collapsed .mlv-sidebar-workspace__text{opacity:0;transform:translate(calc(-.25rem * var(--mlv-inline-direction)));visibility:hidden;pointer-events:none;transition-delay:0s,0s,var(--mlv-duration-normal)}.mlv-sidebar-workspace--collapsed .mlv-sidebar-workspace__chevron{margin-inline:0;opacity:0;visibility:hidden;pointer-events:none;transition-delay:0s,var(--mlv-duration-normal)}.mlv-sidebar-workspace__option{min-width:14rem;--mlv-list-item-padding-block: var(--mlv-spacing-1);--mlv-list-item-padding-inline: var(--mlv-spacing-1)}.mlv-sidebar-workspace__option[aria-current=true]{--mlv-list-item-bg: var(--mlv-background-selected);--mlv-list-item-bg-hover: var(--mlv-background-selected-hover)}.mlv-sidebar-workspace__option .mlv-list-item__content{grid-template-columns:2.5rem minmax(0,1fr) 2rem}.mlv-sidebar-workspace__option .mlv-sidebar-workspace__logo{justify-self:start}@media(prefers-reduced-motion:reduce){.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger,.mlv-sidebar-workspace .mlv-sidebar-workspace__text,.mlv-sidebar-workspace .mlv-sidebar-workspace__chevron{transition-duration:var(--mlv-duration-instant)}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger:active{transform:none}}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MlvButton, selector: "button[mlvButton], a[mlvButton]", inputs: ["variant", "shape", "disabled", "loading", "selected"] }, { kind: "component", type: MlvMenu, selector: "mlv-menu", inputs: ["label", "mlvDensity", "dataSource"], outputs: ["closed"] }, { kind: "directive", type: MlvMenuItem, selector: "mlv-list-item[mlvMenuItem]", inputs: ["disabled"], outputs: ["itemClick"] }, { kind: "directive", type: MlvMenuTrigger, selector: "[mlvMenuTrigger]", inputs: ["mlvMenuTrigger", "isSubmenuTrigger", "menuTriggerDisabled"], outputs: ["menuOpened", "menuClosed"] }, { kind: "component", type: MlvListItem, selector: "mlv-list-item", inputs: ["itemRole", "unread", "accent"] }, { kind: "component", type: LucideCheck, selector: "svg[lucideCheck]" }, { kind: "component", type: LucideChevronsUpDown, selector: "svg[lucideChevronsUpDown]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1479
+ }
1480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSidebarWorkspace, decorators: [{
1481
+ type: Component,
1482
+ args: [{ selector: 'mlv-sidebar-workspace', imports: [
1483
+ NgTemplateOutlet,
1484
+ MlvButton,
1485
+ MlvMenu,
1486
+ MlvMenuItem,
1487
+ MlvMenuTrigger,
1488
+ MlvListItem,
1489
+ LucideCheck,
1490
+ LucideChevronsUpDown,
1491
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1492
+ class: 'mlv-sidebar-workspace',
1493
+ '[class.mlv-sidebar-workspace--collapsed]': '_isCollapsed()',
1494
+ '[class.mlv-sidebar-workspace--multiple]': '_hasMultiple()',
1495
+ '[class.mlv-sidebar-workspace--open]': '_opened()',
1496
+ }, template: "<ng-template #workspaceRow let-option let-location=\"location\">\n <span class=\"mlv-sidebar-workspace__logo\" aria-hidden=\"true\">\n @if (_logoTemplate(); as logoTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"logoTemplate.templateRef\"\n [ngTemplateOutletContext]=\"_templateContext(option)\"\n />\n } @else {\n <span class=\"mlv-sidebar-workspace__monogram\">\n {{ _initials(option.label) }}\n </span>\n }\n </span>\n\n <span class=\"mlv-sidebar-workspace__text\">\n @if (_textTemplate(); as textTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"textTemplate.templateRef\"\n [ngTemplateOutletContext]=\"_templateContext(option)\"\n />\n } @else {\n <span class=\"mlv-sidebar-workspace__label\">{{ option.label }}</span>\n @if (option.description) {\n <span class=\"mlv-sidebar-workspace__description\">\n {{ option.description }}\n </span>\n } }\n </span>\n\n @if (location === 'trigger' && _hasMultiple()) {\n <svg\n class=\"mlv-sidebar-workspace__chevron\"\n lucideChevronsUpDown\n [size]=\"16\"\n aria-hidden=\"true\"\n ></svg>\n } @if (location === 'option' && _isSelected(option)) {\n <svg\n class=\"mlv-sidebar-workspace__check\"\n lucideCheck\n [size]=\"16\"\n aria-hidden=\"true\"\n ></svg>\n }\n</ng-template>\n\n@if (_hasMultiple()) {\n<button\n type=\"button\"\n mlvButton\n variant=\"transparent\"\n class=\"mlv-sidebar-workspace__trigger\"\n [mlvMenuTrigger]=\"workspaceMenu\"\n [attr.aria-label]=\"_triggerAriaLabel()\"\n (menuOpened)=\"_opened.set(true)\"\n (menuClosed)=\"_opened.set(false)\"\n>\n <ng-container\n [ngTemplateOutlet]=\"workspaceRow\"\n [ngTemplateOutletContext]=\"{ $implicit: workspace(), location: 'trigger' }\"\n />\n</button>\n\n<mlv-menu #workspaceMenu [label]=\"_i18n().workspaceMenu\">\n @for (option of workspaces(); track option.id) {\n <mlv-list-item\n mlvMenuItem\n class=\"mlv-sidebar-workspace__option\"\n [attr.aria-current]=\"_isSelected(option) ? 'true' : null\"\n (itemClick)=\"_selectWorkspace(option)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"workspaceRow\"\n [ngTemplateOutletContext]=\"{ $implicit: option, location: 'option' }\"\n />\n </mlv-list-item>\n }\n</mlv-menu>\n} @else {\n<div class=\"mlv-sidebar-workspace__trigger\">\n <ng-container\n [ngTemplateOutlet]=\"workspaceRow\"\n [ngTemplateOutletContext]=\"{ $implicit: workspace(), location: 'trigger' }\"\n />\n</div>\n}\n", styles: ["@layer mlv.components{.mlv-sidebar-workspace{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-sidebar-workspace *{box-sizing:border-box}.mlv-sidebar-workspace{display:block;width:100%;min-width:0}.mlv-sidebar-workspace__trigger,.mlv-sidebar-workspace__option .mlv-list-item__content{display:grid;grid-template-columns:var(--mlv-sidebar-icon-column-width, 2.375rem) minmax(0,1fr) auto;align-items:center;gap:0;width:100%;min-width:0}.mlv-sidebar-workspace__trigger{min-height:2.5rem;padding:0;border:none;border-radius:var(--mlv-radius-m);background-color:transparent;color:var(--mlv-text-primary);font:inherit;text-align:start;outline:none}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger{cursor:pointer;transition:background-color var(--mlv-duration-fast) var(--mlv-ease-out),color var(--mlv-duration-fast) var(--mlv-ease-out),transform var(--mlv-duration-fast) var(--mlv-ease-out-strong)}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger:hover,.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger:focus-visible{background-color:var(--mlv-sidebar-hover-bg, var(--mlv-background-neutral-1))}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger:active{transform:scale(.985)}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger>.mlv-button__text{display:contents}.mlv-sidebar-workspace--open .mlv-sidebar-workspace__trigger{background-color:var(--mlv-background-neutral-1-active)}.mlv-sidebar-workspace__logo{display:flex;align-items:center;justify-content:center;justify-self:center;width:1.75rem;height:1.75rem;overflow:hidden;flex-shrink:0;border-radius:var(--mlv-radius-s);background-color:var(--mlv-background-accent-1);color:var(--mlv-text-primary-on-accent-1)}.mlv-sidebar-workspace__logo>*{max-width:100%;max-height:100%}.mlv-sidebar-workspace__monogram{font-size:var(--mlv-typography-body-s-size);font-weight:var(--mlv-font-weight-semibold);line-height:1}.mlv-sidebar-workspace__text{display:flex;flex-direction:column;min-width:0;overflow:hidden;opacity:1;transform:translate(0);visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-workspace__text>*,.mlv-sidebar-workspace__label,.mlv-sidebar-workspace__description{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mlv-sidebar-workspace__label,.mlv-sidebar-workspace__text>:first-child{color:var(--mlv-text-primary);font-size:var(--mlv-typography-body-m-size);font-weight:var(--mlv-font-weight-semibold);line-height:var(--mlv-typography-body-m-line-height)}.mlv-sidebar-workspace__description,.mlv-sidebar-workspace__text>:not(:first-child){color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-s-size);font-weight:var(--mlv-typography-body-s-weight);line-height:var(--mlv-typography-body-s-line-height)}.mlv-sidebar-workspace__chevron,.mlv-sidebar-workspace__check{margin-inline:var(--mlv-spacing-2);flex-shrink:0;color:var(--mlv-text-secondary)}.mlv-sidebar-workspace__chevron{opacity:1;visibility:visible;transition:opacity var(--mlv-duration-normal) var(--mlv-ease-out-strong),visibility var(--mlv-duration-instant) linear}.mlv-sidebar-workspace__check{color:var(--mlv-text-action)}.mlv-sidebar-workspace--collapsed .mlv-sidebar-workspace__trigger{grid-template-columns:var(--mlv-sidebar-icon-column-width, 2.375rem) minmax(0,0fr) 0}.mlv-sidebar-workspace--collapsed .mlv-sidebar-workspace__text{opacity:0;transform:translate(calc(-.25rem * var(--mlv-inline-direction)));visibility:hidden;pointer-events:none;transition-delay:0s,0s,var(--mlv-duration-normal)}.mlv-sidebar-workspace--collapsed .mlv-sidebar-workspace__chevron{margin-inline:0;opacity:0;visibility:hidden;pointer-events:none;transition-delay:0s,var(--mlv-duration-normal)}.mlv-sidebar-workspace__option{min-width:14rem;--mlv-list-item-padding-block: var(--mlv-spacing-1);--mlv-list-item-padding-inline: var(--mlv-spacing-1)}.mlv-sidebar-workspace__option[aria-current=true]{--mlv-list-item-bg: var(--mlv-background-selected);--mlv-list-item-bg-hover: var(--mlv-background-selected-hover)}.mlv-sidebar-workspace__option .mlv-list-item__content{grid-template-columns:2.5rem minmax(0,1fr) 2rem}.mlv-sidebar-workspace__option .mlv-sidebar-workspace__logo{justify-self:start}@media(prefers-reduced-motion:reduce){.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger,.mlv-sidebar-workspace .mlv-sidebar-workspace__text,.mlv-sidebar-workspace .mlv-sidebar-workspace__chevron{transition-duration:var(--mlv-duration-instant)}.mlv-sidebar-workspace button.mlv-sidebar-workspace__trigger:active{transform:none}}}\n"] }]
1497
+ }], propDecorators: { workspaces: [{ type: i0.Input, args: [{ isSignal: true, alias: "workspaces", required: true }] }], workspace: [{ type: i0.Input, args: [{ isSignal: true, alias: "workspace", required: true }] }, { type: i0.Output, args: ["workspaceChange"] }], _logoTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvSidebarWorkspaceLogo), { isSignal: true }] }], _textTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvSidebarWorkspaceText), { isSignal: true }] }] } });
1498
+
1499
+ /**
1500
+ * Generated bundle index. Do not edit.
1501
+ */
1502
+
1503
+ export { MlvSidebar, MlvSidebarContent, MlvSidebarFooter, MlvSidebarGroup, MlvSidebarHeader, MlvSidebarItem, MlvSidebarItemHost, MlvSidebarItemIcon, MlvSidebarItemTitle, MlvSidebarRail, MlvSidebarTrigger, MlvSidebarWorkspace, MlvSidebarWorkspaceLogo, MlvSidebarWorkspaceText, SIDEBAR_CONTEXT, MlvSidebarContent as SidebarContentDirective };
1504
+ //# sourceMappingURL=malva-ui-core-sidebar.mjs.map