@malva-ui/core 0.1.12

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 (1434) hide show
  1. package/AGENTS.md +92 -0
  2. package/README.md +61 -0
  3. package/accordion/index.d.ts +3 -0
  4. package/accordion/lib/accordion/accordion.d.ts +47 -0
  5. package/accordion/lib/accordion-item/accordion-header.d.ts +22 -0
  6. package/accordion/lib/accordion-item/accordion-item.d.ts +49 -0
  7. package/accordion/malva-ui-core-accordion.d.ts +5 -0
  8. package/action-bar/index.d.ts +4 -0
  9. package/action-bar/lib/action-bar/action-bar.d.ts +59 -0
  10. package/action-bar/lib/action-bar/components/action-bar-actions.d.ts +9 -0
  11. package/action-bar/lib/action-bar/components/action-bar-logo.d.ts +5 -0
  12. package/action-bar/lib/action-bar/components/action-bar-spacer.d.ts +5 -0
  13. package/action-bar/malva-ui-core-action-bar.d.ts +5 -0
  14. package/alert/index.d.ts +2 -0
  15. package/alert/lib/alert/alert.d.ts +84 -0
  16. package/alert/lib/alert/alert.directives.d.ts +44 -0
  17. package/alert/malva-ui-core-alert.d.ts +5 -0
  18. package/autocomplete/index.d.ts +1 -0
  19. package/autocomplete/lib/autocomplete/autocomplete.d.ts +296 -0
  20. package/autocomplete/malva-ui-core-autocomplete.d.ts +5 -0
  21. package/avatar/index.d.ts +2 -0
  22. package/avatar/lib/avatar/avatar.d.ts +125 -0
  23. package/avatar/lib/color-from-text.pipe.d.ts +21 -0
  24. package/avatar/malva-ui-core-avatar.d.ts +5 -0
  25. package/avatar-group/index.d.ts +1 -0
  26. package/avatar-group/lib/avatar-group/avatar-group.d.ts +115 -0
  27. package/avatar-group/malva-ui-core-avatar-group.d.ts +5 -0
  28. package/badge/index.d.ts +2 -0
  29. package/badge/lib/badge/badge.d.ts +59 -0
  30. package/badge/lib/badge-icon.d.ts +35 -0
  31. package/badge/malva-ui-core-badge.d.ts +5 -0
  32. package/bottom-nav/index.d.ts +1 -0
  33. package/bottom-nav/lib/bottom-nav/bottom-nav.d.ts +99 -0
  34. package/bottom-nav/malva-ui-core-bottom-nav.d.ts +5 -0
  35. package/breadcrumb/index.d.ts +5 -0
  36. package/breadcrumb/lib/breadcrumb/breadcrumb-item-host.d.ts +32 -0
  37. package/breadcrumb/lib/breadcrumb/breadcrumb-item.d.ts +41 -0
  38. package/breadcrumb/lib/breadcrumb/breadcrumb-separator.d.ts +31 -0
  39. package/breadcrumb/lib/breadcrumb/breadcrumb.d.ts +151 -0
  40. package/breadcrumb/lib/breadcrumb/breadcrumb.types.d.ts +26 -0
  41. package/breadcrumb/malva-ui-core-breadcrumb.d.ts +5 -0
  42. package/button/index.d.ts +7 -0
  43. package/button/lib/button/button.d.ts +61 -0
  44. package/button/lib/button-close/button-close.d.ts +24 -0
  45. package/button/lib/button-group/button-group.d.ts +21 -0
  46. package/button/lib/button-split/button-split.d.ts +21 -0
  47. package/button/lib/button-toggle/button-toggle.d.ts +33 -0
  48. package/button/lib/button-variant.token.d.ts +13 -0
  49. package/button/lib/button.directives.d.ts +14 -0
  50. package/button/lib/button.types.d.ts +8 -0
  51. package/button/malva-ui-core-button.d.ts +5 -0
  52. package/calendar/index.d.ts +3 -0
  53. package/calendar/lib/calendar/calendar.d.ts +182 -0
  54. package/calendar/lib/date-provider/date-adapter.d.ts +92 -0
  55. package/calendar/lib/date-provider/native-date-adapter.d.ts +60 -0
  56. package/calendar/malva-ui-core-calendar.d.ts +5 -0
  57. package/card/index.d.ts +5 -0
  58. package/card/lib/card/card.d.ts +43 -0
  59. package/card/lib/card-actions-def.d.ts +10 -0
  60. package/card/lib/card-footer-def.d.ts +13 -0
  61. package/card/lib/card-header-def.d.ts +10 -0
  62. package/card/lib/card-subheader-def.d.ts +16 -0
  63. package/card/malva-ui-core-card.d.ts +5 -0
  64. package/chat/index.d.ts +9 -0
  65. package/chat/lib/chat/chat.d.ts +133 -0
  66. package/chat/lib/chat-audio/chat-audio.d.ts +51 -0
  67. package/chat/lib/chat-audio/chat-audio.service.d.ts +21 -0
  68. package/chat/lib/chat-date/chat-date.d.ts +16 -0
  69. package/chat/lib/chat-format.d.ts +5 -0
  70. package/chat/lib/chat-media-grid/chat-media-grid.d.ts +32 -0
  71. package/chat/lib/chat-message/chat-message.d.ts +45 -0
  72. package/chat/lib/chat-render-list.d.ts +16 -0
  73. package/chat/lib/chat-tokens.d.ts +25 -0
  74. package/chat/lib/chat-typing/chat-typing.d.ts +16 -0
  75. package/chat/lib/chat.types.d.ts +80 -0
  76. package/chat/lib/defs/chat-author-def.d.ts +30 -0
  77. package/chat/lib/defs/chat-date-def.d.ts +22 -0
  78. package/chat/lib/defs/chat-message-def.d.ts +23 -0
  79. package/chat/malva-ui-core-chat.d.ts +5 -0
  80. package/checkbox/index.d.ts +3 -0
  81. package/checkbox/lib/checkbox/checkbox.d.ts +129 -0
  82. package/checkbox/lib/checkbox-group/checkbox-group.d.ts +24 -0
  83. package/checkbox/lib/checkbox-group-token.d.ts +6 -0
  84. package/checkbox/malva-ui-core-checkbox.d.ts +5 -0
  85. package/chip/index.d.ts +2 -0
  86. package/chip/lib/chip/chip.d.ts +107 -0
  87. package/chip/lib/chip/chip.directives.d.ts +18 -0
  88. package/chip/malva-ui-core-chip.d.ts +5 -0
  89. package/color-picker/index.d.ts +3 -0
  90. package/color-picker/lib/color-picker/color-picker.d.ts +188 -0
  91. package/color-picker/lib/color-picker-popup/color-picker-popup.d.ts +151 -0
  92. package/color-picker/lib/color-utils/color-utils.d.ts +102 -0
  93. package/color-picker/malva-ui-core-color-picker.d.ts +5 -0
  94. package/combobox/index.d.ts +2 -0
  95. package/combobox/lib/combobox/combobox.d.ts +400 -0
  96. package/combobox/lib/combobox-template.directives.d.ts +10 -0
  97. package/combobox/malva-ui-core-combobox.d.ts +5 -0
  98. package/copy-to-clipboard/index.d.ts +1 -0
  99. package/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.d.ts +130 -0
  100. package/copy-to-clipboard/malva-ui-core-copy-to-clipboard.d.ts +5 -0
  101. package/data-table/index.d.ts +8 -0
  102. package/data-table/lib/data-source.d.ts +5 -0
  103. package/data-table/lib/data-table/data-table-layout.d.ts +31 -0
  104. package/data-table/lib/data-table/data-table.d.ts +699 -0
  105. package/data-table/lib/data-table/services/data-table-column-visibility.service.d.ts +19 -0
  106. package/data-table/lib/data-table/services/data-table-editing.service.d.ts +37 -0
  107. package/data-table/lib/data-table/services/data-table-pinning.service.d.ts +37 -0
  108. package/data-table/lib/data-table-cell.d.ts +44 -0
  109. package/data-table/lib/data-table-edit-cell.d.ts +44 -0
  110. package/data-table/lib/data-table-error.d.ts +37 -0
  111. package/data-table/lib/data-table-footer.d.ts +26 -0
  112. package/data-table/lib/data-table-no-data.d.ts +19 -0
  113. package/data-table/lib/filter-dropdown/filter-dropdown.d.ts +54 -0
  114. package/data-table/lib/types.d.ts +134 -0
  115. package/data-table/malva-ui-core-data-table.d.ts +5 -0
  116. package/date-range-picker/index.d.ts +1 -0
  117. package/date-range-picker/lib/date-range-picker/date-range-picker.d.ts +145 -0
  118. package/date-range-picker/malva-ui-core-date-range-picker.d.ts +5 -0
  119. package/day-picker/index.d.ts +1 -0
  120. package/day-picker/lib/day-picker/day-picker.d.ts +51 -0
  121. package/day-picker/malva-ui-core-day-picker.d.ts +5 -0
  122. package/dialog/index.d.ts +11 -0
  123. package/dialog/lib/confirm-dialog-options.d.ts +41 -0
  124. package/dialog/lib/confirm-dialog.d.ts +52 -0
  125. package/dialog/lib/dialog/dialog.d.ts +22 -0
  126. package/dialog/lib/dialog-body.d.ts +9 -0
  127. package/dialog/lib/dialog-close.d.ts +27 -0
  128. package/dialog/lib/dialog-config.d.ts +112 -0
  129. package/dialog/lib/dialog-container.d.ts +40 -0
  130. package/dialog/lib/dialog-footer.d.ts +13 -0
  131. package/dialog/lib/dialog-header.d.ts +74 -0
  132. package/dialog/lib/dialog-ref.d.ts +95 -0
  133. package/dialog/lib/dialog-template.d.ts +65 -0
  134. package/dialog/lib/dialog-text-content.d.ts +24 -0
  135. package/dialog/lib/dialog.service.d.ts +63 -0
  136. package/dialog/lib/generate-routable-dialog-route.d.ts +49 -0
  137. package/dialog/lib/inject-dialog-ref.d.ts +8 -0
  138. package/dialog/lib/routable-dialog.d.ts +30 -0
  139. package/dialog/malva-ui-core-dialog.d.ts +5 -0
  140. package/divider/index.d.ts +1 -0
  141. package/divider/lib/divider/divider.d.ts +64 -0
  142. package/divider/malva-ui-core-divider.d.ts +5 -0
  143. package/docs/ai/accordion.md +102 -0
  144. package/docs/ai/action-bar.md +198 -0
  145. package/docs/ai/alert.md +190 -0
  146. package/docs/ai/autocomplete.md +111 -0
  147. package/docs/ai/avatar-group.md +184 -0
  148. package/docs/ai/avatar.md +150 -0
  149. package/docs/ai/badge.md +163 -0
  150. package/docs/ai/bottom-nav.md +267 -0
  151. package/docs/ai/breadcrumb.md +174 -0
  152. package/docs/ai/button.md +306 -0
  153. package/docs/ai/calendar.md +237 -0
  154. package/docs/ai/card.md +196 -0
  155. package/docs/ai/chat.md +145 -0
  156. package/docs/ai/checkbox.md +193 -0
  157. package/docs/ai/chip.md +139 -0
  158. package/docs/ai/color-picker.md +270 -0
  159. package/docs/ai/combobox.md +325 -0
  160. package/docs/ai/copy-to-clipboard.md +159 -0
  161. package/docs/ai/core.md +216 -0
  162. package/docs/ai/data-table.md +917 -0
  163. package/docs/ai/date-range-picker.md +101 -0
  164. package/docs/ai/day-picker.md +135 -0
  165. package/docs/ai/dialog.md +852 -0
  166. package/docs/ai/divider.md +159 -0
  167. package/docs/ai/drawer.md +607 -0
  168. package/docs/ai/dropdown.md +343 -0
  169. package/docs/ai/empty-state.md +167 -0
  170. package/docs/ai/expand.md +234 -0
  171. package/docs/ai/file-upload.md +402 -0
  172. package/docs/ai/filter.md +43 -0
  173. package/docs/ai/form-utils.md +319 -0
  174. package/docs/ai/form.md +129 -0
  175. package/docs/ai/input.md +175 -0
  176. package/docs/ai/kbd.md +70 -0
  177. package/docs/ai/layout.md +192 -0
  178. package/docs/ai/link.md +179 -0
  179. package/docs/ai/list.md +249 -0
  180. package/docs/ai/loader.md +122 -0
  181. package/docs/ai/menu.md +335 -0
  182. package/docs/ai/notification.md +281 -0
  183. package/docs/ai/number-input.md +123 -0
  184. package/docs/ai/page.md +422 -0
  185. package/docs/ai/pagination.md +237 -0
  186. package/docs/ai/pin-input.md +173 -0
  187. package/docs/ai/popup.md +347 -0
  188. package/docs/ai/progress.md +84 -0
  189. package/docs/ai/radio.md +201 -0
  190. package/docs/ai/rating.md +76 -0
  191. package/docs/ai/scrollbar.md +170 -0
  192. package/docs/ai/search-field.md +85 -0
  193. package/docs/ai/segmented.md +331 -0
  194. package/docs/ai/select.md +512 -0
  195. package/docs/ai/sidebar.md +992 -0
  196. package/docs/ai/skeleton.md +187 -0
  197. package/docs/ai/slider.md +180 -0
  198. package/docs/ai/split-pane.md +235 -0
  199. package/docs/ai/status-indicator.md +95 -0
  200. package/docs/ai/stepper.md +385 -0
  201. package/docs/ai/switch.md +216 -0
  202. package/docs/ai/tabs.md +564 -0
  203. package/docs/ai/textarea.md +249 -0
  204. package/docs/ai/tile.md +150 -0
  205. package/docs/ai/time-picker.md +214 -0
  206. package/docs/ai/timeline.md +320 -0
  207. package/docs/ai/title.md +105 -0
  208. package/docs/ai/toast.md +484 -0
  209. package/docs/ai/tokenizer.md +236 -0
  210. package/docs/ai/toolbar.md +155 -0
  211. package/docs/ai/tooltip.md +154 -0
  212. package/docs/ai/tree.md +177 -0
  213. package/drawer/index.d.ts +11 -0
  214. package/drawer/lib/drawer/drawer.d.ts +106 -0
  215. package/drawer/lib/drawer-body.d.ts +8 -0
  216. package/drawer/lib/drawer-content.d.ts +6 -0
  217. package/drawer/lib/drawer-footer.d.ts +5 -0
  218. package/drawer/lib/drawer-header.d.ts +5 -0
  219. package/drawer/lib/drawer-ref.d.ts +29 -0
  220. package/drawer/lib/drawer-resize.d.ts +65 -0
  221. package/drawer/lib/drawer-section/drawer-section.d.ts +15 -0
  222. package/drawer/lib/drawer-sections/drawer-sections.d.ts +22 -0
  223. package/drawer/lib/drawer-sections.service.d.ts +42 -0
  224. package/drawer/lib/drawer.service.d.ts +66 -0
  225. package/drawer/lib/generate-routable-drawer-route.d.ts +42 -0
  226. package/drawer/lib/routable-drawer.d.ts +30 -0
  227. package/drawer/malva-ui-core-drawer.d.ts +5 -0
  228. package/dropdown/index.d.ts +9 -0
  229. package/dropdown/lib/active-descendant.d.ts +64 -0
  230. package/dropdown/lib/dropdown-panel/dropdown-panel.d.ts +178 -0
  231. package/dropdown/lib/highlight-match.pipe.d.ts +27 -0
  232. package/dropdown/lib/option-matcher.d.ts +87 -0
  233. package/dropdown/lib/options-adapter.d.ts +142 -0
  234. package/dropdown/lib/options-result.d.ts +6 -0
  235. package/dropdown/lib/reconciliation.d.ts +19 -0
  236. package/dropdown/lib/select-data-source.d.ts +18 -0
  237. package/dropdown/lib/select-option.d.ts +37 -0
  238. package/dropdown/malva-ui-core-dropdown.d.ts +5 -0
  239. package/empty-state/index.d.ts +1 -0
  240. package/empty-state/lib/empty-state/empty-state.d.ts +34 -0
  241. package/empty-state/malva-ui-core-empty-state.d.ts +5 -0
  242. package/esm2022/accordion/index.js +4 -0
  243. package/esm2022/accordion/index.js.map +1 -0
  244. package/esm2022/accordion/lib/accordion/accordion.js +65 -0
  245. package/esm2022/accordion/lib/accordion/accordion.js.map +1 -0
  246. package/esm2022/accordion/lib/accordion-item/accordion-header.js +30 -0
  247. package/esm2022/accordion/lib/accordion-item/accordion-header.js.map +1 -0
  248. package/esm2022/accordion/lib/accordion-item/accordion-item.js +70 -0
  249. package/esm2022/accordion/lib/accordion-item/accordion-item.js.map +1 -0
  250. package/esm2022/accordion/malva-ui-core-accordion.js +5 -0
  251. package/esm2022/accordion/malva-ui-core-accordion.js.map +1 -0
  252. package/esm2022/action-bar/index.js +5 -0
  253. package/esm2022/action-bar/index.js.map +1 -0
  254. package/esm2022/action-bar/lib/action-bar/action-bar.js +64 -0
  255. package/esm2022/action-bar/lib/action-bar/action-bar.js.map +1 -0
  256. package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js +20 -0
  257. package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js.map +1 -0
  258. package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js +13 -0
  259. package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js.map +1 -0
  260. package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js +13 -0
  261. package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js.map +1 -0
  262. package/esm2022/action-bar/malva-ui-core-action-bar.js +5 -0
  263. package/esm2022/action-bar/malva-ui-core-action-bar.js.map +1 -0
  264. package/esm2022/alert/index.js +3 -0
  265. package/esm2022/alert/index.js.map +1 -0
  266. package/esm2022/alert/lib/alert/alert.directives.js +53 -0
  267. package/esm2022/alert/lib/alert/alert.directives.js.map +1 -0
  268. package/esm2022/alert/lib/alert/alert.js +118 -0
  269. package/esm2022/alert/lib/alert/alert.js.map +1 -0
  270. package/esm2022/alert/malva-ui-core-alert.js +5 -0
  271. package/esm2022/alert/malva-ui-core-alert.js.map +1 -0
  272. package/esm2022/autocomplete/index.js +2 -0
  273. package/esm2022/autocomplete/index.js.map +1 -0
  274. package/esm2022/autocomplete/lib/autocomplete/autocomplete.js +765 -0
  275. package/esm2022/autocomplete/lib/autocomplete/autocomplete.js.map +1 -0
  276. package/esm2022/autocomplete/malva-ui-core-autocomplete.js +5 -0
  277. package/esm2022/autocomplete/malva-ui-core-autocomplete.js.map +1 -0
  278. package/esm2022/avatar/index.js +3 -0
  279. package/esm2022/avatar/index.js.map +1 -0
  280. package/esm2022/avatar/lib/avatar/avatar.js +192 -0
  281. package/esm2022/avatar/lib/avatar/avatar.js.map +1 -0
  282. package/esm2022/avatar/lib/color-from-text.pipe.js +39 -0
  283. package/esm2022/avatar/lib/color-from-text.pipe.js.map +1 -0
  284. package/esm2022/avatar/malva-ui-core-avatar.js +5 -0
  285. package/esm2022/avatar/malva-ui-core-avatar.js.map +1 -0
  286. package/esm2022/avatar-group/index.js +2 -0
  287. package/esm2022/avatar-group/index.js.map +1 -0
  288. package/esm2022/avatar-group/lib/avatar-group/avatar-group.js +217 -0
  289. package/esm2022/avatar-group/lib/avatar-group/avatar-group.js.map +1 -0
  290. package/esm2022/avatar-group/malva-ui-core-avatar-group.js +5 -0
  291. package/esm2022/avatar-group/malva-ui-core-avatar-group.js.map +1 -0
  292. package/esm2022/badge/index.js +3 -0
  293. package/esm2022/badge/index.js.map +1 -0
  294. package/esm2022/badge/lib/badge/badge.js +71 -0
  295. package/esm2022/badge/lib/badge/badge.js.map +1 -0
  296. package/esm2022/badge/lib/badge-icon.js +47 -0
  297. package/esm2022/badge/lib/badge-icon.js.map +1 -0
  298. package/esm2022/badge/malva-ui-core-badge.js +5 -0
  299. package/esm2022/badge/malva-ui-core-badge.js.map +1 -0
  300. package/esm2022/bottom-nav/index.js +2 -0
  301. package/esm2022/bottom-nav/index.js.map +1 -0
  302. package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js +155 -0
  303. package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js.map +1 -0
  304. package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js +5 -0
  305. package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js.map +1 -0
  306. package/esm2022/breadcrumb/index.js +6 -0
  307. package/esm2022/breadcrumb/index.js.map +1 -0
  308. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js +43 -0
  309. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js.map +1 -0
  310. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js +110 -0
  311. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js.map +1 -0
  312. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js +38 -0
  313. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js.map +1 -0
  314. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js +284 -0
  315. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js.map +1 -0
  316. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js +1 -0
  317. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js.map +1 -0
  318. package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js +5 -0
  319. package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js.map +1 -0
  320. package/esm2022/button/index.js +8 -0
  321. package/esm2022/button/index.js.map +1 -0
  322. package/esm2022/button/lib/button/button.js +137 -0
  323. package/esm2022/button/lib/button/button.js.map +1 -0
  324. package/esm2022/button/lib/button-close/button-close.js +52 -0
  325. package/esm2022/button/lib/button-close/button-close.js.map +1 -0
  326. package/esm2022/button/lib/button-group/button-group.js +44 -0
  327. package/esm2022/button/lib/button-group/button-group.js.map +1 -0
  328. package/esm2022/button/lib/button-split/button-split.js +44 -0
  329. package/esm2022/button/lib/button-split/button-split.js.map +1 -0
  330. package/esm2022/button/lib/button-toggle/button-toggle.js +94 -0
  331. package/esm2022/button/lib/button-toggle/button-toggle.js.map +1 -0
  332. package/esm2022/button/lib/button-variant.token.js +4 -0
  333. package/esm2022/button/lib/button-variant.token.js.map +1 -0
  334. package/esm2022/button/lib/button.directives.js +37 -0
  335. package/esm2022/button/lib/button.directives.js.map +1 -0
  336. package/esm2022/button/lib/button.types.js +1 -0
  337. package/esm2022/button/lib/button.types.js.map +1 -0
  338. package/esm2022/button/malva-ui-core-button.js +5 -0
  339. package/esm2022/button/malva-ui-core-button.js.map +1 -0
  340. package/esm2022/calendar/index.js +4 -0
  341. package/esm2022/calendar/index.js.map +1 -0
  342. package/esm2022/calendar/lib/calendar/calendar.js +672 -0
  343. package/esm2022/calendar/lib/calendar/calendar.js.map +1 -0
  344. package/esm2022/calendar/lib/date-provider/date-adapter.js +111 -0
  345. package/esm2022/calendar/lib/date-provider/date-adapter.js.map +1 -0
  346. package/esm2022/calendar/lib/date-provider/native-date-adapter.js +151 -0
  347. package/esm2022/calendar/lib/date-provider/native-date-adapter.js.map +1 -0
  348. package/esm2022/calendar/malva-ui-core-calendar.js +5 -0
  349. package/esm2022/calendar/malva-ui-core-calendar.js.map +1 -0
  350. package/esm2022/card/index.js +6 -0
  351. package/esm2022/card/index.js.map +1 -0
  352. package/esm2022/card/lib/card/card.js +54 -0
  353. package/esm2022/card/lib/card/card.js.map +1 -0
  354. package/esm2022/card/lib/card-actions-def.js +27 -0
  355. package/esm2022/card/lib/card-actions-def.js.map +1 -0
  356. package/esm2022/card/lib/card-footer-def.js +32 -0
  357. package/esm2022/card/lib/card-footer-def.js.map +1 -0
  358. package/esm2022/card/lib/card-header-def.js +27 -0
  359. package/esm2022/card/lib/card-header-def.js.map +1 -0
  360. package/esm2022/card/lib/card-subheader-def.js +33 -0
  361. package/esm2022/card/lib/card-subheader-def.js.map +1 -0
  362. package/esm2022/card/malva-ui-core-card.js +5 -0
  363. package/esm2022/card/malva-ui-core-card.js.map +1 -0
  364. package/esm2022/chat/index.js +10 -0
  365. package/esm2022/chat/index.js.map +1 -0
  366. package/esm2022/chat/lib/chat/chat.js +326 -0
  367. package/esm2022/chat/lib/chat/chat.js.map +1 -0
  368. package/esm2022/chat/lib/chat-audio/chat-audio.js +110 -0
  369. package/esm2022/chat/lib/chat-audio/chat-audio.js.map +1 -0
  370. package/esm2022/chat/lib/chat-audio/chat-audio.service.js +28 -0
  371. package/esm2022/chat/lib/chat-audio/chat-audio.service.js.map +1 -0
  372. package/esm2022/chat/lib/chat-date/chat-date.js +46 -0
  373. package/esm2022/chat/lib/chat-date/chat-date.js.map +1 -0
  374. package/esm2022/chat/lib/chat-format.js +11 -0
  375. package/esm2022/chat/lib/chat-format.js.map +1 -0
  376. package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js +53 -0
  377. package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js.map +1 -0
  378. package/esm2022/chat/lib/chat-message/chat-message.js +86 -0
  379. package/esm2022/chat/lib/chat-message/chat-message.js.map +1 -0
  380. package/esm2022/chat/lib/chat-render-list.js +55 -0
  381. package/esm2022/chat/lib/chat-render-list.js.map +1 -0
  382. package/esm2022/chat/lib/chat-tokens.js +9 -0
  383. package/esm2022/chat/lib/chat-tokens.js.map +1 -0
  384. package/esm2022/chat/lib/chat-typing/chat-typing.js +50 -0
  385. package/esm2022/chat/lib/chat-typing/chat-typing.js.map +1 -0
  386. package/esm2022/chat/lib/chat.types.js +1 -0
  387. package/esm2022/chat/lib/chat.types.js.map +1 -0
  388. package/esm2022/chat/lib/defs/chat-author-def.js +27 -0
  389. package/esm2022/chat/lib/defs/chat-author-def.js.map +1 -0
  390. package/esm2022/chat/lib/defs/chat-date-def.js +24 -0
  391. package/esm2022/chat/lib/defs/chat-date-def.js.map +1 -0
  392. package/esm2022/chat/lib/defs/chat-message-def.js +30 -0
  393. package/esm2022/chat/lib/defs/chat-message-def.js.map +1 -0
  394. package/esm2022/chat/malva-ui-core-chat.js +5 -0
  395. package/esm2022/chat/malva-ui-core-chat.js.map +1 -0
  396. package/esm2022/checkbox/index.js +4 -0
  397. package/esm2022/checkbox/index.js.map +1 -0
  398. package/esm2022/checkbox/lib/checkbox/checkbox.js +201 -0
  399. package/esm2022/checkbox/lib/checkbox/checkbox.js.map +1 -0
  400. package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js +68 -0
  401. package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js.map +1 -0
  402. package/esm2022/checkbox/lib/checkbox-group-token.js +3 -0
  403. package/esm2022/checkbox/lib/checkbox-group-token.js.map +1 -0
  404. package/esm2022/checkbox/malva-ui-core-checkbox.js +5 -0
  405. package/esm2022/checkbox/malva-ui-core-checkbox.js.map +1 -0
  406. package/esm2022/chip/index.js +3 -0
  407. package/esm2022/chip/index.js.map +1 -0
  408. package/esm2022/chip/lib/chip/chip.directives.js +32 -0
  409. package/esm2022/chip/lib/chip/chip.directives.js.map +1 -0
  410. package/esm2022/chip/lib/chip/chip.js +140 -0
  411. package/esm2022/chip/lib/chip/chip.js.map +1 -0
  412. package/esm2022/chip/malva-ui-core-chip.js +5 -0
  413. package/esm2022/chip/malva-ui-core-chip.js.map +1 -0
  414. package/esm2022/color-picker/index.js +4 -0
  415. package/esm2022/color-picker/index.js.map +1 -0
  416. package/esm2022/color-picker/lib/color-picker/color-picker.js +530 -0
  417. package/esm2022/color-picker/lib/color-picker/color-picker.js.map +1 -0
  418. package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js +419 -0
  419. package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js.map +1 -0
  420. package/esm2022/color-picker/lib/color-utils/color-utils.js +256 -0
  421. package/esm2022/color-picker/lib/color-utils/color-utils.js.map +1 -0
  422. package/esm2022/color-picker/malva-ui-core-color-picker.js +5 -0
  423. package/esm2022/color-picker/malva-ui-core-color-picker.js.map +1 -0
  424. package/esm2022/combobox/index.js +3 -0
  425. package/esm2022/combobox/index.js.map +1 -0
  426. package/esm2022/combobox/lib/combobox/combobox.js +911 -0
  427. package/esm2022/combobox/lib/combobox/combobox.js.map +1 -0
  428. package/esm2022/combobox/lib/combobox-template.directives.js +24 -0
  429. package/esm2022/combobox/lib/combobox-template.directives.js.map +1 -0
  430. package/esm2022/combobox/malva-ui-core-combobox.js +5 -0
  431. package/esm2022/combobox/malva-ui-core-combobox.js.map +1 -0
  432. package/esm2022/copy-to-clipboard/index.js +2 -0
  433. package/esm2022/copy-to-clipboard/index.js.map +1 -0
  434. package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js +201 -0
  435. package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js.map +1 -0
  436. package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js +5 -0
  437. package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js.map +1 -0
  438. package/esm2022/data-table/index.js +9 -0
  439. package/esm2022/data-table/index.js.map +1 -0
  440. package/esm2022/data-table/lib/data-source.js +6 -0
  441. package/esm2022/data-table/lib/data-source.js.map +1 -0
  442. package/esm2022/data-table/lib/data-table/data-table-layout.js +84 -0
  443. package/esm2022/data-table/lib/data-table/data-table-layout.js.map +1 -0
  444. package/esm2022/data-table/lib/data-table/data-table.js +1846 -0
  445. package/esm2022/data-table/lib/data-table/data-table.js.map +1 -0
  446. package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js +37 -0
  447. package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js.map +1 -0
  448. package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js +63 -0
  449. package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js.map +1 -0
  450. package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js +68 -0
  451. package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js.map +1 -0
  452. package/esm2022/data-table/lib/data-table-cell.js +46 -0
  453. package/esm2022/data-table/lib/data-table-cell.js.map +1 -0
  454. package/esm2022/data-table/lib/data-table-edit-cell.js +46 -0
  455. package/esm2022/data-table/lib/data-table-edit-cell.js.map +1 -0
  456. package/esm2022/data-table/lib/data-table-error.js +37 -0
  457. package/esm2022/data-table/lib/data-table-error.js.map +1 -0
  458. package/esm2022/data-table/lib/data-table-footer.js +33 -0
  459. package/esm2022/data-table/lib/data-table-footer.js.map +1 -0
  460. package/esm2022/data-table/lib/data-table-no-data.js +26 -0
  461. package/esm2022/data-table/lib/data-table-no-data.js.map +1 -0
  462. package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js +224 -0
  463. package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js.map +1 -0
  464. package/esm2022/data-table/lib/types.js +1 -0
  465. package/esm2022/data-table/lib/types.js.map +1 -0
  466. package/esm2022/data-table/malva-ui-core-data-table.js +5 -0
  467. package/esm2022/data-table/malva-ui-core-data-table.js.map +1 -0
  468. package/esm2022/date-range-picker/index.js +2 -0
  469. package/esm2022/date-range-picker/index.js.map +1 -0
  470. package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js +269 -0
  471. package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js.map +1 -0
  472. package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js +5 -0
  473. package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js.map +1 -0
  474. package/esm2022/day-picker/index.js +2 -0
  475. package/esm2022/day-picker/index.js.map +1 -0
  476. package/esm2022/day-picker/lib/day-picker/day-picker.js +124 -0
  477. package/esm2022/day-picker/lib/day-picker/day-picker.js.map +1 -0
  478. package/esm2022/day-picker/malva-ui-core-day-picker.js +5 -0
  479. package/esm2022/day-picker/malva-ui-core-day-picker.js.map +1 -0
  480. package/esm2022/dialog/index.js +12 -0
  481. package/esm2022/dialog/index.js.map +1 -0
  482. package/esm2022/dialog/lib/confirm-dialog-options.js +1 -0
  483. package/esm2022/dialog/lib/confirm-dialog-options.js.map +1 -0
  484. package/esm2022/dialog/lib/confirm-dialog.js +155 -0
  485. package/esm2022/dialog/lib/confirm-dialog.js.map +1 -0
  486. package/esm2022/dialog/lib/dialog/dialog.js +40 -0
  487. package/esm2022/dialog/lib/dialog/dialog.js.map +1 -0
  488. package/esm2022/dialog/lib/dialog-body.js +33 -0
  489. package/esm2022/dialog/lib/dialog-body.js.map +1 -0
  490. package/esm2022/dialog/lib/dialog-close.js +45 -0
  491. package/esm2022/dialog/lib/dialog-close.js.map +1 -0
  492. package/esm2022/dialog/lib/dialog-config.js +23 -0
  493. package/esm2022/dialog/lib/dialog-config.js.map +1 -0
  494. package/esm2022/dialog/lib/dialog-container.js +69 -0
  495. package/esm2022/dialog/lib/dialog-container.js.map +1 -0
  496. package/esm2022/dialog/lib/dialog-footer.js +29 -0
  497. package/esm2022/dialog/lib/dialog-footer.js.map +1 -0
  498. package/esm2022/dialog/lib/dialog-header.js +181 -0
  499. package/esm2022/dialog/lib/dialog-header.js.map +1 -0
  500. package/esm2022/dialog/lib/dialog-ref.js +167 -0
  501. package/esm2022/dialog/lib/dialog-ref.js.map +1 -0
  502. package/esm2022/dialog/lib/dialog-template.js +136 -0
  503. package/esm2022/dialog/lib/dialog-template.js.map +1 -0
  504. package/esm2022/dialog/lib/dialog-text-content.js +59 -0
  505. package/esm2022/dialog/lib/dialog-text-content.js.map +1 -0
  506. package/esm2022/dialog/lib/dialog.service.js +205 -0
  507. package/esm2022/dialog/lib/dialog.service.js.map +1 -0
  508. package/esm2022/dialog/lib/generate-routable-dialog-route.js +59 -0
  509. package/esm2022/dialog/lib/generate-routable-dialog-route.js.map +1 -0
  510. package/esm2022/dialog/lib/inject-dialog-ref.js +16 -0
  511. package/esm2022/dialog/lib/inject-dialog-ref.js.map +1 -0
  512. package/esm2022/dialog/lib/routable-dialog.js +91 -0
  513. package/esm2022/dialog/lib/routable-dialog.js.map +1 -0
  514. package/esm2022/dialog/malva-ui-core-dialog.js +5 -0
  515. package/esm2022/dialog/malva-ui-core-dialog.js.map +1 -0
  516. package/esm2022/divider/index.js +2 -0
  517. package/esm2022/divider/index.js.map +1 -0
  518. package/esm2022/divider/lib/divider/divider.js +73 -0
  519. package/esm2022/divider/lib/divider/divider.js.map +1 -0
  520. package/esm2022/divider/malva-ui-core-divider.js +5 -0
  521. package/esm2022/divider/malva-ui-core-divider.js.map +1 -0
  522. package/esm2022/drawer/index.js +12 -0
  523. package/esm2022/drawer/index.js.map +1 -0
  524. package/esm2022/drawer/lib/drawer/drawer.js +180 -0
  525. package/esm2022/drawer/lib/drawer/drawer.js.map +1 -0
  526. package/esm2022/drawer/lib/drawer-body.js +32 -0
  527. package/esm2022/drawer/lib/drawer-body.js.map +1 -0
  528. package/esm2022/drawer/lib/drawer-content.js +14 -0
  529. package/esm2022/drawer/lib/drawer-content.js.map +1 -0
  530. package/esm2022/drawer/lib/drawer-footer.js +14 -0
  531. package/esm2022/drawer/lib/drawer-footer.js.map +1 -0
  532. package/esm2022/drawer/lib/drawer-header.js +14 -0
  533. package/esm2022/drawer/lib/drawer-header.js.map +1 -0
  534. package/esm2022/drawer/lib/drawer-ref.js +31 -0
  535. package/esm2022/drawer/lib/drawer-ref.js.map +1 -0
  536. package/esm2022/drawer/lib/drawer-resize.js +243 -0
  537. package/esm2022/drawer/lib/drawer-resize.js.map +1 -0
  538. package/esm2022/drawer/lib/drawer-section/drawer-section.js +26 -0
  539. package/esm2022/drawer/lib/drawer-section/drawer-section.js.map +1 -0
  540. package/esm2022/drawer/lib/drawer-sections/drawer-sections.js +58 -0
  541. package/esm2022/drawer/lib/drawer-sections/drawer-sections.js.map +1 -0
  542. package/esm2022/drawer/lib/drawer-sections.service.js +83 -0
  543. package/esm2022/drawer/lib/drawer-sections.service.js.map +1 -0
  544. package/esm2022/drawer/lib/drawer.service.js +86 -0
  545. package/esm2022/drawer/lib/drawer.service.js.map +1 -0
  546. package/esm2022/drawer/lib/generate-routable-drawer-route.js +52 -0
  547. package/esm2022/drawer/lib/generate-routable-drawer-route.js.map +1 -0
  548. package/esm2022/drawer/lib/routable-drawer.js +91 -0
  549. package/esm2022/drawer/lib/routable-drawer.js.map +1 -0
  550. package/esm2022/drawer/malva-ui-core-drawer.js +5 -0
  551. package/esm2022/drawer/malva-ui-core-drawer.js.map +1 -0
  552. package/esm2022/dropdown/index.js +10 -0
  553. package/esm2022/dropdown/index.js.map +1 -0
  554. package/esm2022/dropdown/lib/active-descendant.js +92 -0
  555. package/esm2022/dropdown/lib/active-descendant.js.map +1 -0
  556. package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js +295 -0
  557. package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js.map +1 -0
  558. package/esm2022/dropdown/lib/highlight-match.pipe.js +36 -0
  559. package/esm2022/dropdown/lib/highlight-match.pipe.js.map +1 -0
  560. package/esm2022/dropdown/lib/option-matcher.js +124 -0
  561. package/esm2022/dropdown/lib/option-matcher.js.map +1 -0
  562. package/esm2022/dropdown/lib/options-adapter.js +356 -0
  563. package/esm2022/dropdown/lib/options-adapter.js.map +1 -0
  564. package/esm2022/dropdown/lib/options-result.js +11 -0
  565. package/esm2022/dropdown/lib/options-result.js.map +1 -0
  566. package/esm2022/dropdown/lib/reconciliation.js +32 -0
  567. package/esm2022/dropdown/lib/reconciliation.js.map +1 -0
  568. package/esm2022/dropdown/lib/select-data-source.js +21 -0
  569. package/esm2022/dropdown/lib/select-data-source.js.map +1 -0
  570. package/esm2022/dropdown/lib/select-option.js +25 -0
  571. package/esm2022/dropdown/lib/select-option.js.map +1 -0
  572. package/esm2022/dropdown/malva-ui-core-dropdown.js +5 -0
  573. package/esm2022/dropdown/malva-ui-core-dropdown.js.map +1 -0
  574. package/esm2022/empty-state/index.js +2 -0
  575. package/esm2022/empty-state/index.js.map +1 -0
  576. package/esm2022/empty-state/lib/empty-state/empty-state.js +43 -0
  577. package/esm2022/empty-state/lib/empty-state/empty-state.js.map +1 -0
  578. package/esm2022/empty-state/malva-ui-core-empty-state.js +5 -0
  579. package/esm2022/empty-state/malva-ui-core-empty-state.js.map +1 -0
  580. package/esm2022/expand/index.js +3 -0
  581. package/esm2022/expand/index.js.map +1 -0
  582. package/esm2022/expand/lib/expand/expand-content.js +33 -0
  583. package/esm2022/expand/lib/expand/expand-content.js.map +1 -0
  584. package/esm2022/expand/lib/expand/expand.js +93 -0
  585. package/esm2022/expand/lib/expand/expand.js.map +1 -0
  586. package/esm2022/expand/malva-ui-core-expand.js +5 -0
  587. package/esm2022/expand/malva-ui-core-expand.js.map +1 -0
  588. package/esm2022/file-upload/index.js +5 -0
  589. package/esm2022/file-upload/index.js.map +1 -0
  590. package/esm2022/file-upload/lib/file-upload/file-upload.js +324 -0
  591. package/esm2022/file-upload/lib/file-upload/file-upload.js.map +1 -0
  592. package/esm2022/file-upload/lib/file-upload/file-upload.types.js +1 -0
  593. package/esm2022/file-upload/lib/file-upload/file-upload.types.js.map +1 -0
  594. package/esm2022/file-upload/lib/file-upload-action.js +65 -0
  595. package/esm2022/file-upload/lib/file-upload-action.js.map +1 -0
  596. package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js +55 -0
  597. package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js.map +1 -0
  598. package/esm2022/file-upload/malva-ui-core-file-upload.js +5 -0
  599. package/esm2022/file-upload/malva-ui-core-file-upload.js.map +1 -0
  600. package/esm2022/filter/index.js +4 -0
  601. package/esm2022/filter/index.js.map +1 -0
  602. package/esm2022/filter/lib/filter/filter.js +552 -0
  603. package/esm2022/filter/lib/filter/filter.js.map +1 -0
  604. package/esm2022/filter/lib/filter.types.js +1 -0
  605. package/esm2022/filter/lib/filter.types.js.map +1 -0
  606. package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js +518 -0
  607. package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js.map +1 -0
  608. package/esm2022/filter/malva-ui-core-filter.js +5 -0
  609. package/esm2022/filter/malva-ui-core-filter.js.map +1 -0
  610. package/esm2022/form/index.js +7 -0
  611. package/esm2022/form/index.js.map +1 -0
  612. package/esm2022/form/lib/fieldset/fieldset.js +101 -0
  613. package/esm2022/form/lib/fieldset/fieldset.js.map +1 -0
  614. package/esm2022/form/lib/fieldset-span.js +49 -0
  615. package/esm2022/form/lib/fieldset-span.js.map +1 -0
  616. package/esm2022/form/lib/form/form.js +60 -0
  617. package/esm2022/form/lib/form/form.js.map +1 -0
  618. package/esm2022/form/lib/form-actions.js +34 -0
  619. package/esm2022/form/lib/form-actions.js.map +1 -0
  620. package/esm2022/form/lib/form-gap.js +15 -0
  621. package/esm2022/form/lib/form-gap.js.map +1 -0
  622. package/esm2022/form/lib/form-header.js +27 -0
  623. package/esm2022/form/lib/form-header.js.map +1 -0
  624. package/esm2022/form/lib/form.types.js +1 -0
  625. package/esm2022/form/lib/form.types.js.map +1 -0
  626. package/esm2022/form/malva-ui-core-form.js +5 -0
  627. package/esm2022/form/malva-ui-core-form.js.map +1 -0
  628. package/esm2022/form-utils/index.js +16 -0
  629. package/esm2022/form-utils/index.js.map +1 -0
  630. package/esm2022/form-utils/lib/aria-value-bridge.js +57 -0
  631. package/esm2022/form-utils/lib/aria-value-bridge.js.map +1 -0
  632. package/esm2022/form-utils/lib/description/description.js +24 -0
  633. package/esm2022/form-utils/lib/description/description.js.map +1 -0
  634. package/esm2022/form-utils/lib/focusable-group-base.js +87 -0
  635. package/esm2022/form-utils/lib/focusable-group-base.js.map +1 -0
  636. package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js +192 -0
  637. package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js.map +1 -0
  638. package/esm2022/form-utils/lib/form-control-sides.js +34 -0
  639. package/esm2022/form-utils/lib/form-control-sides.js.map +1 -0
  640. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js +14 -0
  641. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js.map +1 -0
  642. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js +47 -0
  643. package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js.map +1 -0
  644. package/esm2022/form-utils/lib/form-field/form-field.js +245 -0
  645. package/esm2022/form-utils/lib/form-field/form-field.js.map +1 -0
  646. package/esm2022/form-utils/lib/hint/hint.js +11 -0
  647. package/esm2022/form-utils/lib/hint/hint.js.map +1 -0
  648. package/esm2022/form-utils/lib/label/label.js +55 -0
  649. package/esm2022/form-utils/lib/label/label.js.map +1 -0
  650. package/esm2022/form-utils/lib/message/message.js +20 -0
  651. package/esm2022/form-utils/lib/message/message.js.map +1 -0
  652. package/esm2022/form-utils/lib/models/error-display-strategy.js +1 -0
  653. package/esm2022/form-utils/lib/models/error-display-strategy.js.map +1 -0
  654. package/esm2022/form-utils/lib/models/form-control-connector.js +3 -0
  655. package/esm2022/form-utils/lib/models/form-control-connector.js.map +1 -0
  656. package/esm2022/form-utils/lib/models/form-state.js +1 -0
  657. package/esm2022/form-utils/lib/models/form-state.js.map +1 -0
  658. package/esm2022/form-utils/lib/selection.service.js +81 -0
  659. package/esm2022/form-utils/lib/selection.service.js.map +1 -0
  660. package/esm2022/form-utils/malva-ui-core-form-utils.js +5 -0
  661. package/esm2022/form-utils/malva-ui-core-form-utils.js.map +1 -0
  662. package/esm2022/form-utils/testing/index.js +2 -0
  663. package/esm2022/form-utils/testing/index.js.map +1 -0
  664. package/esm2022/form-utils/testing/lib/forms-binding-matrix.js +32 -0
  665. package/esm2022/form-utils/testing/lib/forms-binding-matrix.js.map +1 -0
  666. package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js +5 -0
  667. package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js.map +1 -0
  668. package/esm2022/index.js +70 -0
  669. package/esm2022/index.js.map +1 -0
  670. package/esm2022/input/index.js +4 -0
  671. package/esm2022/input/index.js.map +1 -0
  672. package/esm2022/input/lib/input/input-native.js +49 -0
  673. package/esm2022/input/lib/input/input-native.js.map +1 -0
  674. package/esm2022/input/lib/input/input-value-accessor.js +4 -0
  675. package/esm2022/input/lib/input/input-value-accessor.js.map +1 -0
  676. package/esm2022/input/lib/input/input.js +277 -0
  677. package/esm2022/input/lib/input/input.js.map +1 -0
  678. package/esm2022/input/lib/input/password-strength.js +46 -0
  679. package/esm2022/input/lib/input/password-strength.js.map +1 -0
  680. package/esm2022/input/malva-ui-core-input.js +5 -0
  681. package/esm2022/input/malva-ui-core-input.js.map +1 -0
  682. package/esm2022/kbd/index.js +2 -0
  683. package/esm2022/kbd/index.js.map +1 -0
  684. package/esm2022/kbd/lib/kbd/kbd.js +124 -0
  685. package/esm2022/kbd/lib/kbd/kbd.js.map +1 -0
  686. package/esm2022/kbd/malva-ui-core-kbd.js +5 -0
  687. package/esm2022/kbd/malva-ui-core-kbd.js.map +1 -0
  688. package/esm2022/layout/index.js +5 -0
  689. package/esm2022/layout/index.js.map +1 -0
  690. package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js +14 -0
  691. package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js.map +1 -0
  692. package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js +14 -0
  693. package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js.map +1 -0
  694. package/esm2022/layout/lib/layout/layout.js +43 -0
  695. package/esm2022/layout/lib/layout/layout.js.map +1 -0
  696. package/esm2022/layout/lib/layout/services/theme.service.js +121 -0
  697. package/esm2022/layout/lib/layout/services/theme.service.js.map +1 -0
  698. package/esm2022/layout/malva-ui-core-layout.js +5 -0
  699. package/esm2022/layout/malva-ui-core-layout.js.map +1 -0
  700. package/esm2022/link/index.js +3 -0
  701. package/esm2022/link/index.js.map +1 -0
  702. package/esm2022/link/lib/link/link.directives.js +24 -0
  703. package/esm2022/link/lib/link/link.directives.js.map +1 -0
  704. package/esm2022/link/lib/link/link.js +61 -0
  705. package/esm2022/link/lib/link/link.js.map +1 -0
  706. package/esm2022/link/malva-ui-core-link.js +5 -0
  707. package/esm2022/link/malva-ui-core-link.js.map +1 -0
  708. package/esm2022/list/index.js +14 -0
  709. package/esm2022/list/index.js.map +1 -0
  710. package/esm2022/list/lib/list/list.js +28 -0
  711. package/esm2022/list/lib/list/list.js.map +1 -0
  712. package/esm2022/list/lib/list-item/list-item.js +125 -0
  713. package/esm2022/list/lib/list-item/list-item.js.map +1 -0
  714. package/esm2022/list/lib/list-item-actions.js +23 -0
  715. package/esm2022/list/lib/list-item-actions.js.map +1 -0
  716. package/esm2022/list/lib/list-item-byline.js +13 -0
  717. package/esm2022/list/lib/list-item-byline.js.map +1 -0
  718. package/esm2022/list/lib/list-item-group/list-item-group.js +25 -0
  719. package/esm2022/list/lib/list-item-group/list-item-group.js.map +1 -0
  720. package/esm2022/list/lib/list-item-link/list-item-link.js +20 -0
  721. package/esm2022/list/lib/list-item-link/list-item-link.js.map +1 -0
  722. package/esm2022/list/lib/list-item-media.js +13 -0
  723. package/esm2022/list/lib/list-item-media.js.map +1 -0
  724. package/esm2022/list/lib/list-item-meta.js +13 -0
  725. package/esm2022/list/lib/list-item-meta.js.map +1 -0
  726. package/esm2022/list/lib/list-item-prefix.js +13 -0
  727. package/esm2022/list/lib/list-item-prefix.js.map +1 -0
  728. package/esm2022/list/lib/list-item-suffix.js +13 -0
  729. package/esm2022/list/lib/list-item-suffix.js.map +1 -0
  730. package/esm2022/list/lib/list-item-template.js +14 -0
  731. package/esm2022/list/lib/list-item-template.js.map +1 -0
  732. package/esm2022/list/lib/list-item-title.js +13 -0
  733. package/esm2022/list/lib/list-item-title.js.map +1 -0
  734. package/esm2022/list/lib/list-selectable.js +116 -0
  735. package/esm2022/list/lib/list-selectable.js.map +1 -0
  736. package/esm2022/list/malva-ui-core-list.js +5 -0
  737. package/esm2022/list/malva-ui-core-list.js.map +1 -0
  738. package/esm2022/loader/index.js +2 -0
  739. package/esm2022/loader/index.js.map +1 -0
  740. package/esm2022/loader/lib/loader/loader.js +134 -0
  741. package/esm2022/loader/lib/loader/loader.js.map +1 -0
  742. package/esm2022/loader/malva-ui-core-loader.js +5 -0
  743. package/esm2022/loader/malva-ui-core-loader.js.map +1 -0
  744. package/esm2022/malva-ui-core.js +5 -0
  745. package/esm2022/malva-ui-core.js.map +1 -0
  746. package/esm2022/menu/index.js +10 -0
  747. package/esm2022/menu/index.js.map +1 -0
  748. package/esm2022/menu/lib/menu/menu-group-label.js +35 -0
  749. package/esm2022/menu/lib/menu/menu-group-label.js.map +1 -0
  750. package/esm2022/menu/lib/menu/menu-group.js +44 -0
  751. package/esm2022/menu/lib/menu/menu-group.js.map +1 -0
  752. package/esm2022/menu/lib/menu/menu-item.js +117 -0
  753. package/esm2022/menu/lib/menu/menu-item.js.map +1 -0
  754. package/esm2022/menu/lib/menu/menu-separator.js +41 -0
  755. package/esm2022/menu/lib/menu/menu-separator.js.map +1 -0
  756. package/esm2022/menu/lib/menu/menu-trigger.js +653 -0
  757. package/esm2022/menu/lib/menu/menu-trigger.js.map +1 -0
  758. package/esm2022/menu/lib/menu/menu.js +308 -0
  759. package/esm2022/menu/lib/menu/menu.js.map +1 -0
  760. package/esm2022/menu/lib/menu/menu.types.js +4 -0
  761. package/esm2022/menu/lib/menu/menu.types.js.map +1 -0
  762. package/esm2022/menu/lib/menu/menubar.js +257 -0
  763. package/esm2022/menu/lib/menu/menubar.js.map +1 -0
  764. package/esm2022/menu/lib/menu/menubar.types.js +4 -0
  765. package/esm2022/menu/lib/menu/menubar.types.js.map +1 -0
  766. package/esm2022/menu/lib/menu/submenu-aim.js +30 -0
  767. package/esm2022/menu/lib/menu/submenu-aim.js.map +1 -0
  768. package/esm2022/menu/malva-ui-core-menu.js +5 -0
  769. package/esm2022/menu/malva-ui-core-menu.js.map +1 -0
  770. package/esm2022/notification/index.js +5 -0
  771. package/esm2022/notification/index.js.map +1 -0
  772. package/esm2022/notification/lib/notification-item/notification-item.js +65 -0
  773. package/esm2022/notification/lib/notification-item/notification-item.js.map +1 -0
  774. package/esm2022/notification/lib/notification-ref.js +13 -0
  775. package/esm2022/notification/lib/notification-ref.js.map +1 -0
  776. package/esm2022/notification/lib/notification.service.js +118 -0
  777. package/esm2022/notification/lib/notification.service.js.map +1 -0
  778. package/esm2022/notification/lib/notification.types.js +6 -0
  779. package/esm2022/notification/lib/notification.types.js.map +1 -0
  780. package/esm2022/notification/malva-ui-core-notification.js +5 -0
  781. package/esm2022/notification/malva-ui-core-notification.js.map +1 -0
  782. package/esm2022/number-input/index.js +2 -0
  783. package/esm2022/number-input/index.js.map +1 -0
  784. package/esm2022/number-input/lib/number-input/number-input.js +395 -0
  785. package/esm2022/number-input/lib/number-input/number-input.js.map +1 -0
  786. package/esm2022/number-input/malva-ui-core-number-input.js +5 -0
  787. package/esm2022/number-input/malva-ui-core-number-input.js.map +1 -0
  788. package/esm2022/page/index.js +15 -0
  789. package/esm2022/page/index.js.map +1 -0
  790. package/esm2022/page/lib/page/page-scroll.token.js +9 -0
  791. package/esm2022/page/lib/page/page-scroll.token.js.map +1 -0
  792. package/esm2022/page/lib/page/page-snap-controller.js +170 -0
  793. package/esm2022/page/lib/page/page-snap-controller.js.map +1 -0
  794. package/esm2022/page/lib/page/page-snap.directive.js +65 -0
  795. package/esm2022/page/lib/page/page-snap.directive.js.map +1 -0
  796. package/esm2022/page/lib/page/page.js +173 -0
  797. package/esm2022/page/lib/page/page.js.map +1 -0
  798. package/esm2022/page/lib/page-content/page-aside.js +13 -0
  799. package/esm2022/page/lib/page-content/page-aside.js.map +1 -0
  800. package/esm2022/page/lib/page-content/page-content.js +72 -0
  801. package/esm2022/page/lib/page-content/page-content.js.map +1 -0
  802. package/esm2022/page/lib/page-dock/page-dock.js +128 -0
  803. package/esm2022/page/lib/page-dock/page-dock.js.map +1 -0
  804. package/esm2022/page/lib/page-dock/page-dock.slots.js +39 -0
  805. package/esm2022/page/lib/page-dock/page-dock.slots.js.map +1 -0
  806. package/esm2022/page/lib/page-header/page-header.directives.js +88 -0
  807. package/esm2022/page/lib/page-header/page-header.directives.js.map +1 -0
  808. package/esm2022/page/lib/page-header/page-header.js +124 -0
  809. package/esm2022/page/lib/page-header/page-header.js.map +1 -0
  810. package/esm2022/page/lib/page-shell/page-shell-color.js +193 -0
  811. package/esm2022/page/lib/page-shell/page-shell-color.js.map +1 -0
  812. package/esm2022/page/lib/page-shell/page-shell-css-color.js +207 -0
  813. package/esm2022/page/lib/page-shell/page-shell-css-color.js.map +1 -0
  814. package/esm2022/page/lib/page-shell/page-shell.js +131 -0
  815. package/esm2022/page/lib/page-shell/page-shell.js.map +1 -0
  816. package/esm2022/page/lib/page-shell/page-shell.slots.js +41 -0
  817. package/esm2022/page/lib/page-shell/page-shell.slots.js.map +1 -0
  818. package/esm2022/page/lib/page-summary/page-summary-item.js +26 -0
  819. package/esm2022/page/lib/page-summary/page-summary-item.js.map +1 -0
  820. package/esm2022/page/lib/page-summary/page-summary.js +87 -0
  821. package/esm2022/page/lib/page-summary/page-summary.js.map +1 -0
  822. package/esm2022/page/malva-ui-core-page.js +5 -0
  823. package/esm2022/page/malva-ui-core-page.js.map +1 -0
  824. package/esm2022/pagination/index.js +5 -0
  825. package/esm2022/pagination/index.js.map +1 -0
  826. package/esm2022/pagination/lib/pagination/pagination.directives.js +58 -0
  827. package/esm2022/pagination/lib/pagination/pagination.directives.js.map +1 -0
  828. package/esm2022/pagination/lib/pagination/pagination.js +293 -0
  829. package/esm2022/pagination/lib/pagination/pagination.js.map +1 -0
  830. package/esm2022/pagination/lib/pagination/pagination.model.js +1 -0
  831. package/esm2022/pagination/lib/pagination/pagination.model.js.map +1 -0
  832. package/esm2022/pagination/lib/pagination/pagination.service.js +108 -0
  833. package/esm2022/pagination/lib/pagination/pagination.service.js.map +1 -0
  834. package/esm2022/pagination/malva-ui-core-pagination.js +5 -0
  835. package/esm2022/pagination/malva-ui-core-pagination.js.map +1 -0
  836. package/esm2022/pin-input/index.js +3 -0
  837. package/esm2022/pin-input/index.js.map +1 -0
  838. package/esm2022/pin-input/lib/pin-input/pin-input-separator.js +31 -0
  839. package/esm2022/pin-input/lib/pin-input/pin-input-separator.js.map +1 -0
  840. package/esm2022/pin-input/lib/pin-input/pin-input.js +365 -0
  841. package/esm2022/pin-input/lib/pin-input/pin-input.js.map +1 -0
  842. package/esm2022/pin-input/malva-ui-core-pin-input.js +5 -0
  843. package/esm2022/pin-input/malva-ui-core-pin-input.js.map +1 -0
  844. package/esm2022/popup/index.js +10 -0
  845. package/esm2022/popup/index.js.map +1 -0
  846. package/esm2022/popup/lib/popup/popup.js +500 -0
  847. package/esm2022/popup/lib/popup/popup.js.map +1 -0
  848. package/esm2022/popup/lib/popup-container/popup-container.js +169 -0
  849. package/esm2022/popup/lib/popup-container/popup-container.js.map +1 -0
  850. package/esm2022/popup/lib/popup-container/popup-container.token.js +9 -0
  851. package/esm2022/popup/lib/popup-container/popup-container.token.js.map +1 -0
  852. package/esm2022/popup/lib/popup-content.js +14 -0
  853. package/esm2022/popup/lib/popup-content.js.map +1 -0
  854. package/esm2022/popup/lib/popup-header-content.js +26 -0
  855. package/esm2022/popup/lib/popup-header-content.js.map +1 -0
  856. package/esm2022/popup/lib/popup-pinned-content.js +25 -0
  857. package/esm2022/popup/lib/popup-pinned-content.js.map +1 -0
  858. package/esm2022/popup/lib/popup-positions.js +252 -0
  859. package/esm2022/popup/lib/popup-positions.js.map +1 -0
  860. package/esm2022/popup/lib/popup-trigger/popup-trigger.js +308 -0
  861. package/esm2022/popup/lib/popup-trigger/popup-trigger.js.map +1 -0
  862. package/esm2022/popup/lib/popup.service.js +188 -0
  863. package/esm2022/popup/lib/popup.service.js.map +1 -0
  864. package/esm2022/popup/malva-ui-core-popup.js +5 -0
  865. package/esm2022/popup/malva-ui-core-popup.js.map +1 -0
  866. package/esm2022/progress/index.js +2 -0
  867. package/esm2022/progress/index.js.map +1 -0
  868. package/esm2022/progress/lib/progress/progress.js +102 -0
  869. package/esm2022/progress/lib/progress/progress.js.map +1 -0
  870. package/esm2022/progress/malva-ui-core-progress.js +5 -0
  871. package/esm2022/progress/malva-ui-core-progress.js.map +1 -0
  872. package/esm2022/radio/index.js +3 -0
  873. package/esm2022/radio/index.js.map +1 -0
  874. package/esm2022/radio/lib/radio/radio.js +134 -0
  875. package/esm2022/radio/lib/radio/radio.js.map +1 -0
  876. package/esm2022/radio/lib/radio-group/radio-group.js +176 -0
  877. package/esm2022/radio/lib/radio-group/radio-group.js.map +1 -0
  878. package/esm2022/radio/lib/radio-group-token.js +3 -0
  879. package/esm2022/radio/lib/radio-group-token.js.map +1 -0
  880. package/esm2022/radio/malva-ui-core-radio.js +5 -0
  881. package/esm2022/radio/malva-ui-core-radio.js.map +1 -0
  882. package/esm2022/rating/index.js +2 -0
  883. package/esm2022/rating/index.js.map +1 -0
  884. package/esm2022/rating/lib/rating/rating.js +208 -0
  885. package/esm2022/rating/lib/rating/rating.js.map +1 -0
  886. package/esm2022/rating/malva-ui-core-rating.js +5 -0
  887. package/esm2022/rating/malva-ui-core-rating.js.map +1 -0
  888. package/esm2022/scrollbar/index.js +2 -0
  889. package/esm2022/scrollbar/index.js.map +1 -0
  890. package/esm2022/scrollbar/lib/scrollbar/scrollbar.js +388 -0
  891. package/esm2022/scrollbar/lib/scrollbar/scrollbar.js.map +1 -0
  892. package/esm2022/scrollbar/malva-ui-core-scrollbar.js +5 -0
  893. package/esm2022/scrollbar/malva-ui-core-scrollbar.js.map +1 -0
  894. package/esm2022/search-field/index.js +3 -0
  895. package/esm2022/search-field/index.js.map +1 -0
  896. package/esm2022/search-field/lib/search-field/search-field.js +535 -0
  897. package/esm2022/search-field/lib/search-field/search-field.js.map +1 -0
  898. package/esm2022/search-field/lib/search-field/search-overlay-content.js +35 -0
  899. package/esm2022/search-field/lib/search-field/search-overlay-content.js.map +1 -0
  900. package/esm2022/search-field/malva-ui-core-search-field.js +5 -0
  901. package/esm2022/search-field/malva-ui-core-search-field.js.map +1 -0
  902. package/esm2022/segmented/index.js +5 -0
  903. package/esm2022/segmented/index.js.map +1 -0
  904. package/esm2022/segmented/lib/segmented/segmented.js +248 -0
  905. package/esm2022/segmented/lib/segmented/segmented.js.map +1 -0
  906. package/esm2022/segmented/lib/segmented-item/segmented-item.js +194 -0
  907. package/esm2022/segmented/lib/segmented-item/segmented-item.js.map +1 -0
  908. package/esm2022/segmented/lib/segmented-token.js +4 -0
  909. package/esm2022/segmented/lib/segmented-token.js.map +1 -0
  910. package/esm2022/segmented/lib/segmented.types.js +1 -0
  911. package/esm2022/segmented/lib/segmented.types.js.map +1 -0
  912. package/esm2022/segmented/malva-ui-core-segmented.js +5 -0
  913. package/esm2022/segmented/malva-ui-core-segmented.js.map +1 -0
  914. package/esm2022/select/index.js +4 -0
  915. package/esm2022/select/index.js.map +1 -0
  916. package/esm2022/select/lib/select/select.js +685 -0
  917. package/esm2022/select/lib/select/select.js.map +1 -0
  918. package/esm2022/select/lib/select-option.js +2 -0
  919. package/esm2022/select/lib/select-option.js.map +1 -0
  920. package/esm2022/select/lib/select-template.directives.js +34 -0
  921. package/esm2022/select/lib/select-template.directives.js.map +1 -0
  922. package/esm2022/select/malva-ui-core-select.js +5 -0
  923. package/esm2022/select/malva-ui-core-select.js.map +1 -0
  924. package/esm2022/sidebar/index.js +16 -0
  925. package/esm2022/sidebar/index.js.map +1 -0
  926. package/esm2022/sidebar/lib/sidebar/sidebar.js +251 -0
  927. package/esm2022/sidebar/lib/sidebar/sidebar.js.map +1 -0
  928. package/esm2022/sidebar/lib/sidebar-content.js +37 -0
  929. package/esm2022/sidebar/lib/sidebar-content.js.map +1 -0
  930. package/esm2022/sidebar/lib/sidebar-context.js +3 -0
  931. package/esm2022/sidebar/lib/sidebar-context.js.map +1 -0
  932. package/esm2022/sidebar/lib/sidebar-footer.js +20 -0
  933. package/esm2022/sidebar/lib/sidebar-footer.js.map +1 -0
  934. package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js +341 -0
  935. package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js.map +1 -0
  936. package/esm2022/sidebar/lib/sidebar-header.js +20 -0
  937. package/esm2022/sidebar/lib/sidebar-header.js.map +1 -0
  938. package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js +216 -0
  939. package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js.map +1 -0
  940. package/esm2022/sidebar/lib/sidebar-item-host.js +39 -0
  941. package/esm2022/sidebar/lib/sidebar-item-host.js.map +1 -0
  942. package/esm2022/sidebar/lib/sidebar-item-icon.js +14 -0
  943. package/esm2022/sidebar/lib/sidebar-item-icon.js.map +1 -0
  944. package/esm2022/sidebar/lib/sidebar-mode.js +1 -0
  945. package/esm2022/sidebar/lib/sidebar-mode.js.map +1 -0
  946. package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js +202 -0
  947. package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js.map +1 -0
  948. package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js +159 -0
  949. package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js.map +1 -0
  950. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js +35 -0
  951. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js.map +1 -0
  952. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js +107 -0
  953. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js.map +1 -0
  954. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js +1 -0
  955. package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js.map +1 -0
  956. package/esm2022/sidebar/malva-ui-core-sidebar.js +5 -0
  957. package/esm2022/sidebar/malva-ui-core-sidebar.js.map +1 -0
  958. package/esm2022/skeleton/index.js +2 -0
  959. package/esm2022/skeleton/index.js.map +1 -0
  960. package/esm2022/skeleton/lib/skeleton/skeleton.js +78 -0
  961. package/esm2022/skeleton/lib/skeleton/skeleton.js.map +1 -0
  962. package/esm2022/skeleton/malva-ui-core-skeleton.js +5 -0
  963. package/esm2022/skeleton/malva-ui-core-skeleton.js.map +1 -0
  964. package/esm2022/slider/index.js +3 -0
  965. package/esm2022/slider/index.js.map +1 -0
  966. package/esm2022/slider/lib/slider/slider-tooltip-def.js +31 -0
  967. package/esm2022/slider/lib/slider/slider-tooltip-def.js.map +1 -0
  968. package/esm2022/slider/lib/slider/slider.js +468 -0
  969. package/esm2022/slider/lib/slider/slider.js.map +1 -0
  970. package/esm2022/slider/malva-ui-core-slider.js +5 -0
  971. package/esm2022/slider/malva-ui-core-slider.js.map +1 -0
  972. package/esm2022/split-pane/index.js +4 -0
  973. package/esm2022/split-pane/index.js.map +1 -0
  974. package/esm2022/split-pane/lib/split-pane/split-pane-panel.js +49 -0
  975. package/esm2022/split-pane/lib/split-pane/split-pane-panel.js.map +1 -0
  976. package/esm2022/split-pane/lib/split-pane/split-pane.js +290 -0
  977. package/esm2022/split-pane/lib/split-pane/split-pane.js.map +1 -0
  978. package/esm2022/split-pane/lib/split-pane/split-pane.types.js +1 -0
  979. package/esm2022/split-pane/lib/split-pane/split-pane.types.js.map +1 -0
  980. package/esm2022/split-pane/malva-ui-core-split-pane.js +5 -0
  981. package/esm2022/split-pane/malva-ui-core-split-pane.js.map +1 -0
  982. package/esm2022/status-indicator/index.js +2 -0
  983. package/esm2022/status-indicator/index.js.map +1 -0
  984. package/esm2022/status-indicator/lib/status-indicator/status-indicator.js +71 -0
  985. package/esm2022/status-indicator/lib/status-indicator/status-indicator.js.map +1 -0
  986. package/esm2022/status-indicator/malva-ui-core-status-indicator.js +5 -0
  987. package/esm2022/status-indicator/malva-ui-core-status-indicator.js.map +1 -0
  988. package/esm2022/stepper/index.js +5 -0
  989. package/esm2022/stepper/index.js.map +1 -0
  990. package/esm2022/stepper/lib/stepper/step-header.js +46 -0
  991. package/esm2022/stepper/lib/stepper/step-header.js.map +1 -0
  992. package/esm2022/stepper/lib/stepper/step.js +65 -0
  993. package/esm2022/stepper/lib/stepper/step.js.map +1 -0
  994. package/esm2022/stepper/lib/stepper/stepper-token.js +4 -0
  995. package/esm2022/stepper/lib/stepper/stepper-token.js.map +1 -0
  996. package/esm2022/stepper/lib/stepper/stepper.js +216 -0
  997. package/esm2022/stepper/lib/stepper/stepper.js.map +1 -0
  998. package/esm2022/stepper/lib/stepper/stepper.types.js +1 -0
  999. package/esm2022/stepper/lib/stepper/stepper.types.js.map +1 -0
  1000. package/esm2022/stepper/malva-ui-core-stepper.js +5 -0
  1001. package/esm2022/stepper/malva-ui-core-stepper.js.map +1 -0
  1002. package/esm2022/switch/index.js +3 -0
  1003. package/esm2022/switch/index.js.map +1 -0
  1004. package/esm2022/switch/lib/switch/switch.js +190 -0
  1005. package/esm2022/switch/lib/switch/switch.js.map +1 -0
  1006. package/esm2022/switch/lib/switch-group/switch-group.js +68 -0
  1007. package/esm2022/switch/lib/switch-group/switch-group.js.map +1 -0
  1008. package/esm2022/switch/lib/switch-group-token.js +3 -0
  1009. package/esm2022/switch/lib/switch-group-token.js.map +1 -0
  1010. package/esm2022/switch/malva-ui-core-switch.js +5 -0
  1011. package/esm2022/switch/malva-ui-core-switch.js.map +1 -0
  1012. package/esm2022/tabs/index.js +9 -0
  1013. package/esm2022/tabs/index.js.map +1 -0
  1014. package/esm2022/tabs/lib/tab/tab.js +72 -0
  1015. package/esm2022/tabs/lib/tab/tab.js.map +1 -0
  1016. package/esm2022/tabs/lib/tab-content/tab-content.js +19 -0
  1017. package/esm2022/tabs/lib/tab-content/tab-content.js.map +1 -0
  1018. package/esm2022/tabs/lib/tab-content-def.js +14 -0
  1019. package/esm2022/tabs/lib/tab-content-def.js.map +1 -0
  1020. package/esm2022/tabs/lib/tab-def.js +17 -0
  1021. package/esm2022/tabs/lib/tab-def.js.map +1 -0
  1022. package/esm2022/tabs/lib/tab-group-token.js +3 -0
  1023. package/esm2022/tabs/lib/tab-group-token.js.map +1 -0
  1024. package/esm2022/tabs/lib/tab-item/tab-item.js +44 -0
  1025. package/esm2022/tabs/lib/tab-item/tab-item.js.map +1 -0
  1026. package/esm2022/tabs/lib/tabs/tabs.js +542 -0
  1027. package/esm2022/tabs/lib/tabs/tabs.js.map +1 -0
  1028. package/esm2022/tabs/lib/tabs.service.js +83 -0
  1029. package/esm2022/tabs/lib/tabs.service.js.map +1 -0
  1030. package/esm2022/tabs/malva-ui-core-tabs.js +5 -0
  1031. package/esm2022/tabs/malva-ui-core-tabs.js.map +1 -0
  1032. package/esm2022/textarea/index.js +2 -0
  1033. package/esm2022/textarea/index.js.map +1 -0
  1034. package/esm2022/textarea/lib/textarea/textarea.js +194 -0
  1035. package/esm2022/textarea/lib/textarea/textarea.js.map +1 -0
  1036. package/esm2022/textarea/malva-ui-core-textarea.js +5 -0
  1037. package/esm2022/textarea/malva-ui-core-textarea.js.map +1 -0
  1038. package/esm2022/tile/index.js +3 -0
  1039. package/esm2022/tile/index.js.map +1 -0
  1040. package/esm2022/tile/lib/tile/tile.js +39 -0
  1041. package/esm2022/tile/lib/tile/tile.js.map +1 -0
  1042. package/esm2022/tile/lib/tile-header.js +14 -0
  1043. package/esm2022/tile/lib/tile-header.js.map +1 -0
  1044. package/esm2022/tile/malva-ui-core-tile.js +5 -0
  1045. package/esm2022/tile/malva-ui-core-tile.js.map +1 -0
  1046. package/esm2022/time-picker/index.js +2 -0
  1047. package/esm2022/time-picker/index.js.map +1 -0
  1048. package/esm2022/time-picker/lib/time-picker/time-picker.js +310 -0
  1049. package/esm2022/time-picker/lib/time-picker/time-picker.js.map +1 -0
  1050. package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js +216 -0
  1051. package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js.map +1 -0
  1052. package/esm2022/time-picker/malva-ui-core-time-picker.js +5 -0
  1053. package/esm2022/time-picker/malva-ui-core-time-picker.js.map +1 -0
  1054. package/esm2022/timeline/index.js +6 -0
  1055. package/esm2022/timeline/index.js.map +1 -0
  1056. package/esm2022/timeline/lib/timeline/timeline-item-icon.js +31 -0
  1057. package/esm2022/timeline/lib/timeline/timeline-item-icon.js.map +1 -0
  1058. package/esm2022/timeline/lib/timeline/timeline-item-meta.js +31 -0
  1059. package/esm2022/timeline/lib/timeline/timeline-item-meta.js.map +1 -0
  1060. package/esm2022/timeline/lib/timeline/timeline-item.js +69 -0
  1061. package/esm2022/timeline/lib/timeline/timeline-item.js.map +1 -0
  1062. package/esm2022/timeline/lib/timeline/timeline.js +36 -0
  1063. package/esm2022/timeline/lib/timeline/timeline.js.map +1 -0
  1064. package/esm2022/timeline/lib/timeline/timeline.types.js +1 -0
  1065. package/esm2022/timeline/lib/timeline/timeline.types.js.map +1 -0
  1066. package/esm2022/timeline/malva-ui-core-timeline.js +5 -0
  1067. package/esm2022/timeline/malva-ui-core-timeline.js.map +1 -0
  1068. package/esm2022/title/index.js +2 -0
  1069. package/esm2022/title/index.js.map +1 -0
  1070. package/esm2022/title/lib/title/title.js +171 -0
  1071. package/esm2022/title/lib/title/title.js.map +1 -0
  1072. package/esm2022/title/malva-ui-core-title.js +5 -0
  1073. package/esm2022/title/malva-ui-core-title.js.map +1 -0
  1074. package/esm2022/toast/index.js +13 -0
  1075. package/esm2022/toast/index.js.map +1 -0
  1076. package/esm2022/toast/lib/abstract-toast-container.js +50 -0
  1077. package/esm2022/toast/lib/abstract-toast-container.js.map +1 -0
  1078. package/esm2022/toast/lib/abstract-toast-item.js +75 -0
  1079. package/esm2022/toast/lib/abstract-toast-item.js.map +1 -0
  1080. package/esm2022/toast/lib/abstract-toast.service.js +176 -0
  1081. package/esm2022/toast/lib/abstract-toast.service.js.map +1 -0
  1082. package/esm2022/toast/lib/toast-container/toast-container.js +61 -0
  1083. package/esm2022/toast/lib/toast-container/toast-container.js.map +1 -0
  1084. package/esm2022/toast/lib/toast-item/toast-item.js +62 -0
  1085. package/esm2022/toast/lib/toast-item/toast-item.js.map +1 -0
  1086. package/esm2022/toast/lib/toast-ref.js +54 -0
  1087. package/esm2022/toast/lib/toast-ref.js.map +1 -0
  1088. package/esm2022/toast/lib/toast-timer.js +37 -0
  1089. package/esm2022/toast/lib/toast-timer.js.map +1 -0
  1090. package/esm2022/toast/lib/toast.directives.js +76 -0
  1091. package/esm2022/toast/lib/toast.directives.js.map +1 -0
  1092. package/esm2022/toast/lib/toast.service.js +127 -0
  1093. package/esm2022/toast/lib/toast.service.js.map +1 -0
  1094. package/esm2022/toast/lib/toast.types.js +39 -0
  1095. package/esm2022/toast/lib/toast.types.js.map +1 -0
  1096. package/esm2022/toast/malva-ui-core-toast.js +5 -0
  1097. package/esm2022/toast/malva-ui-core-toast.js.map +1 -0
  1098. package/esm2022/tokenizer/index.js +4 -0
  1099. package/esm2022/tokenizer/index.js.map +1 -0
  1100. package/esm2022/tokenizer/lib/token/token.js +123 -0
  1101. package/esm2022/tokenizer/lib/token/token.js.map +1 -0
  1102. package/esm2022/tokenizer/lib/token-template.js +23 -0
  1103. package/esm2022/tokenizer/lib/token-template.js.map +1 -0
  1104. package/esm2022/tokenizer/lib/tokenizer/tokenizer.js +324 -0
  1105. package/esm2022/tokenizer/lib/tokenizer/tokenizer.js.map +1 -0
  1106. package/esm2022/tokenizer/malva-ui-core-tokenizer.js +5 -0
  1107. package/esm2022/tokenizer/malva-ui-core-tokenizer.js.map +1 -0
  1108. package/esm2022/toolbar/index.js +4 -0
  1109. package/esm2022/toolbar/index.js.map +1 -0
  1110. package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js +13 -0
  1111. package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js.map +1 -0
  1112. package/esm2022/toolbar/lib/toolbar/toolbar-widget.js +106 -0
  1113. package/esm2022/toolbar/lib/toolbar/toolbar-widget.js.map +1 -0
  1114. package/esm2022/toolbar/lib/toolbar/toolbar.js +19 -0
  1115. package/esm2022/toolbar/lib/toolbar/toolbar.js.map +1 -0
  1116. package/esm2022/toolbar/malva-ui-core-toolbar.js +5 -0
  1117. package/esm2022/toolbar/malva-ui-core-toolbar.js.map +1 -0
  1118. package/esm2022/tooltip/index.js +4 -0
  1119. package/esm2022/tooltip/index.js.map +1 -0
  1120. package/esm2022/tooltip/lib/tooltip/tooltip-panel.js +69 -0
  1121. package/esm2022/tooltip/lib/tooltip/tooltip-panel.js.map +1 -0
  1122. package/esm2022/tooltip/lib/tooltip/tooltip.js +352 -0
  1123. package/esm2022/tooltip/lib/tooltip/tooltip.js.map +1 -0
  1124. package/esm2022/tooltip/lib/tooltip/tooltip.types.js +1 -0
  1125. package/esm2022/tooltip/lib/tooltip/tooltip.types.js.map +1 -0
  1126. package/esm2022/tooltip/malva-ui-core-tooltip.js +5 -0
  1127. package/esm2022/tooltip/malva-ui-core-tooltip.js.map +1 -0
  1128. package/esm2022/tree/index.js +5 -0
  1129. package/esm2022/tree/index.js.map +1 -0
  1130. package/esm2022/tree/lib/tree/tree-context.js +7 -0
  1131. package/esm2022/tree/lib/tree/tree-context.js.map +1 -0
  1132. package/esm2022/tree/lib/tree/tree-node-def.js +34 -0
  1133. package/esm2022/tree/lib/tree/tree-node-def.js.map +1 -0
  1134. package/esm2022/tree/lib/tree/tree-node.js +1 -0
  1135. package/esm2022/tree/lib/tree/tree-node.js.map +1 -0
  1136. package/esm2022/tree/lib/tree/tree-subtree.js +107 -0
  1137. package/esm2022/tree/lib/tree/tree-subtree.js.map +1 -0
  1138. package/esm2022/tree/lib/tree/tree.js +362 -0
  1139. package/esm2022/tree/lib/tree/tree.js.map +1 -0
  1140. package/esm2022/tree/malva-ui-core-tree.js +5 -0
  1141. package/esm2022/tree/malva-ui-core-tree.js.map +1 -0
  1142. package/expand/index.d.ts +2 -0
  1143. package/expand/lib/expand/expand-content.d.ts +26 -0
  1144. package/expand/lib/expand/expand.d.ts +74 -0
  1145. package/expand/malva-ui-core-expand.d.ts +5 -0
  1146. package/file-upload/README.md +7 -0
  1147. package/file-upload/index.d.ts +4 -0
  1148. package/file-upload/lib/file-upload/file-upload.d.ts +138 -0
  1149. package/file-upload/lib/file-upload/file-upload.types.d.ts +42 -0
  1150. package/file-upload/lib/file-upload-action.d.ts +53 -0
  1151. package/file-upload/lib/file-upload-item/file-upload-item.d.ts +30 -0
  1152. package/file-upload/malva-ui-core-file-upload.d.ts +5 -0
  1153. package/filter/README.md +22 -0
  1154. package/filter/index.d.ts +3 -0
  1155. package/filter/lib/filter/filter.d.ts +156 -0
  1156. package/filter/lib/filter.types.d.ts +75 -0
  1157. package/filter/lib/smart-filter-bar/smart-filter-bar.d.ts +153 -0
  1158. package/filter/malva-ui-core-filter.d.ts +5 -0
  1159. package/form/index.d.ts +6 -0
  1160. package/form/lib/fieldset/fieldset.d.ts +58 -0
  1161. package/form/lib/fieldset-span.d.ts +28 -0
  1162. package/form/lib/form/form.d.ts +37 -0
  1163. package/form/lib/form-actions.d.ts +20 -0
  1164. package/form/lib/form-gap.d.ts +5 -0
  1165. package/form/lib/form-header.d.ts +18 -0
  1166. package/form/lib/form.types.d.ts +13 -0
  1167. package/form/malva-ui-core-form.d.ts +5 -0
  1168. package/form-utils/index.d.ts +15 -0
  1169. package/form-utils/lib/aria-value-bridge.d.ts +45 -0
  1170. package/form-utils/lib/description/description.d.ts +16 -0
  1171. package/form-utils/lib/focusable-group-base.d.ts +76 -0
  1172. package/form-utils/lib/form-control-base/signal-form-control-base.d.ts +159 -0
  1173. package/form-utils/lib/form-control-sides.d.ts +20 -0
  1174. package/form-utils/lib/form-control-wrapper/form-control-wrapper-control.d.ts +6 -0
  1175. package/form-utils/lib/form-control-wrapper/form-control-wrapper.d.ts +20 -0
  1176. package/form-utils/lib/form-field/form-field.d.ts +68 -0
  1177. package/form-utils/lib/hint/hint.d.ts +5 -0
  1178. package/form-utils/lib/label/label.d.ts +22 -0
  1179. package/form-utils/lib/message/message.d.ts +7 -0
  1180. package/form-utils/lib/models/error-display-strategy.d.ts +1 -0
  1181. package/form-utils/lib/models/form-control-connector.d.ts +41 -0
  1182. package/form-utils/lib/models/form-state.d.ts +1 -0
  1183. package/form-utils/lib/selection.service.d.ts +27 -0
  1184. package/form-utils/malva-ui-core-form-utils.d.ts +5 -0
  1185. package/form-utils/testing/index.d.ts +1 -0
  1186. package/form-utils/testing/lib/forms-binding-matrix.d.ts +47 -0
  1187. package/form-utils/testing/malva-ui-core-form-utils-testing.d.ts +5 -0
  1188. package/index.d.ts +69 -0
  1189. package/input/index.d.ts +3 -0
  1190. package/input/lib/input/input-native.d.ts +36 -0
  1191. package/input/lib/input/input-value-accessor.d.ts +11 -0
  1192. package/input/lib/input/input.d.ts +189 -0
  1193. package/input/lib/input/password-strength.d.ts +34 -0
  1194. package/input/malva-ui-core-input.d.ts +5 -0
  1195. package/kbd/index.d.ts +1 -0
  1196. package/kbd/lib/kbd/kbd.d.ts +52 -0
  1197. package/kbd/malva-ui-core-kbd.d.ts +5 -0
  1198. package/layout/index.d.ts +4 -0
  1199. package/layout/lib/layout/directives/MlvLayoutSide.d.ts +6 -0
  1200. package/layout/lib/layout/directives/MlvLayoutTop.d.ts +6 -0
  1201. package/layout/lib/layout/layout.d.ts +20 -0
  1202. package/layout/lib/layout/services/theme.service.d.ts +33 -0
  1203. package/layout/malva-ui-core-layout.d.ts +5 -0
  1204. package/link/index.d.ts +2 -0
  1205. package/link/lib/link/link.d.ts +15 -0
  1206. package/link/lib/link/link.directives.d.ts +10 -0
  1207. package/link/malva-ui-core-link.d.ts +5 -0
  1208. package/list/index.d.ts +13 -0
  1209. package/list/lib/list/list.d.ts +25 -0
  1210. package/list/lib/list-item/list-item.d.ts +67 -0
  1211. package/list/lib/list-item-actions.d.ts +12 -0
  1212. package/list/lib/list-item-byline.d.ts +5 -0
  1213. package/list/lib/list-item-group/list-item-group.d.ts +11 -0
  1214. package/list/lib/list-item-link/list-item-link.d.ts +8 -0
  1215. package/list/lib/list-item-media.d.ts +5 -0
  1216. package/list/lib/list-item-meta.d.ts +5 -0
  1217. package/list/lib/list-item-prefix.d.ts +5 -0
  1218. package/list/lib/list-item-suffix.d.ts +5 -0
  1219. package/list/lib/list-item-template.d.ts +10 -0
  1220. package/list/lib/list-item-title.d.ts +5 -0
  1221. package/list/lib/list-selectable.d.ts +73 -0
  1222. package/list/malva-ui-core-list.d.ts +5 -0
  1223. package/loader/index.d.ts +1 -0
  1224. package/loader/lib/loader/loader.d.ts +84 -0
  1225. package/loader/malva-ui-core-loader.d.ts +5 -0
  1226. package/malva-ui-core.d.ts +5 -0
  1227. package/menu/index.d.ts +9 -0
  1228. package/menu/lib/menu/menu-group-label.d.ts +22 -0
  1229. package/menu/lib/menu/menu-group.d.ts +27 -0
  1230. package/menu/lib/menu/menu-item.d.ts +76 -0
  1231. package/menu/lib/menu/menu-separator.d.ts +18 -0
  1232. package/menu/lib/menu/menu-trigger.d.ts +255 -0
  1233. package/menu/lib/menu/menu.d.ts +149 -0
  1234. package/menu/lib/menu/menu.types.d.ts +13 -0
  1235. package/menu/lib/menu/menubar.d.ts +131 -0
  1236. package/menu/lib/menu/menubar.types.d.ts +82 -0
  1237. package/menu/lib/menu/submenu-aim.d.ts +10 -0
  1238. package/menu/malva-ui-core-menu.d.ts +5 -0
  1239. package/notification/index.d.ts +4 -0
  1240. package/notification/lib/notification-item/notification-item.d.ts +20 -0
  1241. package/notification/lib/notification-ref.d.ts +12 -0
  1242. package/notification/lib/notification.service.d.ts +43 -0
  1243. package/notification/lib/notification.types.d.ts +52 -0
  1244. package/notification/malva-ui-core-notification.d.ts +5 -0
  1245. package/number-input/index.d.ts +1 -0
  1246. package/number-input/lib/number-input/number-input.d.ts +162 -0
  1247. package/number-input/malva-ui-core-number-input.d.ts +5 -0
  1248. package/package.json +315 -0
  1249. package/page/README.md +8 -0
  1250. package/page/index.d.ts +14 -0
  1251. package/page/lib/page/page-scroll.token.d.ts +19 -0
  1252. package/page/lib/page/page-snap-controller.d.ts +87 -0
  1253. package/page/lib/page/page-snap.directive.d.ts +40 -0
  1254. package/page/lib/page/page.d.ts +74 -0
  1255. package/page/lib/page-content/page-aside.d.ts +7 -0
  1256. package/page/lib/page-content/page-content.d.ts +37 -0
  1257. package/page/lib/page-dock/page-dock.d.ts +50 -0
  1258. package/page/lib/page-dock/page-dock.slots.d.ts +16 -0
  1259. package/page/lib/page-header/page-header.d.ts +77 -0
  1260. package/page/lib/page-header/page-header.directives.d.ts +50 -0
  1261. package/page/lib/page-shell/page-shell-color.d.ts +48 -0
  1262. package/page/lib/page-shell/page-shell-css-color.d.ts +20 -0
  1263. package/page/lib/page-shell/page-shell.d.ts +44 -0
  1264. package/page/lib/page-shell/page-shell.slots.d.ts +16 -0
  1265. package/page/lib/page-summary/page-summary-item.d.ts +11 -0
  1266. package/page/lib/page-summary/page-summary.d.ts +36 -0
  1267. package/page/malva-ui-core-page.d.ts +5 -0
  1268. package/pagination/index.d.ts +4 -0
  1269. package/pagination/lib/pagination/pagination.d.ts +182 -0
  1270. package/pagination/lib/pagination/pagination.directives.d.ts +44 -0
  1271. package/pagination/lib/pagination/pagination.model.d.ts +6 -0
  1272. package/pagination/lib/pagination/pagination.service.d.ts +26 -0
  1273. package/pagination/malva-ui-core-pagination.d.ts +5 -0
  1274. package/pin-input/index.d.ts +2 -0
  1275. package/pin-input/lib/pin-input/pin-input-separator.d.ts +24 -0
  1276. package/pin-input/lib/pin-input/pin-input.d.ts +176 -0
  1277. package/pin-input/malva-ui-core-pin-input.d.ts +5 -0
  1278. package/popup/index.d.ts +9 -0
  1279. package/popup/lib/popup/popup.d.ts +343 -0
  1280. package/popup/lib/popup-container/popup-container.d.ts +61 -0
  1281. package/popup/lib/popup-container/popup-container.token.d.ts +34 -0
  1282. package/popup/lib/popup-content.d.ts +6 -0
  1283. package/popup/lib/popup-header-content.d.ts +18 -0
  1284. package/popup/lib/popup-pinned-content.d.ts +17 -0
  1285. package/popup/lib/popup-positions.d.ts +105 -0
  1286. package/popup/lib/popup-trigger/popup-trigger.d.ts +102 -0
  1287. package/popup/lib/popup.service.d.ts +159 -0
  1288. package/popup/malva-ui-core-popup.d.ts +5 -0
  1289. package/progress/index.d.ts +1 -0
  1290. package/progress/lib/progress/progress.d.ts +69 -0
  1291. package/progress/malva-ui-core-progress.d.ts +5 -0
  1292. package/radio/index.d.ts +2 -0
  1293. package/radio/lib/radio/radio.d.ts +87 -0
  1294. package/radio/lib/radio-group/radio-group.d.ts +35 -0
  1295. package/radio/lib/radio-group-token.d.ts +7 -0
  1296. package/radio/malva-ui-core-radio.d.ts +5 -0
  1297. package/rating/index.d.ts +1 -0
  1298. package/rating/lib/rating/rating.d.ts +100 -0
  1299. package/rating/malva-ui-core-rating.d.ts +5 -0
  1300. package/schematics/collection.json +12 -0
  1301. package/schematics/ng-add/index.cjs +272 -0
  1302. package/schematics/ng-add/schema.json +92 -0
  1303. package/scrollbar/index.d.ts +1 -0
  1304. package/scrollbar/lib/scrollbar/scrollbar.d.ts +166 -0
  1305. package/scrollbar/malva-ui-core-scrollbar.d.ts +5 -0
  1306. package/search-field/README.md +32 -0
  1307. package/search-field/index.d.ts +2 -0
  1308. package/search-field/lib/search-field/search-field.d.ts +347 -0
  1309. package/search-field/lib/search-field/search-overlay-content.d.ts +59 -0
  1310. package/search-field/malva-ui-core-search-field.d.ts +5 -0
  1311. package/segmented/index.d.ts +4 -0
  1312. package/segmented/lib/segmented/segmented.d.ts +80 -0
  1313. package/segmented/lib/segmented-item/segmented-item.d.ts +89 -0
  1314. package/segmented/lib/segmented-token.d.ts +22 -0
  1315. package/segmented/lib/segmented.types.d.ts +9 -0
  1316. package/segmented/malva-ui-core-segmented.d.ts +5 -0
  1317. package/select/index.d.ts +3 -0
  1318. package/select/lib/select/select.d.ts +379 -0
  1319. package/select/lib/select-option.d.ts +1 -0
  1320. package/select/lib/select-template.directives.d.ts +14 -0
  1321. package/select/malva-ui-core-select.d.ts +5 -0
  1322. package/sidebar/index.d.ts +15 -0
  1323. package/sidebar/lib/sidebar/sidebar.d.ts +134 -0
  1324. package/sidebar/lib/sidebar-content.d.ts +11 -0
  1325. package/sidebar/lib/sidebar-context.d.ts +23 -0
  1326. package/sidebar/lib/sidebar-footer.d.ts +9 -0
  1327. package/sidebar/lib/sidebar-group/sidebar-group.d.ts +127 -0
  1328. package/sidebar/lib/sidebar-header.d.ts +9 -0
  1329. package/sidebar/lib/sidebar-item/sidebar-item.d.ts +104 -0
  1330. package/sidebar/lib/sidebar-item-host.d.ts +18 -0
  1331. package/sidebar/lib/sidebar-item-icon.d.ts +6 -0
  1332. package/sidebar/lib/sidebar-mode.d.ts +2 -0
  1333. package/sidebar/lib/sidebar-rail/sidebar-rail.d.ts +54 -0
  1334. package/sidebar/lib/sidebar-trigger/sidebar-trigger.d.ts +67 -0
  1335. package/sidebar/lib/sidebar-workspace/sidebar-workspace.d.ts +54 -0
  1336. package/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.d.ts +19 -0
  1337. package/sidebar/lib/sidebar-workspace/sidebar-workspace.types.d.ts +20 -0
  1338. package/sidebar/malva-ui-core-sidebar.d.ts +5 -0
  1339. package/skeleton/index.d.ts +1 -0
  1340. package/skeleton/lib/skeleton/skeleton.d.ts +60 -0
  1341. package/skeleton/malva-ui-core-skeleton.d.ts +5 -0
  1342. package/slider/index.d.ts +2 -0
  1343. package/slider/lib/slider/slider-tooltip-def.d.ts +39 -0
  1344. package/slider/lib/slider/slider.d.ts +171 -0
  1345. package/slider/malva-ui-core-slider.d.ts +5 -0
  1346. package/split-pane/index.d.ts +3 -0
  1347. package/split-pane/lib/split-pane/split-pane-panel.d.ts +34 -0
  1348. package/split-pane/lib/split-pane/split-pane.d.ts +98 -0
  1349. package/split-pane/lib/split-pane/split-pane.types.d.ts +7 -0
  1350. package/split-pane/malva-ui-core-split-pane.d.ts +5 -0
  1351. package/status-indicator/index.d.ts +1 -0
  1352. package/status-indicator/lib/status-indicator/status-indicator.d.ts +61 -0
  1353. package/status-indicator/malva-ui-core-status-indicator.d.ts +5 -0
  1354. package/stepper/index.d.ts +4 -0
  1355. package/stepper/lib/stepper/step-header.d.ts +34 -0
  1356. package/stepper/lib/stepper/step.d.ts +51 -0
  1357. package/stepper/lib/stepper/stepper-token.d.ts +13 -0
  1358. package/stepper/lib/stepper/stepper.d.ts +98 -0
  1359. package/stepper/lib/stepper/stepper.types.d.ts +4 -0
  1360. package/stepper/malva-ui-core-stepper.d.ts +5 -0
  1361. package/styles/malva-ui.css +1706 -0
  1362. package/styles/tokens.md +698 -0
  1363. package/switch/index.d.ts +2 -0
  1364. package/switch/lib/switch/switch.d.ts +118 -0
  1365. package/switch/lib/switch-group/switch-group.d.ts +24 -0
  1366. package/switch/lib/switch-group-token.d.ts +6 -0
  1367. package/switch/malva-ui-core-switch.d.ts +5 -0
  1368. package/tabs/index.d.ts +8 -0
  1369. package/tabs/lib/tab/tab.d.ts +46 -0
  1370. package/tabs/lib/tab-content/tab-content.d.ts +11 -0
  1371. package/tabs/lib/tab-content-def.d.ts +6 -0
  1372. package/tabs/lib/tab-def.d.ts +11 -0
  1373. package/tabs/lib/tab-group-token.d.ts +10 -0
  1374. package/tabs/lib/tab-item/tab-item.d.ts +28 -0
  1375. package/tabs/lib/tabs/tabs.d.ts +202 -0
  1376. package/tabs/lib/tabs.service.d.ts +24 -0
  1377. package/tabs/malva-ui-core-tabs.d.ts +5 -0
  1378. package/textarea/index.d.ts +1 -0
  1379. package/textarea/lib/textarea/textarea.d.ts +77 -0
  1380. package/textarea/malva-ui-core-textarea.d.ts +5 -0
  1381. package/tile/index.d.ts +2 -0
  1382. package/tile/lib/tile/tile.d.ts +20 -0
  1383. package/tile/lib/tile-header.d.ts +6 -0
  1384. package/tile/malva-ui-core-tile.d.ts +5 -0
  1385. package/time-picker/README.md +7 -0
  1386. package/time-picker/index.d.ts +1 -0
  1387. package/time-picker/lib/time-picker/time-picker.d.ts +135 -0
  1388. package/time-picker/lib/time-picker-column/time-picker-column.d.ts +111 -0
  1389. package/time-picker/malva-ui-core-time-picker.d.ts +5 -0
  1390. package/timeline/index.d.ts +5 -0
  1391. package/timeline/lib/timeline/timeline-item-icon.d.ts +24 -0
  1392. package/timeline/lib/timeline/timeline-item-meta.d.ts +24 -0
  1393. package/timeline/lib/timeline/timeline-item.d.ts +52 -0
  1394. package/timeline/lib/timeline/timeline.d.ts +27 -0
  1395. package/timeline/lib/timeline/timeline.types.d.ts +18 -0
  1396. package/timeline/malva-ui-core-timeline.d.ts +5 -0
  1397. package/title/index.d.ts +1 -0
  1398. package/title/lib/title/title.d.ts +63 -0
  1399. package/title/malva-ui-core-title.d.ts +5 -0
  1400. package/toast/index.d.ts +10 -0
  1401. package/toast/lib/abstract-toast-container.d.ts +29 -0
  1402. package/toast/lib/abstract-toast-item.d.ts +44 -0
  1403. package/toast/lib/abstract-toast.service.d.ts +75 -0
  1404. package/toast/lib/toast-container/toast-container.d.ts +23 -0
  1405. package/toast/lib/toast-item/toast-item.d.ts +25 -0
  1406. package/toast/lib/toast-ref.d.ts +33 -0
  1407. package/toast/lib/toast-timer.d.ts +24 -0
  1408. package/toast/lib/toast.directives.d.ts +13 -0
  1409. package/toast/lib/toast.service.d.ts +41 -0
  1410. package/toast/lib/toast.types.d.ts +139 -0
  1411. package/toast/malva-ui-core-toast.d.ts +5 -0
  1412. package/tokenizer/index.d.ts +3 -0
  1413. package/tokenizer/lib/token/token.d.ts +60 -0
  1414. package/tokenizer/lib/token-template.d.ts +29 -0
  1415. package/tokenizer/lib/tokenizer/tokenizer.d.ts +109 -0
  1416. package/tokenizer/malva-ui-core-tokenizer.d.ts +5 -0
  1417. package/toolbar/index.d.ts +3 -0
  1418. package/toolbar/lib/toolbar/toolbar-spacer.d.ts +5 -0
  1419. package/toolbar/lib/toolbar/toolbar-widget.d.ts +75 -0
  1420. package/toolbar/lib/toolbar/toolbar.d.ts +8 -0
  1421. package/toolbar/malva-ui-core-toolbar.d.ts +5 -0
  1422. package/tooltip/README.md +7 -0
  1423. package/tooltip/index.d.ts +3 -0
  1424. package/tooltip/lib/tooltip/tooltip-panel.d.ts +26 -0
  1425. package/tooltip/lib/tooltip/tooltip.d.ts +148 -0
  1426. package/tooltip/lib/tooltip/tooltip.types.d.ts +17 -0
  1427. package/tooltip/malva-ui-core-tooltip.d.ts +5 -0
  1428. package/tree/index.d.ts +4 -0
  1429. package/tree/lib/tree/tree-context.d.ts +62 -0
  1430. package/tree/lib/tree/tree-node-def.d.ts +33 -0
  1431. package/tree/lib/tree/tree-node.d.ts +45 -0
  1432. package/tree/lib/tree/tree-subtree.d.ts +63 -0
  1433. package/tree/lib/tree/tree.d.ts +156 -0
  1434. package/tree/malva-ui-core-tree.d.ts +5 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.js","sourceRoot":"","sources":["../../../../../../../libs/core/data-table/src/lib/data-table/data-table.ts","../../../../../../../libs/core/data-table/src/lib/data-table/data-table.html"],"names":[],"mappings":"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","sourcesContent":["import type { TemplateRef } from '@angular/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n ViewEncapsulation,\n afterNextRender,\n computed,\n contentChildren,\n inject,\n Injector,\n input,\n model,\n NgZone,\n numberAttribute,\n output,\n signal,\n effect,\n untracked,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport { Grid, GridRow, GridCell, GridCellWidget } from '@angular/aria/grid';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n CdkVirtualScrollViewport,\n ScrollingModule,\n} from '@angular/cdk/scrolling';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n LucideArrowUp,\n LucideArrowDown,\n LucideChevronsUpDown,\n LucideChevronRight,\n LucideFilter,\n LucideTable2,\n LucideFunnel,\n LucidePencil,\n LucideCheck,\n LucideX,\n LucidePlus,\n LucidePin,\n LucidePinOff,\n LucideEye,\n LucideTriangleAlert,\n} from '@lucide/angular';\nimport { MlvLoader } from '@malva-ui/core/loader';\nimport { MlvCheckbox } from '@malva-ui/core/checkbox';\nimport { MlvPagination } from '@malva-ui/core/pagination';\nimport type { MlvSearchFieldTrigger } from '@malva-ui/core/search-field';\nimport { MlvSearchField } from '@malva-ui/core/search-field';\nimport { MlvResizeObserverService } from '@malva-ui/cdk/utils';\nimport type { MlvInfiniteScrollTrigger } from '@malva-ui/cdk/infinite-scroll';\nimport { MlvInfiniteScroll } from '@malva-ui/cdk/infinite-scroll';\nimport { MlvButton, MlvButtonIcon } from '@malva-ui/core/button';\nimport { MlvBadge } from '@malva-ui/core/badge';\nimport { MlvEmptyState } from '@malva-ui/core/empty-state';\nimport type { MlvTone } from '@malva-ui/cdk/utils';\nimport {\n MlvDensityDirective,\n MLV_DENSITY_ELEMENT,\n} from '@malva-ui/cdk/density';\nimport { MLV_DATA_TABLE_I18N, MlvI18nResolverService } from '@malva-ui/i18n';\nimport { MlvDataSource, MlvArrayDataSource } from '../data-source';\nimport { MlvDataTableEditingService } from './services/data-table-editing.service';\nimport { MlvDataTableColumnVisibilityService } from './services/data-table-column-visibility.service';\nimport { MlvDataTablePinningService } from './services/data-table-pinning.service';\nimport { MlvDataTableCell } from '../data-table-cell';\nimport type { MlvDataTableCellContext } from '../data-table-cell';\nimport { MlvDataTableEditCell } from '../data-table-edit-cell';\nimport { MlvDataTableNoData } from '../data-table-no-data';\nimport { MlvDataTableError } from '../data-table-error';\nimport type { MlvDataTableErrorContext } from '../data-table-error';\nimport { MlvDataTableFooter } from '../data-table-footer';\nimport { MlvFilterDropdown } from '../filter-dropdown/filter-dropdown';\nimport type {\n MlvFilterState,\n MlvSortState,\n MlvSortDirection,\n} from '@malva-ui/cdk/data-source';\nimport type {\n MlvDataTableColumn,\n MlvDataTableColumnGroup,\n MlvEditMode,\n MlvEditEvent,\n MlvEditSaveEvent,\n MlvRowClickEvent,\n MlvSelectableMode,\n MlvSelectionChangeEvent,\n MlvPaginationMode,\n MlvLoadMoreEvent,\n MlvPinSide,\n MlvFilterDisplay,\n MlvColumnResizeEvent,\n MlvColumnResizeSource,\n MlvColumnToneFn,\n} from '../types';\nimport {\n MlvPopup,\n MlvPopupContent,\n MlvPopupTrigger,\n} from '@malva-ui/core/popup';\nimport type { MlvColumnState, MlvDataRow } from './data-table-layout';\nimport {\n columnCellStyles,\n columnWidthStyles,\n flattenRows,\n isColumnVisible,\n originalRow,\n parsePixelWidth,\n} from './data-table-layout';\n\nconst DEFAULT_COLUMN_WIDTH = 150;\nconst DEFAULT_COLUMN_MIN_WIDTH = 60;\nconst DEFAULT_COLUMN_MAX_WIDTH = 2000;\nconst DEFAULT_SELECTION_COLUMN_WIDTH = 40;\nconst DEFAULT_ACTIONS_COLUMN_WIDTH = 80;\nconst COLUMN_RESIZE_KEYBOARD_STEP = 8;\nconst COLUMN_RESIZE_KEYBOARD_LARGE_STEP = 32;\n\ninterface ColumnResizeBounds {\n min: number;\n max: number;\n}\n\ninterface AuxiliaryColumnWidths {\n selection?: number;\n actions?: number;\n}\n\ntype AuxiliaryColumnKind = keyof AuxiliaryColumnWidths;\n\ninterface ActiveColumnResize extends ColumnResizeBounds {\n key: string;\n pointerId: number;\n target: HTMLElement;\n startX: number;\n startWidth: number;\n latestWidth: number;\n moved: boolean;\n}\n\n@Component({\n selector: 'mlv-data-table',\n templateUrl: './data-table.html',\n styleUrl: './data-table.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n ScrollingModule,\n MlvPagination,\n MlvSearchField,\n MlvFilterDropdown,\n MlvButton,\n MlvBadge,\n LucideArrowUp,\n LucideArrowDown,\n LucideChevronsUpDown,\n LucideChevronRight,\n LucideFilter,\n LucideTable2,\n LucideFunnel,\n LucidePencil,\n LucideCheck,\n LucideX,\n LucidePlus,\n LucidePin,\n LucidePinOff,\n LucideEye,\n LucideTriangleAlert,\n MlvEmptyState,\n MlvLoader,\n MlvCheckbox,\n MlvPopupTrigger,\n MlvPopup,\n MlvPopupContent,\n MlvInfiniteScroll,\n MlvButtonIcon,\n Grid,\n GridRow,\n GridCell,\n GridCellWidget,\n ],\n providers: [\n { provide: MLV_DENSITY_ELEMENT, useValue: 'data-table' },\n MlvDataTableEditingService,\n MlvDataTableColumnVisibilityService,\n MlvDataTablePinningService,\n ],\n hostDirectives: [\n {\n directive: MlvDensityDirective,\n inputs: ['mlvDensity'],\n },\n ],\n host: {\n class: 'mlv-data-table',\n },\n})\nexport class MlvDataTable {\n /** @protected Injected i18n translations for the data table. */\n protected readonly _i18n = inject(MLV_DATA_TABLE_I18N);\n\n // ---- Inputs ----------------------------------------------------------------\n readonly columns = input.required<MlvDataTableColumn[]>();\n readonly data = input<MlvDataRow[] | MlvDataSource<MlvDataRow> | undefined>(\n undefined,\n );\n readonly rowHeight = input(40);\n /** Enable CDK virtual scroll for large datasets. */\n readonly virtualScroll = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n /** Alternating row shading. */\n readonly striped = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n /** Cell border lines. */\n readonly bordered = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n /** Sticky table header on scroll. */\n readonly stickyHeader = input<boolean, BooleanInput>(true, {\n transform: coerceBooleanProperty,\n });\n\n /** Maximum height of the scrollable table area (e.g. `'28rem'`, `'400px'`). Enables vertical scroll. */\n readonly maxHeight = input<string | undefined>(undefined);\n\n /** Column group definitions for multi-row headers. */\n readonly columnGroups = input<MlvDataTableColumnGroup[]>([]);\n\n /** Enable editable mode on the table. */\n readonly editable = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /** Edit granularity: `'row'` edits entire rows, `'cell'` edits individual cells. */\n readonly editMode = input<MlvEditMode>('row');\n\n /** Show an \"Add row\" button in the toolbar when editable. */\n readonly addRow = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /** Show a loading overlay on top of the table. */\n readonly loading = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Failed-request state. `false` (default) renders normally; `true` renders the\n * error block with the localized default message; a non-empty string renders\n * that string as the message.\n *\n * While set — and while {@link loading} is falsy — the error block replaces the\n * table body, taking precedence over both the rows and the `mlvDataTableNoData`\n * template so a failed request is never mistaken for an empty result set.\n * Project `<ng-template mlvDataTableError>` to replace the default block.\n */\n readonly error = input<boolean | string>(false);\n\n /** Row selection mode: `'single'`, `'multi'`, or `false` to disable. */\n readonly selectable = input<MlvSelectableMode>(false);\n\n /**\n * Accessible name for the trailing actions column header (rendered when\n * {@link editable} is on). The actions `<th>` has no visible label, so this\n * string is exposed to assistive tech via visually-hidden text to satisfy the\n * `empty-table-header` requirement. Defaults to `'Actions'`.\n *\n * NB: this is a plain English default input rather than a `MLV_DATA_TABLE_I18N`\n * token entry — adding an i18n string is a follow-up (see `libs-data-table.md`).\n */\n readonly actionsHeaderLabel = input('Actions');\n\n /**\n * **Experimental.** Opt into full cell-level keyboard navigation backed by the\n * `@angular/aria` grid pattern (`ngGrid`/`ngGridRow`/`ngGridCell`/`ngGridCellWidget`).\n *\n * When `false` (default), the table keeps its stable **row-level** roving\n * navigation (ArrowUp/Down move between rows, Home/End jump, Space/Enter toggle\n * row selection). When `true`, arrow keys move focus between individual **cells**\n * (Arrow keys in both axes, Home/End within a row), interactive cells expose an\n * `ngGridCellWidget` so Enter pauses grid navigation to interact (edit inputs,\n * action buttons), and Escape returns to grid navigation.\n *\n * Limitations of the current prototype (see `libs-data-table.md`):\n * - **Requires non-virtual mode.** Cell navigation is inert while\n * {@link virtualScroll} is `true` — CDK row recycling and the split\n * header/body/footer tables are incompatible with the grid's DOM-registered\n * cell/row collection. `virtualScroll` wins; the table falls back to\n * row-level roving.\n * - Row selection stays row-level (via the checkbox widget); the aria grid's\n * own cell-selection model is intentionally not wired.\n */\n readonly cellNavigation = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Pagination strategy.\n * - `'paged'` (default) — renders the classic paginator footer and swaps rows per page.\n * - `'infinite'` — hides the paginator and emits `loadMore` when the user scrolls near the bottom of the scroll container. Consumers should append the new page's rows to the existing data source.\n */\n readonly paginationMode = input<MlvPaginationMode>('paged');\n\n /**\n * Whether more data is available to load. Only consulted in `paginationMode: 'infinite'`.\n * Bind this to the consumer's own \"has more pages\" flag to stop the directive from\n * firing once the backing data source has been exhausted.\n */\n readonly hasMore = input<boolean, BooleanInput>(true, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Distance in px from the bottom of the scrollable area at which `loadMore` fires.\n * Only consulted in `paginationMode: 'infinite'`. Defaults to `200`.\n */\n readonly infiniteScrollThreshold = input<number>(200);\n\n /** Where table-owned filter controls are displayed. */\n readonly filterDisplay = input<MlvFilterDisplay>('toolbar');\n\n /** Whether the built-in global-search field is rendered in the toolbar. */\n readonly showSearch = input<boolean, BooleanInput>(true, {\n transform: coerceBooleanProperty,\n });\n\n /** Whether global search executes as the user types or only on submit. */\n readonly searchTrigger = input<MlvSearchFieldTrigger>('live');\n\n /** Delay in milliseconds used by live global search. */\n readonly searchDebounce = input<number, number | string>(200, {\n transform: (value) => Math.max(0, numberAttribute(value, 200)),\n });\n\n // ---- Outputs ----------------------------------------------------------------\n\n /** Emits when a row enters edit mode. */\n readonly rowEditStart = output<MlvEditEvent>();\n\n /** Emits when the user confirms edits on a row. */\n readonly rowEditSave = output<MlvEditSaveEvent>();\n\n /** Emits when the user cancels editing a row. */\n readonly rowEditCancel = output<MlvEditEvent>();\n\n /** Emits when the user clicks \"Add row\". Consumer is responsible for adding the row. */\n readonly rowAdd = output<void>();\n\n /** Emits when the user clicks a data row. */\n readonly rowClick = output<MlvRowClickEvent>();\n\n /** Emits when the row selection changes. */\n readonly selectionChange = output<MlvSelectionChangeEvent>();\n\n /**\n * Emits when the user activates the error block's retry control (the default\n * \"Retry\" button, or `retry()` from a custom `mlvDataTableError` template).\n * The consumer owns the refetch and is responsible for clearing {@link error}.\n */\n readonly retry = output<void>();\n\n /**\n * Emits after a pointer or keyboard interaction commits a column width, or\n * after a reset removes a user width override.\n */\n readonly columnResize = output<MlvColumnResizeEvent>();\n\n /**\n * Emits in `paginationMode: 'infinite'` when the user scrolls near the bottom\n * of the scroll container. The payload carries the next page number,\n * current per-page size, and remaining scroll distance.\n */\n readonly loadMore = output<MlvLoadMoreEvent>();\n\n /** Two-way bindable set of selected rows. */\n readonly selectedRows = model<Set<MlvDataRow>>(new Set());\n\n /** Applied global-search query. Submit-mode drafts are committed here on search. */\n readonly searchQuery = model('');\n\n // ---- Content children -------------------------------------------------------\n readonly cellTemplates = contentChildren(MlvDataTableCell, {\n descendants: true,\n });\n readonly editCellTemplates = contentChildren(MlvDataTableEditCell, {\n descendants: true,\n });\n readonly noDataTemplate = contentChildren(MlvDataTableNoData, {\n descendants: true,\n });\n readonly errorTemplate = contentChildren(MlvDataTableError, {\n descendants: true,\n });\n readonly footerTemplate = contentChildren(MlvDataTableFooter, {\n descendants: true,\n });\n\n // ---- View children ----------------------------------------------------------\n readonly tableWrapperRef = viewChild<ElementRef<HTMLElement>>('tableWrapper');\n readonly tableRef = viewChild<ElementRef<HTMLTableElement>>('tableEl');\n\n /**\n * @private Rendered resize separators. Used after rendering to measure\n * non-pixel CSS widths for accurate initial ARIA values.\n */\n private readonly _resizeHandleRefs =\n viewChildren<ElementRef<HTMLElement>>('resizeHandle');\n\n /**\n * @private Toolbar \"Filters\" trigger button. Focus is returned here when the\n * filter dialog popup closes, matching the overlay focus-restore pattern.\n */\n private readonly _filterTriggerRef = viewChild('filterBtn', {\n read: ElementRef,\n });\n\n /** @private CDK virtual-scroll viewport (only present in virtual-scroll mode). */\n private readonly _virtualViewportRef = viewChild(CdkVirtualScrollViewport);\n\n // ---- Services ---------------------------------------------------------------\n /** @private DestroyRef used for observable cleanup. */\n private readonly _destroyRef = inject(DestroyRef);\n /** @private Shared resize-observer service used to track the host width. */\n private readonly _resizeService = inject(MlvResizeObserverService);\n /** @private Owning document for pointer fallback listeners and DOM queries. */\n private readonly _document = inject(DOCUMENT);\n /** @private Host element ref, observed for width and used for row focus queries. */\n private readonly _el = inject(ElementRef);\n /** @private Injector used to schedule `afterNextRender` from imperative handlers. */\n private readonly _injector = inject(Injector);\n /** @private Angular zone — column-resize drag listeners run outside it so pointer moves don't trigger a full CD tick per event (see {@link onResizeStart}). */\n private readonly _ngZone = inject(NgZone);\n\n /** @private Resolver for ICU parameterized i18n strings. */\n private readonly _resolver = inject(MlvI18nResolverService);\n\n /**\n * @protected Flat-rows index of the data row that currently owns the roving\n * `tabindex=\"0\"`. All other data rows are `tabindex=\"-1\"`, giving the row grid\n * a single tab stop. Clamped in a constructor effect when `flatRows` changes.\n */\n readonly _focusedRowIndex = signal(0);\n\n // ---- Internal state ---------------------------------------------------------\n readonly containerWidth = signal(0);\n readonly activeFilters = model<MlvFilterState[]>([]);\n\n /** @protected Search text currently shown in the toolbar, including submit-mode drafts. */\n readonly _searchDraft = signal('');\n\n readonly currentSort = signal<MlvSortState | null>(null);\n readonly currentPage = signal(1);\n readonly currentPerPage = signal(10);\n\n /** @private Set of currently expanded tree rows (by original row reference). */\n private readonly _expanded = signal<Set<MlvDataRow>>(new Set());\n /** @private User-resized column widths keyed by column key (px). Committed once per completed pointer drag. */\n private readonly _columnWidths = signal<Map<string, number>>(new Map());\n\n /**\n * @private Live width (px) of the column currently being drag-resized, applied\n * optimistically during the drag before the committed {@link _columnWidths} map is\n * updated on pointer release. `null` when no resize is in progress. Kept separate from\n * {@link _columnWidths} so a move updates a single lightweight signal instead of\n * cloning the whole widths map every frame.\n */\n private readonly _liveResize = signal<{ key: string; width: number } | null>(\n null,\n );\n\n /**\n * @private Last DOM-resolved bounds for each resize handle. CSS lengths such\n * as `rem` can be resolved to pixels from the rendered header during an\n * interaction and then reused by the separator's ARIA attributes.\n */\n private readonly _resolvedResizeBounds = signal<\n Map<string, ColumnResizeBounds>\n >(new Map());\n\n /**\n * @private Rendered header widths keyed by column. This supplies accurate\n * separator values when a column's declared width uses `rem`, `%`, or layout.\n */\n private readonly _measuredColumnWidths = signal<Map<string, number>>(\n new Map(),\n );\n\n /** @private Rendered widths of the optional selection and actions columns. */\n private readonly _measuredAuxiliaryWidths = signal<AuxiliaryColumnWidths>({});\n\n /** @protected Native vertical-scrollbar width inside the virtual viewport. */\n protected readonly _virtualScrollbarGutter = signal(0);\n\n /**\n * @protected Inert outer scroll width that reproduces the virtual viewport's\n * native horizontal range without changing any split table's layout.\n */\n protected readonly _virtualHorizontalScrollExtent = signal(0);\n\n /** @private Whether table geometry is currently frozen to explicit pixel widths. */\n private readonly _columnLayoutFrozen = computed(\n () => this._liveResize() !== null || this._columnWidths().size > 0,\n );\n\n /**\n * @private Exact measured utility-column styles used once data columns are\n * frozen. Keeping selection/actions cells and their `<col>` elements on the\n * same widths prevents fixed table layout from redistributing data columns.\n */\n private readonly _auxiliaryColumnStyles = computed<\n Record<AuxiliaryColumnKind, Readonly<Record<string, string>> | null>\n >(() => {\n const measured = this._measuredAuxiliaryWidths();\n if (!this._columnLayoutFrozen()) {\n return { selection: null, actions: null };\n }\n return {\n selection: this._fixedColumnWidthStyles(measured.selection),\n actions: this._fixedColumnWidthStyles(measured.actions),\n };\n });\n\n /**\n * @private Per-row cache of the cell-template `ngTemplateOutletContext`, keyed by the\n * flattened row object identity (see {@link getCellContext}). A `WeakMap` so entries\n * for rows dropped by a `flatRows()` recompute are reclaimed automatically.\n */\n private readonly _cellContextCache = new WeakMap<\n MlvDataRow,\n MlvDataTableCellContext<MlvDataRow>\n >();\n\n /** @private Stable one-column arrays used by repeated header filter editors. */\n private readonly _columnFilterLists = new Map<string, MlvDataTableColumn[]>();\n\n /** @private Editing state moved to MlvDataTableEditingService. */\n private readonly _editing = inject(MlvDataTableEditingService<MlvDataRow>);\n\n /** @private Column visibility state moved to MlvDataTableColumnVisibilityService. */\n private readonly _visibility = inject(MlvDataTableColumnVisibilityService);\n\n /** @private Pin override state moved to MlvDataTablePinningService. */\n private readonly _pinning = inject(MlvDataTablePinningService);\n\n // ---- Derived state ----------------------------------------------------------\n\n readonly effectiveDataSource = computed<MlvDataSource<MlvDataRow>>(() => {\n const d = this.data();\n if (d instanceof MlvDataSource) {\n return d;\n }\n const rows: MlvDataRow[] = Array.isArray(d) ? d : [];\n return new MlvArrayDataSource<MlvDataRow>(rows);\n });\n\n readonly displayRows = computed<MlvDataRow[]>(() => {\n const ds = this.effectiveDataSource();\n return ds.connect()();\n });\n\n readonly flatRows = computed<MlvDataRow[]>(() => {\n const rows = this.displayRows();\n const expanded = this._expanded();\n return flattenRows(rows, expanded);\n });\n\n readonly totalItems = computed(() => this.effectiveDataSource().totalItems());\n readonly shownItems = computed(() => this.flatRows().length);\n\n readonly visibleColumns = computed<MlvColumnState[]>(() => {\n const cols = this.columns() as MlvColumnState[];\n const containerW = this.containerWidth();\n const widths = this._columnWidths();\n const live = this._liveResize();\n const measured = this._measuredColumnWidths();\n const freezeLayout = this._columnLayoutFrozen();\n const pinOverrides = this._pinning.overrides();\n const hidden = this._visibility.hiddenColumns();\n\n return cols\n .map((col) => {\n const visible = isColumnVisible(col, containerW);\n // During a drag the live width wins over the committed map value so the\n // column tracks the pointer before the map is updated on pointer release.\n const w =\n live && live.key === col.key ? live.width : widths.get(col.key);\n const override = pinOverrides.get(col.key);\n return {\n ...col,\n pinned: override ? override.pinned : col.pinned,\n pinSide: override ? override.pinSide : col.pinSide,\n _currentWidth:\n w ??\n (freezeLayout\n ? (measured.get(col.key) ?? parsePixelWidth(col.width))\n : undefined),\n _visible: visible,\n } as MlvColumnState;\n })\n .filter((c) => c._visible !== false && !hidden.has(c.key))\n .sort((a, b) => {\n const order = (col: MlvColumnState): number => {\n if (col.pinned && col.pinSide !== 'right') return 0;\n if (!col.pinned) return 1;\n return 2; // pinned right\n };\n return order(a) - order(b);\n });\n });\n\n readonly pinnedLeftColumns = computed(() =>\n this.visibleColumns().filter((c) => c.pinned && c.pinSide !== 'right'),\n );\n\n readonly pinnedRightColumns = computed(() =>\n this.visibleColumns().filter((c) => c.pinned && c.pinSide === 'right'),\n );\n\n readonly columnOffsets = computed<Map<string, string>>(() => {\n const map = new Map<string, string>();\n const leftWidths: string[] = [];\n for (const col of this.pinnedLeftColumns()) {\n map.set(col.key + '_left', this._sumCssLengths(leftWidths));\n leftWidths.push(this._columnOffsetWidth(col));\n }\n const rightWidths: string[] = [];\n const rightCols = [...this.pinnedRightColumns()].reverse();\n for (const col of rightCols) {\n map.set(col.key + '_right', this._sumCssLengths(rightWidths));\n rightWidths.push(this._columnOffsetWidth(col));\n }\n return map;\n });\n\n /**\n * Exact table width used while at least one column has a live or committed\n * user override. Freezing every measured column and the table to the same\n * pixel sum prevents `width: 100%` table layout from redistributing the\n * committed width. All virtual split tables and their viewport consume this\n * same value.\n */\n readonly resizedTableWidth = computed<number | null>(() => {\n if (!this._columnLayoutFrozen()) return null;\n\n const measured = this._measuredColumnWidths();\n const auxiliary = this._measuredAuxiliaryWidths();\n let total = 0;\n for (const col of this.visibleColumns()) {\n total +=\n col._currentWidth ??\n measured.get(col.key) ??\n parsePixelWidth(col.width) ??\n DEFAULT_COLUMN_WIDTH;\n }\n if (this.selectable()) {\n total += auxiliary.selection ?? DEFAULT_SELECTION_COLUMN_WIDTH;\n }\n if (this.editable()) {\n total += auxiliary.actions ?? DEFAULT_ACTIONS_COLUMN_WIDTH;\n }\n return this._roundColumnWidth(total);\n });\n\n /**\n * @private Memoized inline `[style]` object per visible column, keyed by column key.\n * Rebuilt only when {@link visibleColumns} or {@link columnOffsets} change (width /\n * pin / visibility / responsive / live-resize changes). Cell `[style]` bindings read\n * this map through {@link getCellStyle} so they receive a *stable* object reference\n * across change-detection cycles instead of a freshly allocated `Record` per cell per\n * CD; the header and body cells of a column share one object.\n */\n private readonly _columnStyles = computed<\n Map<string, Record<string, string>>\n >(() => {\n const offsets = this.columnOffsets();\n const map = new Map<string, Record<string, string>>();\n for (const col of this.visibleColumns()) {\n map.set(col.key, columnCellStyles(col, offsets));\n }\n return map;\n });\n\n /**\n * @private Display cell templates resolved to a `Map<columnKey, TemplateRef>`, rebuilt\n * only when the projected {@link cellTemplates} set changes. Replaces a per-cell\n * `Array.find()` on every CD ({@link getTemplate}). First registration wins for\n * duplicate keys, preserving the previous `find()` (first-match) semantics.\n */\n private readonly _cellTemplateMap = computed(() => {\n const map = new Map<string, TemplateRef<unknown>>();\n for (const t of this.cellTemplates()) {\n const key = t.columnKey();\n if (!map.has(key)) map.set(key, t.templateRef as TemplateRef<unknown>);\n }\n return map;\n });\n\n /**\n * @private Edit-mode cell templates resolved to a `Map<columnKey, TemplateRef>`,\n * rebuilt only when the projected {@link editCellTemplates} set changes. Replaces a\n * per-cell `Array.find()` on every CD ({@link getEditTemplate}). First registration\n * wins for duplicate keys.\n */\n private readonly _editCellTemplateMap = computed(() => {\n const map = new Map<string, TemplateRef<unknown>>();\n for (const t of this.editCellTemplates()) {\n const key = t.columnKey();\n if (!map.has(key)) map.set(key, t.templateRef as TemplateRef<unknown>);\n }\n return map;\n });\n\n /**\n * @protected Whether the experimental aria cell-level grid navigation is\n * active. Gated to non-virtual mode: `virtualScroll` recycles rows out of the\n * DOM, which the aria grid's DOM-registered row/cell collection cannot track,\n * so cell navigation yields to the stable row-roving path when virtual scroll\n * is on.\n */\n readonly _cellNav = computed(\n () => this.cellNavigation() && !this.virtualScroll(),\n );\n\n /**\n * Whether the error block replaces the table body. An in-flight refetch wins:\n * while `loading` is truthy the previous error is suppressed so the loader is\n * not competing with a stale failure message.\n */\n readonly showError = computed(() => {\n const error = this.error();\n if (this.loading()) return false;\n return typeof error === 'string' ? error.trim().length > 0 : error === true;\n });\n\n /**\n * Message rendered by the error block: the `error` string when one was\n * supplied, otherwise the localized `errorMessage` default.\n */\n readonly errorMessage = computed(() => {\n const error = this.error();\n return typeof error === 'string' && error.trim().length > 0\n ? error\n : this._i18n().errorMessage;\n });\n\n /**\n * @private Stable `retry()` callback handed to the `mlvDataTableError`\n * template context, so the context object identity only changes with the\n * message.\n */\n private readonly _emitRetry = (): void => this.onRetry();\n\n /**\n * @protected `ngTemplateOutletContext` for a projected `mlvDataTableError`\n * template.\n */\n protected readonly _errorContext = computed<MlvDataTableErrorContext>(() => ({\n $implicit: this.errorMessage(),\n retry: this._emitRetry,\n }));\n\n /**\n * @private Per-column raw-value → label lookup, memoized from\n * `visibleColumns()`. Falls back to `filterConfig.options` when a column\n * declares no explicit `valueLabels`. Keys are stringified raw values.\n */\n private readonly _columnValueLabels = computed<\n Map<string, Map<string, string>>\n >(() => {\n const map = new Map<string, Map<string, string>>();\n for (const col of this.visibleColumns()) {\n const source = col.valueLabels ?? col.filterConfig?.options;\n if (!source) continue;\n const labels = new Map<string, string>();\n if (Array.isArray(source)) {\n for (const option of source) {\n labels.set(String(option.value), option.label);\n }\n } else {\n for (const [value, label] of Object.entries(\n source as Record<string, string>,\n )) {\n labels.set(value, label);\n }\n }\n if (labels.size > 0) map.set(col.key, labels);\n }\n return map;\n });\n\n readonly hasFilters = computed(() => this.activeFilters().length > 0);\n\n /** Columns included in the global query, independent of responsive visibility. */\n readonly searchableColumns = computed(() =>\n this.columns().filter((column) => column.searchable),\n );\n\n /** Stable key list passed to the data source for OR-across-columns search. */\n readonly searchableColumnKeys = computed(() =>\n this.searchableColumns().map((column) => column.key),\n );\n\n /** Whether a global search field belongs in the toolbar. */\n readonly hasSearchableColumns = computed(\n () => this.searchableColumns().length > 0,\n );\n\n /** Whether any configured column supports filtering. */\n readonly hasFilterableColumns = computed(() =>\n this.columns().some((column) => column.filterable),\n );\n\n /** Localized active-filter summary announced when the committed set changes. */\n readonly activeFilterLabel = computed(() =>\n this._resolver.resolve(\n this._i18n() as unknown as Record<string, string>,\n 'activeFilterCount',\n { count: this.activeFilters().length },\n ),\n );\n\n /** Total number of rendered columns (visible + selection checkbox + actions). */\n readonly totalColumnCount = computed(() => {\n let count = this.visibleColumns().length;\n if (this.selectable()) count++;\n if (this.editable()) count++;\n return count;\n });\n\n /**\n * Pixel/CSS height applied to the `cdk-virtual-scroll-viewport` when `virtualScroll` is on.\n * Falls back to `'24rem'` if `maxHeight` is not provided. The viewport requires an explicit\n * height because `cdk-virtual-scroll-viewport` does not derive its size from its content.\n */\n readonly virtualViewportHeight = computed(() => this.maxHeight() ?? '24rem');\n\n /** Whether any column has `hideable: true`. */\n readonly hasHideableColumns = computed(() =>\n this.columns().some((c) => c.hideable),\n );\n\n /** Whether the toolbar has a visible control or table-owned status to render. */\n readonly hasToolbarContent = computed(\n () =>\n (this.showSearch() && this.hasSearchableColumns()) ||\n (this.filterDisplay() !== 'none' && this.hasFilters()) ||\n (this.editable() && this.addRow()) ||\n this.hasHideableColumns() ||\n (this.filterDisplay() === 'toolbar' && this.hasFilterableColumns()),\n );\n\n /** All columns (for column visibility popup). */\n readonly allColumns = computed(() => this.columns());\n\n /** Whether all visible rows are selected. */\n readonly allRowsSelected = computed(() => {\n const rows = this.flatRows();\n const selected = this.selectedRows();\n return rows.length > 0 && rows.every((r) => selected.has(this._ref(r)));\n });\n\n /** Whether some (but not all) rows are selected. */\n readonly someRowsSelected = computed(() => {\n const rows = this.flatRows();\n const selected = this.selectedRows();\n const count = rows.filter((r) => selected.has(this._ref(r))).length;\n return count > 0 && count < rows.length;\n });\n\n /** Whether the table has multi-row column groups defined. */\n readonly hasColumnGroups = computed(() => this.columnGroups().length > 0);\n\n /**\n * Computes the group header row layout.\n * Columns covered by a group get colspan in the group row.\n * Standalone columns (not in any group) get rowspan=\"2\" in the main header row.\n */\n readonly headerLayout = computed(() => {\n const groups = this.columnGroups();\n const visible = this.visibleColumns();\n\n if (groups.length === 0) return null;\n\n const groupedKeys = new Set(groups.flatMap((g) => g.columns));\n\n // Build group header cells\n const groupCells: {\n type: 'group';\n group: MlvDataTableColumnGroup;\n colspan: number;\n }[] = [];\n const standaloneKeys = new Set<string>();\n\n // Track which visible columns belong to which group\n let colIndex = 0;\n while (colIndex < visible.length) {\n const col = visible[colIndex];\n const group = groups.find((g) => g.columns.includes(col.key));\n if (group) {\n // Count how many consecutive visible columns belong to this group\n const span = visible.filter((c) =>\n group.columns.includes(c.key),\n ).length;\n groupCells.push({ type: 'group', group, colspan: span });\n // Skip all columns in this group\n colIndex += span;\n } else {\n standaloneKeys.add(col.key);\n colIndex++;\n }\n }\n\n return { groupCells, standaloneKeys, groupedKeys };\n });\n\n // ---- Lifecycle --------------------------------------------------------------\n\n constructor() {\n // Detach any in-flight column-resize drag listeners if the table is destroyed\n // mid-drag (e.g. a route change while the user is resizing a column) so the dead\n // component's document listeners can't keep firing.\n this._destroyRef.onDestroy(() => this._cleanupResize());\n\n effect(() => {\n const ds = this.effectiveDataSource();\n ds.setSort(this.currentSort());\n });\n effect(() => {\n const ds = this.effectiveDataSource();\n const filters = this.activeFilters();\n ds.setFilters(filters);\n untracked(() => {\n if (this.currentPage() !== 1) this.currentPage.set(1);\n });\n });\n effect(() => {\n const ds = this.effectiveDataSource();\n const query = this.searchQuery();\n const keys = this.searchableColumnKeys();\n ds.setSearch(query.trim() && keys.length ? { query, keys } : null);\n untracked(() => {\n if (this._searchDraft() !== query) this._searchDraft.set(query);\n if (this.currentPage() !== 1) this.currentPage.set(1);\n });\n });\n effect(() => {\n const ds = this.effectiveDataSource();\n // In infinite or virtual-scroll mode the consumer hands over the entire\n // row set up front, so the internal data source must stay on page 1 at\n // all times — pagination is disabled in both modes.\n const unpaged =\n this.paginationMode() === 'infinite' || this.virtualScroll();\n ds.setPage(unpaged ? 1 : this.currentPage());\n });\n effect(() => {\n const ds = this.effectiveDataSource();\n // In infinite or virtual-scroll mode disable internal per-page slicing\n // so every row the consumer has provided gets rendered. Virtual scroll\n // then renders only the visible slice of that full list via CDK.\n const unpaged =\n this.paginationMode() === 'infinite' || this.virtualScroll();\n ds.setPerPage(unpaged ? Number.MAX_SAFE_INTEGER : this.currentPerPage());\n });\n\n // Keep the roving row index in range as the visible rows change\n // (filtering, sorting, paging, tree expand/collapse, data replacement).\n effect(() => {\n const count = this.flatRows().length;\n const current = untracked(this._focusedRowIndex);\n if (count === 0) {\n if (current !== 0) this._focusedRowIndex.set(0);\n } else if (current > count - 1) {\n this._focusedRowIndex.set(count - 1);\n }\n });\n\n effect(() => {\n const handles = this._resizeHandleRefs();\n if (!handles.length) return;\n afterNextRender(() => this._measureHeaderWidths(), {\n injector: this._injector,\n });\n });\n\n effect((onCleanup) => {\n if (!this.virtualScroll()) return;\n const wrapper = this.tableWrapperRef()?.nativeElement;\n const viewport = this._virtualViewportRef()?.elementRef.nativeElement;\n if (!wrapper || !viewport) return;\n\n let synchronizing = false;\n const measureVirtualGeometry = (): void => {\n this._updateVirtualScrollGeometry(wrapper, viewport);\n };\n\n const syncFromWrapper = (): void => {\n if (synchronizing || viewport.scrollLeft === wrapper.scrollLeft) return;\n synchronizing = true;\n try {\n viewport.scrollLeft = wrapper.scrollLeft;\n } finally {\n synchronizing = false;\n }\n };\n\n const syncFromViewport = (): void => {\n if (synchronizing || wrapper.scrollLeft === viewport.scrollLeft) return;\n synchronizing = true;\n try {\n wrapper.scrollLeft = viewport.scrollLeft;\n const acceptedScrollLeft = wrapper.scrollLeft;\n if (viewport.scrollLeft !== acceptedScrollLeft) {\n viewport.scrollLeft = acceptedScrollLeft;\n }\n } finally {\n synchronizing = false;\n }\n };\n\n this._ngZone.runOutsideAngular(() => {\n wrapper.addEventListener('scroll', syncFromWrapper, {\n passive: true,\n });\n viewport.addEventListener('scroll', syncFromViewport, {\n passive: true,\n });\n measureVirtualGeometry();\n syncFromWrapper();\n });\n const viewportResize = this._resizeService\n .observe(viewport)\n .subscribe(() => {\n measureVirtualGeometry();\n syncFromWrapper();\n });\n onCleanup(() => {\n wrapper.removeEventListener('scroll', syncFromWrapper);\n viewport.removeEventListener('scroll', syncFromViewport);\n viewportResize.unsubscribe();\n });\n });\n\n effect(() => {\n if (!this.virtualScroll()) return;\n this.resizedTableWidth();\n this.visibleColumns();\n this._virtualScrollbarGutter();\n afterNextRender(() => this._syncVirtualHorizontalScroll(), {\n injector: this._injector,\n });\n });\n\n afterNextRender(() => {\n const el = this._el.nativeElement as HTMLElement;\n this._resizeService\n .observe(el)\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((entries) => {\n const width = entries[0]?.contentRect?.width ?? el.offsetWidth;\n this.containerWidth.set(width);\n afterNextRender(() => this._measureHeaderWidths(), {\n injector: this._injector,\n });\n });\n this.containerWidth.set(el.offsetWidth);\n this._measureHeaderWidths();\n });\n }\n\n // ---- Template helpers -------------------------------------------------------\n\n /** Resolves the custom display template for a column key (if any). */\n getTemplate(key: string): TemplateRef<unknown> | null {\n return this._cellTemplateMap().get(key) ?? null;\n }\n\n getNoDataTemplate(): TemplateRef<unknown> | null {\n const list = this.noDataTemplate();\n return list.length > 0 ? list[0].templateRef : null;\n }\n\n /**\n * `ngTemplateOutletContext` for a data cell's custom/edit template. Returns a\n * *stable* per-row object so the outlet's context does not churn (fresh object +\n * `NgTemplateOutlet.ngOnChanges`) every change-detection cycle. `flatRows()` rebuilds\n * its row objects on every data / sort / filter / expand change, so a cached entry's\n * `index` always matches that row's current position and stale entries (whose row\n * objects are no longer referenced) are garbage-collected.\n */\n getCellContext(\n row: MlvDataRow,\n index: number,\n ): MlvDataTableCellContext<MlvDataRow> {\n let ctx = this._cellContextCache.get(row);\n if (!ctx) {\n ctx = { $implicit: row, row, index };\n this._cellContextCache.set(row, ctx);\n }\n return ctx;\n }\n\n getCellValue(row: MlvDataRow, key: string): unknown {\n return (row as Record<string, unknown>)[key];\n }\n\n /**\n * Value rendered by the **default** cell renderer. Maps the raw value through\n * the column's `valueLabels` (or its `filterConfig.options` fallback) when a\n * label exists; otherwise returns the raw value unchanged. Custom\n * `mlvDataTableCell` templates bypass this entirely.\n */\n getCellDisplayValue(row: MlvDataRow, col: MlvDataTableColumn): unknown {\n const raw = this.getCellValue(row, col.key);\n if (raw === null || raw === undefined) return raw;\n const labels = this._columnValueLabels().get(col.key);\n if (!labels) return raw;\n return labels.get(String(raw)) ?? raw;\n }\n\n /**\n * Resolves the semantic tone for one default-rendered cell. Returns `null`\n * when the column declares no `tone` (or its resolver opted this row out), in\n * which case the cell renders as plain text instead of a badge.\n */\n getCellTone(row: MlvDataRow, col: MlvDataTableColumn): MlvTone | null {\n const tone = col.tone;\n if (!tone) return null;\n if (typeof tone === 'function') {\n return (tone as MlvColumnToneFn<MlvDataRow>)(row) ?? null;\n }\n return tone;\n }\n\n /** Retrieves the projected error template, if the consumer supplied one. */\n getErrorTemplate(): TemplateRef<MlvDataTableErrorContext> | null {\n const list = this.errorTemplate();\n return list.length > 0 ? list[0].templateRef : null;\n }\n\n /** Emits `retry` so the consumer can refetch the failed request. */\n onRetry(): void {\n this.retry.emit();\n }\n\n /** Resolves the edit-mode template for a column key (if any). */\n getEditTemplate(key: string): TemplateRef<unknown> | null {\n return this._editCellTemplateMap().get(key) ?? null;\n }\n\n /** Whether a given row index is currently being edited. */\n isEditing(index: number): boolean {\n return this._editing.isEditing(index);\n }\n\n /** Enter edit mode for a row. Clones the row for rollback. */\n startEdit(row: MlvDataRow, index: number): void {\n this._editing.start(row, index);\n this.rowEditStart.emit({ row, index });\n }\n\n /** Confirm edits for a row. Emits save event with original and modified row. */\n saveEdit(row: MlvDataRow, index: number): void {\n const originalRow = this._editing.save(row, index);\n this.rowEditSave.emit({ row, index, originalRow });\n }\n\n /** Cancel editing. Emits cancel event. */\n cancelEdit(row: MlvDataRow, index: number): void {\n this._editing.cancel(index);\n this.rowEditCancel.emit({ row, index });\n }\n\n /** Emit add-row event. Consumer is responsible for appending the new row. */\n onAddRow(): void {\n this.rowAdd.emit();\n }\n\n // ---- Row click ---------------------------------------------------------------\n\n /** Handle click on a data row. */\n onRowClick(row: MlvDataRow, index: number, event: MouseEvent): void {\n this._focusedRowIndex.set(index);\n this.rowClick.emit({ row, index, event });\n }\n\n // ---- Row keyboard navigation (grid row-focus model) --------------------------\n\n /**\n * @protected Roving tabindex for a data row: `0` for the focused row, `-1`\n * otherwise, so the row grid exposes a single tab stop.\n */\n _rowTabIndex(index: number): number {\n return index === this._focusedRowIndex() ? 0 : -1;\n }\n\n /**\n * @protected Sync the roving row index when a row receives focus (via Tab or\n * a click that focuses the `<tr>`).\n */\n _onRowFocus(index: number): void {\n this._focusedRowIndex.set(index);\n }\n\n /**\n * @protected Row-level keyboard navigation for the `role=\"grid\"` table.\n * Active only when the `<tr>` itself holds focus — keys originating from an\n * interactive cell widget (checkbox, button, edit input) are left alone.\n *\n * - `ArrowUp` / `ArrowDown` — move row focus by one (clamped)\n * - `Home` / `End` — jump to the first / last row\n * - `Space` / `Enter` — toggle selection of the focused row when selectable\n */\n _onRowKeydown(index: number, row: MlvDataRow, event: KeyboardEvent): void {\n if (event.target !== event.currentTarget) return;\n\n const lastIndex = this.flatRows().length - 1;\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this._moveRowFocus(Math.min(index + 1, lastIndex));\n break;\n case 'ArrowUp':\n event.preventDefault();\n this._moveRowFocus(Math.max(index - 1, 0));\n break;\n case 'Home':\n event.preventDefault();\n this._moveRowFocus(0);\n break;\n case 'End':\n event.preventDefault();\n this._moveRowFocus(lastIndex);\n break;\n case ' ':\n case 'Enter':\n if (this.selectable()) {\n event.preventDefault();\n this.toggleRowSelection(row);\n }\n break;\n }\n }\n\n /**\n * @private Move the roving tabindex and DOM focus to the row at `targetIndex`.\n * In virtual-scroll mode the target may be recycled out of the DOM, so it is\n * scrolled into view first and focused after the next render.\n */\n private _moveRowFocus(targetIndex: number): void {\n if (targetIndex < 0) return;\n this._focusedRowIndex.set(targetIndex);\n\n if (this.virtualScroll()) {\n this._virtualViewportRef()?.scrollToIndex(targetIndex, 'smooth');\n }\n\n afterNextRender(() => this._focusRowElement(targetIndex), {\n injector: this._injector,\n });\n }\n\n /** @private Focus the rendered `<tr>` for the given flat-rows index, if present. */\n private _focusRowElement(index: number): void {\n const host = this._el.nativeElement as HTMLElement;\n const rowEl = host.querySelector(\n `[data-row-index=\"${index}\"]`,\n ) as HTMLElement | null;\n rowEl?.focus();\n }\n\n // ---- Infinite scroll ---------------------------------------------------------\n\n /**\n * Handler wired to `MlvInfiniteScroll.loadMore` when `paginationMode === 'infinite'`.\n * Increments the tracked page counter and emits a table-level `MlvLoadMoreEvent`\n * whose `page` field tells the consumer which page to fetch next.\n */\n onInfiniteScrollLoadMore(trigger: MlvInfiniteScrollTrigger): void {\n const nextPage = this.currentPage() + 1;\n this.currentPage.set(nextPage);\n this.loadMore.emit({\n page: nextPage,\n perPage: this.currentPerPage(),\n distance: trigger.distance,\n });\n }\n\n // ---- Row selection -----------------------------------------------------------\n\n /** Whether a specific row is currently selected. */\n isRowSelected(row: MlvDataRow): boolean {\n return this.selectedRows().has(this._ref(row));\n }\n\n /** Toggle selection for a single row. */\n toggleRowSelection(row: MlvDataRow): void {\n const ref = this._ref(row);\n const current = this.selectedRows();\n const next = new Set(current);\n const mode = this.selectable();\n\n if (mode === 'single') {\n if (next.has(ref)) {\n next.clear();\n } else {\n next.clear();\n next.add(ref);\n }\n } else if (mode === 'multi') {\n if (next.has(ref)) {\n next.delete(ref);\n } else {\n next.add(ref);\n }\n }\n\n this.selectedRows.set(next);\n this.selectionChange.emit({ selectedRows: next, row: ref });\n }\n\n /** Toggle select-all / deselect-all. */\n toggleSelectAll(): void {\n const rows = this.flatRows();\n const allSelected = this.allRowsSelected();\n const next = new Set<MlvDataRow>();\n\n if (!allSelected) {\n for (const row of rows) {\n next.add(this._ref(row));\n }\n }\n\n this.selectedRows.set(next);\n this.selectionChange.emit({ selectedRows: next });\n }\n\n // ---- Column visibility -------------------------------------------------------\n\n /** Whether a column is currently hidden by the user. */\n isColumnHidden(key: string): boolean {\n return this._visibility.isHidden(key);\n }\n\n /** Toggle visibility of a hideable column. */\n toggleColumnVisibility(key: string): void {\n this._visibility.toggle(key);\n }\n\n /**\n * @protected Returns focus to the toolbar \"Filters\" trigger when the filter\n * dialog popup closes (Apply / Clear / Escape / backdrop), so keyboard focus\n * is never stranded on a destroyed overlay control.\n */\n _onFiltersClosed(): void {\n this._filterTriggerRef()?.nativeElement.focus();\n }\n\n /** Commits a search-field event and resets table pagination. */\n onSearch(query: string): void {\n this.searchQuery.set(query);\n this.currentPage.set(1);\n }\n\n /** Whether a column currently has a committed filter. */\n isColumnFiltered(key: string): boolean {\n return this.activeFilters().some((filter) => filter.key === key);\n }\n\n /** Accessible label for a column filter trigger. */\n getFilterLabel(col: MlvDataTableColumn): string {\n return this._resolver.resolve(\n this._i18n() as unknown as Record<string, string>,\n this.isColumnFiltered(col.key) ? 'filterColumnActive' : 'filterColumn',\n { column: col.title ?? col.key },\n );\n }\n\n /**\n * Merges a scoped editor result against the table's current committed state.\n * The table remains authoritative here because an overlay may hold an older\n * input snapshot while another column is committed.\n */\n onColumnFiltersChange(key: string, scopedFilters: MlvFilterState[]): void {\n this.activeFilters.update((current) => [\n ...current.filter((filter) => filter.key !== key),\n ...scopedFilters\n .filter((filter) => filter.key === key)\n .map((filter) => ({\n ...filter,\n value: Array.isArray(filter.value) ? [...filter.value] : filter.value,\n })),\n ]);\n }\n\n /** Single-column list consumed by the scoped filter editor. */\n getColumnFilterColumns(col: MlvDataTableColumn): MlvDataTableColumn[] {\n const cached = this._columnFilterLists.get(col.key);\n if (cached?.[0] === col) return cached;\n const next = [col];\n this._columnFilterLists.set(col.key, next);\n return next;\n }\n\n /** Restores focus to the header filter trigger for a popup that just closed. */\n focusColumnFilterTrigger(key: string): void {\n const host = this._el.nativeElement as HTMLElement;\n const triggers = host.querySelectorAll<HTMLButtonElement>(\n '.mlv-data-table__column-filter',\n );\n for (const trigger of triggers) {\n if (trigger.dataset['columnKey'] === key) {\n trigger.focus();\n return;\n }\n }\n }\n\n // ---- Footer template ----------------------------------------------------------\n\n /** Retrieves the footer summary template. */\n getFooterTemplate(): TemplateRef<unknown> | null {\n const list = this.footerTemplate();\n return list.length > 0 ? list[0].templateRef : null;\n }\n\n // ---- Pin/Unpin ---------------------------------------------------------------\n\n /**\n * Returns the list of sides the user may pin a column to, based on `col.pinnable`.\n * - `true` → `['left', 'right']`\n * - `'left'` / `'right'` → single-element list\n * - `MlvPinSide[]` → the list as provided (duplicates preserved by caller)\n * - falsy → `[]` (not user-pinnable)\n */\n getPinnableSides(col: MlvDataTableColumn): MlvPinSide[] {\n return this._pinning.getPinnableSides(col);\n }\n\n /** Pin a column to the given side, or unpin if it is already pinned. */\n togglePin(col: MlvDataTableColumn, side: MlvPinSide = 'left'): void {\n this._pinning.togglePin(col, side);\n }\n\n /** Pin a column to a specific side, overriding any current pin state. */\n pinTo(col: MlvDataTableColumn, side: MlvPinSide): void {\n this._pinning.pinTo(col, side);\n }\n\n /** Explicitly unpin a column, regardless of its current side. */\n unpin(col: MlvDataTableColumn): void {\n this._pinning.unpin(col);\n }\n\n /** Whether a column is currently pinned (accounting for overrides). */\n isColumnPinned(col: MlvDataTableColumn): boolean {\n return this._pinning.isPinned(col);\n }\n\n /** Returns the current pin side for a column (considering overrides), or `null` if it is not pinned. */\n getColumnPinSide(col: MlvDataTableColumn): MlvPinSide | null {\n return this._pinning.getPinSide(col);\n }\n\n isRowExpanded(row: MlvDataRow): boolean {\n return this._expanded().has(this._ref(row));\n }\n\n hasChildren(row: MlvDataRow): boolean {\n const original = this._ref(row);\n return (\n Array.isArray(original['_mlvChildren']) &&\n (original['_mlvChildren'] as MlvDataRow[]).length > 0\n );\n }\n\n getDepth(row: MlvDataRow): number {\n return (row['_mlvDepth'] as number | undefined) ?? 0;\n }\n\n toggleExpand(row: MlvDataRow, event: Event): void {\n event.stopPropagation();\n const original = this._ref(row);\n const current = this._expanded();\n const next = new Set(current);\n if (next.has(original)) {\n next.delete(original);\n } else {\n next.add(original);\n }\n this._expanded.set(next);\n }\n\n // ---- Sorting ----------------------------------------------------------------\n\n onSortClick(col: MlvDataTableColumn): void {\n if (!col.sortable) return;\n const current = this.currentSort();\n if (!current || current.key !== col.key) {\n this.currentSort.set({ key: col.key, direction: 'asc' });\n } else if (current.direction === 'asc') {\n this.currentSort.set({ key: col.key, direction: 'desc' });\n } else {\n this.currentSort.set(null);\n }\n this.currentPage.set(1);\n }\n\n getSortDirection(col: MlvDataTableColumn): MlvSortDirection | null {\n const s = this.currentSort();\n return s && s.key === col.key ? s.direction : null;\n }\n\n /**\n * Accessible label for a sortable column header button. Resolves the\n * `sortByColumn` ICU string (\"Sort by {column}\") — describing intent rather\n * than a mouse-specific \"click to sort\" instruction.\n */\n getSortLabel(col: MlvDataTableColumn): string {\n return this._resolver.resolve(\n this._i18n() as unknown as Record<string, string>,\n 'sortByColumn',\n { column: col.title ?? col.key },\n );\n }\n\n // ---- Column styles ----------------------------------------------------------\n\n getColStyle(col: MlvColumnState): Record<string, string> {\n return columnWidthStyles(col);\n }\n\n /**\n * Returns the value to apply to a `<col>` element's `width` style.\n * Used by the shared `<colgroup>` template to keep column widths in sync between the\n * three split tables in virtual scroll mode (header / body / footer).\n */\n getColWidth(col: MlvColumnState): string | null {\n if (col._currentWidth !== undefined) return col._currentWidth + 'px';\n if (col.width) return col.width;\n return null;\n }\n\n /** Exact frozen width styles for a selection or actions utility column. */\n protected getAuxiliaryColumnStyle(\n kind: AuxiliaryColumnKind,\n ): Readonly<Record<string, string>> | null {\n return this._auxiliaryColumnStyles()[kind];\n }\n\n /** Exact frozen `<col>` width for a selection or actions utility column. */\n protected getAuxiliaryColumnWidth(kind: AuxiliaryColumnKind): string | null {\n return this._auxiliaryColumnStyles()[kind]?.['width'] ?? null;\n }\n\n /**\n * trackBy used by `*cdkVirtualFor` in virtual scroll mode. Falls back to the row index\n * for plain row references and to `_mlvRef` identity for tree rows so expanded children\n * are reconciled correctly when the user scrolls.\n */\n trackByRow = (index: number, row: MlvDataRow): unknown => {\n return row['_mlvRef'] ?? index;\n };\n\n /**\n * Inline `[style]` object (width / min-width, plus sticky offsets for pinned columns)\n * for a column's header and body cells. Reads the memoized {@link _columnStyles} map\n * so the returned reference is stable across change-detection cycles (no per-cell\n * allocation). Every visible column is present in the map; the on-the-fly fallback is\n * a defensive path for a column outside the current visible set.\n */\n getCellStyle(col: MlvColumnState): Record<string, string> {\n return (\n this._columnStyles().get(col.key) ??\n columnCellStyles(col, this.columnOffsets())\n );\n }\n\n getAlignClass(col: MlvDataTableColumn): string {\n return col.align ? `mlv-data-table__cell--align-${col.align}` : '';\n }\n\n // ---- Column resize ----------------------------------------------------------\n\n /**\n * @private In-flight pointer resize state. The originating pointer id prevents\n * secondary touches or unrelated pointers from moving or ending the drag.\n */\n private _resizeState: ActiveColumnResize | null = null;\n\n /**\n * @private rAF handle coalescing live-width signal writes to one per frame\n * during a pointer drag.\n */\n private _resizeRafId = 0;\n\n /**\n * @private Bound pointer-move handler retained so add/removeEventListener use\n * the same function reference.\n */\n private readonly _onResizeMoveBound = (event: PointerEvent): void => {\n this._onResizeMove(event);\n };\n\n /**\n * @private Bound pointer-up handler retained so add/removeEventListener use\n * the same function reference.\n */\n private readonly _onResizeEndBound = (event: PointerEvent): void => {\n this._onResizeEnd(event);\n };\n\n /**\n * @private Bound pointer-cancel handler. Cancellation restores the previously\n * committed width and never emits a commit event.\n */\n private readonly _onResizeCancelBound = (event: PointerEvent): void => {\n this._onResizeCancel(event);\n };\n\n /**\n * @private Cancels an active drag if the browser unexpectedly revokes the\n * initiating handle's pointer capture.\n */\n private readonly _onResizeLostCaptureBound = (event: PointerEvent): void => {\n this._onResizeLostCapture(event);\n };\n\n /**\n * Starts a column resize with Pointer Events and captures the initiating\n * pointer on the separator. The rendered header width is measured instead of\n * trusting the declared CSS width, so `rem`, `%`, and flex/table layout widths\n * begin without a jump.\n */\n onResizeStart(col: MlvColumnState, event: PointerEvent): void {\n if (event.button !== 0 || this._resizeState) return;\n const target = event.currentTarget;\n if (!(target instanceof HTMLElement)) return;\n\n event.preventDefault();\n this._measureHeaderWidths();\n const bounds = this._resolveColumnResizeBounds(col, target);\n this._cacheColumnResizeBounds(col.key, bounds);\n const startWidth = this._clampColumnWidth(\n this._measureHeaderWidth(col, target),\n bounds,\n );\n\n this._resizeState = {\n key: col.key,\n pointerId: event.pointerId,\n target,\n startX: event.clientX,\n startWidth,\n latestWidth: startWidth,\n moved: false,\n ...bounds,\n };\n\n this._ngZone.runOutsideAngular(() => {\n this._document.addEventListener('pointermove', this._onResizeMoveBound);\n this._document.addEventListener('pointerup', this._onResizeEndBound);\n this._document.addEventListener(\n 'pointercancel',\n this._onResizeCancelBound,\n );\n target.addEventListener(\n 'lostpointercapture',\n this._onResizeLostCaptureBound,\n );\n if (typeof target.setPointerCapture === 'function') {\n try {\n target.setPointerCapture(event.pointerId);\n } catch {\n // Document listeners preserve drag/end behavior when capture is\n // unavailable, rejected, or exercised by a synthetic event.\n }\n }\n });\n }\n\n /**\n * Handles keyboard resizing for the focusable separator. ArrowLeft/ArrowRight\n * use an 8px step (32px with Shift); Home/End jump to the resolved bounds.\n */\n onColumnResizeKeydown(col: MlvColumnState, event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.resetColumnWidth(col.key);\n return;\n }\n\n const supported =\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight' ||\n event.key === 'Home' ||\n event.key === 'End';\n if (!supported) return;\n\n const target =\n event.currentTarget instanceof HTMLElement\n ? event.currentTarget\n : undefined;\n this._measureHeaderWidths();\n const bounds = this._resolveColumnResizeBounds(col, target);\n this._cacheColumnResizeBounds(col.key, bounds);\n const currentWidth = this._clampColumnWidth(\n this._measureHeaderWidth(col, target),\n bounds,\n );\n const step = event.shiftKey\n ? COLUMN_RESIZE_KEYBOARD_LARGE_STEP\n : COLUMN_RESIZE_KEYBOARD_STEP;\n\n let nextWidth = currentWidth;\n if (event.key === 'Home') nextWidth = bounds.min;\n if (event.key === 'End') nextWidth = bounds.max;\n if (event.key === 'ArrowLeft') nextWidth = currentWidth - step;\n if (event.key === 'ArrowRight') nextWidth = currentWidth + step;\n\n event.preventDefault();\n this._commitColumnWidth(\n col.key,\n this._clampColumnWidth(nextWidth, bounds),\n 'keyboard',\n );\n }\n\n /** Localized accessible name for a column's resize separator. */\n getColumnResizeLabel(col: MlvDataTableColumn): string {\n return this._resolver.resolve(\n this._i18n() as unknown as Record<string, string>,\n 'resizeColumn',\n { column: col.title ?? col.key },\n );\n }\n\n /** Current separator value in CSS pixels for ARIA. */\n getColumnResizeValue(col: MlvColumnState): number {\n const bounds = this._columnResizeBounds(col);\n const active =\n this._resizeState?.key === col.key\n ? this._resizeState.latestWidth\n : undefined;\n const measured = this._measuredColumnWidths().get(col.key);\n return this._normalizeColumnWidth(\n active ??\n col._currentWidth ??\n measured ??\n parsePixelWidth(col.width) ??\n DEFAULT_COLUMN_WIDTH,\n bounds,\n );\n }\n\n /** Minimum separator value in CSS pixels for ARIA and Home. */\n getColumnResizeMin(col: MlvDataTableColumn): number {\n return this._roundColumnWidth(this._columnResizeBounds(col).min);\n }\n\n /** Maximum separator value in CSS pixels for ARIA and End. */\n getColumnResizeMax(col: MlvDataTableColumn): number {\n return this._roundColumnWidth(this._columnResizeBounds(col).max);\n }\n\n /** Localized text alternative that makes the separator's pixel unit explicit. */\n getColumnResizeValueText(col: MlvColumnState): string {\n return this._resolver.resolve(\n this._i18n() as unknown as Record<string, string>,\n 'columnWidthPixels',\n { width: this.getColumnResizeValue(col) },\n );\n }\n\n /**\n * Removes committed user widths. Passing a key resets that column and emits a\n * reset even when no override exists (useful for clearing persisted state);\n * omitting it resets every currently overridden column.\n */\n resetColumnWidth(key?: string): void {\n const active = this._resizeState;\n if (active && (key === undefined || active.key === key)) {\n this._cleanupResize();\n this._liveResize.set(null);\n }\n\n const widths = this._columnWidths();\n if (key !== undefined) {\n if (!this.columns().some((column) => column.key === key)) return;\n if (widths.has(key)) {\n const updated = new Map(widths);\n updated.delete(key);\n this._columnWidths.set(updated);\n }\n this.columnResize.emit({ key, width: null, source: 'reset' });\n afterNextRender(() => this._measureHeaderWidths(), {\n injector: this._injector,\n });\n return;\n }\n\n const resetKeys = [...widths.keys()];\n if (!resetKeys.length) return;\n this._columnWidths.set(new Map());\n for (const resetKey of resetKeys) {\n this.columnResize.emit({\n key: resetKey,\n width: null,\n source: 'reset',\n });\n }\n afterNextRender(() => this._measureHeaderWidths(), {\n injector: this._injector,\n });\n }\n\n /**\n * @private Pointer-move handler (outside Angular). It synchronously updates\n * the latest bounded value, then publishes at most one live signal update per\n * animation frame.\n */\n private _onResizeMove(event: PointerEvent): void {\n const state = this._resizeState;\n if (!state || event.pointerId !== state.pointerId) return;\n const delta = event.clientX - state.startX;\n if (delta !== 0) state.moved = true;\n state.latestWidth = this._clampColumnWidth(state.startWidth + delta, state);\n if (!state.moved) return;\n if (this._resizeRafId) return;\n\n this._resizeRafId = requestAnimationFrame(() => {\n this._resizeRafId = 0;\n const s = this._resizeState;\n if (!s || s.pointerId !== event.pointerId) return;\n this._ngZone.run(() =>\n this._liveResize.set({ key: s.key, width: s.latestWidth }),\n );\n });\n }\n\n /**\n * @private Pointer-up handler that commits exactly once for the initiating\n * pointer. A press/release without movement remains a no-op, which keeps a\n * double-click reset from producing intermediate resize commits.\n */\n private _onResizeEnd(event: PointerEvent): void {\n const state = this._resizeState;\n if (!state || event.pointerId !== state.pointerId) return;\n this._cleanupResize();\n if (!state.moved) {\n this._ngZone.run(() => this._liveResize.set(null));\n return;\n }\n this._commitColumnWidth(state.key, state.latestWidth, 'pointer');\n }\n\n /**\n * @private Cancels only the matching active pointer, dropping the optimistic\n * live width while preserving the last committed map entry.\n */\n private _onResizeCancel(event: PointerEvent): void {\n const state = this._resizeState;\n if (!state || event.pointerId !== state.pointerId) return;\n this._cleanupResize();\n this._ngZone.run(() => this._liveResize.set(null));\n }\n\n /**\n * @private Treats unexpected capture loss as cancellation. Normal cleanup\n * removes this listener before explicitly releasing capture, so pointer-up\n * commits cannot be mistaken for cancellation.\n */\n private _onResizeLostCapture(event: PointerEvent): void {\n const state = this._resizeState;\n if (!state || event.pointerId !== state.pointerId) return;\n this._cleanupResize();\n this._ngZone.run(() => this._liveResize.set(null));\n }\n\n /**\n * @private Commits a bounded pixel width with one map clone and emits the\n * public persistence event in the same Angular-zone turn.\n */\n private _commitColumnWidth(\n key: string,\n width: number,\n source: Exclude<MlvColumnResizeSource, 'reset'>,\n ): void {\n const col = this.columns().find((column) => column.key === key);\n const bounds = col\n ? this._columnResizeBounds(col)\n : {\n min: DEFAULT_COLUMN_MIN_WIDTH,\n max: DEFAULT_COLUMN_MAX_WIDTH,\n };\n const committedWidth = this._normalizeColumnWidth(width, bounds);\n this._ngZone.run(() => {\n const updated = new Map(this._columnWidths());\n updated.set(key, committedWidth);\n this._columnWidths.set(updated);\n this._liveResize.set(null);\n this.columnResize.emit({ key, width: committedWidth, source });\n });\n }\n\n /**\n * @private Returns the latest DOM-resolved bounds when available, otherwise\n * resolves strict pixel metadata with safe finite defaults.\n */\n private _columnResizeBounds(col: MlvDataTableColumn): ColumnResizeBounds {\n return (\n this._resolvedResizeBounds().get(col.key) ??\n this._resolveColumnResizeBounds(col)\n );\n }\n\n /** @private Stores DOM-resolved bounds with a signal-safe map replacement. */\n private _cacheColumnResizeBounds(\n key: string,\n bounds: ColumnResizeBounds,\n ): void {\n this._resolvedResizeBounds.update((current) => {\n const updated = new Map(current);\n updated.set(key, bounds);\n return updated;\n });\n }\n\n /**\n * @private Resolves resize bounds. Non-pixel metadata is read back from the\n * rendered header's computed style where the browser exposes a pixel value.\n */\n private _resolveColumnResizeBounds(\n col: MlvDataTableColumn,\n target?: HTMLElement,\n ): ColumnResizeBounds {\n const headerCell = target?.closest('th');\n let min = this._resolveColumnBound(col.minWidth, headerCell);\n let max = this._resolveColumnBound(col.maxWidth, headerCell);\n\n if (\n headerCell &&\n ((col.minWidth && min === undefined) ||\n (col.maxWidth && max === undefined))\n ) {\n const computedStyle =\n headerCell.ownerDocument.defaultView?.getComputedStyle(headerCell);\n if (computedStyle && col.minWidth && min === undefined) {\n min = parsePixelWidth(computedStyle.minWidth);\n }\n if (computedStyle && col.maxWidth && max === undefined) {\n max = parsePixelWidth(computedStyle.maxWidth);\n }\n }\n\n const resolvedMin = this._roundColumnWidth(min ?? DEFAULT_COLUMN_MIN_WIDTH);\n const resolvedMax = this._roundColumnWidth(\n Math.max(resolvedMin, max ?? DEFAULT_COLUMN_MAX_WIDTH),\n );\n return { min: resolvedMin, max: resolvedMax };\n }\n\n /**\n * @private Resolves a declared bound to CSS pixels. Complete pixel values are\n * direct; complete percentages use the rendered header table width, matching\n * the containing table against which cell percentages are laid out.\n */\n private _resolveColumnBound(\n value: string | undefined,\n headerCell?: Element | null,\n ): number | undefined {\n const pixels = parsePixelWidth(value);\n if (pixels !== undefined) return pixels;\n\n const percentage = this._parseCssPercentage(value);\n if (percentage === undefined || !headerCell) return undefined;\n\n const table = headerCell.closest('table');\n const tableRectWidth = table?.getBoundingClientRect().width ?? 0;\n const referenceWidth =\n tableRectWidth > 0 ? tableRectWidth : (table?.clientWidth ?? 0);\n if (!Number.isFinite(referenceWidth) || referenceWidth <= 0) {\n return undefined;\n }\n return this._roundColumnWidth(referenceWidth * percentage);\n }\n\n /** @private Parses a complete, non-negative CSS percentage as a fraction. */\n private _parseCssPercentage(value: string | undefined): number | undefined {\n if (!value) return undefined;\n const match = value.trim().match(/^(?:\\d+(?:\\.\\d+)?|\\.\\d+)%$/);\n if (!match) return undefined;\n const parsed = Number.parseFloat(match[0]);\n return Number.isFinite(parsed) ? parsed / 100 : undefined;\n }\n\n /**\n * @private Re-applies outer horizontal position after virtual DOM/geometry\n * changes that do not themselves emit another wrapper scroll event.\n */\n private _syncVirtualHorizontalScroll(): void {\n const wrapper = this.tableWrapperRef()?.nativeElement;\n const viewport = this._virtualViewportRef()?.elementRef.nativeElement;\n if (!wrapper || !viewport) return;\n if (viewport.scrollLeft !== wrapper.scrollLeft) {\n viewport.scrollLeft = wrapper.scrollLeft;\n }\n this._updateVirtualScrollGeometry(wrapper, viewport);\n }\n\n /**\n * @private Publishes both the native vertical-scrollbar width and an inert\n * outer extent whose maximum scroll position exactly matches the viewport.\n */\n private _updateVirtualScrollGeometry(\n wrapper: HTMLElement,\n viewport: HTMLElement,\n ): void {\n const gutter = Math.max(0, viewport.offsetWidth - viewport.clientWidth);\n const horizontalRange = Math.max(\n 0,\n viewport.scrollWidth - viewport.clientWidth,\n );\n const extent = wrapper.clientWidth + horizontalRange;\n const gutterChanged = gutter !== untracked(this._virtualScrollbarGutter);\n const extentChanged =\n extent !== untracked(this._virtualHorizontalScrollExtent);\n if (!gutterChanged && !extentChanged) return;\n\n this._ngZone.run(() => {\n if (gutterChanged) this._virtualScrollbarGutter.set(gutter);\n if (extentChanged) this._virtualHorizontalScrollExtent.set(extent);\n });\n }\n\n /**\n * @private Measures the actual rendered header cell width and falls back to\n * the current strict-pixel state only in non-layout environments such as\n * server rendering and jsdom.\n */\n private _measureHeaderWidth(\n col: MlvColumnState,\n target?: HTMLElement,\n ): number {\n const headerCell = target?.closest('th');\n const rectWidth = headerCell?.getBoundingClientRect().width ?? 0;\n if (Number.isFinite(rectWidth) && rectWidth > 0) return rectWidth;\n const offsetWidth = headerCell?.offsetWidth ?? 0;\n if (offsetWidth > 0) return offsetWidth;\n return (\n col._currentWidth ?? parsePixelWidth(col.width) ?? DEFAULT_COLUMN_WIDTH\n );\n }\n\n /**\n * @private Measures the rendered header once per layout change. Before the\n * first user override these values track responsive/table layout; while the\n * table is frozen, existing baselines are preserved so reset restores the\n * original widths rather than another column's resized layout.\n */\n private _measureHeaderWidths(): void {\n const host = this._el.nativeElement as HTMLElement;\n const header = host.querySelector('thead');\n if (!header) return;\n\n const preserveBaseline =\n this._liveResize() !== null || this._columnWidths().size > 0;\n const measured = preserveBaseline\n ? new Map(this._measuredColumnWidths())\n : new Map<string, number>();\n const resolvedBounds = preserveBaseline\n ? new Map(this._resolvedResizeBounds())\n : new Map<string, ColumnResizeBounds>();\n\n for (const cell of header.querySelectorAll<HTMLElement>(\n 'th[data-mlv-column-key]',\n )) {\n const key = cell.getAttribute('data-mlv-column-key');\n if (!key) continue;\n const width = cell.getBoundingClientRect().width;\n if (\n (!preserveBaseline || !measured.has(key)) &&\n Number.isFinite(width) &&\n width > 0\n ) {\n measured.set(key, this._roundColumnWidth(width));\n }\n\n const column = this.columns().find((candidate) => candidate.key === key);\n if (column?.resizable) {\n resolvedBounds.set(key, this._resolveColumnResizeBounds(column, cell));\n }\n }\n\n const selectionWidth = header\n .querySelector<HTMLElement>('.mlv-data-table__cell--select')\n ?.getBoundingClientRect().width;\n const actionsWidth = header\n .querySelector<HTMLElement>('.mlv-data-table__cell--actions')\n ?.getBoundingClientRect().width;\n const auxiliary = preserveBaseline\n ? { ...this._measuredAuxiliaryWidths() }\n : {};\n if (\n selectionWidth !== undefined &&\n Number.isFinite(selectionWidth) &&\n selectionWidth > 0\n ) {\n auxiliary.selection = this._roundColumnWidth(selectionWidth);\n }\n if (\n actionsWidth !== undefined &&\n Number.isFinite(actionsWidth) &&\n actionsWidth > 0\n ) {\n auxiliary.actions = this._roundColumnWidth(actionsWidth);\n }\n\n this._measuredColumnWidths.set(measured);\n this._resolvedResizeBounds.set(resolvedBounds);\n this._measuredAuxiliaryWidths.set(auxiliary);\n }\n\n /**\n * @private CSS length used by a sticky offset. A rendered measurement is more\n * accurate than declared CSS under table redistribution; the declaration\n * remains the pre-render/SSR fallback.\n */\n private _columnOffsetWidth(col: MlvColumnState): string {\n if (col._currentWidth !== undefined) return `${col._currentWidth}px`;\n const measured = this._measuredColumnWidths().get(col.key);\n if (measured !== undefined) return `${this._roundColumnWidth(measured)}px`;\n if (col.width) return col.width;\n return `${DEFAULT_COLUMN_WIDTH}px`;\n }\n\n /** @private Adds heterogeneous CSS lengths without converting their units. */\n private _sumCssLengths(widths: string[]): string {\n if (!widths.length) return '0px';\n if (widths.length === 1) return widths[0];\n return `calc(${widths.join(' + ')})`;\n }\n\n /** @private Rounds pixel values to hundredths without changing their bounds. */\n private _roundColumnWidth(width: number): number {\n return Math.round(width * 100) / 100;\n }\n\n /** @private Creates immutable exact width/min/max styles for a measured column. */\n private _fixedColumnWidthStyles(\n width: number | undefined,\n ): Readonly<Record<string, string>> | null {\n if (width === undefined || !Number.isFinite(width) || width < 0)\n return null;\n const value = `${this._roundColumnWidth(width)}px`;\n return {\n width: value,\n 'min-width': value,\n 'max-width': value,\n };\n }\n\n /** @private Rounds and clamps a width against normalized finite bounds. */\n private _normalizeColumnWidth(\n width: number,\n bounds: ColumnResizeBounds,\n ): number {\n return this._clampColumnWidth(this._roundColumnWidth(width), bounds);\n }\n\n /** @private Clamps a width to finite normalized resize bounds. */\n private _clampColumnWidth(width: number, bounds: ColumnResizeBounds): number {\n const finiteWidth = Number.isFinite(width) ? width : DEFAULT_COLUMN_WIDTH;\n return Math.min(bounds.max, Math.max(bounds.min, finiteWidth));\n }\n\n /**\n * @private Detaches active pointer listeners, releases capture, cancels a\n * pending animation frame, and clears the drag state. Idempotent for pointer\n * up, pointer cancel, reset, and component destruction.\n */\n private _cleanupResize(): void {\n const state = this._resizeState;\n if (state) {\n this._document.removeEventListener(\n 'pointermove',\n this._onResizeMoveBound,\n );\n this._document.removeEventListener('pointerup', this._onResizeEndBound);\n this._document.removeEventListener(\n 'pointercancel',\n this._onResizeCancelBound,\n );\n state.target.removeEventListener(\n 'lostpointercapture',\n this._onResizeLostCaptureBound,\n );\n const canRelease =\n typeof state.target.hasPointerCapture !== 'function' ||\n state.target.hasPointerCapture(state.pointerId);\n if (\n canRelease &&\n typeof state.target.releasePointerCapture === 'function'\n ) {\n try {\n state.target.releasePointerCapture(state.pointerId);\n } catch {\n // Capture may already have been released implicitly by the browser.\n }\n }\n }\n\n if (this._resizeRafId) {\n cancelAnimationFrame(this._resizeRafId);\n this._resizeRafId = 0;\n }\n this._resizeState = null;\n }\n\n // ---- Private helpers --------------------------------------------------------\n\n /** Returns the original (pre-spread) row reference for expand tracking. */\n private _ref(row: MlvDataRow): MlvDataRow {\n return originalRow(row);\n }\n}\n","@if (hasToolbarContent()) {\n<div class=\"mlv-data-table__toolbar\">\n @if (showSearch() && hasSearchableColumns()) {\n <mlv-search-field\n class=\"mlv-data-table__search\"\n [value]=\"_searchDraft()\"\n (valueChange)=\"_searchDraft.set($event)\"\n [trigger]=\"searchTrigger()\"\n [debounce]=\"searchDebounce()\"\n [loading]=\"loading()\"\n [placeholder]=\"_i18n().searchPlaceholder\"\n [ariaLabel]=\"_i18n().searchLabel\"\n (search)=\"onSearch($event)\"\n />\n } @if (filterDisplay() !== 'none' && hasFilters()) {\n <span class=\"mlv-data-table__filter-badge\" aria-live=\"polite\">\n {{ activeFilterLabel() }}\n </span>\n }\n <div class=\"mlv-data-table__toolbar-actions\">\n @if (editable() && addRow()) {\n <button\n mlvButton\n variant=\"secondary\"\n mlvDensity=\"compact\"\n type=\"button\"\n (click)=\"onAddRow()\"\n [attr.aria-label]=\"_i18n().addNewRow\"\n >\n <svg lucidePlus mlvButtonIcon [size]=\"14\" />\n {{ _i18n().addRow }}\n </button>\n } @if (hasHideableColumns()) {\n <button\n mlvButton\n [variant]=\"columnsPopup.opened() ? 'primary' : 'secondary'\"\n mlvDensity=\"compact\"\n type=\"button\"\n [mlvPopupTrigger]=\"columnsPopup\"\n #columnsTrigger=\"mlvPopupTrigger\"\n [attr.aria-label]=\"_i18n().toggleColumnVisibility\"\n >\n <svg mlvButtonIcon lucideEye [size]=\"14\" />\n {{ _i18n().columns }}\n </button>\n\n <mlv-popup #columnsPopup>\n <div *mlvPopupContent class=\"mlv-data-table__columns-dropdown\">\n @for (col of allColumns(); track col.key) { @if (col.hideable) {\n <div class=\"mlv-data-table__columns-item\">\n <mlv-checkbox\n [checked]=\"!isColumnHidden(col.key)\"\n (checkedChange)=\"toggleColumnVisibility(col.key)\"\n />\n <span>{{ col.title ?? col.key }}</span>\n </div>\n } }\n </div>\n </mlv-popup>\n } @if (filterDisplay() === 'toolbar' && hasFilterableColumns()) {\n <button\n #filterBtn\n mlvButton\n [variant]=\"filtersPopup.opened() ? 'primary' : 'secondary'\"\n mlvDensity=\"compact\"\n type=\"button\"\n [mlvPopupTrigger]=\"filtersPopup\"\n #trigger=\"mlvPopupTrigger\"\n [ariaHasPopup]=\"'dialog'\"\n [attr.aria-label]=\"_i18n().toggleFilters\"\n >\n <svg lucideFilter mlvButtonIcon [size]=\"14\" />\n {{ _i18n().filters }} @if (hasFilters()) {\n <mlv-badge tone=\"primary\" rounded>{{ activeFilters().length }}</mlv-badge>\n }\n </button>\n\n <mlv-popup\n #filtersPopup\n panelRole=\"dialog\"\n [ariaLabel]=\"_i18n().filters\"\n (afterClosed)=\"_onFiltersClosed()\"\n >\n <mlv-dt-filter-dropdown\n *mlvPopupContent\n [columns]=\"columns()\"\n [(activeFilters)]=\"activeFilters\"\n (closed)=\"trigger.close()\"\n />\n </mlv-popup>\n }\n </div>\n</div>\n}\n\n<div\n class=\"mlv-data-table__wrapper\"\n [class.mlv-data-table__wrapper--virtual]=\"virtualScroll()\"\n [style.max-height]=\"virtualScroll() ? null : maxHeight()\"\n [style.--mlv-dt-virtual-scrollbar-gutter]=\"\n virtualScroll() ? _virtualScrollbarGutter() + 'px' : null\n \"\n #tableWrapper\n mlvInfiniteScroll\n [disabled]=\"paginationMode() !== 'infinite' || virtualScroll()\"\n [threshold]=\"infiniteScrollThreshold()\"\n [loading]=\"!!loading()\"\n [hasMore]=\"!!hasMore()\"\n (loadMore)=\"onInfiniteScrollLoadMore($event)\"\n>\n @if (virtualScroll()) {\n <!-- ==================== Virtual scroll mode ==================== -->\n <!-- Header table — sits naturally at the top of the wrapper, outside the viewport -->\n <table\n class=\"mlv-data-table__table mlv-data-table__table--virtual mlv-data-table__table--virtual-header\"\n [class.mlv-data-table__table--bordered]=\"bordered()\"\n [style.width.px]=\"resizedTableWidth()\"\n [style.flex]=\"resizedTableWidth() === null ? null : '0 0 auto'\"\n role=\"grid\"\n >\n <ng-container [ngTemplateOutlet]=\"colgroupTpl\" />\n <thead class=\"mlv-data-table__head\">\n <ng-container [ngTemplateOutlet]=\"headRowsTpl\" />\n </thead>\n </table>\n\n <!-- CDK virtual scroll viewport — owns the only vertical scroll surface in this mode.\n Infinite scroll is intentionally disabled in virtual mode: virtual scrolling is the\n rendering optimisation for already-loaded data, and the two strategies are mutually\n exclusive in this component. -->\n <cdk-virtual-scroll-viewport\n class=\"mlv-data-table__virtual-viewport\"\n [itemSize]=\"rowHeight()\"\n [style.height]=\"virtualViewportHeight()\"\n >\n <table\n class=\"mlv-data-table__table mlv-data-table__table--virtual mlv-data-table__table--virtual-body\"\n [class.mlv-data-table__table--striped]=\"striped()\"\n [class.mlv-data-table__table--bordered]=\"bordered()\"\n [style.width.px]=\"resizedTableWidth()\"\n role=\"presentation\"\n >\n <ng-container [ngTemplateOutlet]=\"colgroupTpl\" />\n <tbody class=\"mlv-data-table__body\">\n @if (showError()) {\n <ng-container [ngTemplateOutlet]=\"errorRowTpl\" />\n } @else if (flatRows().length === 0) {\n <ng-container [ngTemplateOutlet]=\"noDataRowTpl\" />\n } @else {\n <tr\n *cdkVirtualFor=\"\n let row of flatRows();\n let i = index;\n trackBy: trackByRow\n \"\n class=\"mlv-data-table__row mlv-data-table__row--data\"\n [class.mlv-data-table__row--expanded]=\"isRowExpanded(row)\"\n [class.mlv-data-table__row--editing]=\"isEditing(i)\"\n [class.mlv-data-table__row--selected]=\"isRowSelected(row)\"\n [style.height.px]=\"rowHeight()\"\n [attr.aria-level]=\"getDepth(row) > 0 ? getDepth(row) + 1 : null\"\n [attr.aria-selected]=\"selectable() ? isRowSelected(row) : null\"\n [attr.tabindex]=\"_rowTabIndex(i)\"\n [attr.data-row-index]=\"i\"\n (click)=\"onRowClick(row, i, $event)\"\n (focus)=\"_onRowFocus(i)\"\n (keydown)=\"_onRowKeydown(i, row, $event)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"rowCellsTpl\"\n [ngTemplateOutletContext]=\"getCellContext(row, i)\"\n />\n </tr>\n }\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n\n <!-- Footer summary table — only when a footer template is projected -->\n @if (getFooterTemplate(); as footerTpl) {\n <table\n class=\"mlv-data-table__table mlv-data-table__table--virtual mlv-data-table__table--virtual-footer\"\n [class.mlv-data-table__table--bordered]=\"bordered()\"\n [style.width.px]=\"resizedTableWidth()\"\n [style.flex]=\"resizedTableWidth() === null ? null : '0 0 auto'\"\n role=\"presentation\"\n >\n <ng-container [ngTemplateOutlet]=\"colgroupTpl\" />\n <tfoot class=\"mlv-data-table__foot\">\n <tr class=\"mlv-data-table__row mlv-data-table__row--footer\">\n <ng-container\n [ngTemplateOutlet]=\"footerTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: visibleColumns() }\"\n />\n </tr>\n </tfoot>\n </table>\n }\n\n <!-- Extends only the outer horizontal scroll range to match the viewport's\n native range, including a classic vertical scrollbar gutter. -->\n <div\n class=\"mlv-data-table__virtual-horizontal-sizer\"\n [style.width.px]=\"_virtualHorizontalScrollExtent()\"\n aria-hidden=\"true\"\n ></div>\n } @else if (_cellNav()) {\n <!-- ========= Experimental cell-level grid navigation (aria ngGrid) ========= -->\n <!--\n Opt-in via [cellNavigation]=\"true\" (non-virtual only). The aria Grid pattern owns\n roving focus, arrow/Home/End navigation across cells, and aria-activedescendant.\n Only the data <tbody> rows/cells are registered as grid rows/cells; header cells\n stay outside grid navigation. Interactive cells (edit inputs, action buttons)\n expose an ngGridCellWidget so Enter pauses grid nav to interact and Escape resumes.\n -->\n <table\n ngGrid\n rowWrap=\"nowrap\"\n colWrap=\"nowrap\"\n class=\"mlv-data-table__table\"\n [class.mlv-data-table__table--striped]=\"striped()\"\n [class.mlv-data-table__table--bordered]=\"bordered()\"\n [style.width.px]=\"resizedTableWidth()\"\n [style.table-layout]=\"resizedTableWidth() === null ? null : 'fixed'\"\n role=\"grid\"\n #tableEl\n >\n <ng-container [ngTemplateOutlet]=\"colgroupTpl\" />\n <thead\n class=\"mlv-data-table__head\"\n [class.mlv-data-table__head--sticky]=\"stickyHeader()\"\n >\n <ng-container [ngTemplateOutlet]=\"headRowsTpl\" />\n </thead>\n\n <tbody class=\"mlv-data-table__body\">\n @if (showError()) {\n <ng-container [ngTemplateOutlet]=\"errorRowTpl\" />\n } @else if (flatRows().length === 0) {\n <ng-container [ngTemplateOutlet]=\"noDataRowTpl\" />\n } @else { @for (row of flatRows(); track $index; let i = $index) {\n <tr\n ngGridRow\n class=\"mlv-data-table__row mlv-data-table__row--data\"\n [class.mlv-data-table__row--expanded]=\"isRowExpanded(row)\"\n [class.mlv-data-table__row--editing]=\"isEditing(i)\"\n [class.mlv-data-table__row--selected]=\"isRowSelected(row)\"\n [attr.aria-level]=\"getDepth(row) > 0 ? getDepth(row) + 1 : null\"\n [attr.aria-selected]=\"selectable() ? isRowSelected(row) : null\"\n [attr.data-row-index]=\"i\"\n (click)=\"onRowClick(row, i, $event)\"\n >\n @if (selectable()) {\n <td\n ngGridCell\n class=\"mlv-data-table__cell mlv-data-table__cell--data mlv-data-table__cell--select\"\n [style]=\"getAuxiliaryColumnStyle('selection')\"\n >\n <mlv-checkbox\n [checked]=\"isRowSelected(row)\"\n [tabbable]=\"false\"\n (checkedChange)=\"toggleRowSelection(row)\"\n (click)=\"$event.stopPropagation()\"\n [ariaLabel]=\"'Select row ' + (i + 1)\"\n />\n </td>\n } @for (col of visibleColumns(); track col.key; let ci = $index) {\n <td\n ngGridCell\n class=\"mlv-data-table__cell mlv-data-table__cell--data\"\n [class.mlv-data-table__cell--pinned]=\"col.pinned\"\n [class.mlv-data-table__cell--pinned-left]=\"\n col.pinned && col.pinSide !== 'right'\n \"\n [class.mlv-data-table__cell--pinned-right]=\"\n col.pinned && col.pinSide === 'right'\n \"\n [class]=\"getAlignClass(col)\"\n [style]=\"getCellStyle(col)\"\n >\n @if ( editable() && isEditing(i) && getEditTemplate(col.key); as\n editTpl ) {\n <div\n ngGridCellWidget\n widgetType=\"editable\"\n class=\"mlv-data-table__cell-content\"\n >\n <ng-container\n [ngTemplateOutlet]=\"editTpl\"\n [ngTemplateOutletContext]=\"getCellContext(row, i)\"\n />\n </div>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"cellContentTpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n index: i,\n col: col,\n ci: ci,\n }\"\n />\n }\n </td>\n } @if (editable()) {\n <td\n ngGridCell\n class=\"mlv-data-table__cell mlv-data-table__cell--data mlv-data-table__cell--actions\"\n [style]=\"getAuxiliaryColumnStyle('actions')\"\n >\n <div\n ngGridCellWidget\n widgetType=\"complex\"\n class=\"mlv-data-table__cell-content mlv-data-table__actions\"\n >\n <ng-container\n [ngTemplateOutlet]=\"actionsButtonsTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\"\n />\n </div>\n </td>\n }\n </tr>\n } }\n </tbody>\n\n @if (getFooterTemplate(); as footerTpl) {\n <tfoot\n class=\"mlv-data-table__foot\"\n [class.mlv-data-table__foot--sticky]=\"stickyHeader()\"\n >\n <tr class=\"mlv-data-table__row mlv-data-table__row--footer\">\n <ng-container\n [ngTemplateOutlet]=\"footerTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: visibleColumns() }\"\n />\n </tr>\n </tfoot>\n }\n </table>\n\n @if (paginationMode() === 'infinite' && loading()) {\n <div\n class=\"mlv-data-table__loading-bottom\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n >\n <mlv-loader\n variant=\"circle\"\n [indeterminate]=\"true\"\n [size]=\"24\"\n ariaLabel=\"Loading more rows\"\n />\n </div>\n } } @else {\n <!-- ==================== Standard (non-virtual) mode ==================== -->\n <table\n class=\"mlv-data-table__table\"\n [class.mlv-data-table__table--striped]=\"striped()\"\n [class.mlv-data-table__table--bordered]=\"bordered()\"\n [style.width.px]=\"resizedTableWidth()\"\n [style.table-layout]=\"resizedTableWidth() === null ? null : 'fixed'\"\n role=\"grid\"\n #tableEl\n >\n <ng-container [ngTemplateOutlet]=\"colgroupTpl\" />\n <thead\n class=\"mlv-data-table__head\"\n [class.mlv-data-table__head--sticky]=\"stickyHeader()\"\n >\n <ng-container [ngTemplateOutlet]=\"headRowsTpl\" />\n </thead>\n\n <tbody class=\"mlv-data-table__body\">\n @if (showError()) {\n <ng-container [ngTemplateOutlet]=\"errorRowTpl\" />\n } @else if (flatRows().length === 0) {\n <ng-container [ngTemplateOutlet]=\"noDataRowTpl\" />\n } @else { @for (row of flatRows(); track $index; let i = $index) {\n <tr\n class=\"mlv-data-table__row mlv-data-table__row--data\"\n [class.mlv-data-table__row--expanded]=\"isRowExpanded(row)\"\n [class.mlv-data-table__row--editing]=\"isEditing(i)\"\n [class.mlv-data-table__row--selected]=\"isRowSelected(row)\"\n [attr.aria-level]=\"getDepth(row) > 0 ? getDepth(row) + 1 : null\"\n [attr.aria-selected]=\"selectable() ? isRowSelected(row) : null\"\n [attr.tabindex]=\"_rowTabIndex(i)\"\n [attr.data-row-index]=\"i\"\n (click)=\"onRowClick(row, i, $event)\"\n (focus)=\"_onRowFocus(i)\"\n (keydown)=\"_onRowKeydown(i, row, $event)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"rowCellsTpl\"\n [ngTemplateOutletContext]=\"getCellContext(row, i)\"\n />\n </tr>\n } }\n </tbody>\n\n @if (getFooterTemplate(); as footerTpl) {\n <tfoot\n class=\"mlv-data-table__foot\"\n [class.mlv-data-table__foot--sticky]=\"stickyHeader()\"\n >\n <tr class=\"mlv-data-table__row mlv-data-table__row--footer\">\n <ng-container\n [ngTemplateOutlet]=\"footerTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: visibleColumns() }\"\n />\n </tr>\n </tfoot>\n }\n </table>\n\n @if (paginationMode() === 'infinite' && loading()) {\n <div\n class=\"mlv-data-table__loading-bottom\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n >\n <mlv-loader\n variant=\"circle\"\n [indeterminate]=\"true\"\n [size]=\"24\"\n ariaLabel=\"Loading more rows\"\n />\n </div>\n } }\n</div>\n\n@if (paginationMode() === 'paged' && !virtualScroll()) {\n<div class=\"mlv-data-table__footer\">\n <mlv-pagination\n [totalItems]=\"totalItems()\"\n [(currentPage)]=\"currentPage\"\n [(itemsPerPage)]=\"currentPerPage\"\n />\n</div>\n} @if (paginationMode() === 'paged' && loading()) {\n<div\n class=\"mlv-data-table__loading-overlay\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n>\n <mlv-loader\n variant=\"circle\"\n [indeterminate]=\"true\"\n [size]=\"48\"\n ariaLabel=\"Loading table data\"\n />\n</div>\n}\n\n<!-- ==================== Reusable templates ==================== -->\n\n<!--\n Shared <colgroup> template — used by both the standard table and the three split tables in\n virtual mode (header / body / footer). Keeping the colgroup definitions identical and combining\n it with `table-layout: fixed` keeps column widths in sync between the split tables in virtual mode.\n-->\n<ng-template #colgroupTpl>\n <colgroup>\n @if (selectable() === 'multi' || selectable() === 'single') {\n <col\n class=\"mlv-data-table__col--select\"\n [style.width]=\"getAuxiliaryColumnWidth('selection')\"\n />\n } @for (col of visibleColumns(); track col.key) {\n <col [style.width]=\"getColWidth(col)\" />\n } @if (editable()) {\n <col\n class=\"mlv-data-table__col--actions\"\n [style.width]=\"getAuxiliaryColumnWidth('actions')\"\n />\n }\n </colgroup>\n</ng-template>\n\n<!-- Header rows — emits the same content the original `<thead>` did. -->\n<ng-template #headRowsTpl>\n @if (hasColumnGroups()) {\n <!-- Group header row -->\n <tr class=\"mlv-data-table__row mlv-data-table__row--group-header\">\n @if (selectable() === 'multi') {\n <th\n class=\"mlv-data-table__cell mlv-data-table__cell--header mlv-data-table__cell--select\"\n [style]=\"getAuxiliaryColumnStyle('selection')\"\n rowspan=\"2\"\n >\n <mlv-checkbox\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (checkedChange)=\"toggleSelectAll()\"\n [ariaLabel]=\"_i18n().selectAllRows\"\n />\n </th>\n } @else if (selectable() === 'single') {\n <th\n class=\"mlv-data-table__cell mlv-data-table__cell--header mlv-data-table__cell--select\"\n [style]=\"getAuxiliaryColumnStyle('selection')\"\n rowspan=\"2\"\n ></th>\n } @for (col of visibleColumns(); track col.key) { @if (headerLayout(); as\n layout) { @if (layout.standaloneKeys.has(col.key)) {\n <!-- Standalone column spans both header rows -->\n <th\n class=\"mlv-data-table__cell mlv-data-table__cell--header mlv-data-table__cell--standalone\"\n [class.mlv-data-table__cell--sortable]=\"col.sortable\"\n [class.mlv-data-table__cell--pinned]=\"col.pinned\"\n [class.mlv-data-table__cell--pinned-left]=\"\n col.pinned && col.pinSide !== 'right'\n \"\n [class.mlv-data-table__cell--pinned-right]=\"\n col.pinned && col.pinSide === 'right'\n \"\n [class]=\"getAlignClass(col)\"\n [style]=\"getCellStyle(col)\"\n [attr.data-mlv-column-key]=\"col.key\"\n rowspan=\"2\"\n scope=\"col\"\n [attr.aria-sort]=\"\n col.sortable\n ? getSortDirection(col) === 'asc'\n ? 'ascending'\n : getSortDirection(col) === 'desc'\n ? 'descending'\n : 'none'\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"headerCellInnerTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: col }\"\n />\n </th>\n } @else {\n <!-- Check if this column is the first column of a group -->\n @for (group of columnGroups(); track group.title) { @if (group.columns[0]\n === col.key) {\n <th\n class=\"mlv-data-table__cell mlv-data-table__cell--header mlv-data-table__cell--group-header\"\n [class.mlv-data-table__cell--align-left]=\"\n group.align === 'left'\n \"\n [class.mlv-data-table__cell--align-center]=\"\n group.align === 'center' || !group.align\n \"\n [class.mlv-data-table__cell--align-right]=\"\n group.align === 'right'\n \"\n [attr.colspan]=\"group.columns.length\"\n scope=\"colgroup\"\n >\n {{ group.title }}\n </th>\n } } } } } @if (editable()) {\n <th\n class=\"mlv-data-table__cell mlv-data-table__cell--header mlv-data-table__cell--actions\"\n [style]=\"getAuxiliaryColumnStyle('actions')\"\n rowspan=\"2\"\n >\n <span class=\"mlv-data-table__visually-hidden\"\n >{{ actionsHeaderLabel() }}</span\n >\n </th>\n }\n </tr>\n <!-- Sub-header row for grouped columns -->\n <tr class=\"mlv-data-table__row mlv-data-table__row--header\">\n @for (col of visibleColumns(); track col.key) { @if (headerLayout(); as\n layout) { @if (layout.groupedKeys.has(col.key)) {\n <th\n class=\"mlv-data-table__cell mlv-data-table__cell--header\"\n [class.mlv-data-table__cell--sortable]=\"col.sortable\"\n [class.mlv-data-table__cell--pinned]=\"col.pinned\"\n [class.mlv-data-table__cell--pinned-left]=\"\n col.pinned && col.pinSide !== 'right'\n \"\n [class.mlv-data-table__cell--pinned-right]=\"\n col.pinned && col.pinSide === 'right'\n \"\n [class]=\"getAlignClass(col)\"\n [style]=\"getCellStyle(col)\"\n [attr.data-mlv-column-key]=\"col.key\"\n scope=\"col\"\n [attr.aria-sort]=\"\n col.sortable\n ? getSortDirection(col) === 'asc'\n ? 'ascending'\n : getSortDirection(col) === 'desc'\n ? 'descending'\n : 'none'\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"headerCellInnerTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: col }\"\n />\n </th>\n } } }\n </tr>\n } @else {\n <!-- Standard single-row header -->\n <tr class=\"mlv-data-table__row mlv-data-table__row--header\">\n @if (selectable() === 'multi') {\n <th\n class=\"mlv-data-table__cell mlv-data-table__cell--header mlv-data-table__cell--select\"\n [style]=\"getAuxiliaryColumnStyle('selection')\"\n >\n <mlv-checkbox\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (checkedChange)=\"toggleSelectAll()\"\n [ariaLabel]=\"_i18n().selectAllRows\"\n />\n </th>\n } @else if (selectable() === 'single') {\n <th\n class=\"mlv-data-table__cell mlv-data-table__cell--header mlv-data-table__cell--select\"\n [style]=\"getAuxiliaryColumnStyle('selection')\"\n ></th>\n } @for (col of visibleColumns(); track col.key) {\n <th\n class=\"mlv-data-table__cell mlv-data-table__cell--header\"\n [class.mlv-data-table__cell--sortable]=\"col.sortable\"\n [class.mlv-data-table__cell--pinned]=\"col.pinned\"\n [class.mlv-data-table__cell--pinned-left]=\"\n col.pinned && col.pinSide !== 'right'\n \"\n [class.mlv-data-table__cell--pinned-right]=\"\n col.pinned && col.pinSide === 'right'\n \"\n [class]=\"getAlignClass(col)\"\n [style]=\"getCellStyle(col)\"\n [attr.data-mlv-column-key]=\"col.key\"\n [attr.aria-sort]=\"\n col.sortable\n ? getSortDirection(col) === 'asc'\n ? 'ascending'\n : getSortDirection(col) === 'desc'\n ? 'descending'\n : 'none'\n : null\n \"\n scope=\"col\"\n >\n <ng-container\n [ngTemplateOutlet]=\"headerCellInnerTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: col }\"\n />\n </th>\n } @if (editable()) {\n <th\n class=\"mlv-data-table__cell mlv-data-table__cell--header mlv-data-table__cell--actions\"\n [style]=\"getAuxiliaryColumnStyle('actions')\"\n >\n <span class=\"mlv-data-table__visually-hidden\"\n >{{ actionsHeaderLabel() }}</span\n >\n </th>\n }\n </tr>\n }\n</ng-template>\n\n<!--\n Shared inner content for a single header cell. Context: { $implicit: col }.\n Sortable columns wrap the label + sort icon in ONE native <button> (APG grid\n sort pattern) so the <th> stays a non-interactive cell carrying only aria-sort;\n the pin button is a sibling of the sort button, never nested inside it, so no\n interactive control is nested within another (avoids axe `nested-interactive`).\n-->\n<ng-template #headerCellInnerTpl let-col>\n <div class=\"mlv-data-table__cell-inner\">\n @if (col.sortable) {\n <button\n type=\"button\"\n class=\"mlv-data-table__sort-button\"\n [attr.aria-label]=\"getSortLabel(col)\"\n (click)=\"onSortClick(col)\"\n >\n <span class=\"mlv-data-table__header-title\"\n >{{ col.title ?? col.key }}</span\n >\n <span class=\"mlv-data-table__sort-icon\" aria-hidden=\"true\">\n @if (getSortDirection(col) === 'asc') {\n <svg lucideArrowUp />\n } @else if (getSortDirection(col) === 'desc') {\n <svg lucideArrowDown />\n } @else {\n <svg lucideChevronsUpDown class=\"mlv-data-table__sort-icon--inactive\" />\n }\n </span>\n </button>\n } @else {\n <span class=\"mlv-data-table__header-title\">{{ col.title ?? col.key }}</span>\n } @if (col.pinnable) {\n <ng-container\n [ngTemplateOutlet]=\"pinButtonTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: col }\"\n />\n } @if (filterDisplay() === 'column' && col.filterable) {\n <button\n mlvButton\n class=\"mlv-data-table__column-filter\"\n [class.mlv-data-table__column-filter--active]=\"\n isColumnFiltered(col.key)\n \"\n [variant]=\"\n columnFilterPopup.opened() || isColumnFiltered(col.key)\n ? 'primary'\n : 'transparent'\n \"\n shape=\"square\"\n mlvDensity=\"tight\"\n type=\"button\"\n [attr.data-column-key]=\"col.key\"\n [mlvPopupTrigger]=\"columnFilterPopup\"\n #columnFilterTrigger=\"mlvPopupTrigger\"\n [ariaHasPopup]=\"'dialog'\"\n [attr.aria-label]=\"getFilterLabel(col)\"\n >\n <svg lucideFunnel mlvButtonIcon [size]=\"14\" />\n </button>\n\n <mlv-popup\n #columnFilterPopup\n panelRole=\"dialog\"\n [ariaLabel]=\"getFilterLabel(col)\"\n (afterClosed)=\"focusColumnFilterTrigger(col.key)\"\n >\n <mlv-dt-filter-dropdown\n *mlvPopupContent\n [columns]=\"getColumnFilterColumns(col)\"\n [activeFilters]=\"activeFilters()\"\n (activeFiltersChange)=\"onColumnFiltersChange(col.key, $event)\"\n (closed)=\"columnFilterTrigger.close()\"\n />\n </mlv-popup>\n }\n </div>\n @if (col.resizable) {\n <div\n #resizeHandle\n class=\"mlv-data-table__resize-handle\"\n [attr.data-column-key]=\"col.key\"\n role=\"separator\"\n tabindex=\"0\"\n aria-orientation=\"vertical\"\n [attr.aria-label]=\"getColumnResizeLabel(col)\"\n [attr.aria-valuenow]=\"getColumnResizeValue(col)\"\n [attr.aria-valuemin]=\"getColumnResizeMin(col)\"\n [attr.aria-valuemax]=\"getColumnResizeMax(col)\"\n [attr.aria-valuetext]=\"getColumnResizeValueText(col)\"\n (pointerdown)=\"onResizeStart(col, $event)\"\n (keydown)=\"onColumnResizeKeydown(col, $event)\"\n (dblclick)=\"resetColumnWidth(col.key)\"\n ></div>\n }\n</ng-template>\n\n<!-- No-data fallback row, used by both rendering paths. -->\n<ng-template #noDataRowTpl>\n <tr class=\"mlv-data-table__row mlv-data-table__row--no-data\">\n <td\n class=\"mlv-data-table__cell mlv-data-table__cell--no-data\"\n [attr.colspan]=\"totalColumnCount()\"\n >\n @if (getNoDataTemplate()) {\n <ng-container [ngTemplateOutlet]=\"getNoDataTemplate()!\" />\n } @else {\n <div class=\"mlv-data-table__no-data-default\">\n <svg lucideTable2 [size]=\"40\" aria-hidden=\"true\" />\n <span>No data available</span>\n </div>\n }\n </td>\n </tr>\n</ng-template>\n\n<!--\n Failed-request row, used by all three rendering paths. Takes precedence over both the\n data rows and #noDataRowTpl so a failed request never reads as an empty result set.\n The region is announced as an alert; the default block is an mlv-empty-state with a\n danger-toned icon and a Retry button wired to the (retry) output.\n-->\n<ng-template #errorRowTpl>\n <tr class=\"mlv-data-table__row mlv-data-table__row--error\">\n <td\n class=\"mlv-data-table__cell mlv-data-table__cell--error\"\n [attr.colspan]=\"totalColumnCount()\"\n >\n <div class=\"mlv-data-table__error\" role=\"alert\" aria-live=\"assertive\">\n @if (getErrorTemplate(); as errorTpl) {\n <ng-container\n [ngTemplateOutlet]=\"errorTpl\"\n [ngTemplateOutletContext]=\"_errorContext()\"\n />\n } @else {\n <mlv-empty-state>\n <svg\n mlvEmptyStateIcon\n lucideTriangleAlert\n class=\"mlv-data-table__error-icon\"\n [size]=\"40\"\n aria-hidden=\"true\"\n />\n <span mlvEmptyStateTitle>{{ _i18n().errorTitle }}</span>\n <span mlvEmptyStateDescription>{{ errorMessage() }}</span>\n <button\n mlvEmptyStateActions\n mlvButton\n variant=\"secondary\"\n type=\"button\"\n class=\"mlv-data-table__error-retry\"\n (click)=\"onRetry()\"\n >\n {{ _i18n().retry }}\n </button>\n </mlv-empty-state>\n }\n </div>\n </td>\n </tr>\n</ng-template>\n\n<!--\n Per-row data cells. Emits the selection cell, the data cells, and the actions cell.\n The owning <tr> stays at the consumer site (either inside `@for` for the standard mode\n or `*cdkVirtualFor` inside the CDK viewport in virtual mode), so each rendering path can\n control its own row-level host bindings.\n-->\n<ng-template #rowCellsTpl let-row let-i=\"index\">\n @if (selectable()) {\n <td\n class=\"mlv-data-table__cell mlv-data-table__cell--data mlv-data-table__cell--select\"\n [style]=\"getAuxiliaryColumnStyle('selection')\"\n >\n <!--\n [tabbable]=\"false\" keeps this checkbox out of the tab order so the row is\n the single tab stop: the row's Space/Enter toggles selection, and the\n checkbox stays operable via the mouse. Avoids a per-row double tab stop.\n -->\n <mlv-checkbox\n [checked]=\"isRowSelected(row)\"\n [tabbable]=\"false\"\n (checkedChange)=\"toggleRowSelection(row)\"\n (click)=\"$event.stopPropagation()\"\n [ariaLabel]=\"'Select row ' + (i + 1)\"\n />\n </td>\n } @for (col of visibleColumns(); track col.key; let ci = $index) {\n <td\n class=\"mlv-data-table__cell mlv-data-table__cell--data\"\n [class.mlv-data-table__cell--pinned]=\"col.pinned\"\n [class.mlv-data-table__cell--pinned-left]=\"\n col.pinned && col.pinSide !== 'right'\n \"\n [class.mlv-data-table__cell--pinned-right]=\"\n col.pinned && col.pinSide === 'right'\n \"\n [class]=\"getAlignClass(col)\"\n [style]=\"getCellStyle(col)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"cellContentTpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n index: i,\n col: col,\n ci: ci,\n }\"\n />\n </td>\n } @if (editable()) {\n <td\n class=\"mlv-data-table__cell mlv-data-table__cell--data mlv-data-table__cell--actions\"\n [style]=\"getAuxiliaryColumnStyle('actions')\"\n >\n <div class=\"mlv-data-table__cell-content mlv-data-table__actions\">\n <ng-container\n [ngTemplateOutlet]=\"actionsButtonsTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\"\n />\n </div>\n </td>\n }\n</ng-template>\n\n<!--\n Shared edit/save/cancel action buttons for the actions column. Context: { $implicit: row, index: i }.\n-->\n<ng-template #actionsButtonsTpl let-row let-i=\"index\">\n @if (isEditing(i)) {\n <button\n mlvButton\n variant=\"transparent\"\n shape=\"square\"\n mlvDensity=\"tight\"\n type=\"button\"\n (click)=\"saveEdit(row, i)\"\n [attr.aria-label]=\"_i18n().saveChanges\"\n >\n <svg lucideCheck mlvButtonIcon />\n </button>\n <button\n mlvButton\n variant=\"transparent\"\n shape=\"square\"\n mlvDensity=\"tight\"\n type=\"button\"\n (click)=\"cancelEdit(row, i)\"\n [attr.aria-label]=\"_i18n().cancelEditing\"\n >\n <svg lucideX mlvButtonIcon />\n </button>\n } @else {\n <button\n mlvButton\n variant=\"transparent\"\n shape=\"square\"\n mlvDensity=\"tight\"\n type=\"button\"\n (click)=\"startEdit(row, i)\"\n [attr.aria-label]=\"_i18n().editRow\"\n >\n <svg lucidePencil mlvButtonIcon />\n </button>\n }\n</ng-template>\n\n<!--\n Shared inner content of a data cell (indent, expand button, edit/display template, raw value).\n Extracted so both the standard `#rowCellsTpl` `<td>` and the experimental cell-navigation grid\n `<td ngGridCell>` render identical content. Purely presentational — contains no aria grid\n directives — so it is safe to project via ngTemplateOutlet across the grid-cell boundary.\n Context: { $implicit: row, index: i, col, ci }.\n-->\n<ng-template #cellContentTpl let-row let-i=\"index\" let-col=\"col\" let-ci=\"ci\">\n <div class=\"mlv-data-table__cell-content\">\n @if (ci === 0 && getDepth(row) > 0) {\n <span\n class=\"mlv-data-table__indent\"\n [style.padding-left.rem]=\"getDepth(row) * 1.25\"\n aria-hidden=\"true\"\n ></span>\n } @if (ci === 0 && hasChildren(row)) {\n <button\n mlvButton\n variant=\"transparent\"\n shape=\"square\"\n mlvDensity=\"tight\"\n type=\"button\"\n class=\"mlv-data-table__expand-btn\"\n (click)=\"toggleExpand(row, $event)\"\n [attr.aria-expanded]=\"isRowExpanded(row)\"\n [attr.aria-label]=\"\n isRowExpanded(row) ? _i18n().collapseRow : _i18n().expandRow\n \"\n >\n <svg\n lucideChevronRight\n mlvButtonIcon\n class=\"mlv-data-table__expand-icon\"\n [class.mlv-data-table__expand-icon--open]=\"isRowExpanded(row)\"\n />\n </button>\n } @if (editable() && isEditing(i) && getEditTemplate(col.key); as editTpl) {\n <ng-container\n [ngTemplateOutlet]=\"editTpl\"\n [ngTemplateOutletContext]=\"getCellContext(row, i)\"\n />\n } @else if (getTemplate(col.key); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"getCellContext(row, i)\"\n />\n } @else {\n <!--\n Default cell renderer. `valueLabels` (or the `filterConfig.options` fallback)\n maps the raw value to a label; `tone` promotes the cell to a muted badge.\n -->\n @if (getCellTone(row, col); as tone) {\n <mlv-badge [tone]=\"tone\" muted\n >{{ getCellDisplayValue(row, col) }}</mlv-badge\n >\n } @else { {{ getCellDisplayValue(row, col) }} } }\n </div>\n</ng-template>\n\n<!-- Reusable pin button template. Rendered via ngTemplateOutlet from every header cell that supports pinning. -->\n<ng-template #pinButtonTpl let-col>\n @if (getPinnableSides(col); as sides) { @if (sides.length > 1) {\n <button\n class=\"mlv-data-table__pin-btn\"\n [class.mlv-data-table__pin-btn--active]=\"isColumnPinned(col)\"\n type=\"button\"\n [mlvPopupTrigger]=\"pinPopup\"\n #pinTrigger=\"mlvPopupTrigger\"\n (click)=\"$event.stopPropagation()\"\n [attr.aria-label]=\"\n isColumnPinned(col) ? _i18n().changePinSide : _i18n().pinColumn\n \"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"pinPopup.opened()\"\n [attr.aria-pressed]=\"isColumnPinned(col)\"\n >\n @if (isColumnPinned(col)) {\n <svg lucidePinOff />\n } @else {\n <svg lucidePin />\n }\n </button>\n <mlv-popup #pinPopup>\n <div *mlvPopupContent class=\"mlv-data-table__pin-popup\" role=\"menu\">\n @for (side of sides; track side) {\n <button\n type=\"button\"\n role=\"menuitemradio\"\n class=\"mlv-data-table__pin-popup-item\"\n [class.mlv-data-table__pin-popup-item--active]=\"\n getColumnPinSide(col) === side\n \"\n [attr.aria-checked]=\"getColumnPinSide(col) === side\"\n (click)=\"\n pinTo(col, side); pinTrigger.close(); $event.stopPropagation()\n \"\n >\n <svg lucidePin [size]=\"14\" />\n @if (side === 'left') {\n <span>Pin left</span>\n } @else {\n <span>Pin right</span>\n }\n </button>\n } @if (isColumnPinned(col)) {\n <button\n type=\"button\"\n role=\"menuitem\"\n class=\"mlv-data-table__pin-popup-item mlv-data-table__pin-popup-item--unpin\"\n (click)=\"unpin(col); pinTrigger.close(); $event.stopPropagation()\"\n >\n <svg lucidePinOff [size]=\"14\" />\n <span>{{ _i18n().unpin }}</span>\n </button>\n }\n </div>\n </mlv-popup>\n } @else {\n <button\n class=\"mlv-data-table__pin-btn\"\n [class.mlv-data-table__pin-btn--active]=\"isColumnPinned(col)\"\n type=\"button\"\n (click)=\"togglePin(col, sides[0]); $event.stopPropagation()\"\n [attr.aria-label]=\"\n isColumnPinned(col) ? _i18n().unpinColumn : _i18n().pinColumn\n \"\n [attr.aria-pressed]=\"isColumnPinned(col)\"\n >\n @if (isColumnPinned(col)) {\n <svg lucidePinOff />\n } @else {\n <svg lucidePin />\n }\n </button>\n } }\n</ng-template>\n"]}
@@ -0,0 +1,37 @@
1
+ import { Injectable, signal } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Tracks the user-toggled column hidden set for `mlv-data-table`.
5
+ * The component reads `isHidden(key)` while building `visibleColumns`
6
+ * and calls `toggle(key)` when the user clicks the column-visibility
7
+ * popup checkbox.
8
+ */
9
+ export class MlvDataTableColumnVisibilityService {
10
+ /** @private Set of currently-hidden column keys. */
11
+ _hiddenColumns = signal(new Set(), /* @ts-ignore */
12
+ ...(ngDevMode ? [{ debugName: "_hiddenColumns" }] : /* istanbul ignore next */ []));
13
+ /** Read-only signal exposing the hidden-set for `effect()` consumers. */
14
+ hiddenColumns = this._hiddenColumns.asReadonly();
15
+ /** Whether a column is currently hidden by the user. */
16
+ isHidden(key) {
17
+ return this._hiddenColumns().has(key);
18
+ }
19
+ /** Toggle visibility of a hideable column. */
20
+ toggle(key) {
21
+ const current = this._hiddenColumns();
22
+ const next = new Set(current);
23
+ if (next.has(key)) {
24
+ next.delete(key);
25
+ }
26
+ else {
27
+ next.add(key);
28
+ }
29
+ this._hiddenColumns.set(next);
30
+ }
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDataTableColumnVisibilityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
32
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDataTableColumnVisibilityService });
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDataTableColumnVisibilityService, decorators: [{
35
+ type: Injectable
36
+ }] });
37
+ //# sourceMappingURL=data-table-column-visibility.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-column-visibility.service.js","sourceRoot":"","sources":["../../../../../../../../libs/core/data-table/src/lib/data-table/services/data-table-column-visibility.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;;AAEnD;;;;;GAKG;AAEH,MAAM,OAAO,mCAAmC;IAC9C,oDAAoD;IACnC,cAAc,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE;uFAAC,CAAC;IAEjE,yEAAyE;IAChE,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;IAE1D,wDAAwD;IACxD,QAAQ,CAAC,GAAW;QAClB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,8CAA8C;IAC9C,MAAM,CAAC,GAAW;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;uGAtBU,mCAAmC;2GAAnC,mCAAmC;;2FAAnC,mCAAmC;kBAD/C,UAAU","sourcesContent":["import { Injectable, signal } from '@angular/core';\n\n/**\n * Tracks the user-toggled column hidden set for `mlv-data-table`.\n * The component reads `isHidden(key)` while building `visibleColumns`\n * and calls `toggle(key)` when the user clicks the column-visibility\n * popup checkbox.\n */\n@Injectable()\nexport class MlvDataTableColumnVisibilityService {\n /** @private Set of currently-hidden column keys. */\n private readonly _hiddenColumns = signal<Set<string>>(new Set());\n\n /** Read-only signal exposing the hidden-set for `effect()` consumers. */\n readonly hiddenColumns = this._hiddenColumns.asReadonly();\n\n /** Whether a column is currently hidden by the user. */\n isHidden(key: string): boolean {\n return this._hiddenColumns().has(key);\n }\n\n /** Toggle visibility of a hideable column. */\n toggle(key: string): void {\n const current = this._hiddenColumns();\n const next = new Set(current);\n if (next.has(key)) {\n next.delete(key);\n } else {\n next.add(key);\n }\n this._hiddenColumns.set(next);\n }\n}\n"]}
@@ -0,0 +1,63 @@
1
+ import { Injectable, signal } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Component-scoped editing state for `mlv-data-table`. Holds the per-row
5
+ * snapshot map used for rollback on cancel and tracks whether a given row
6
+ * index is currently in edit mode. The component delegates `startEdit` /
7
+ * `saveEdit` / `cancelEdit` to this service and emits the matching outputs
8
+ * itself.
9
+ *
10
+ * Provided per-component via `providers: [MlvDataTableEditingService]` so each
11
+ * `mlv-data-table` instance has its own isolated editing state.
12
+ */
13
+ export class MlvDataTableEditingService {
14
+ /** @private Map of row-index → original row snapshot (for rollback). */
15
+ _editingRows = signal(new Map(), /* @ts-ignore */
16
+ ...(ngDevMode ? [{ debugName: "_editingRows" }] : /* istanbul ignore next */ []));
17
+ /** Whether any row is currently being edited. */
18
+ isEditing(index) {
19
+ return this._editingRows().has(index);
20
+ }
21
+ /** Whether at least one row is currently being edited. */
22
+ hasActiveEdit() {
23
+ return this._editingRows().size > 0;
24
+ }
25
+ /**
26
+ * Begin editing the given row. Stores a shallow clone in the rollback map.
27
+ * Returns the cloned snapshot for the caller to emit on `rowEditStart`.
28
+ */
29
+ start(row, index) {
30
+ const snapshot = { ...row };
31
+ const map = new Map(this._editingRows());
32
+ map.set(index, snapshot);
33
+ this._editingRows.set(map);
34
+ return snapshot;
35
+ }
36
+ /**
37
+ * Confirm edits for the given row. Returns the original snapshot (or the
38
+ * row itself if no snapshot was stored) so the caller can include it on
39
+ * the `rowEditSave` payload.
40
+ */
41
+ save(row, index) {
42
+ const original = this._editingRows().get(index) ?? row;
43
+ const map = new Map(this._editingRows());
44
+ map.delete(index);
45
+ this._editingRows.set(map);
46
+ return original;
47
+ }
48
+ /**
49
+ * Cancel editing the given row. Drops the snapshot. The caller is
50
+ * responsible for restoring the row data if it wants rollback semantics.
51
+ */
52
+ cancel(index) {
53
+ const map = new Map(this._editingRows());
54
+ map.delete(index);
55
+ this._editingRows.set(map);
56
+ }
57
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDataTableEditingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
58
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDataTableEditingService });
59
+ }
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDataTableEditingService, decorators: [{
61
+ type: Injectable
62
+ }] });
63
+ //# sourceMappingURL=data-table-editing.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-editing.service.js","sourceRoot":"","sources":["../../../../../../../../libs/core/data-table/src/lib/data-table/services/data-table-editing.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;;AAEnD;;;;;;;;;GASG;AAEH,MAAM,OAAO,0BAA0B;IACrC,wEAAwE;IACvD,YAAY,GAAG,MAAM,CAAiB,IAAI,GAAG,EAAE;qFAAC,CAAC;IAElE,iDAAiD;IACjD,SAAS,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,0DAA0D;IAC1D,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAM,EAAE,KAAa;QACzB,MAAM,QAAQ,GAAG,EAAE,GAAG,GAAG,EAAO,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACzC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,GAAM,EAAE,KAAa;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACzC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAa;QAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACzC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;uGA/CU,0BAA0B;2GAA1B,0BAA0B;;2FAA1B,0BAA0B;kBADtC,UAAU","sourcesContent":["import { Injectable, signal } from '@angular/core';\n\n/**\n * Component-scoped editing state for `mlv-data-table`. Holds the per-row\n * snapshot map used for rollback on cancel and tracks whether a given row\n * index is currently in edit mode. The component delegates `startEdit` /\n * `saveEdit` / `cancelEdit` to this service and emits the matching outputs\n * itself.\n *\n * Provided per-component via `providers: [MlvDataTableEditingService]` so each\n * `mlv-data-table` instance has its own isolated editing state.\n */\n@Injectable()\nexport class MlvDataTableEditingService<T = Record<string, unknown>> {\n /** @private Map of row-index → original row snapshot (for rollback). */\n private readonly _editingRows = signal<Map<number, T>>(new Map());\n\n /** Whether any row is currently being edited. */\n isEditing(index: number): boolean {\n return this._editingRows().has(index);\n }\n\n /** Whether at least one row is currently being edited. */\n hasActiveEdit(): boolean {\n return this._editingRows().size > 0;\n }\n\n /**\n * Begin editing the given row. Stores a shallow clone in the rollback map.\n * Returns the cloned snapshot for the caller to emit on `rowEditStart`.\n */\n start(row: T, index: number): T {\n const snapshot = { ...row } as T;\n const map = new Map(this._editingRows());\n map.set(index, snapshot);\n this._editingRows.set(map);\n return snapshot;\n }\n\n /**\n * Confirm edits for the given row. Returns the original snapshot (or the\n * row itself if no snapshot was stored) so the caller can include it on\n * the `rowEditSave` payload.\n */\n save(row: T, index: number): T {\n const original = this._editingRows().get(index) ?? row;\n const map = new Map(this._editingRows());\n map.delete(index);\n this._editingRows.set(map);\n return original;\n }\n\n /**\n * Cancel editing the given row. Drops the snapshot. The caller is\n * responsible for restoring the row data if it wants rollback semantics.\n */\n cancel(index: number): void {\n const map = new Map(this._editingRows());\n map.delete(index);\n this._editingRows.set(map);\n }\n}\n"]}