@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,324 @@
1
+ import { ChangeDetectionStrategy, Component, computed, inject, input, model, output, signal, viewChild, ElementRef, ViewEncapsulation, } from '@angular/core';
2
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
3
+ import { MlvSignalFormControlBase } from '@malva-ui/core/form-utils';
4
+ import { mlvNextId } from '@malva-ui/cdk/utils';
5
+ import { MlvButton } from '@malva-ui/core/button';
6
+ import { MlvLoader } from '@malva-ui/core/loader';
7
+ import { LucideRefreshCw, LucideTrash2, LucideUpload } from '@lucide/angular';
8
+ import { MLV_FILE_UPLOAD_I18N, MlvI18nResolverService } from '@malva-ui/i18n';
9
+ import { MlvFileUploadItem } from '../file-upload-item/file-upload-item';
10
+ import * as i0 from "@angular/core";
11
+ /**
12
+ * File upload component providing a drag-and-drop zone, file validation, and
13
+ * signal, reactive, and template-driven forms integration. Produces an array
14
+ * of `MlvUploadedFile` values.
15
+ */
16
+ export class MlvFileUpload extends MlvSignalFormControlBase {
17
+ /** The uploaded-file list used by all Angular forms APIs. */
18
+ value = model([], /* @ts-ignore */
19
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
20
+ /** @protected Injected i18n translations for the file upload. */
21
+ _i18n = inject(MLV_FILE_UPLOAD_I18N);
22
+ /** @private ICU MessageFormat resolver for the parameterised rejection messages. */
23
+ _resolver = inject(MlvI18nResolverService);
24
+ /** Comma-separated list of accepted MIME types or file extensions (e.g. `"image/*,.pdf"`). */
25
+ accept = input('', /* @ts-ignore */
26
+ ...(ngDevMode ? [{ debugName: "accept" }] : /* istanbul ignore next */ []));
27
+ /**
28
+ * Maximum allowed file size in bytes. `0` means unlimited.
29
+ */
30
+ maxSize = input(0, /* @ts-ignore */
31
+ ...(ngDevMode ? [{ debugName: "maxSize" }] : /* istanbul ignore next */ []));
32
+ /** Whether to allow selecting multiple files. */
33
+ multiple = input(true, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
34
+ /** Primary heading text shown in the drop zone. */
35
+ title = input('Drag & drop files here', /* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
37
+ /** Secondary description text shown below the title. */
38
+ subtitle = input('', /* @ts-ignore */
39
+ ...(ngDevMode ? [{ debugName: "subtitle" }] : /* istanbul ignore next */ []));
40
+ /** Label text for the browse button. */
41
+ actionLabel = input('Browse files', /* @ts-ignore */
42
+ ...(ngDevMode ? [{ debugName: "actionLabel" }] : /* istanbul ignore next */ []));
43
+ /** When true, renders a compact single-row drop zone instead of the full zone. */
44
+ compact = input(false, { ...(ngDevMode ? { debugName: "compact" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
45
+ /**
46
+ * How the zone presents the current selection.
47
+ *
48
+ * `'list'` (the default) keeps today's behaviour: the prompt and browse
49
+ * button always show, and selected files are listed below the zone.
50
+ *
51
+ * `'cover'` fills the zone with the selected image and swaps the browse
52
+ * button for a floating replace/remove toolbar. It only takes effect when
53
+ * **all** of these hold, and silently falls back to `'list'` otherwise:
54
+ *
55
+ * 1. `multiple` is `false`,
56
+ * 2. exactly one file is selected, and
57
+ * 3. that file carries a `previewUrl`.
58
+ *
59
+ * `previewUrl` is generated automatically for any dropped/picked file whose
60
+ * MIME type starts with `image/`. For an edit-mode seed, write it yourself —
61
+ * it accepts a remote `https://…` or a `data:` URL just as happily as the
62
+ * generated `blob:` one.
63
+ */
64
+ previewMode = input('list', /* @ts-ignore */
65
+ ...(ngDevMode ? [{ debugName: "previewMode" }] : /* istanbul ignore next */ []));
66
+ /** Emits the current file list whenever files are added or removed. */
67
+ filesChange = output();
68
+ /** @private List of selected/uploaded files managed by the component. */
69
+ _files = computed(() => this.value() ?? [], /* @ts-ignore */
70
+ ...(ngDevMode ? [{ debugName: "_files" }] : /* istanbul ignore next */ []));
71
+ /** @private Validation errors from the last file selection or drop. */
72
+ _errors = signal([], /* @ts-ignore */
73
+ ...(ngDevMode ? [{ debugName: "_errors" }] : /* istanbul ignore next */ []));
74
+ /** @private Whether the user is currently dragging files over the drop zone. */
75
+ _isDragOver = signal(false, /* @ts-ignore */
76
+ ...(ngDevMode ? [{ debugName: "_isDragOver" }] : /* istanbul ignore next */ []));
77
+ /** @private Reference to the hidden file input element. */
78
+ _fileInput = viewChild('fileInput', /* @ts-ignore */
79
+ ...(ngDevMode ? [{ debugName: "_fileInput" }] : /* istanbul ignore next */ []));
80
+ /** @private Reference to the host element for dragleave boundary detection. */
81
+ _elementRef = inject((ElementRef));
82
+ /** @protected Computed list of files exposed to the template. */
83
+ _fileList = computed(() => this._files(), /* @ts-ignore */
84
+ ...(ngDevMode ? [{ debugName: "_fileList" }] : /* istanbul ignore next */ []));
85
+ // Cover preview ----------------------------------------------------------------
86
+ /**
87
+ * @protected The single file rendered as a full-zone cover, or `null` when
88
+ * the cover preconditions are not met (see `previewMode`) and the zone falls
89
+ * back to the normal prompt.
90
+ */
91
+ _coverFile = computed(() => {
92
+ if (this.previewMode() !== 'cover' || this.multiple())
93
+ return null;
94
+ const files = this._files();
95
+ if (files.length !== 1)
96
+ return null;
97
+ return files[0].previewUrl ? files[0] : null;
98
+ }, /* @ts-ignore */
99
+ ...(ngDevMode ? [{ debugName: "_coverFile" }] : /* istanbul ignore next */ []));
100
+ /** @protected Whether the zone currently renders the cover preview. */
101
+ _isCover = computed(() => this._coverFile() !== null, /* @ts-ignore */
102
+ ...(ngDevMode ? [{ debugName: "_isCover" }] : /* istanbul ignore next */ []));
103
+ /**
104
+ * @protected Whether the covered file is still uploading, which overlays a
105
+ * determinate progress bar on the image instead of falling back to list mode.
106
+ */
107
+ _coverUploading = computed(() => {
108
+ const file = this._coverFile();
109
+ return (file !== null && file.state === 'uploading' && (file.progress ?? 0) < 100);
110
+ }, /* @ts-ignore */
111
+ ...(ngDevMode ? [{ debugName: "_coverUploading" }] : /* istanbul ignore next */ []));
112
+ /**
113
+ * @protected Accessible name for the cover toolbar's remove button, with the
114
+ * covered file's name interpolated into the shared `removeFile` template.
115
+ */
116
+ _coverRemoveLabel = computed(() => {
117
+ const file = this._coverFile();
118
+ return file ? this._translate('removeFile', { name: file.name }) : '';
119
+ }, /* @ts-ignore */
120
+ ...(ngDevMode ? [{ debugName: "_coverRemoveLabel" }] : /* istanbul ignore next */ []));
121
+ // Forms value ------------------------------------------------------------------
122
+ /** Whether the control holds a clearable value — At least one file present. */
123
+ hasValue = computed(() => this._files().length > 0, /* @ts-ignore */
124
+ ...(ngDevMode ? [{ debugName: "hasValue" }] : /* istanbul ignore next */ []));
125
+ // Public API -------------------------------------------------------------------
126
+ /**
127
+ * Programmatically opens the native file picker dialog.
128
+ */
129
+ openFilePicker() {
130
+ if (this.computedDisabled())
131
+ return;
132
+ this._fileInput()?.nativeElement.click();
133
+ }
134
+ /**
135
+ * Handles changes from the hidden file input element.
136
+ * @param event - The native change event from the input.
137
+ */
138
+ onFileInputChange(event) {
139
+ const input = event.target;
140
+ if (input.files) {
141
+ this._validateAndAdd(input.files);
142
+ }
143
+ // Reset so the same file can be re-selected
144
+ input.value = '';
145
+ }
146
+ /**
147
+ * Removes a file by its id, revoking the preview URL if present.
148
+ * @param id - The id of the `MlvUploadedFile` to remove.
149
+ */
150
+ removeFile(id) {
151
+ const target = this._files().find((f) => f.id === id);
152
+ if (target?.previewUrl) {
153
+ URL.revokeObjectURL(target.previewUrl);
154
+ }
155
+ this.value.update((files) => (files ?? []).filter((file) => file.id !== id));
156
+ this._emitChange();
157
+ }
158
+ // Internal helpers -------------------------------------------------------------
159
+ /**
160
+ * @private Handles the dragover event to enable the drag-over state.
161
+ */
162
+ _onDragOver(event) {
163
+ event.preventDefault();
164
+ if (!this.computedDisabled()) {
165
+ this._isDragOver.set(true);
166
+ }
167
+ }
168
+ /**
169
+ * @private Handles the dragleave event to clear drag-over state when leaving the host.
170
+ */
171
+ _onDragLeave(event) {
172
+ if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {
173
+ this._isDragOver.set(false);
174
+ }
175
+ }
176
+ /**
177
+ * @private Handles the drop event, reads dropped files and validates them.
178
+ */
179
+ _onDrop(event) {
180
+ event.preventDefault();
181
+ this._isDragOver.set(false);
182
+ if (this.computedDisabled())
183
+ return;
184
+ const dt = event.dataTransfer;
185
+ if (dt?.files) {
186
+ this._validateAndAdd(dt.files);
187
+ }
188
+ }
189
+ /**
190
+ * @private Validates a FileList against accept/maxSize constraints and appends valid files.
191
+ */
192
+ _validateAndAdd(fileList) {
193
+ const newErrors = [];
194
+ const newFiles = [];
195
+ const acceptedTypes = this._parseAccept();
196
+ Array.from(fileList).forEach((file) => {
197
+ // Count check
198
+ if (!this.multiple() && this._files().length + newFiles.length >= 1) {
199
+ newErrors.push({
200
+ code: 'count',
201
+ message: this._i18n().errorSingleFile,
202
+ });
203
+ return;
204
+ }
205
+ // Type check
206
+ if (acceptedTypes.length > 0 &&
207
+ !this._isTypeAccepted(file, acceptedTypes)) {
208
+ newErrors.push({
209
+ code: 'type',
210
+ message: this._translate('errorFileType', { name: file.name }),
211
+ });
212
+ return;
213
+ }
214
+ // Size check
215
+ const maxBytes = this.maxSize();
216
+ if (maxBytes > 0 && file.size > maxBytes) {
217
+ const maxMb = (maxBytes / (1024 * 1024)).toFixed(1);
218
+ newErrors.push({
219
+ code: 'size',
220
+ message: this._translate('errorFileSize', {
221
+ name: file.name,
222
+ size: maxMb,
223
+ }),
224
+ });
225
+ return;
226
+ }
227
+ const isImage = file.type.startsWith('image/');
228
+ const uploadedFile = {
229
+ id: mlvNextId('mlv-file'),
230
+ file,
231
+ name: file.name,
232
+ size: file.size,
233
+ previewUrl: isImage ? URL.createObjectURL(file) : undefined,
234
+ state: 'pending',
235
+ progress: 0,
236
+ };
237
+ newFiles.push(uploadedFile);
238
+ });
239
+ this._errors.set(newErrors);
240
+ if (newFiles.length > 0) {
241
+ if (this.multiple()) {
242
+ this.value.update((previous) => [...(previous ?? []), ...newFiles]);
243
+ }
244
+ else {
245
+ // Replace previous file when multiple is false
246
+ const previous = this._files();
247
+ previous.forEach((f) => {
248
+ if (f.previewUrl)
249
+ URL.revokeObjectURL(f.previewUrl);
250
+ });
251
+ this.value.set(newFiles);
252
+ }
253
+ this._emitChange();
254
+ }
255
+ }
256
+ /**
257
+ * @private Resolves one of the component's ICU rejection templates with the
258
+ * offending file's details. Keeps every user-facing validation string in the
259
+ * language pack instead of hard-coded English.
260
+ */
261
+ _translate(key, params) {
262
+ return this._resolver.resolve(this._i18n(), key, params);
263
+ }
264
+ /**
265
+ * @private Parses the accept input into a list of accepted MIME prefixes and extensions.
266
+ */
267
+ _parseAccept() {
268
+ const raw = this.accept().trim();
269
+ if (!raw)
270
+ return [];
271
+ return raw.split(',').map((s) => s.trim().toLowerCase());
272
+ }
273
+ /**
274
+ * @private Checks whether a file matches the accepted type list.
275
+ */
276
+ _isTypeAccepted(file, accepted) {
277
+ return accepted.some((pattern) => {
278
+ if (pattern.startsWith('.')) {
279
+ return file.name.toLowerCase().endsWith(pattern);
280
+ }
281
+ if (pattern.endsWith('/*')) {
282
+ return file.type.startsWith(pattern.slice(0, -1));
283
+ }
284
+ return file.type === pattern;
285
+ });
286
+ }
287
+ /**
288
+ * @private Emits the current file list through the public change output.
289
+ */
290
+ _emitChange() {
291
+ this.filesChange.emit(this._files());
292
+ }
293
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFileUpload, deps: null, target: i0.ɵɵFactoryTarget.Component });
294
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvFileUpload, isStandalone: true, selector: "mlv-file-upload", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, maxSize: { classPropertyName: "maxSize", publicName: "maxSize", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, actionLabel: { classPropertyName: "actionLabel", publicName: "actionLabel", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, previewMode: { classPropertyName: "previewMode", publicName: "previewMode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", filesChange: "filesChange" }, host: { listeners: { "dragover": "_onDragOver($event)", "dragleave": "_onDragLeave($event)", "drop": "_onDrop($event)", "focusout": "_markTouched()" }, properties: { "attr.title": "null", "class.mlv-file-upload--cover": "_isCover()", "class.mlv-file-upload--drag-over": "_isDragOver()", "class.mlv-file-upload--disabled": "computedDisabled()", "class.mlv-file-upload--error": "_errors().length > 0", "class.mlv-file-upload--multiple": "multiple()", "class.mlv-file-upload--has-files": "_files().length > 0", "class.mlv-file-upload--compact": "compact()" }, classAttribute: "mlv-file-upload" }, viewQueries: [{ propertyName: "_fileInput", first: true, predicate: ["fileInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<input\n #fileInput\n class=\"mlv-file-upload__input\"\n type=\"file\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"computedDisabled()\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n (change)=\"onFileInputChange($event)\"\n/>\n\n<!-- Drop zone: visually interactive drag target.\n The inner <button type=\"button\"> is the sole keyboard/AT entry point. -->\n<div class=\"mlv-file-upload__zone\">\n @if (_coverFile(); as cover) {\n <!-- Cover preview: the image fills the zone, which stays the drop target.\n Plain <img>, not NgOptimizedImage \u2014 the source is a runtime blob:/data:/\n remote URL of unknown intrinsic size. -->\n <img\n class=\"mlv-file-upload__cover-image\"\n [src]=\"cover.previewUrl\"\n [alt]=\"cover.name\"\n />\n\n @if (_coverUploading()) {\n <mlv-loader\n class=\"mlv-file-upload__cover-progress\"\n variant=\"bar\"\n [value]=\"cover.progress ?? 0\"\n />\n } } @else {\n <span class=\"mlv-file-upload__zone-icon\" aria-hidden=\"true\">\n <svg lucideUpload [size]=\"compact() ? 18 : 28\" />\n </span>\n\n <!-- Title is always in the DOM to serve as aria-describedby anchor;\n hidden visually in compact mode via CSS. -->\n <span\n [id]=\"id() + '-title'\"\n class=\"mlv-file-upload__zone-title\"\n [class.mlv-file-upload__zone-title--hidden]=\"compact()\"\n >{{ title() }}</span\n >\n\n @if (subtitle() && !compact()) {\n <span [id]=\"id() + '-subtitle'\" class=\"mlv-file-upload__zone-subtitle\"\n >{{ subtitle() }}</span\n >\n } }\n\n <!-- One actions container, two presentations. It is the inline action row in\n list mode and the floating toolbar over the cover image. The two\n <ng-content> slots MUST stay outside the @if branches: Angular assigns a\n projected node to the first slot whose selector matches, so duplicating\n a selector across branches leaves the later copy permanently empty.\n DOM order equals visual order, and `position` is read as a static\n attribute here, never as a binding. -->\n <span\n [class.mlv-file-upload__zone-action]=\"!_isCover()\"\n [class.mlv-file-upload__toolbar]=\"_isCover()\"\n >\n <ng-content select=\"[mlvFileUploadAction]:not([position=end])\" />\n\n @if (_isCover()) {\n <button\n mlvButton\n type=\"button\"\n shape=\"square\"\n variant=\"transparent\"\n [disabled]=\"computedDisabled()\"\n [attr.aria-label]=\"_i18n().replaceFile\"\n (click)=\"$event.stopPropagation(); openFilePicker()\"\n >\n <svg lucideRefreshCw [size]=\"16\" />\n </button>\n } @else {\n <button\n mlvButton\n type=\"button\"\n variant=\"secondary\"\n [disabled]=\"computedDisabled()\"\n [attr.aria-describedby]=\"subtitle() && !compact() ? id() + '-title ' + id() + '-subtitle' : id() + '-title'\"\n (click)=\"$event.stopPropagation(); openFilePicker()\"\n >\n {{ actionLabel() }}\n </button>\n }\n\n <ng-content select=\"[mlvFileUploadAction][position=end]\" />\n\n @if (_coverFile(); as cover) {\n <button\n mlvButton\n type=\"button\"\n shape=\"square\"\n variant=\"transparent\"\n [disabled]=\"computedDisabled()\"\n [attr.aria-label]=\"_coverRemoveLabel()\"\n (click)=\"$event.stopPropagation(); removeFile(cover.id)\"\n >\n <svg lucideTrash2 [size]=\"16\" />\n </button>\n }\n </span>\n</div>\n\n@if (_errors().length > 0) {\n<ul class=\"mlv-file-upload__errors\" role=\"alert\" aria-live=\"assertive\">\n @for (err of _errors(); track err.code + err.message) {\n <li class=\"mlv-file-upload__error-item\">{{ err.message }}</li>\n }\n</ul>\n}\n<!-- In cover state the single file's row would only repeat the image and its\n remove control, both of which the cover toolbar already provides. -->\n@if (_fileList().length > 0 && !_isCover()) {\n<ul\n class=\"mlv-file-upload__list\"\n [attr.aria-label]=\"_i18n().selectedFiles\"\n aria-live=\"polite\"\n>\n @for (file of _fileList(); track file.id) {\n <li>\n <mlv-file-upload-item\n class=\"mlv-file-upload-item--entering\"\n [file]=\"file\"\n (remove)=\"removeFile(file.id)\"\n />\n </li>\n }\n</ul>\n}\n", styles: [".mlv-file-upload{display:flex;flex-direction:column;gap:.75rem;font-family:var(--mlv-typography-family-text)}.mlv-file-upload__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.mlv-file-upload__zone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:2rem 1.5rem;border:var(--mlv-stroke-width-medium) dashed var(--mlv-border-normal);border-radius:var(--mlv-radius-l);background-color:var(--mlv-background-neutral-1);cursor:pointer;text-align:center;transition:border-color var(--mlv-duration-normal) var(--mlv-ease-out),background-color var(--mlv-duration-normal) var(--mlv-ease-out);outline:none}.mlv-file-upload__zone:hover{border-color:var(--mlv-border-focus);background-color:var(--mlv-background-neutral-2)}.mlv-file-upload__zone:focus-visible{outline:var(--mlv-stroke-width) solid var(--mlv-border-focus);outline-offset:.125rem}.mlv-file-upload__zone-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--mlv-text-secondary);margin-bottom:.25rem}.mlv-file-upload__zone-title{font-size:var(--mlv-font-size-m);font-weight:600;color:var(--mlv-text-primary)}.mlv-file-upload__zone-title--hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.mlv-file-upload__zone-subtitle{font-size:var(--mlv-typography-ui-s-size);color:var(--mlv-text-secondary)}.mlv-file-upload__zone-action{display:inline-flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:var(--mlv-spacing-2);margin-top:.25rem}.mlv-file-upload__action{flex:none}.mlv-file-upload__cover-image{position:absolute;inset:0;inline-size:100%;block-size:100%;object-fit:cover;border-radius:inherit;pointer-events:none}.mlv-file-upload__cover-progress{position:absolute;inset-inline:var(--mlv-spacing-3);inset-block-start:var(--mlv-spacing-3);pointer-events:none}.mlv-file-upload__toolbar{position:absolute;inset-block-end:var(--mlv-spacing-3);inset-inline-start:50%;transform:translate(-50%);display:inline-flex;align-items:center;flex-wrap:wrap;justify-content:center;gap:var(--mlv-spacing-1);padding:var(--mlv-spacing-1);border-radius:var(--mlv-radius-l);background-color:var(--mlv-background-raised);box-shadow:var(--mlv-shadow-floating);opacity:0;pointer-events:none;transition:opacity var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-file-upload__errors{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.25rem}.mlv-file-upload__error-item{font-size:var(--mlv-typography-ui-s-size);color:var(--mlv-text-negative);padding:.375rem .75rem;border-radius:var(--mlv-radius-s);background-color:var(--mlv-background-danger-1-pale)}.mlv-file-upload__list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}.mlv-file-upload--drag-over .mlv-file-upload__zone{border-color:var(--mlv-border-focus);background-color:var(--mlv-background-neutral-2)}.mlv-file-upload--disabled{pointer-events:none;opacity:var(--mlv-disabled-opacity)}.mlv-file-upload--disabled .mlv-file-upload__zone{cursor:not-allowed}.mlv-file-upload--error .mlv-file-upload__zone{border-color:var(--mlv-text-negative)}.mlv-file-upload--cover{--mlv-file-upload-cover-min-height: 12rem}.mlv-file-upload--cover .mlv-file-upload__zone{position:relative;flex:1 1 auto;min-block-size:var(--mlv-file-upload-cover-min-height);padding:0;overflow:hidden}.mlv-file-upload--cover .mlv-file-upload__zone:hover .mlv-file-upload__toolbar,.mlv-file-upload--cover .mlv-file-upload__zone:focus-within .mlv-file-upload__toolbar{opacity:1;pointer-events:auto}@media(hover:none){.mlv-file-upload--cover .mlv-file-upload__toolbar{opacity:1;pointer-events:auto}}.mlv-file-upload--compact .mlv-file-upload__zone{flex-direction:row;padding:.75rem 1rem;gap:.75rem;text-align:left}.mlv-file-upload--compact .mlv-file-upload__zone-icon{margin-bottom:0}.mlv-file-upload--compact .mlv-file-upload__zone-action{margin-top:0}@media(prefers-reduced-motion:reduce){.mlv-file-upload,.mlv-file-upload *,.mlv-file-upload:before,.mlv-file-upload:after,[class^=mlv-file-upload__],[class*=\" mlv-file-upload__\"],[class^=mlv-file-upload--],[class*=\" mlv-file-upload--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}\n"], dependencies: [{ kind: "component", type: MlvButton, selector: "button[mlvButton], a[mlvButton]", inputs: ["variant", "shape", "disabled", "loading"] }, { kind: "component", type: MlvFileUploadItem, selector: "mlv-file-upload-item", inputs: ["file"], outputs: ["remove"] }, { kind: "component", type: MlvLoader, selector: "mlv-loader", inputs: ["variant", "tone", "value", "max", "indeterminate", "size", "strokeWidth", "ariaLabel", "showHint", "color", "trackColor", "glow"] }, { kind: "component", type: LucideUpload, selector: "svg[lucideUpload]" }, { kind: "component", type: LucideRefreshCw, selector: "svg[lucideRefreshCw]" }, { kind: "component", type: LucideTrash2, selector: "svg[lucideTrash2]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
295
+ }
296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFileUpload, decorators: [{
297
+ type: Component,
298
+ args: [{ selector: 'mlv-file-upload', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
299
+ MlvButton,
300
+ MlvFileUploadItem,
301
+ MlvLoader,
302
+ LucideUpload,
303
+ LucideRefreshCw,
304
+ LucideTrash2,
305
+ ], host: {
306
+ class: 'mlv-file-upload',
307
+ // `title` is the zone's heading, not a tooltip. Written as a static
308
+ // attribute (`title="Image"`) it also lands in the DOM, which gives the
309
+ // whole zone a native browser tooltip repeating the heading — so strip it.
310
+ '[attr.title]': 'null',
311
+ '[class.mlv-file-upload--cover]': '_isCover()',
312
+ '[class.mlv-file-upload--drag-over]': '_isDragOver()',
313
+ '[class.mlv-file-upload--disabled]': 'computedDisabled()',
314
+ '[class.mlv-file-upload--error]': '_errors().length > 0',
315
+ '[class.mlv-file-upload--multiple]': 'multiple()',
316
+ '[class.mlv-file-upload--has-files]': '_files().length > 0',
317
+ '[class.mlv-file-upload--compact]': 'compact()',
318
+ '(dragover)': '_onDragOver($event)',
319
+ '(dragleave)': '_onDragLeave($event)',
320
+ '(drop)': '_onDrop($event)',
321
+ '(focusout)': '_markTouched()',
322
+ }, template: "<input\n #fileInput\n class=\"mlv-file-upload__input\"\n type=\"file\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"computedDisabled()\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n (change)=\"onFileInputChange($event)\"\n/>\n\n<!-- Drop zone: visually interactive drag target.\n The inner <button type=\"button\"> is the sole keyboard/AT entry point. -->\n<div class=\"mlv-file-upload__zone\">\n @if (_coverFile(); as cover) {\n <!-- Cover preview: the image fills the zone, which stays the drop target.\n Plain <img>, not NgOptimizedImage \u2014 the source is a runtime blob:/data:/\n remote URL of unknown intrinsic size. -->\n <img\n class=\"mlv-file-upload__cover-image\"\n [src]=\"cover.previewUrl\"\n [alt]=\"cover.name\"\n />\n\n @if (_coverUploading()) {\n <mlv-loader\n class=\"mlv-file-upload__cover-progress\"\n variant=\"bar\"\n [value]=\"cover.progress ?? 0\"\n />\n } } @else {\n <span class=\"mlv-file-upload__zone-icon\" aria-hidden=\"true\">\n <svg lucideUpload [size]=\"compact() ? 18 : 28\" />\n </span>\n\n <!-- Title is always in the DOM to serve as aria-describedby anchor;\n hidden visually in compact mode via CSS. -->\n <span\n [id]=\"id() + '-title'\"\n class=\"mlv-file-upload__zone-title\"\n [class.mlv-file-upload__zone-title--hidden]=\"compact()\"\n >{{ title() }}</span\n >\n\n @if (subtitle() && !compact()) {\n <span [id]=\"id() + '-subtitle'\" class=\"mlv-file-upload__zone-subtitle\"\n >{{ subtitle() }}</span\n >\n } }\n\n <!-- One actions container, two presentations. It is the inline action row in\n list mode and the floating toolbar over the cover image. The two\n <ng-content> slots MUST stay outside the @if branches: Angular assigns a\n projected node to the first slot whose selector matches, so duplicating\n a selector across branches leaves the later copy permanently empty.\n DOM order equals visual order, and `position` is read as a static\n attribute here, never as a binding. -->\n <span\n [class.mlv-file-upload__zone-action]=\"!_isCover()\"\n [class.mlv-file-upload__toolbar]=\"_isCover()\"\n >\n <ng-content select=\"[mlvFileUploadAction]:not([position=end])\" />\n\n @if (_isCover()) {\n <button\n mlvButton\n type=\"button\"\n shape=\"square\"\n variant=\"transparent\"\n [disabled]=\"computedDisabled()\"\n [attr.aria-label]=\"_i18n().replaceFile\"\n (click)=\"$event.stopPropagation(); openFilePicker()\"\n >\n <svg lucideRefreshCw [size]=\"16\" />\n </button>\n } @else {\n <button\n mlvButton\n type=\"button\"\n variant=\"secondary\"\n [disabled]=\"computedDisabled()\"\n [attr.aria-describedby]=\"subtitle() && !compact() ? id() + '-title ' + id() + '-subtitle' : id() + '-title'\"\n (click)=\"$event.stopPropagation(); openFilePicker()\"\n >\n {{ actionLabel() }}\n </button>\n }\n\n <ng-content select=\"[mlvFileUploadAction][position=end]\" />\n\n @if (_coverFile(); as cover) {\n <button\n mlvButton\n type=\"button\"\n shape=\"square\"\n variant=\"transparent\"\n [disabled]=\"computedDisabled()\"\n [attr.aria-label]=\"_coverRemoveLabel()\"\n (click)=\"$event.stopPropagation(); removeFile(cover.id)\"\n >\n <svg lucideTrash2 [size]=\"16\" />\n </button>\n }\n </span>\n</div>\n\n@if (_errors().length > 0) {\n<ul class=\"mlv-file-upload__errors\" role=\"alert\" aria-live=\"assertive\">\n @for (err of _errors(); track err.code + err.message) {\n <li class=\"mlv-file-upload__error-item\">{{ err.message }}</li>\n }\n</ul>\n}\n<!-- In cover state the single file's row would only repeat the image and its\n remove control, both of which the cover toolbar already provides. -->\n@if (_fileList().length > 0 && !_isCover()) {\n<ul\n class=\"mlv-file-upload__list\"\n [attr.aria-label]=\"_i18n().selectedFiles\"\n aria-live=\"polite\"\n>\n @for (file of _fileList(); track file.id) {\n <li>\n <mlv-file-upload-item\n class=\"mlv-file-upload-item--entering\"\n [file]=\"file\"\n (remove)=\"removeFile(file.id)\"\n />\n </li>\n }\n</ul>\n}\n", styles: [".mlv-file-upload{display:flex;flex-direction:column;gap:.75rem;font-family:var(--mlv-typography-family-text)}.mlv-file-upload__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.mlv-file-upload__zone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:2rem 1.5rem;border:var(--mlv-stroke-width-medium) dashed var(--mlv-border-normal);border-radius:var(--mlv-radius-l);background-color:var(--mlv-background-neutral-1);cursor:pointer;text-align:center;transition:border-color var(--mlv-duration-normal) var(--mlv-ease-out),background-color var(--mlv-duration-normal) var(--mlv-ease-out);outline:none}.mlv-file-upload__zone:hover{border-color:var(--mlv-border-focus);background-color:var(--mlv-background-neutral-2)}.mlv-file-upload__zone:focus-visible{outline:var(--mlv-stroke-width) solid var(--mlv-border-focus);outline-offset:.125rem}.mlv-file-upload__zone-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--mlv-text-secondary);margin-bottom:.25rem}.mlv-file-upload__zone-title{font-size:var(--mlv-font-size-m);font-weight:600;color:var(--mlv-text-primary)}.mlv-file-upload__zone-title--hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.mlv-file-upload__zone-subtitle{font-size:var(--mlv-typography-ui-s-size);color:var(--mlv-text-secondary)}.mlv-file-upload__zone-action{display:inline-flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:var(--mlv-spacing-2);margin-top:.25rem}.mlv-file-upload__action{flex:none}.mlv-file-upload__cover-image{position:absolute;inset:0;inline-size:100%;block-size:100%;object-fit:cover;border-radius:inherit;pointer-events:none}.mlv-file-upload__cover-progress{position:absolute;inset-inline:var(--mlv-spacing-3);inset-block-start:var(--mlv-spacing-3);pointer-events:none}.mlv-file-upload__toolbar{position:absolute;inset-block-end:var(--mlv-spacing-3);inset-inline-start:50%;transform:translate(-50%);display:inline-flex;align-items:center;flex-wrap:wrap;justify-content:center;gap:var(--mlv-spacing-1);padding:var(--mlv-spacing-1);border-radius:var(--mlv-radius-l);background-color:var(--mlv-background-raised);box-shadow:var(--mlv-shadow-floating);opacity:0;pointer-events:none;transition:opacity var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-file-upload__errors{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.25rem}.mlv-file-upload__error-item{font-size:var(--mlv-typography-ui-s-size);color:var(--mlv-text-negative);padding:.375rem .75rem;border-radius:var(--mlv-radius-s);background-color:var(--mlv-background-danger-1-pale)}.mlv-file-upload__list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}.mlv-file-upload--drag-over .mlv-file-upload__zone{border-color:var(--mlv-border-focus);background-color:var(--mlv-background-neutral-2)}.mlv-file-upload--disabled{pointer-events:none;opacity:var(--mlv-disabled-opacity)}.mlv-file-upload--disabled .mlv-file-upload__zone{cursor:not-allowed}.mlv-file-upload--error .mlv-file-upload__zone{border-color:var(--mlv-text-negative)}.mlv-file-upload--cover{--mlv-file-upload-cover-min-height: 12rem}.mlv-file-upload--cover .mlv-file-upload__zone{position:relative;flex:1 1 auto;min-block-size:var(--mlv-file-upload-cover-min-height);padding:0;overflow:hidden}.mlv-file-upload--cover .mlv-file-upload__zone:hover .mlv-file-upload__toolbar,.mlv-file-upload--cover .mlv-file-upload__zone:focus-within .mlv-file-upload__toolbar{opacity:1;pointer-events:auto}@media(hover:none){.mlv-file-upload--cover .mlv-file-upload__toolbar{opacity:1;pointer-events:auto}}.mlv-file-upload--compact .mlv-file-upload__zone{flex-direction:row;padding:.75rem 1rem;gap:.75rem;text-align:left}.mlv-file-upload--compact .mlv-file-upload__zone-icon{margin-bottom:0}.mlv-file-upload--compact .mlv-file-upload__zone-action{margin-top:0}@media(prefers-reduced-motion:reduce){.mlv-file-upload,.mlv-file-upload *,.mlv-file-upload:before,.mlv-file-upload:after,[class^=mlv-file-upload__],[class*=\" mlv-file-upload__\"],[class^=mlv-file-upload--],[class*=\" mlv-file-upload--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}\n"] }]
323
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], maxSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxSize", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], actionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionLabel", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], previewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "previewMode", required: false }] }], filesChange: [{ type: i0.Output, args: ["filesChange"] }], _fileInput: [{ type: i0.ViewChild, args: ['fileInput', { isSignal: true }] }] } });
324
+ //# sourceMappingURL=file-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload.js","sourceRoot":"","sources":["../../../../../../../libs/core/file-upload/src/lib/file-upload/file-upload.ts","../../../../../../../libs/core/file-upload/src/lib/file-upload/file-upload.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n ElementRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { MlvSignalFormControlBase } from '@malva-ui/core/form-utils';\nimport { mlvNextId } from '@malva-ui/cdk/utils';\nimport { MlvButton } from '@malva-ui/core/button';\nimport { MlvLoader } from '@malva-ui/core/loader';\nimport { LucideRefreshCw, LucideTrash2, LucideUpload } from '@lucide/angular';\nimport type { MlvFileUploadI18n } from '@malva-ui/i18n';\nimport { MLV_FILE_UPLOAD_I18N, MlvI18nResolverService } from '@malva-ui/i18n';\nimport { MlvFileUploadItem } from '../file-upload-item/file-upload-item';\nimport type {\n MlvFileUploadPreviewMode,\n MlvFileValidationError,\n MlvUploadedFile,\n} from './file-upload.types';\n\n/**\n * File upload component providing a drag-and-drop zone, file validation, and\n * signal, reactive, and template-driven forms integration. Produces an array\n * of `MlvUploadedFile` values.\n */\n@Component({\n selector: 'mlv-file-upload',\n templateUrl: './file-upload.html',\n styleUrl: './file-upload.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MlvButton,\n MlvFileUploadItem,\n MlvLoader,\n LucideUpload,\n LucideRefreshCw,\n LucideTrash2,\n ],\n host: {\n class: 'mlv-file-upload',\n // `title` is the zone's heading, not a tooltip. Written as a static\n // attribute (`title=\"Image\"`) it also lands in the DOM, which gives the\n // whole zone a native browser tooltip repeating the heading — so strip it.\n '[attr.title]': 'null',\n '[class.mlv-file-upload--cover]': '_isCover()',\n '[class.mlv-file-upload--drag-over]': '_isDragOver()',\n '[class.mlv-file-upload--disabled]': 'computedDisabled()',\n '[class.mlv-file-upload--error]': '_errors().length > 0',\n '[class.mlv-file-upload--multiple]': 'multiple()',\n '[class.mlv-file-upload--has-files]': '_files().length > 0',\n '[class.mlv-file-upload--compact]': 'compact()',\n '(dragover)': '_onDragOver($event)',\n '(dragleave)': '_onDragLeave($event)',\n '(drop)': '_onDrop($event)',\n '(focusout)': '_markTouched()',\n },\n})\nexport class MlvFileUpload extends MlvSignalFormControlBase<MlvUploadedFile[]> {\n /** The uploaded-file list used by all Angular forms APIs. */\n readonly value = model<MlvUploadedFile[]>([]);\n /** @protected Injected i18n translations for the file upload. */\n protected readonly _i18n = inject(MLV_FILE_UPLOAD_I18N);\n\n /** @private ICU MessageFormat resolver for the parameterised rejection messages. */\n private readonly _resolver = inject(MlvI18nResolverService);\n\n /** Comma-separated list of accepted MIME types or file extensions (e.g. `\"image/*,.pdf\"`). */\n readonly accept = input<string>('');\n\n /**\n * Maximum allowed file size in bytes. `0` means unlimited.\n */\n readonly maxSize = input<number>(0);\n\n /** Whether to allow selecting multiple files. */\n readonly multiple = input<boolean, BooleanInput>(true, {\n transform: coerceBooleanProperty,\n });\n\n /** Primary heading text shown in the drop zone. */\n readonly title = input<string>('Drag & drop files here');\n\n /** Secondary description text shown below the title. */\n readonly subtitle = input<string>('');\n\n /** Label text for the browse button. */\n readonly actionLabel = input<string>('Browse files');\n\n /** When true, renders a compact single-row drop zone instead of the full zone. */\n readonly compact = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * How the zone presents the current selection.\n *\n * `'list'` (the default) keeps today's behaviour: the prompt and browse\n * button always show, and selected files are listed below the zone.\n *\n * `'cover'` fills the zone with the selected image and swaps the browse\n * button for a floating replace/remove toolbar. It only takes effect when\n * **all** of these hold, and silently falls back to `'list'` otherwise:\n *\n * 1. `multiple` is `false`,\n * 2. exactly one file is selected, and\n * 3. that file carries a `previewUrl`.\n *\n * `previewUrl` is generated automatically for any dropped/picked file whose\n * MIME type starts with `image/`. For an edit-mode seed, write it yourself —\n * it accepts a remote `https://…` or a `data:` URL just as happily as the\n * generated `blob:` one.\n */\n readonly previewMode = input<MlvFileUploadPreviewMode>('list');\n\n /** Emits the current file list whenever files are added or removed. */\n readonly filesChange = output<MlvUploadedFile[]>();\n\n /** @private List of selected/uploaded files managed by the component. */\n protected readonly _files = computed(() => this.value() ?? []);\n\n /** @private Validation errors from the last file selection or drop. */\n protected readonly _errors = signal<MlvFileValidationError[]>([]);\n\n /** @private Whether the user is currently dragging files over the drop zone. */\n protected readonly _isDragOver = signal(false);\n\n /** @private Reference to the hidden file input element. */\n private readonly _fileInput =\n viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n /** @private Reference to the host element for dragleave boundary detection. */\n private readonly _elementRef = inject(ElementRef<HTMLElement>);\n\n /** @protected Computed list of files exposed to the template. */\n protected readonly _fileList = computed(() => this._files());\n\n // Cover preview ----------------------------------------------------------------\n\n /**\n * @protected The single file rendered as a full-zone cover, or `null` when\n * the cover preconditions are not met (see `previewMode`) and the zone falls\n * back to the normal prompt.\n */\n protected readonly _coverFile = computed<MlvUploadedFile | null>(() => {\n if (this.previewMode() !== 'cover' || this.multiple()) return null;\n const files = this._files();\n if (files.length !== 1) return null;\n return files[0].previewUrl ? files[0] : null;\n });\n\n /** @protected Whether the zone currently renders the cover preview. */\n protected readonly _isCover = computed(() => this._coverFile() !== null);\n\n /**\n * @protected Whether the covered file is still uploading, which overlays a\n * determinate progress bar on the image instead of falling back to list mode.\n */\n protected readonly _coverUploading = computed(() => {\n const file = this._coverFile();\n return (\n file !== null && file.state === 'uploading' && (file.progress ?? 0) < 100\n );\n });\n\n /**\n * @protected Accessible name for the cover toolbar's remove button, with the\n * covered file's name interpolated into the shared `removeFile` template.\n */\n protected readonly _coverRemoveLabel = computed(() => {\n const file = this._coverFile();\n return file ? this._translate('removeFile', { name: file.name }) : '';\n });\n\n // Forms value ------------------------------------------------------------------\n\n /** Whether the control holds a clearable value — At least one file present. */\n readonly hasValue = computed(() => this._files().length > 0);\n\n // Public API -------------------------------------------------------------------\n\n /**\n * Programmatically opens the native file picker dialog.\n */\n openFilePicker(): void {\n if (this.computedDisabled()) return;\n this._fileInput()?.nativeElement.click();\n }\n\n /**\n * Handles changes from the hidden file input element.\n * @param event - The native change event from the input.\n */\n onFileInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files) {\n this._validateAndAdd(input.files);\n }\n // Reset so the same file can be re-selected\n input.value = '';\n }\n\n /**\n * Removes a file by its id, revoking the preview URL if present.\n * @param id - The id of the `MlvUploadedFile` to remove.\n */\n removeFile(id: string): void {\n const target = this._files().find((f) => f.id === id);\n if (target?.previewUrl) {\n URL.revokeObjectURL(target.previewUrl);\n }\n this.value.update((files) =>\n (files ?? []).filter((file) => file.id !== id),\n );\n this._emitChange();\n }\n\n // Internal helpers -------------------------------------------------------------\n\n /**\n * @private Handles the dragover event to enable the drag-over state.\n */\n protected _onDragOver(event: DragEvent): void {\n event.preventDefault();\n if (!this.computedDisabled()) {\n this._isDragOver.set(true);\n }\n }\n\n /**\n * @private Handles the dragleave event to clear drag-over state when leaving the host.\n */\n protected _onDragLeave(event: DragEvent): void {\n if (!this._elementRef.nativeElement.contains(event.relatedTarget as Node)) {\n this._isDragOver.set(false);\n }\n }\n\n /**\n * @private Handles the drop event, reads dropped files and validates them.\n */\n protected _onDrop(event: DragEvent): void {\n event.preventDefault();\n this._isDragOver.set(false);\n if (this.computedDisabled()) return;\n const dt = event.dataTransfer;\n if (dt?.files) {\n this._validateAndAdd(dt.files);\n }\n }\n\n /**\n * @private Validates a FileList against accept/maxSize constraints and appends valid files.\n */\n private _validateAndAdd(fileList: FileList): void {\n const newErrors: MlvFileValidationError[] = [];\n const newFiles: MlvUploadedFile[] = [];\n const acceptedTypes = this._parseAccept();\n\n Array.from(fileList).forEach((file) => {\n // Count check\n if (!this.multiple() && this._files().length + newFiles.length >= 1) {\n newErrors.push({\n code: 'count',\n message: this._i18n().errorSingleFile,\n });\n return;\n }\n\n // Type check\n if (\n acceptedTypes.length > 0 &&\n !this._isTypeAccepted(file, acceptedTypes)\n ) {\n newErrors.push({\n code: 'type',\n message: this._translate('errorFileType', { name: file.name }),\n });\n return;\n }\n\n // Size check\n const maxBytes = this.maxSize();\n if (maxBytes > 0 && file.size > maxBytes) {\n const maxMb = (maxBytes / (1024 * 1024)).toFixed(1);\n newErrors.push({\n code: 'size',\n message: this._translate('errorFileSize', {\n name: file.name,\n size: maxMb,\n }),\n });\n return;\n }\n\n const isImage = file.type.startsWith('image/');\n const uploadedFile: MlvUploadedFile = {\n id: mlvNextId('mlv-file'),\n file,\n name: file.name,\n size: file.size,\n previewUrl: isImage ? URL.createObjectURL(file) : undefined,\n state: 'pending',\n progress: 0,\n };\n newFiles.push(uploadedFile);\n });\n\n this._errors.set(newErrors);\n\n if (newFiles.length > 0) {\n if (this.multiple()) {\n this.value.update((previous) => [...(previous ?? []), ...newFiles]);\n } else {\n // Replace previous file when multiple is false\n const previous = this._files();\n previous.forEach((f) => {\n if (f.previewUrl) URL.revokeObjectURL(f.previewUrl);\n });\n this.value.set(newFiles);\n }\n this._emitChange();\n }\n }\n\n /**\n * @private Resolves one of the component's ICU rejection templates with the\n * offending file's details. Keeps every user-facing validation string in the\n * language pack instead of hard-coded English.\n */\n private _translate(\n key: keyof MlvFileUploadI18n,\n params: Record<string, string>,\n ): string {\n return this._resolver.resolve(\n this._i18n() as unknown as Record<string, string>,\n key,\n params,\n );\n }\n\n /**\n * @private Parses the accept input into a list of accepted MIME prefixes and extensions.\n */\n private _parseAccept(): string[] {\n const raw = this.accept().trim();\n if (!raw) return [];\n return raw.split(',').map((s) => s.trim().toLowerCase());\n }\n\n /**\n * @private Checks whether a file matches the accepted type list.\n */\n private _isTypeAccepted(file: File, accepted: string[]): boolean {\n return accepted.some((pattern) => {\n if (pattern.startsWith('.')) {\n return file.name.toLowerCase().endsWith(pattern);\n }\n if (pattern.endsWith('/*')) {\n return file.type.startsWith(pattern.slice(0, -1));\n }\n return file.type === pattern;\n });\n }\n\n /**\n * @private Emits the current file list through the public change output.\n */\n private _emitChange(): void {\n this.filesChange.emit(this._files());\n }\n}\n","<input\n #fileInput\n class=\"mlv-file-upload__input\"\n type=\"file\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"computedDisabled()\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n (change)=\"onFileInputChange($event)\"\n/>\n\n<!-- Drop zone: visually interactive drag target.\n The inner <button type=\"button\"> is the sole keyboard/AT entry point. -->\n<div class=\"mlv-file-upload__zone\">\n @if (_coverFile(); as cover) {\n <!-- Cover preview: the image fills the zone, which stays the drop target.\n Plain <img>, not NgOptimizedImage — the source is a runtime blob:/data:/\n remote URL of unknown intrinsic size. -->\n <img\n class=\"mlv-file-upload__cover-image\"\n [src]=\"cover.previewUrl\"\n [alt]=\"cover.name\"\n />\n\n @if (_coverUploading()) {\n <mlv-loader\n class=\"mlv-file-upload__cover-progress\"\n variant=\"bar\"\n [value]=\"cover.progress ?? 0\"\n />\n } } @else {\n <span class=\"mlv-file-upload__zone-icon\" aria-hidden=\"true\">\n <svg lucideUpload [size]=\"compact() ? 18 : 28\" />\n </span>\n\n <!-- Title is always in the DOM to serve as aria-describedby anchor;\n hidden visually in compact mode via CSS. -->\n <span\n [id]=\"id() + '-title'\"\n class=\"mlv-file-upload__zone-title\"\n [class.mlv-file-upload__zone-title--hidden]=\"compact()\"\n >{{ title() }}</span\n >\n\n @if (subtitle() && !compact()) {\n <span [id]=\"id() + '-subtitle'\" class=\"mlv-file-upload__zone-subtitle\"\n >{{ subtitle() }}</span\n >\n } }\n\n <!-- One actions container, two presentations. It is the inline action row in\n list mode and the floating toolbar over the cover image. The two\n <ng-content> slots MUST stay outside the @if branches: Angular assigns a\n projected node to the first slot whose selector matches, so duplicating\n a selector across branches leaves the later copy permanently empty.\n DOM order equals visual order, and `position` is read as a static\n attribute here, never as a binding. -->\n <span\n [class.mlv-file-upload__zone-action]=\"!_isCover()\"\n [class.mlv-file-upload__toolbar]=\"_isCover()\"\n >\n <ng-content select=\"[mlvFileUploadAction]:not([position=end])\" />\n\n @if (_isCover()) {\n <button\n mlvButton\n type=\"button\"\n shape=\"square\"\n variant=\"transparent\"\n [disabled]=\"computedDisabled()\"\n [attr.aria-label]=\"_i18n().replaceFile\"\n (click)=\"$event.stopPropagation(); openFilePicker()\"\n >\n <svg lucideRefreshCw [size]=\"16\" />\n </button>\n } @else {\n <button\n mlvButton\n type=\"button\"\n variant=\"secondary\"\n [disabled]=\"computedDisabled()\"\n [attr.aria-describedby]=\"subtitle() && !compact() ? id() + '-title ' + id() + '-subtitle' : id() + '-title'\"\n (click)=\"$event.stopPropagation(); openFilePicker()\"\n >\n {{ actionLabel() }}\n </button>\n }\n\n <ng-content select=\"[mlvFileUploadAction][position=end]\" />\n\n @if (_coverFile(); as cover) {\n <button\n mlvButton\n type=\"button\"\n shape=\"square\"\n variant=\"transparent\"\n [disabled]=\"computedDisabled()\"\n [attr.aria-label]=\"_coverRemoveLabel()\"\n (click)=\"$event.stopPropagation(); removeFile(cover.id)\"\n >\n <svg lucideTrash2 [size]=\"16\" />\n </button>\n }\n </span>\n</div>\n\n@if (_errors().length > 0) {\n<ul class=\"mlv-file-upload__errors\" role=\"alert\" aria-live=\"assertive\">\n @for (err of _errors(); track err.code + err.message) {\n <li class=\"mlv-file-upload__error-item\">{{ err.message }}</li>\n }\n</ul>\n}\n<!-- In cover state the single file's row would only repeat the image and its\n remove control, both of which the cover toolbar already provides. -->\n@if (_fileList().length > 0 && !_isCover()) {\n<ul\n class=\"mlv-file-upload__list\"\n [attr.aria-label]=\"_i18n().selectedFiles\"\n aria-live=\"polite\"\n>\n @for (file of _fileList(); track file.id) {\n <li>\n <mlv-file-upload-item\n class=\"mlv-file-upload-item--entering\"\n [file]=\"file\"\n (remove)=\"removeFile(file.id)\"\n />\n </li>\n }\n</ul>\n}\n"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=file-upload.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload.types.js","sourceRoot":"","sources":["../../../../../../../libs/core/file-upload/src/lib/file-upload/file-upload.types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Represents a file that has been selected or uploaded.\n */\nexport interface MlvUploadedFile {\n /** Unique identifier for the file entry. */\n id: string;\n /** The native File object. */\n file: File;\n /** Display name derived from the file. */\n name: string;\n /** File size in bytes. */\n size: number;\n /** Object URL for image preview — revoked when the file is removed. */\n previewUrl?: string;\n /** Current upload state. */\n state: 'pending' | 'uploading' | 'success' | 'error';\n /** Upload progress from 0–100 (used when state is `'uploading'`). */\n progress?: number;\n /** Validation error set when the file fails accept/size/count checks. */\n error?: MlvFileValidationError;\n}\n\n/**\n * Describes a file validation failure.\n */\nexport interface MlvFileValidationError {\n /** Machine-readable reason code. */\n code: 'size' | 'type' | 'count';\n /** Human-readable error message. */\n message: string;\n}\n\n/** Overall state of the drop-zone. */\nexport type MlvFileUploadState = 'idle' | 'dragging' | 'disabled';\n\n/**\n * How the drop zone presents the current selection.\n *\n * - `'list'` — the default. The zone always shows the prompt and browse\n * button, and selected files are listed below it.\n * - `'cover'` — a single selected image fills the zone, with a floating\n * replace/remove toolbar. Falls back to `'list'` whenever the cover\n * preconditions are not met (see `MlvFileUpload.previewMode`).\n */\nexport type MlvFileUploadPreviewMode = 'list' | 'cover';\n"]}
@@ -0,0 +1,65 @@
1
+ import { Directive, input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Marks a projected control as an extra action in the drop zone's action row,
5
+ * next to the built-in browse button. Typical use is an icon-only button that
6
+ * offers an alternative to picking a file — "generate with AI", "pick from
7
+ * library", "use camera".
8
+ *
9
+ * `position` is matched by the component's `<ng-content>` selectors, so it must
10
+ * be written as a **static attribute** (`position="end"`), exactly like the
11
+ * other Malva UI slot markers. A binding (`[position]="…"`) changes the
12
+ * directive's signal but cannot move the node between projection slots.
13
+ * DOM order equals visual order — nothing is reordered with CSS `order` — so
14
+ * the tab sequence always matches what the user sees.
15
+ *
16
+ * Clicks (including Enter/Space activation of a projected `<button>`) stop at
17
+ * the slot, so an extra action never also triggers the surrounding zone and
18
+ * opens the native file picker.
19
+ *
20
+ * Disabling a projected control is the consumer's job: `mlv-file-upload` only
21
+ * dims the zone and blocks pointer events while the control itself is
22
+ * disabled, it does not write `disabled` onto projected content.
23
+ *
24
+ * @example
25
+ * ```html
26
+ * <mlv-file-upload title="Image" actionLabel="Choose image">
27
+ * <button mlvButton mlvFileUploadAction type="button" shape="square"
28
+ * aria-label="Generate image with AI">
29
+ * <svg lucideSparkles [size]="16" />
30
+ * </button>
31
+ * </mlv-file-upload>
32
+ *
33
+ * <mlv-file-upload actionLabel="Choose image">
34
+ * <button mlvButton mlvFileUploadAction position="end" type="button"
35
+ * variant="transparent">
36
+ * Import from URL
37
+ * </button>
38
+ * </mlv-file-upload>
39
+ * ```
40
+ */
41
+ export class MlvFileUploadAction {
42
+ /**
43
+ * Where the action sits relative to the browse button. `'start'` (the
44
+ * default) renders it before the button, `'end'` after it.
45
+ *
46
+ * Set it as a static attribute — `position="end"` — because the value is
47
+ * read by the host component's content-projection selector, not at runtime.
48
+ */
49
+ position = input('start', /* @ts-ignore */
50
+ ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
51
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFileUploadAction, deps: [], target: i0.ɵɵFactoryTarget.Directive });
52
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: MlvFileUploadAction, isStandalone: true, selector: "[mlvFileUploadAction]", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "$event.stopPropagation()" }, properties: { "class.mlv-file-upload__action--end": "position() === 'end'" }, classAttribute: "mlv-file-upload__action" }, ngImport: i0 });
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFileUploadAction, decorators: [{
55
+ type: Directive,
56
+ args: [{
57
+ selector: '[mlvFileUploadAction]',
58
+ host: {
59
+ class: 'mlv-file-upload__action',
60
+ '[class.mlv-file-upload__action--end]': "position() === 'end'",
61
+ '(click)': '$event.stopPropagation()',
62
+ },
63
+ }]
64
+ }], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }] } });
65
+ //# sourceMappingURL=file-upload-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload-action.js","sourceRoot":"","sources":["../../../../../../libs/core/file-upload/src/lib/file-upload-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;;AAKjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AASH,MAAM,OAAO,mBAAmB;IAC9B;;;;;;OAMG;IACM,QAAQ,GAAG,KAAK,CAA8B,OAAO;iFAAC,CAAC;uGARrD,mBAAmB;2FAAnB,mBAAmB;;2FAAnB,mBAAmB;kBAR/B,SAAS;mBAAC;oBACT,QAAQ,EAAE,uBAAuB;oBACjC,IAAI,EAAE;wBACJ,KAAK,EAAE,yBAAyB;wBAChC,sCAAsC,EAAE,sBAAsB;wBAC9D,SAAS,EAAE,0BAA0B;qBACtC;iBACF","sourcesContent":["import { Directive, input } from '@angular/core';\n\n/** Which side of the browse button a `[mlvFileUploadAction]` control renders on. */\nexport type MlvFileUploadActionPosition = 'start' | 'end';\n\n/**\n * Marks a projected control as an extra action in the drop zone's action row,\n * next to the built-in browse button. Typical use is an icon-only button that\n * offers an alternative to picking a file — \"generate with AI\", \"pick from\n * library\", \"use camera\".\n *\n * `position` is matched by the component's `<ng-content>` selectors, so it must\n * be written as a **static attribute** (`position=\"end\"`), exactly like the\n * other Malva UI slot markers. A binding (`[position]=\"…\"`) changes the\n * directive's signal but cannot move the node between projection slots.\n * DOM order equals visual order — nothing is reordered with CSS `order` — so\n * the tab sequence always matches what the user sees.\n *\n * Clicks (including Enter/Space activation of a projected `<button>`) stop at\n * the slot, so an extra action never also triggers the surrounding zone and\n * opens the native file picker.\n *\n * Disabling a projected control is the consumer's job: `mlv-file-upload` only\n * dims the zone and blocks pointer events while the control itself is\n * disabled, it does not write `disabled` onto projected content.\n *\n * @example\n * ```html\n * <mlv-file-upload title=\"Image\" actionLabel=\"Choose image\">\n * <button mlvButton mlvFileUploadAction type=\"button\" shape=\"square\"\n * aria-label=\"Generate image with AI\">\n * <svg lucideSparkles [size]=\"16\" />\n * </button>\n * </mlv-file-upload>\n *\n * <mlv-file-upload actionLabel=\"Choose image\">\n * <button mlvButton mlvFileUploadAction position=\"end\" type=\"button\"\n * variant=\"transparent\">\n * Import from URL\n * </button>\n * </mlv-file-upload>\n * ```\n */\n@Directive({\n selector: '[mlvFileUploadAction]',\n host: {\n class: 'mlv-file-upload__action',\n '[class.mlv-file-upload__action--end]': \"position() === 'end'\",\n '(click)': '$event.stopPropagation()',\n },\n})\nexport class MlvFileUploadAction {\n /**\n * Where the action sits relative to the browse button. `'start'` (the\n * default) renders it before the button, `'end'` after it.\n *\n * Set it as a static attribute — `position=\"end\"` — because the value is\n * read by the host component's content-projection selector, not at runtime.\n */\n readonly position = input<MlvFileUploadActionPosition>('start');\n}\n"]}
@@ -0,0 +1,55 @@
1
+ import { ChangeDetectionStrategy, Component, computed, inject, input, output, ViewEncapsulation, } from '@angular/core';
2
+ import { MlvLoader } from '@malva-ui/core/loader';
3
+ import { LucideFile, LucideX, LucideCircleCheck, LucideCircleX, } from '@lucide/angular';
4
+ import { MLV_FILE_UPLOAD_I18N, MlvI18nResolverService } from '@malva-ui/i18n';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Renders a single uploaded file row with thumbnail, metadata, progress bar,
8
+ * status icon, and a remove button.
9
+ */
10
+ export class MlvFileUploadItem {
11
+ /** @protected Injected i18n translations for the file upload. */
12
+ _i18n = inject(MLV_FILE_UPLOAD_I18N);
13
+ /** @private ICU MessageFormat resolver for parameterised i18n strings. */
14
+ _resolver = inject(MlvI18nResolverService);
15
+ /** The uploaded file descriptor to render. */
16
+ file = input.required(/* @ts-ignore */
17
+ ...(ngDevMode ? [{ debugName: "file" }] : /* istanbul ignore next */ []));
18
+ /**
19
+ * @protected Accessible label for the remove button, naming the specific file
20
+ * (e.g. `"Remove report.xlsx"`) so screen-reader users know which file the
21
+ * button removes. Resolves the `removeFile` ICU template with the file name.
22
+ */
23
+ _removeLabel = computed(() => this._resolver.resolve(this._i18n(), 'removeFile', { name: this.file().name }), /* @ts-ignore */
24
+ ...(ngDevMode ? [{ debugName: "_removeLabel" }] : /* istanbul ignore next */ []));
25
+ /** Emits when the user clicks the remove button. */
26
+ remove = output();
27
+ /** @protected Human-readable file size string (e.g. "1.2 MB"). */
28
+ _formattedSize = computed(() => {
29
+ const bytes = this.file().size;
30
+ if (bytes < 1024)
31
+ return `${bytes} B`;
32
+ if (bytes < 1024 * 1024)
33
+ return `${(bytes / 1024).toFixed(1)} KB`;
34
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
35
+ }, /* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "_formattedSize" }] : /* istanbul ignore next */ []));
37
+ /** @protected Whether to show the progress bar. */
38
+ _showProgress = computed(() => this.file().state === 'uploading', /* @ts-ignore */
39
+ ...(ngDevMode ? [{ debugName: "_showProgress" }] : /* istanbul ignore next */ []));
40
+ /** @protected Current progress value for the loader bar. */
41
+ _progress = computed(() => this.file().progress ?? 0, /* @ts-ignore */
42
+ ...(ngDevMode ? [{ debugName: "_progress" }] : /* istanbul ignore next */ []));
43
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFileUploadItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
44
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvFileUploadItem, isStandalone: true, selector: "mlv-file-upload-item", inputs: { file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { remove: "remove" }, host: { properties: { "class.mlv-file-upload-item--uploading": "file().state === \"uploading\"", "class.mlv-file-upload-item--success": "file().state === \"success\"", "class.mlv-file-upload-item--error": "file().state === \"error\"" }, classAttribute: "mlv-file-upload-item" }, ngImport: i0, template: "<div class=\"mlv-file-upload-item__thumbnail\">\n @if (file().previewUrl) {\n <img\n [src]=\"file().previewUrl\"\n [alt]=\"file().name\"\n class=\"mlv-file-upload-item__thumbnail-img\"\n />\n } @else {\n <svg lucideFile [size]=\"20\" aria-hidden=\"true\" />\n }\n</div>\n\n<div class=\"mlv-file-upload-item__info\">\n <span class=\"mlv-file-upload-item__name\" [title]=\"file().name\"\n >{{ file().name }}</span\n >\n\n @if (file().error) {\n <span class=\"mlv-file-upload-item__meta mlv-file-upload-item__meta--error\">\n {{ file().error!.message }}\n </span>\n } @else {\n <span class=\"mlv-file-upload-item__meta\">{{ _formattedSize() }}</span>\n } @if (_showProgress()) {\n <mlv-loader\n class=\"mlv-file-upload-item__progress\"\n variant=\"bar\"\n [value]=\"_progress()\"\n [size]=\"3\"\n [ariaLabel]=\"'Uploading ' + file().name + ', ' + _progress() + '%'\"\n />\n }\n</div>\n\n<div class=\"mlv-file-upload-item__actions\">\n @if (file().state === 'success') {\n <svg\n lucideCircleCheck\n class=\"mlv-file-upload-item__status-icon mlv-file-upload-item__status-icon--success\"\n [size]=\"18\"\n [attr.aria-label]=\"_i18n().uploadComplete\"\n role=\"img\"\n />\n } @if (file().state === 'error') {\n <svg\n lucideCircleX\n class=\"mlv-file-upload-item__status-icon mlv-file-upload-item__status-icon--error\"\n [size]=\"18\"\n [attr.aria-label]=\"_i18n().uploadFailed\"\n role=\"img\"\n />\n }\n\n <button\n type=\"button\"\n class=\"mlv-file-upload-item__remove\"\n [attr.aria-label]=\"_removeLabel()\"\n (click)=\"remove.emit()\"\n >\n <svg lucideX [size]=\"16\" aria-hidden=\"true\" />\n </button>\n</div>\n", styles: [".mlv-file-upload-item{display:flex;align-items:center;gap:.75rem;padding:.625rem .75rem;border-radius:var(--mlv-radius-m);border:var(--mlv-stroke-width) solid var(--mlv-border-normal);background-color:var(--mlv-background-neutral-1);transition:background-color var(--mlv-duration-normal) var(--mlv-ease-out)}.mlv-file-upload-item__thumbnail{flex-shrink:0;width:2.5rem;height:2.5rem;border-radius:var(--mlv-radius-s);overflow:hidden;display:flex;align-items:center;justify-content:center;background-color:var(--mlv-background-neutral-2);color:var(--mlv-text-secondary)}.mlv-file-upload-item__thumbnail-img{width:100%;height:100%;object-fit:cover}.mlv-file-upload-item__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:.125rem}.mlv-file-upload-item__name{font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-s);color:var(--mlv-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mlv-file-upload-item__meta{font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-caption-size);color:var(--mlv-text-secondary)}.mlv-file-upload-item__meta--error{color:var(--mlv-text-negative)}.mlv-file-upload-item__progress{margin-top:.25rem;width:100%}.mlv-file-upload-item__actions{display:flex;align-items:center;gap:.25rem;flex-shrink:0}.mlv-file-upload-item__status-icon--success{color:var(--mlv-text-positive)}.mlv-file-upload-item__status-icon--error{color:var(--mlv-text-negative)}.mlv-file-upload-item__remove{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;border:none;background:transparent;border-radius:var(--mlv-radius-s);cursor:pointer;color:var(--mlv-text-secondary);transition:color var(--mlv-duration-normal) var(--mlv-ease-out),background-color var(--mlv-duration-normal) var(--mlv-ease-out)}.mlv-file-upload-item__remove:hover{color:var(--mlv-text-primary);background-color:var(--mlv-background-neutral-2)}.mlv-file-upload-item__remove:focus-visible{outline:var(--mlv-stroke-width) solid var(--mlv-border-focus);outline-offset:.125rem}.mlv-file-upload-item--uploading{border-color:var(--mlv-border-focus)}.mlv-file-upload-item--success{border-color:var(--mlv-text-positive)}.mlv-file-upload-item--error{border-color:var(--mlv-text-negative);background-color:var(--mlv-background-danger-1-pale)}.mlv-file-upload-item--entering{animation:var(--mlv-duration-normal) var(--mlv-ease-out) file-item-enter}.mlv-file-upload-item--leaving{animation:var(--mlv-duration-normal) var(--mlv-ease-in) file-item-leave}@media(prefers-reduced-motion:reduce){.mlv-file-upload-item,.mlv-file-upload-item *,.mlv-file-upload-item:before,.mlv-file-upload-item:after,[class^=mlv-file-upload-item__],[class*=\" mlv-file-upload-item__\"],[class^=mlv-file-upload-item--],[class*=\" mlv-file-upload-item--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}@keyframes file-item-enter{0%{opacity:0;transform:translateY(-.25rem)}to{opacity:1;transform:translateY(0)}}@keyframes file-item-leave{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-.25rem)}}\n"], dependencies: [{ kind: "component", type: MlvLoader, selector: "mlv-loader", inputs: ["variant", "tone", "value", "max", "indeterminate", "size", "strokeWidth", "ariaLabel", "showHint", "color", "trackColor", "glow"] }, { kind: "component", type: LucideFile, selector: "svg[lucideFile]" }, { kind: "component", type: LucideX, selector: "svg[lucideX]" }, { kind: "component", type: LucideCircleCheck, selector: "svg[lucideCircleCheck], svg[lucideCheckCircle2]" }, { kind: "component", type: LucideCircleX, selector: "svg[lucideCircleX], svg[lucideXCircle]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
45
+ }
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFileUploadItem, decorators: [{
47
+ type: Component,
48
+ args: [{ selector: 'mlv-file-upload-item', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MlvLoader, LucideFile, LucideX, LucideCircleCheck, LucideCircleX], host: {
49
+ class: 'mlv-file-upload-item',
50
+ '[class.mlv-file-upload-item--uploading]': 'file().state === "uploading"',
51
+ '[class.mlv-file-upload-item--success]': 'file().state === "success"',
52
+ '[class.mlv-file-upload-item--error]': 'file().state === "error"',
53
+ }, template: "<div class=\"mlv-file-upload-item__thumbnail\">\n @if (file().previewUrl) {\n <img\n [src]=\"file().previewUrl\"\n [alt]=\"file().name\"\n class=\"mlv-file-upload-item__thumbnail-img\"\n />\n } @else {\n <svg lucideFile [size]=\"20\" aria-hidden=\"true\" />\n }\n</div>\n\n<div class=\"mlv-file-upload-item__info\">\n <span class=\"mlv-file-upload-item__name\" [title]=\"file().name\"\n >{{ file().name }}</span\n >\n\n @if (file().error) {\n <span class=\"mlv-file-upload-item__meta mlv-file-upload-item__meta--error\">\n {{ file().error!.message }}\n </span>\n } @else {\n <span class=\"mlv-file-upload-item__meta\">{{ _formattedSize() }}</span>\n } @if (_showProgress()) {\n <mlv-loader\n class=\"mlv-file-upload-item__progress\"\n variant=\"bar\"\n [value]=\"_progress()\"\n [size]=\"3\"\n [ariaLabel]=\"'Uploading ' + file().name + ', ' + _progress() + '%'\"\n />\n }\n</div>\n\n<div class=\"mlv-file-upload-item__actions\">\n @if (file().state === 'success') {\n <svg\n lucideCircleCheck\n class=\"mlv-file-upload-item__status-icon mlv-file-upload-item__status-icon--success\"\n [size]=\"18\"\n [attr.aria-label]=\"_i18n().uploadComplete\"\n role=\"img\"\n />\n } @if (file().state === 'error') {\n <svg\n lucideCircleX\n class=\"mlv-file-upload-item__status-icon mlv-file-upload-item__status-icon--error\"\n [size]=\"18\"\n [attr.aria-label]=\"_i18n().uploadFailed\"\n role=\"img\"\n />\n }\n\n <button\n type=\"button\"\n class=\"mlv-file-upload-item__remove\"\n [attr.aria-label]=\"_removeLabel()\"\n (click)=\"remove.emit()\"\n >\n <svg lucideX [size]=\"16\" aria-hidden=\"true\" />\n </button>\n</div>\n", styles: [".mlv-file-upload-item{display:flex;align-items:center;gap:.75rem;padding:.625rem .75rem;border-radius:var(--mlv-radius-m);border:var(--mlv-stroke-width) solid var(--mlv-border-normal);background-color:var(--mlv-background-neutral-1);transition:background-color var(--mlv-duration-normal) var(--mlv-ease-out)}.mlv-file-upload-item__thumbnail{flex-shrink:0;width:2.5rem;height:2.5rem;border-radius:var(--mlv-radius-s);overflow:hidden;display:flex;align-items:center;justify-content:center;background-color:var(--mlv-background-neutral-2);color:var(--mlv-text-secondary)}.mlv-file-upload-item__thumbnail-img{width:100%;height:100%;object-fit:cover}.mlv-file-upload-item__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:.125rem}.mlv-file-upload-item__name{font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-s);color:var(--mlv-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mlv-file-upload-item__meta{font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-caption-size);color:var(--mlv-text-secondary)}.mlv-file-upload-item__meta--error{color:var(--mlv-text-negative)}.mlv-file-upload-item__progress{margin-top:.25rem;width:100%}.mlv-file-upload-item__actions{display:flex;align-items:center;gap:.25rem;flex-shrink:0}.mlv-file-upload-item__status-icon--success{color:var(--mlv-text-positive)}.mlv-file-upload-item__status-icon--error{color:var(--mlv-text-negative)}.mlv-file-upload-item__remove{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;border:none;background:transparent;border-radius:var(--mlv-radius-s);cursor:pointer;color:var(--mlv-text-secondary);transition:color var(--mlv-duration-normal) var(--mlv-ease-out),background-color var(--mlv-duration-normal) var(--mlv-ease-out)}.mlv-file-upload-item__remove:hover{color:var(--mlv-text-primary);background-color:var(--mlv-background-neutral-2)}.mlv-file-upload-item__remove:focus-visible{outline:var(--mlv-stroke-width) solid var(--mlv-border-focus);outline-offset:.125rem}.mlv-file-upload-item--uploading{border-color:var(--mlv-border-focus)}.mlv-file-upload-item--success{border-color:var(--mlv-text-positive)}.mlv-file-upload-item--error{border-color:var(--mlv-text-negative);background-color:var(--mlv-background-danger-1-pale)}.mlv-file-upload-item--entering{animation:var(--mlv-duration-normal) var(--mlv-ease-out) file-item-enter}.mlv-file-upload-item--leaving{animation:var(--mlv-duration-normal) var(--mlv-ease-in) file-item-leave}@media(prefers-reduced-motion:reduce){.mlv-file-upload-item,.mlv-file-upload-item *,.mlv-file-upload-item:before,.mlv-file-upload-item:after,[class^=mlv-file-upload-item__],[class*=\" mlv-file-upload-item__\"],[class^=mlv-file-upload-item--],[class*=\" mlv-file-upload-item--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}@keyframes file-item-enter{0%{opacity:0;transform:translateY(-.25rem)}to{opacity:1;transform:translateY(0)}}@keyframes file-item-leave{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-.25rem)}}\n"] }]
54
+ }], propDecorators: { file: [{ type: i0.Input, args: [{ isSignal: true, alias: "file", required: true }] }], remove: [{ type: i0.Output, args: ["remove"] }] } });
55
+ //# sourceMappingURL=file-upload-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload-item.js","sourceRoot":"","sources":["../../../../../../../libs/core/file-upload/src/lib/file-upload-item/file-upload-item.ts","../../../../../../../libs/core/file-upload/src/lib/file-upload-item/file-upload-item.html"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,QAAQ,EACR,MAAM,EACN,KAAK,EACL,MAAM,EACN,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EACL,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;;AAG9E;;;GAGG;AAeH,MAAM,OAAO,iBAAiB;IAC5B,iEAAiE;IAC9C,KAAK,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAExD,0EAA0E;IACzD,SAAS,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAE5D,8CAA8C;IACrC,IAAI,GAAG,KAAK,CAAC,QAAQ;6EAAmB,CAAC;IAElD;;;;OAIG;IACgB,YAAY,GAAG,QAAQ,CAAC,GAAG,EAAE,CAC9C,IAAI,CAAC,SAAS,CAAC,OAAO,CACpB,IAAI,CAAC,KAAK,EAAuC,EACjD,YAAY,EACZ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAC3B;qFACF,CAAC;IAEF,oDAAoD;IAC3C,MAAM,GAAG,MAAM,EAAQ,CAAC;IAEjC,kEAAkE;IAC/C,cAAc,GAAG,QAAQ,CAAC,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,GAAG,KAAK,IAAI,CAAC;QACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;YAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,CAAC;uFAAC,CAAC;IAEH,mDAAmD;IAChC,aAAa,GAAG,QAAQ,CACzC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,WAAW;sFACxC,CAAC;IAEF,4DAA4D;IACzC,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,IAAI,CAAC;kFAAC,CAAC;uGAxC9D,iBAAiB;2FAAjB,iBAAiB,sgBCrC9B,srDA8DA,0qGDjCY,SAAS,oMAAE,UAAU,4DAAE,OAAO,yDAAE,iBAAiB,4FAAE,aAAa;;2FAQ/D,iBAAiB;kBAd7B,SAAS;+BACE,sBAAsB,iBAGjB,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,WACtC,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,CAAC,QACrE;wBACJ,KAAK,EAAE,sBAAsB;wBAC7B,yCAAyC,EAAE,8BAA8B;wBACzE,uCAAuC,EAAE,4BAA4B;wBACrE,qCAAqC,EAAE,0BAA0B;qBAClE","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MlvLoader } from '@malva-ui/core/loader';\nimport {\n LucideFile,\n LucideX,\n LucideCircleCheck,\n LucideCircleX,\n} from '@lucide/angular';\nimport { MLV_FILE_UPLOAD_I18N, MlvI18nResolverService } from '@malva-ui/i18n';\nimport type { MlvUploadedFile } from '../file-upload/file-upload.types';\n\n/**\n * Renders a single uploaded file row with thumbnail, metadata, progress bar,\n * status icon, and a remove button.\n */\n@Component({\n selector: 'mlv-file-upload-item',\n templateUrl: './file-upload-item.html',\n styleUrl: './file-upload-item.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MlvLoader, LucideFile, LucideX, LucideCircleCheck, LucideCircleX],\n host: {\n class: 'mlv-file-upload-item',\n '[class.mlv-file-upload-item--uploading]': 'file().state === \"uploading\"',\n '[class.mlv-file-upload-item--success]': 'file().state === \"success\"',\n '[class.mlv-file-upload-item--error]': 'file().state === \"error\"',\n },\n})\nexport class MlvFileUploadItem {\n /** @protected Injected i18n translations for the file upload. */\n protected readonly _i18n = inject(MLV_FILE_UPLOAD_I18N);\n\n /** @private ICU MessageFormat resolver for parameterised i18n strings. */\n private readonly _resolver = inject(MlvI18nResolverService);\n\n /** The uploaded file descriptor to render. */\n readonly file = input.required<MlvUploadedFile>();\n\n /**\n * @protected Accessible label for the remove button, naming the specific file\n * (e.g. `\"Remove report.xlsx\"`) so screen-reader users know which file the\n * button removes. Resolves the `removeFile` ICU template with the file name.\n */\n protected readonly _removeLabel = computed(() =>\n this._resolver.resolve(\n this._i18n() as unknown as Record<string, string>,\n 'removeFile',\n { name: this.file().name },\n ),\n );\n\n /** Emits when the user clicks the remove button. */\n readonly remove = output<void>();\n\n /** @protected Human-readable file size string (e.g. \"1.2 MB\"). */\n protected readonly _formattedSize = computed(() => {\n const bytes = this.file().size;\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n });\n\n /** @protected Whether to show the progress bar. */\n protected readonly _showProgress = computed(\n () => this.file().state === 'uploading',\n );\n\n /** @protected Current progress value for the loader bar. */\n protected readonly _progress = computed(() => this.file().progress ?? 0);\n}\n","<div class=\"mlv-file-upload-item__thumbnail\">\n @if (file().previewUrl) {\n <img\n [src]=\"file().previewUrl\"\n [alt]=\"file().name\"\n class=\"mlv-file-upload-item__thumbnail-img\"\n />\n } @else {\n <svg lucideFile [size]=\"20\" aria-hidden=\"true\" />\n }\n</div>\n\n<div class=\"mlv-file-upload-item__info\">\n <span class=\"mlv-file-upload-item__name\" [title]=\"file().name\"\n >{{ file().name }}</span\n >\n\n @if (file().error) {\n <span class=\"mlv-file-upload-item__meta mlv-file-upload-item__meta--error\">\n {{ file().error!.message }}\n </span>\n } @else {\n <span class=\"mlv-file-upload-item__meta\">{{ _formattedSize() }}</span>\n } @if (_showProgress()) {\n <mlv-loader\n class=\"mlv-file-upload-item__progress\"\n variant=\"bar\"\n [value]=\"_progress()\"\n [size]=\"3\"\n [ariaLabel]=\"'Uploading ' + file().name + ', ' + _progress() + '%'\"\n />\n }\n</div>\n\n<div class=\"mlv-file-upload-item__actions\">\n @if (file().state === 'success') {\n <svg\n lucideCircleCheck\n class=\"mlv-file-upload-item__status-icon mlv-file-upload-item__status-icon--success\"\n [size]=\"18\"\n [attr.aria-label]=\"_i18n().uploadComplete\"\n role=\"img\"\n />\n } @if (file().state === 'error') {\n <svg\n lucideCircleX\n class=\"mlv-file-upload-item__status-icon mlv-file-upload-item__status-icon--error\"\n [size]=\"18\"\n [attr.aria-label]=\"_i18n().uploadFailed\"\n role=\"img\"\n />\n }\n\n <button\n type=\"button\"\n class=\"mlv-file-upload-item__remove\"\n [attr.aria-label]=\"_removeLabel()\"\n (click)=\"remove.emit()\"\n >\n <svg lucideX [size]=\"16\" aria-hidden=\"true\" />\n </button>\n</div>\n"]}