@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,911 @@
1
+ import { ChangeDetectionStrategy, Component, computed, contentChild, effect, forwardRef, inject, input, model, output, signal, untracked, ViewEncapsulation, viewChild, } from '@angular/core';
2
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
3
+ import { NgTemplateOutlet } from '@angular/common';
4
+ import { MlvPopup, MlvPopupContent, MlvPopupContainer, MlvPopupHeaderContent, } from '@malva-ui/core/popup';
5
+ import { MlvDescription, MlvFormControlWrapper, MlvFormControlWrapperControl, fromAriaValues, MlvHint, MlvLabel, MLV_FORM_CONTROL, MlvMessage, MlvSelectionService, toAriaValues, MlvSignalFormControlBase, } from '@malva-ui/core/form-utils';
6
+ import { MlvActiveDescendant, defaultOptionTransform, filteredOutCommitted, isReconciliationEmit, MlvDropdownPanel, MlvOptionsAdapter, filterOptions, optionId, } from '@malva-ui/core/dropdown';
7
+ import { MlvChip } from '@malva-ui/core/chip';
8
+ import { MlvComboboxItemDef, MlvComboboxSelectedItemDef, } from '../combobox-template.directives';
9
+ import { LucideChevronDown, LucideChevronUp, LucideDynamicIcon, } from '@lucide/angular';
10
+ import { MlvResizeObserver } from '@malva-ui/cdk/utils';
11
+ import { MlvInput } from '@malva-ui/core/input';
12
+ import { MLV_COMBOBOX_I18N, MLV_FORM_UTILS_I18N, MlvI18nResolverService, } from '@malva-ui/i18n';
13
+ import { MlvLoader } from '@malva-ui/core/loader';
14
+ import { MlvButtonClose } from '@malva-ui/core/button';
15
+ import { MlvClick } from '@malva-ui/cdk/accessibility';
16
+ import * as i0 from "@angular/core";
17
+ export class MlvCombobox extends MlvSignalFormControlBase {
18
+ /** The scalar, array, or null selection used by all Angular forms APIs. */
19
+ value = model(null, /* @ts-ignore */
20
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
21
+ /**
22
+ * Selectable options: a plain array, an observable of arrays, or an
23
+ * `MlvDataSource` (source-side search + lazy paging). Arrays and observables
24
+ * are filtered locally by the typed query; a data source owns its filtering
25
+ * and receives the query through `setSearch`.
26
+ */
27
+ options = input([], /* @ts-ignore */
28
+ ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
29
+ /**
30
+ * Remote search: `(query) => T[] | Promise<T[]> | Observable<T[]>`. When set it
31
+ * supersedes {@link options} as the item source; the list is not filtered
32
+ * locally. Bind `[loading]` yourself if you want a spinner beyond the
33
+ * source-owned one.
34
+ */
35
+ searchFn = input(null, /* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "searchFn" }] : /* istanbul ignore next */ []));
37
+ /** Debounce (ms) for remote searches (`MlvDataSource` / {@link searchFn}). Local filtering stays instant. */
38
+ searchDebounce = input(200, /* @ts-ignore */
39
+ ...(ngDevMode ? [{ debugName: "searchDebounce" }] : /* istanbul ignore next */ []));
40
+ /** Whether multiple options can be selected at once. */
41
+ multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
42
+ /** Custom placeholder override. Falls back to the i18n-provided placeholder. */
43
+ placeholder = input(undefined, /* @ts-ignore */
44
+ ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
45
+ /** Whether the user can create a new value via Enter when no option matches. */
46
+ allowCreate = input(false, { ...(ngDevMode ? { debugName: "allowCreate" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
47
+ toOption = input(defaultOptionTransform, /* @ts-ignore */
48
+ ...(ngDevMode ? [{ debugName: "toOption" }] : /* istanbul ignore next */ []));
49
+ /**
50
+ * Equality predicate used to match option values against the current
51
+ * selection (and against values written through any forms binding).
52
+ * Defaults to reference equality. Provide a custom comparator — e.g.
53
+ * `(a, b) => a.id === b.id` — so object values survive a serialize /
54
+ * deserialize round-trip and still match their option instances (check-marks
55
+ * and the displayed label stay in agreement).
56
+ */
57
+ compareWith = input((a, b) => a === b, /* @ts-ignore */
58
+ ...(ngDevMode ? [{ debugName: "compareWith" }] : /* istanbul ignore next */ []));
59
+ /**
60
+ * Custom predicate deciding whether an option satisfies the current query
61
+ * (e.g. fuzzy or secondary-field matching). Defaults to the shared case- and
62
+ * diacritic-insensitive substring match. Filtered results are always ranked
63
+ * prefix-matches-first by the shared `filterOptions`, regardless of matcher.
64
+ * Mirrors `[mlvAutocomplete]`'s `mlvAutocompleteMatcher`.
65
+ */
66
+ matcher = input(undefined, /* @ts-ignore */
67
+ ...(ngDevMode ? [{ debugName: "matcher" }] : /* istanbul ignore next */ []));
68
+ /** Emitted only when the user actually creates a brand-new value via Enter. */
69
+ valueCreated = output();
70
+ /**
71
+ * Controls whether the dropdown renders as a full-screen mobile sheet.
72
+ *
73
+ * Passed straight through to the underlying `mlv-popup`. Defaults to
74
+ * `'auto'` — full-screen below the `md` breakpoint (viewport < 768px),
75
+ * trigger-anchored above it — matching `mlv-select` and the date/time
76
+ * pickers. Set to `'off'` to always anchor, or `'fullscreen'` to always
77
+ * render the sheet (e.g. demos).
78
+ *
79
+ * In full-screen mode the search field would normally be occluded by the
80
+ * solid backdrop and blocked by the sheet's focus trap (it lives in the
81
+ * trigger row, outside the overlay panel). The combobox therefore projects an
82
+ * **in-sheet search input** into the popup's `[mlvPopupHeaderContent]` slot,
83
+ * wired to the same `searchQuery` and keyboard handlers, so type-to-filter
84
+ * keeps working.
85
+ */
86
+ mobileMode = input('auto', /* @ts-ignore */
87
+ ...(ngDevMode ? [{ debugName: "mobileMode" }] : /* istanbul ignore next */ []));
88
+ /**
89
+ * Density applied to the dropdown's option list.
90
+ *
91
+ * The dropdown panel is portaled to the CDK overlay container, outside the
92
+ * component's DOM tree, so ancestor density classes cannot cascade into it.
93
+ * This input is forwarded to the underlying `mlv-popup`, which stamps the
94
+ * resolved `mlv--{density}` class on the detached panel. When omitted, the
95
+ * nearest ancestor `MLV_DENSITY_CONTEXT` (e.g. a `form[mlvForm]`) applies,
96
+ * then the global `MlvDensityService`.
97
+ */
98
+ mlvDensity = input(undefined, /* @ts-ignore */
99
+ ...(ngDevMode ? [{ debugName: "mlvDensity" }] : /* istanbul ignore next */ []));
100
+ /**
101
+ * Optional visible heading rendered in the full-screen sheet's header bar.
102
+ * When omitted, falls back to the field's `label` (or, when unset, the
103
+ * resolved placeholder). Only shown while the dropdown is full-screen.
104
+ */
105
+ mobileTitle = input(undefined, /* @ts-ignore */
106
+ ...(ngDevMode ? [{ debugName: "mobileTitle" }] : /* istanbul ignore next */ []));
107
+ /**
108
+ * @protected Resolved full-screen sheet title: explicit `mobileTitle` input
109
+ * takes precedence over the field's label, then the resolved placeholder.
110
+ */
111
+ _resolvedMobileTitle = computed(() => this.mobileTitle() ?? (this.label() || this._resolvedPlaceholder()), /* @ts-ignore */
112
+ ...(ngDevMode ? [{ debugName: "_resolvedMobileTitle" }] : /* istanbul ignore next */ []));
113
+ /** @protected The component's i18n strings signal. */
114
+ _i18n = inject(MLV_COMBOBOX_I18N);
115
+ _formI18n = inject(MLV_FORM_UTILS_I18N);
116
+ /** @protected Resolved placeholder: explicit input takes precedence over i18n default. */
117
+ _resolvedPlaceholder = computed(() => this.placeholder() ?? this._i18n().searchPlaceholder, /* @ts-ignore */
118
+ ...(ngDevMode ? [{ debugName: "_resolvedPlaceholder" }] : /* istanbul ignore next */ []));
119
+ // Override focused to also be true when the popup is open so the field keeps
120
+ // its focus ring while the dropdown is showing.
121
+ focused = computed(() => this._focused() || this.isOpen(), /* @ts-ignore */
122
+ ...(ngDevMode ? [{ debugName: "focused" }] : /* istanbul ignore next */ []));
123
+ /**
124
+ * @private Latches `true` the first time a **remote** source reports
125
+ * `ready()`, and never flips back. It gates {@link _adapter}'s `eager` flag
126
+ * off for good.
127
+ *
128
+ * Without the latch, a `searchFn` bound to an inline arrow — a fresh
129
+ * reference on every change detection run — re-arms the adapter's lazy gate
130
+ * on every pass; while `eager` is still `true` (a committed value the first
131
+ * response did not contain) each pass would fire another request, whose
132
+ * result triggers the next pass. The latch bounds that to exactly one eager
133
+ * load per mount.
134
+ */
135
+ _eagerDone = signal(false, /* @ts-ignore */
136
+ ...(ngDevMode ? [{ debugName: "_eagerDone" }] : /* istanbul ignore next */ []));
137
+ /**
138
+ * @protected Shared source adapter — arrays / observables are local (this
139
+ * component filters), a data source or a `searchFn` is remote (the source
140
+ * filters and the items render as-is). Template-facing: the paging bindings
141
+ * (`hasMore` / `loadingMore` / `loadMore`) read straight off it.
142
+ *
143
+ * The `eager` closure reads {@link hasValue} / {@link _allValuesMatched}
144
+ * lazily, so declaring those below is fine — the adapter's effects run after
145
+ * construction. A committed value with no resolvable label is what makes a
146
+ * `searchFn` load without waiting for the first open. The explicit type
147
+ * annotation breaks the inference cycle that closure creates
148
+ * (`_adapter` → `eager` → `_allValuesMatched` → `resolvedOptions` → `_adapter`).
149
+ */
150
+ _adapter = new MlvOptionsAdapter({
151
+ source: this.options,
152
+ searchFn: this.searchFn,
153
+ debounce: this.searchDebounce,
154
+ eager: computed(() => this.hasValue() && !this._allValuesMatched() && !this._eagerDone()),
155
+ });
156
+ /** @private ICU resolver for parameterised i18n strings. */
157
+ _resolver = inject(MlvI18nResolverService);
158
+ /** @private Last query sent to a remote source (so a close can reset it once). */
159
+ _remoteQuery = '';
160
+ resolvedOptions = computed(() => this._adapter.items().map((item) => this.toOption()(item)), /* @ts-ignore */
161
+ ...(ngDevMode ? [{ debugName: "resolvedOptions" }] : /* istanbul ignore next */ []));
162
+ isOpen = signal(false, /* @ts-ignore */
163
+ ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
164
+ /** Current text in the input. For single-select this doubles as the committed label when not actively searching. */
165
+ searchQuery = signal('', /* @ts-ignore */
166
+ ...(ngDevMode ? [{ debugName: "searchQuery" }] : /* istanbul ignore next */ []));
167
+ triggerWidth = signal(0, /* @ts-ignore */
168
+ ...(ngDevMode ? [{ debugName: "triggerWidth" }] : /* istanbul ignore next */ []));
169
+ /** @private Whether `searchQuery` represents live user search text (vs. a displayed committed label). */
170
+ _searching = signal(false, /* @ts-ignore */
171
+ ...(ngDevMode ? [{ debugName: "_searching" }] : /* istanbul ignore next */ []));
172
+ /**
173
+ * @private Shared activedescendant bookkeeping: tracks the active (highlighted)
174
+ * option index over the filtered options with wrap-around navigation. The same
175
+ * engine backs `[mlvAutocomplete]`.
176
+ */
177
+ _activeDescendant = new MlvActiveDescendant(() => this.filteredOptions().length);
178
+ /** @protected Exposed to the template for the panel's `[activeIndex]`. */
179
+ activeIndex = this._activeDescendant.index;
180
+ /** The HTML `id` assigned to the inner listbox element for `aria-controls` linking. */
181
+ listboxId = computed(() => `${this.id()}-listbox`, /* @ts-ignore */
182
+ ...(ngDevMode ? [{ debugName: "listboxId" }] : /* istanbul ignore next */ []));
183
+ dropdownPositions = [
184
+ {
185
+ originX: 'start',
186
+ originY: 'bottom',
187
+ overlayX: 'start',
188
+ overlayY: 'top',
189
+ offsetY: 8,
190
+ },
191
+ {
192
+ originX: 'start',
193
+ originY: 'top',
194
+ overlayX: 'start',
195
+ overlayY: 'bottom',
196
+ offsetY: -8,
197
+ },
198
+ ];
199
+ dropdownIcon = computed(() => this.isOpen() ? LucideChevronUp : LucideChevronDown, /* @ts-ignore */
200
+ ...(ngDevMode ? [{ debugName: "dropdownIcon" }] : /* istanbul ignore next */ []));
201
+ filteredOptions = computed(() => {
202
+ const resolved = this.resolvedOptions();
203
+ // Remote sources (data source / `searchFn`) own their filtering — filtering
204
+ // again here would hide server results that do not match the local matcher,
205
+ // and would empty the list while a newer query is still in flight.
206
+ if (this._adapter.mode() === 'remote')
207
+ return resolved;
208
+ const query = this._searching() ? this.searchQuery() : '';
209
+ // Shared substring filter (case- and diacritic-insensitive; blank query
210
+ // returns every option; prefix matches ranked first) — extracted to
211
+ // `@malva-ui/core/dropdown` so the same matching powers `[mlvAutocomplete]`.
212
+ return filterOptions(resolved, query, this.matcher());
213
+ }, /* @ts-ignore */
214
+ ...(ngDevMode ? [{ debugName: "filteredOptions" }] : /* istanbul ignore next */ []));
215
+ /**
216
+ * @protected The live query to highlight inside each suggestion (matched
217
+ * substring emphasis). Empty unless the user is actively searching, so a
218
+ * committed single-select label is never highlighted.
219
+ */
220
+ _highlightQuery = computed(() => this._searching() ? this.searchQuery().trim() : '', /* @ts-ignore */
221
+ ...(ngDevMode ? [{ debugName: "_highlightQuery" }] : /* istanbul ignore next */ []));
222
+ /** @protected The options currently selected, resolved to `MlvSelectOption` for chip / template rendering. */
223
+ selectedOptions = computed(() => {
224
+ const transform = this.toOption();
225
+ return this.selectionService
226
+ .selectedValues()
227
+ .map((value) => transform(value));
228
+ }, /* @ts-ignore */
229
+ ...(ngDevMode ? [{ debugName: "selectedOptions" }] : /* istanbul ignore next */ []));
230
+ /** @protected The single-select committed label, or `''` when nothing is selected. */
231
+ _committedLabel = computed(() => {
232
+ const opts = this.selectedOptions();
233
+ return opts.length ? opts[0].label : '';
234
+ }, /* @ts-ignore */
235
+ ...(ngDevMode ? [{ debugName: "_committedLabel" }] : /* istanbul ignore next */ []));
236
+ /** @protected Whether every committed value has a matching option (by `compareWith`). */
237
+ _allValuesMatched = computed(() => {
238
+ const compare = this.compareWith();
239
+ const opts = this.resolvedOptions();
240
+ return this.selectionService
241
+ .selectedValues()
242
+ .every((v) => opts.some((o) => compare(o.value, v)));
243
+ }, /* @ts-ignore */
244
+ ...(ngDevMode ? [{ debugName: "_allValuesMatched" }] : /* istanbul ignore next */ []));
245
+ /** @protected First payload arrived and no consumer-driven `loading`. */
246
+ _ready = computed(() => this._adapter.ready() && !this.loading(), /* @ts-ignore */
247
+ ...(ngDevMode ? [{ debugName: "_ready" }] : /* istanbul ignore next */ []));
248
+ /**
249
+ * @protected Loading variant: a value is committed but no option resolves its
250
+ * label yet. The field is inert (readonly, no open) and shows a spinner in
251
+ * place of the chevron until the first load resolves.
252
+ */
253
+ _awaitingValueLabel = computed(() => this.hasValue() && !this._ready() && !this._allValuesMatched(), /* @ts-ignore */
254
+ ...(ngDevMode ? [{ debugName: "_awaitingValueLabel" }] : /* istanbul ignore next */ []));
255
+ /** @protected Panel spinner row: source-owned loading OR the consumer's `[loading]`. */
256
+ _panelLoading = computed(() => this._adapter.loading() || this.loading(), /* @ts-ignore */
257
+ ...(ngDevMode ? [{ debugName: "_panelLoading" }] : /* istanbul ignore next */ []));
258
+ /** @protected Chips to render: while awaiting, only options that resolved. */
259
+ _chipOptions = computed(() => {
260
+ const selected = this.selectedOptions();
261
+ if (!this._awaitingValueLabel())
262
+ return selected;
263
+ const compare = this.compareWith();
264
+ const opts = this.resolvedOptions();
265
+ return selected.filter((s) => opts.some((o) => compare(o.value, s.value)));
266
+ }, /* @ts-ignore */
267
+ ...(ngDevMode ? [{ debugName: "_chipOptions" }] : /* istanbul ignore next */ []));
268
+ /** @protected `Press Enter to add "{query}"` resolved through i18n. */
269
+ _pressEnterToAdd = computed(() => this._resolver.resolve(this._i18n(), 'pressEnterToAdd', { query: this.searchQuery().trim() }), /* @ts-ignore */
270
+ ...(ngDevMode ? [{ debugName: "_pressEnterToAdd" }] : /* istanbul ignore next */ []));
271
+ /**
272
+ * @protected Whether the custom single-select display template should render
273
+ * over the input: single-select, a `selectedTemplate` is provided, a value is
274
+ * committed, and the field is not currently focused/searching (so the raw
275
+ * input text is shown for editing while focused).
276
+ */
277
+ _showSingleTemplate = computed(() => !this.multiple() &&
278
+ !!this.selectedTemplate()?.templateRef &&
279
+ !!this._committedLabel() &&
280
+ !this.focused(), /* @ts-ignore */
281
+ ...(ngDevMode ? [{ debugName: "_showSingleTemplate" }] : /* istanbul ignore next */ []));
282
+ /** @protected `aria-activedescendant` target: the DOM id of the active option row, or `null`. */
283
+ _activeOptionId = computed(() => {
284
+ const index = this._activeDescendant.index();
285
+ if (index < 0 || index >= this.filteredOptions().length)
286
+ return null;
287
+ return optionId(this.listboxId(), index);
288
+ }, /* @ts-ignore */
289
+ ...(ngDevMode ? [{ debugName: "_activeOptionId" }] : /* istanbul ignore next */ []));
290
+ /**
291
+ * @protected Polite screen-reader announcement of the current result count.
292
+ * Empty while the popup is closed so no stale count is read out. Mirrors the
293
+ * visible empty-state copy rendered inside the dropdown panel.
294
+ */
295
+ _resultsAnnouncement = computed(() => {
296
+ if (!this.isOpen())
297
+ return '';
298
+ const count = this.filteredOptions().length;
299
+ if (count === 0) {
300
+ return this.allowCreate() && this.searchQuery().trim()
301
+ ? this._pressEnterToAdd()
302
+ : this._i18n().noResults;
303
+ }
304
+ return this._resolver.resolve(this._i18n(), 'resultsAvailable', { count });
305
+ }, /* @ts-ignore */
306
+ ...(ngDevMode ? [{ debugName: "_resultsAnnouncement" }] : /* istanbul ignore next */ []));
307
+ selectionService = inject(MlvSelectionService);
308
+ itemTemplate = contentChild(MlvComboboxItemDef, /* @ts-ignore */
309
+ ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
310
+ selectedTemplate = contentChild(MlvComboboxSelectedItemDef, /* @ts-ignore */
311
+ ...(ngDevMode ? [{ debugName: "selectedTemplate" }] : /* istanbul ignore next */ []));
312
+ /** @private The inner `mlv-input` — the tab stop and focus target for the whole control. */
313
+ _input = viewChild(MlvInput, /* @ts-ignore */
314
+ ...(ngDevMode ? [{ debugName: "_input" }] : /* istanbul ignore next */ []));
315
+ /** @private The trigger row element (chips + input + chevron), used as the popup's click-outside exclusion. */
316
+ _triggerRef = viewChild('trigger', /* @ts-ignore */
317
+ ...(ngDevMode ? [{ debugName: "_triggerRef" }] : /* istanbul ignore next */ []));
318
+ /** @private The dropdown popup — read to know whether it is rendering as a full-screen sheet. */
319
+ _popupRef = viewChild(MlvPopup, /* @ts-ignore */
320
+ ...(ngDevMode ? [{ debugName: "_popupRef" }] : /* istanbul ignore next */ []));
321
+ /**
322
+ * @protected Whether the dropdown is currently a full-screen mobile sheet
323
+ * (mirrors `mlv-popup`'s own `isFullscreen()`). Drives the in-sheet search
324
+ * input's ARIA/focus handoff and suppresses the outer trigger input's
325
+ * combobox semantics so exactly one `role="combobox"` is exposed at a time.
326
+ */
327
+ _isFullscreen = computed(() => this._popupRef()?.isFullscreen() ?? false, /* @ts-ignore */
328
+ ...(ngDevMode ? [{ debugName: "_isFullscreen" }] : /* istanbul ignore next */ []));
329
+ /**
330
+ * @protected Whether the outer trigger input owns the combobox semantics.
331
+ * `false` only while the full-screen sheet is actually open — then the
332
+ * in-sheet input is the live combobox and the outer input relinquishes the
333
+ * role/ARIA so exactly one `role="combobox"` is exposed. While anchored (or
334
+ * full-screen but closed, when the outer input is the visible trigger) the
335
+ * outer input keeps the combobox semantics.
336
+ */
337
+ _outerIsCombobox = computed(() => !(this._isFullscreen() && this.isOpen()), /* @ts-ignore */
338
+ ...(ngDevMode ? [{ debugName: "_outerIsCombobox" }] : /* istanbul ignore next */ []));
339
+ /**
340
+ * @protected DOM `id` of the in-sheet search input. Distinct from the outer
341
+ * input's `id()` so both can coexist while full-screen and the in-sheet field
342
+ * can be focus-targeted by id after the sheet opens.
343
+ */
344
+ _sheetInputId = computed(() => `${this.id()}-sheet-input`, /* @ts-ignore */
345
+ ...(ngDevMode ? [{ debugName: "_sheetInputId" }] : /* istanbul ignore next */ []));
346
+ /**
347
+ * @protected Elements the backdrop-less dropdown popup treats as "inside" for
348
+ * click-outside dismissal. The trigger row lives outside the floating panel,
349
+ * so without this a click on the input (e.g. to reposition the caret) would
350
+ * dismiss the open list. Passed to `mlv-popup`'s `dismissExcludeElements`.
351
+ */
352
+ _popupExcludeElements = computed(() => {
353
+ const el = this._triggerRef()?.nativeElement;
354
+ return el ? [el] : [];
355
+ }, /* @ts-ignore */
356
+ ...(ngDevMode ? [{ debugName: "_popupExcludeElements" }] : /* istanbul ignore next */ []));
357
+ /** @private Raw values last written through a forms binding, pre-normalisation. */
358
+ _pendingValues = [];
359
+ constructor() {
360
+ super();
361
+ effect(() => {
362
+ this.selectionService.multiple.set(this.multiple());
363
+ });
364
+ effect(() => {
365
+ this.selectionService.compareWith.set(this.compareWith());
366
+ });
367
+ // External value path. `toAriaValues` normalises scalar / array / `null`
368
+ // forms shapes into the flat `T[]` the aria listbox panel expects; each
369
+ // value is then matched against the current options via `compareWith` so
370
+ // deserialized object values collapse onto their option instances (aria
371
+ // listbox, check-marks and displayed label all agree). The **selection** is
372
+ // normalised immediately, but the visible search text is left alone while a
373
+ // live search is in flight — every exit from a search (commit / close /
374
+ // clear) re-syncs it. See `_applyPendingValues`.
375
+ effect(() => {
376
+ this._pendingValues = toAriaValues(this.value());
377
+ this._applyPendingValues();
378
+ });
379
+ // A `searchFn` is lazy: the first open is what triggers its initial load.
380
+ effect(() => {
381
+ if (this.isOpen())
382
+ untracked(() => this._adapter.ensureLoaded());
383
+ });
384
+ // Latch the eager gate off once a *remote* source has answered — see
385
+ // `_eagerDone`. The mode check matters: an array source is `ready()` from
386
+ // the first tick, so latching on readiness alone would disarm the gate
387
+ // before a `searchFn` bound through a signal/late input ever became the
388
+ // active branch.
389
+ effect(() => {
390
+ if (this._adapter.mode() === 'remote' && this._adapter.ready()) {
391
+ untracked(() => this._eagerDone.set(true));
392
+ }
393
+ });
394
+ }
395
+ // ─── Input / focus events ────────────────────────────────────────────────
396
+ /**
397
+ * @protected Whether the last selected chip is "armed" — a visual-only
398
+ * selection driven by Backspace in the empty search input while DOM focus
399
+ * stays in the input (ported from mlv-tokenizer). The first Backspace arms;
400
+ * the next Backspace (or Delete) removes the armed chip and arms the new
401
+ * last one. Multi-select only.
402
+ */
403
+ _armed = signal(false, /* @ts-ignore */
404
+ ...(ngDevMode ? [{ debugName: "_armed" }] : /* istanbul ignore next */ []));
405
+ /** @protected Polite screen-reader announcement for the armed chip. */
406
+ _armedMessage = signal('', /* @ts-ignore */
407
+ ...(ngDevMode ? [{ debugName: "_armedMessage" }] : /* istanbul ignore next */ []));
408
+ /**
409
+ * @protected Whether the given selected option is the currently armed chip.
410
+ * Armed always targets the LAST selected chip.
411
+ */
412
+ _isChipArmed(option) {
413
+ const selected = this.selectedOptions();
414
+ return this._armed() && option === selected[selected.length - 1];
415
+ }
416
+ /**
417
+ * Handles Backspace in the search input (outer or in-sheet). When the input
418
+ * holds text this is a native edit and is left alone. With an empty input in
419
+ * multi-select: the first press arms the last chip (no deletion); each
420
+ * subsequent press removes the armed chip and arms the new last one.
421
+ */
422
+ onInputBackspace(event) {
423
+ if (!this.multiple() || this._isInert())
424
+ return;
425
+ const el = event.target;
426
+ if ((el?.value ?? '') !== '')
427
+ return; // caret editing text
428
+ const selected = this.selectedOptions();
429
+ if (selected.length === 0)
430
+ return;
431
+ event.preventDefault();
432
+ if (!this._armed()) {
433
+ this._armed.set(true);
434
+ this._armedMessage.set(selected[selected.length - 1]?.label ?? '');
435
+ return;
436
+ }
437
+ this._deleteArmedAndRearm();
438
+ }
439
+ /**
440
+ * Handles Delete in the search input — parity with the second Backspace:
441
+ * removes the armed chip and arms the new last one; no-op when nothing is
442
+ * armed.
443
+ */
444
+ onInputDelete(event) {
445
+ if (!this._armed())
446
+ return;
447
+ event.preventDefault();
448
+ this._deleteArmedAndRearm();
449
+ }
450
+ /**
451
+ * @private Removes the armed (last) chip through the regular deselection
452
+ * path and re-arms the new last chip, or disarms when none remain.
453
+ */
454
+ _deleteArmedAndRearm() {
455
+ const selected = this.selectedOptions();
456
+ const last = selected[selected.length - 1];
457
+ if (!last) {
458
+ this._disarmChips();
459
+ return;
460
+ }
461
+ this._internalChipRemoval = true;
462
+ try {
463
+ this.removeSelected(last.value);
464
+ }
465
+ finally {
466
+ this._internalChipRemoval = false;
467
+ }
468
+ const remaining = this.selectedOptions();
469
+ if (remaining.length === 0) {
470
+ this._disarmChips();
471
+ }
472
+ else {
473
+ this._armed.set(true);
474
+ this._armedMessage.set(remaining[remaining.length - 1]?.label ?? '');
475
+ }
476
+ }
477
+ /**
478
+ * @private Marks a removeSelected call as originating from the arm-driven
479
+ * deletion flow, so it preserves (re-arms) instead of disarming.
480
+ */
481
+ _internalChipRemoval = false;
482
+ /** @private Clears the armed chip selection and its live announcement. */
483
+ _disarmChips() {
484
+ if (this._armed())
485
+ this._armed.set(false);
486
+ if (this._armedMessage())
487
+ this._armedMessage.set('');
488
+ }
489
+ onSearchInput(event) {
490
+ if (this._isInert())
491
+ return;
492
+ // Typing is a caret edit — disarm any chip selection.
493
+ this._disarmChips();
494
+ const value = event.target.value;
495
+ this.searchQuery.set(value);
496
+ this._searching.set(true);
497
+ this._activeDescendant.reset();
498
+ if (!this.isOpen())
499
+ this.isOpen.set(true);
500
+ // Remote sources filter server-side — forward the query (debounced) instead
501
+ // of narrowing the rendered list locally.
502
+ if (this._adapter.mode() === 'remote') {
503
+ this._remoteQuery = value;
504
+ this._adapter.search(value);
505
+ }
506
+ }
507
+ /**
508
+ * Opens the dropdown when the input gains focus (unless disabled/readonly).
509
+ * Full-screen sheet mode is the exception: focus alone must NOT open — Tab
510
+ * focus would trap the user straight into the sheet, and the programmatic
511
+ * focus-restore in `_onPopupClosed` would instantly reopen it in a loop.
512
+ * There the sheet opens via pointer ({@link onTriggerClick}), the chevron,
513
+ * or explicit keyboard navigation (ArrowUp/Down).
514
+ */
515
+ onInputFocus() {
516
+ this.setFocused(true);
517
+ if (this._isInert() || this._isFullscreen())
518
+ return;
519
+ this.isOpen.set(true);
520
+ // Single-select: select the committed label so the next keystroke replaces it.
521
+ if (!this.multiple() && this._committedLabel()) {
522
+ this._input()?.select();
523
+ }
524
+ }
525
+ /**
526
+ * Opens the dropdown on a pointer click on the trigger input. This is the
527
+ * open gesture for the full-screen sheet (where focus alone never opens it);
528
+ * while anchored it is a no-op in practice because the preceding focus event
529
+ * already opened the panel.
530
+ */
531
+ onTriggerClick() {
532
+ if (this._isInert())
533
+ return;
534
+ this._disarmChips();
535
+ this.isOpen.set(true);
536
+ }
537
+ /** Closes the dropdown, reverts stale text, and marks touched when focus genuinely leaves the field. */
538
+ onInputBlur() {
539
+ // Focus leaving the field disarms the chip selection (tokenizer parity).
540
+ this._disarmChips();
541
+ this.setFocused(false);
542
+ this._markTouched();
543
+ // Full-screen sheet: the outer trigger input blurs the moment focus is
544
+ // handed to the in-sheet input on open, and the sheet's focus trap keeps
545
+ // focus moving between the in-sheet input, chips, and options. Blur must
546
+ // NOT close/revert here — the sheet is dismissed only via the X button,
547
+ // Escape, or a committed selection (all routed through `_onPopupClosed`).
548
+ if (this._isFullscreen())
549
+ return;
550
+ this._revertAndClose();
551
+ }
552
+ /**
553
+ * @protected Called after the dropdown popup finishes opening. In full-screen
554
+ * mode, hands focus to the in-sheet search input (the outer trigger input is
555
+ * occluded by the backdrop and outside the sheet's focus trap). No-op while
556
+ * trigger-anchored, so the desktop path is unchanged.
557
+ */
558
+ _onPopupOpened() {
559
+ if (!this._isFullscreen())
560
+ return;
561
+ // The in-sheet input is stamped inside the overlay (a detached embedded
562
+ // view), so it is not reachable via this component's view queries — locate
563
+ // it by its deterministic id, mirroring the day-picker's focus-into-panel.
564
+ document.getElementById(this._sheetInputId())?.focus();
565
+ }
566
+ /**
567
+ * @protected Called after the dropdown popup finishes closing. In full-screen
568
+ * mode, reverts any stale search text to the committed selection and restores
569
+ * focus to the outer trigger input (matching the desktop close behaviour that
570
+ * `onInputBlur`/`onEscape` provide when anchored). No-op while anchored.
571
+ */
572
+ _onPopupClosed() {
573
+ if (!this._isFullscreen())
574
+ return;
575
+ this._activeDescendant.reset();
576
+ this._syncDisplayText();
577
+ this.setInitialFocus();
578
+ }
579
+ setFocused(isFocused = true) {
580
+ this._focused.set(isFocused);
581
+ }
582
+ // ─── Keyboard ────────────────────────────────────────────────────────────
583
+ onArrowDown(event) {
584
+ event.preventDefault();
585
+ if (this._isInert())
586
+ return;
587
+ this._openForNavigation();
588
+ this._activeDescendant.move(1);
589
+ }
590
+ onArrowUp(event) {
591
+ event.preventDefault();
592
+ if (this._isInert())
593
+ return;
594
+ this._openForNavigation();
595
+ this._activeDescendant.move(-1);
596
+ }
597
+ onHome(event) {
598
+ if (!this.isOpen() || this._isInert())
599
+ return;
600
+ event.preventDefault();
601
+ this._activeDescendant.first();
602
+ }
603
+ onEnd(event) {
604
+ if (!this.isOpen() || this._isInert())
605
+ return;
606
+ event.preventDefault();
607
+ this._activeDescendant.last();
608
+ }
609
+ onEnterKey(event) {
610
+ event?.preventDefault();
611
+ if (this._isInert())
612
+ return;
613
+ const filtered = this.filteredOptions();
614
+ const active = this._activeDescendant.index();
615
+ // 1. A navigated (highlighted) option wins — APG "Enter selects active".
616
+ if (active >= 0 && active < filtered.length) {
617
+ this._commitValue(filtered[active].value);
618
+ return;
619
+ }
620
+ const query = this.searchQuery().trim();
621
+ if (!query)
622
+ return;
623
+ // 2. Exact text match selects (never deselects).
624
+ const exactMatch = filtered.find((o) => o.label.toLowerCase() === query.toLowerCase());
625
+ if (exactMatch) {
626
+ this._commitValue(exactMatch.value);
627
+ return;
628
+ }
629
+ // 3. allowCreate: ADD a brand-new value (never toggle-off, never duplicate).
630
+ if (this.allowCreate()) {
631
+ const value = query;
632
+ if (!this.selectionService.isSelected(value)) {
633
+ this._addOrReplace(value);
634
+ this.valueCreated.emit(value);
635
+ this._emitValue();
636
+ }
637
+ this._afterCommit();
638
+ }
639
+ }
640
+ /** First press (open) closes + reverts; second press (already closed) clears. */
641
+ onEscape(event) {
642
+ event.preventDefault();
643
+ if (this.isOpen()) {
644
+ this._revertAndClose();
645
+ }
646
+ else {
647
+ this.onClear();
648
+ }
649
+ }
650
+ /** Chevron toggle. Uses `mousedown` + `preventDefault` so the input keeps focus. */
651
+ onChevronMousedown(event) {
652
+ event.preventDefault();
653
+ if (this._isInert())
654
+ return;
655
+ if (this.isOpen()) {
656
+ this.isOpen.set(false);
657
+ }
658
+ else {
659
+ this._input()?.focus();
660
+ this.isOpen.set(true);
661
+ }
662
+ }
663
+ // ─── Selection ───────────────────────────────────────────────────────────
664
+ /**
665
+ * Panel (pointer) selection path: aria emits the full selected-values array.
666
+ *
667
+ * The aria `ngListbox` re-emits its `value` model whenever the *rendered*
668
+ * option set changes — not only on user interaction. Typing filters the
669
+ * selected option out of view, so aria reconciles `value` down to the
670
+ * currently-rendered options and re-emits (see the `afterRenderEffect` in
671
+ * `@angular/aria`'s `Listbox`). That reconciliation is NOT a user action and
672
+ * must never mutate the committed selection or run commit side-effects
673
+ * (close / emit) — otherwise a single-select loses its value on any
674
+ * re-search and multi/allowCreate drop previously-picked items while typing
675
+ * to add another. We detect and ignore those emissions here.
676
+ */
677
+ selectValues(values) {
678
+ const incoming = [...values];
679
+ const committed = this.selectionService.selectedValues();
680
+ // Reconciliation noise: the emit adds nothing to the committed selection
681
+ // and only drops values whose option is currently filtered out of view. A
682
+ // genuine pointer selection either ADDS a value or REMOVES a still-visible
683
+ // one — so this is safe to ignore entirely (no mutation, no side-effects).
684
+ if (this._isReconciliationEmit(incoming, committed))
685
+ return;
686
+ // Genuine pointer selection. In multi-select, aria has already reconciled
687
+ // any filtered-out committed value out of its model, so re-add those
688
+ // (otherwise "type to add another" silently drops earlier picks). Single-
689
+ // select replaces, so no preservation is needed.
690
+ const next = this.multiple()
691
+ ? [...incoming, ...this._filteredOutCommitted(incoming, committed)]
692
+ : incoming;
693
+ this.selectionService.setValues(next);
694
+ this._emitValue();
695
+ this._afterCommit();
696
+ }
697
+ /**
698
+ * @private Whether an incoming panel `valueChange` is pure aria reconciliation
699
+ * noise rather than a user selection. True when the emit (a) adds no value not
700
+ * already committed and (b) only removes values whose option is currently
701
+ * filtered out of the rendered list. An emit that adds a value, removes a
702
+ * still-visible value (a genuine deselection), or exactly re-states the
703
+ * committed selection (nets to no change) is handled accordingly — the last
704
+ * case is treated as reconciliation so a spurious re-emit never re-runs the
705
+ * commit side-effects (e.g. closing a single-select popup mid-search).
706
+ */
707
+ _isReconciliationEmit(incoming, committed) {
708
+ return isReconciliationEmit(incoming, committed, this.filteredOptions().map((o) => o.value), this.compareWith());
709
+ }
710
+ /**
711
+ * @private Committed values that aria dropped from its model only because
712
+ * their option is filtered out of the rendered list (and are not in the
713
+ * incoming array). Re-added to a genuine multi-select selection so earlier
714
+ * picks survive typing to add another value.
715
+ */
716
+ _filteredOutCommitted(incoming, committed) {
717
+ return filteredOutCommitted(incoming, committed, this.filteredOptions().map((o) => o.value), this.compareWith());
718
+ }
719
+ /** Removes a single selected value (multi-select chip close / keyboard remove). */
720
+ removeSelected(value) {
721
+ // A click-removal (or any external deselection) disarms; the arm-driven
722
+ // deletion flow re-arms itself afterwards.
723
+ if (!this._internalChipRemoval)
724
+ this._disarmChips();
725
+ this.selectionService.deselect(value);
726
+ this._emitValue();
727
+ this._focusActiveInput();
728
+ }
729
+ /**
730
+ * @private Focuses whichever search input is currently interactive: the
731
+ * in-sheet input while full-screen, otherwise the outer trigger input.
732
+ */
733
+ _focusActiveInput() {
734
+ if (this._isFullscreen()) {
735
+ document.getElementById(this._sheetInputId())?.focus();
736
+ return;
737
+ }
738
+ this._input()?.focus();
739
+ }
740
+ /** Clears the whole selection and search text, emits, and refocuses the input. */
741
+ onClear() {
742
+ this.selectionService.clear();
743
+ this.searchQuery.set('');
744
+ this._searching.set(false);
745
+ this._activeDescendant.reset();
746
+ this._resetRemoteSearch();
747
+ this._emitValue();
748
+ this._input()?.focus();
749
+ }
750
+ /** Moves focus back to the input (e.g. after single-select commit / close). */
751
+ setInitialFocus() {
752
+ this._input()?.focus();
753
+ }
754
+ updateTriggerWidth(evt) {
755
+ this.triggerWidth.set(evt[0].target.getBoundingClientRect().width);
756
+ }
757
+ // ─── Forms value ─────────────────────────────────────────────────────────
758
+ /**
759
+ * The combobox renders its own clear button inline in the trigger row,
760
+ * before the chevron — the wrapper must not render its trailing copy.
761
+ */
762
+ ownsClearButton = computed(() => true, /* @ts-ignore */
763
+ ...(ngDevMode ? [{ debugName: "ownsClearButton" }] : /* istanbul ignore next */ []));
764
+ /** Whether the control holds a clearable value — At least one committed option selected (search text alone is not a value). */
765
+ hasValue = computed(() => this.selectionService.selectedValues().length > 0, /* @ts-ignore */
766
+ ...(ngDevMode ? [{ debugName: "hasValue" }] : /* istanbul ignore next */ []));
767
+ /** @private Normalises the pending form values against the current options and syncs display text. */
768
+ _applyPendingValues() {
769
+ const compare = this.compareWith();
770
+ const opts = this.resolvedOptions();
771
+ const normalized = this._pendingValues.map((v) => opts.find((o) => compare(o.value, v))?.value ?? v);
772
+ this.selectionService.setValues(normalized);
773
+ // This effect re-runs on every `resolvedOptions()` change — which now
774
+ // includes every remote response and every observable emission. Resyncing
775
+ // the display text there would wipe the query the user is still typing, so
776
+ // it is skipped while a live search is in flight; every exit from a search
777
+ // (commit / revert / clear) calls `_syncDisplayText()` itself. Read
778
+ // untracked so the effect's dependency set stays value + options.
779
+ if (!untracked(() => this._searching()))
780
+ this._syncDisplayText();
781
+ }
782
+ // ─── Internal helpers ─────────────────────────────────────────────────────
783
+ /** @private Whether all open / interaction paths must be suppressed. */
784
+ _isInert() {
785
+ return (this.computedDisabled() || this.readonly() || this._awaitingValueLabel());
786
+ }
787
+ /** @private Opens the popup for keyboard navigation, resetting the active index on first open. */
788
+ _openForNavigation() {
789
+ if (!this.isOpen()) {
790
+ this.isOpen.set(true);
791
+ this._activeDescendant.reset();
792
+ }
793
+ }
794
+ /** @private ADD-only selection: single-select replaces, multi-select appends without duplicating. */
795
+ _addOrReplace(value) {
796
+ if (this.multiple()) {
797
+ if (!this.selectionService.isSelected(value)) {
798
+ this.selectionService.setValues([
799
+ ...this.selectionService.selectedValues(),
800
+ value,
801
+ ]);
802
+ }
803
+ }
804
+ else {
805
+ this.selectionService.setValues([value]);
806
+ }
807
+ }
808
+ /** @private Commits an option value (Enter / active / exact-match path) and settles the UI. */
809
+ _commitValue(value) {
810
+ this._addOrReplace(value);
811
+ this._emitValue();
812
+ this._afterCommit();
813
+ }
814
+ /** @private Settles UI after a committed selection: single closes + refocuses, multi stays open for more. */
815
+ _afterCommit() {
816
+ this._activeDescendant.reset();
817
+ if (this.multiple()) {
818
+ this.searchQuery.set('');
819
+ this._searching.set(false);
820
+ this._resetRemoteSearch();
821
+ this._input()?.focus();
822
+ }
823
+ else {
824
+ this._syncDisplayText();
825
+ this._resetRemoteSearch();
826
+ // Refocus first (the focus handler re-opens), then force the popup shut so
827
+ // the field ends up focused-but-closed after a single-select commit.
828
+ this.setInitialFocus();
829
+ this.isOpen.set(false);
830
+ }
831
+ }
832
+ /** @private Reverts stale search text to the committed state and closes the popup. */
833
+ _revertAndClose() {
834
+ this.isOpen.set(false);
835
+ this._activeDescendant.reset();
836
+ this._syncDisplayText();
837
+ this._resetRemoteSearch();
838
+ }
839
+ /**
840
+ * @private Re-searches `''` once whenever the visible query is dropped
841
+ * (close / revert, a commit in either selection mode, or a clear), so a blank
842
+ * input never sits above a list still filtered by the previous query. No-op
843
+ * in local mode and when the last remote query was already blank.
844
+ */
845
+ _resetRemoteSearch() {
846
+ if (this._adapter.mode() === 'remote' && this._remoteQuery !== '') {
847
+ this._remoteQuery = '';
848
+ this._adapter.search('');
849
+ }
850
+ }
851
+ /** @private Sets the input text to reflect the committed selection (single) or clears it (multi). */
852
+ _syncDisplayText() {
853
+ this._searching.set(false);
854
+ this.searchQuery.set(this.multiple() ? '' : this._committedLabel());
855
+ }
856
+ /**
857
+ * @private Commits the current selection to the forms model. {@link fromAriaValues}
858
+ * collapses the aria-side selection array back to the public value shape: `T[]`
859
+ * for multi-select, or the first value / `null` when empty for single-select.
860
+ */
861
+ _emitValue() {
862
+ this.value.set(fromAriaValues(this.selectionService.selectedValues(), this.multiple()));
863
+ this._markTouched();
864
+ }
865
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvCombobox, deps: [], target: i0.ɵɵFactoryTarget.Component });
866
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvCombobox, isStandalone: true, selector: "mlv-combobox", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, searchFn: { classPropertyName: "searchFn", publicName: "searchFn", isSignal: true, isRequired: false, transformFunction: null }, searchDebounce: { classPropertyName: "searchDebounce", publicName: "searchDebounce", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, allowCreate: { classPropertyName: "allowCreate", publicName: "allowCreate", isSignal: true, isRequired: false, transformFunction: null }, toOption: { classPropertyName: "toOption", publicName: "toOption", isSignal: true, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, matcher: { classPropertyName: "matcher", publicName: "matcher", isSignal: true, isRequired: false, transformFunction: null }, mobileMode: { classPropertyName: "mobileMode", publicName: "mobileMode", isSignal: true, isRequired: false, transformFunction: null }, mlvDensity: { classPropertyName: "mlvDensity", publicName: "mlvDensity", isSignal: true, isRequired: false, transformFunction: null }, mobileTitle: { classPropertyName: "mobileTitle", publicName: "mobileTitle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueCreated: "valueCreated" }, host: { properties: { "class": "\"mlv-combobox--\" + resolvedState()", "class.mlv-combobox--disabled": "computedDisabled()", "class.mlv-combobox--open": "isOpen()", "class.mlv-combobox--multiple": "multiple()", "class.mlv-combobox--loading": "_awaitingValueLabel()" }, classAttribute: "mlv-combobox" }, providers: [
867
+ MlvSelectionService,
868
+ {
869
+ provide: MLV_FORM_CONTROL,
870
+ useExisting: forwardRef(() => MlvCombobox),
871
+ },
872
+ ], queries: [{ propertyName: "itemTemplate", first: true, predicate: MlvComboboxItemDef, descendants: true, isSignal: true }, { propertyName: "selectedTemplate", first: true, predicate: MlvComboboxSelectedItemDef, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_input", first: true, predicate: MlvInput, descendants: true, isSignal: true }, { propertyName: "_triggerRef", first: true, predicate: ["trigger"], descendants: true, isSignal: true }, { propertyName: "_popupRef", first: true, predicate: MlvPopup, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<mlv-form-control-wrapper (clear)=\"onClear()\">\n @if (label() || hint()) {\n <mlv-label [for]=\"id()\" [required]=\"required()\">\n {{ label() }} @if (hint()) {\n <mlv-hint>{{ hint() }}</mlv-hint>\n }\n </mlv-label>\n }\n\n <ng-template mlvFormControlWrapperControl>\n <mlv-popup-container class=\"mlv-combobox__popup-container\">\n <div\n class=\"mlv-combobox__trigger\"\n mlvResizeObserver\n #trigger\n [attr.aria-busy]=\"_awaitingValueLabel() || null\"\n (resized)=\"updateTriggerWidth($event)\"\n >\n @if (multiple()) { @for (opt of _chipOptions(); track opt.value) {\n <mlv-chip\n class=\"mlv-combobox__chip\"\n [class.mlv-combobox__chip--armed]=\"_isChipArmed(opt)\"\n muted\n [closable]=\"!computedDisabled() && !readonly()\"\n (mousedown)=\"$event.preventDefault()\"\n (chipClose)=\"removeSelected(opt.value)\"\n >\n @if (selectedTemplate()?.templateRef; as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: opt }\" />\n } @else { {{ opt.label }} }\n </mlv-chip>\n } }\n\n <div\n class=\"mlv-combobox__field\"\n [class.mlv-combobox__field--template-display]=\"_showSingleTemplate()\"\n >\n <mlv-input\n bare\n class=\"mlv-combobox__input\"\n [id]=\"id()\"\n [role]=\"_outerIsCombobox() ? 'combobox' : null\"\n [ariaExpanded]=\"_outerIsCombobox() ? isOpen() : null\"\n [ariaHasPopup]=\"_outerIsCombobox() ? 'listbox' : null\"\n [ariaAutocomplete]=\"_outerIsCombobox() ? 'list' : null\"\n [ariaControls]=\"_outerIsCombobox() && isOpen() ? listboxId() : null\"\n [ariaActiveDescendant]=\"\n _outerIsCombobox() ? _activeOptionId() : null\n \"\n [ariaLabel]=\"label() ? null : ariaLabel()\"\n [required]=\"required()\"\n [ariaDescribedBy]=\"_describedBy()\"\n [placeholder]=\"\n _awaitingValueLabel() ? _i18n().loading : _resolvedPlaceholder()\n \"\n [disabled]=\"computedDisabled()\"\n [readonly]=\"readonly() || _awaitingValueLabel()\"\n [value]=\"_awaitingValueLabel() ? '' : searchQuery()\"\n [autocomplete]=\"'off'\"\n (input)=\"onSearchInput($event)\"\n (inputFocus)=\"onInputFocus()\"\n (inputBlur)=\"onInputBlur()\"\n (click)=\"onTriggerClick()\"\n (keydown.enter)=\"onEnterKey($event)\"\n (keydown.backspace)=\"onInputBackspace($event)\"\n (keydown.delete)=\"onInputDelete($event)\"\n (keydown.arrowDown)=\"onArrowDown($event)\"\n (keydown.arrowUp)=\"onArrowUp($event)\"\n (keydown.home)=\"onHome($event)\"\n (keydown.end)=\"onEnd($event)\"\n (keydown.escape)=\"onEscape($event)\"\n />\n\n @if (_showSingleTemplate()) {\n <div class=\"mlv-combobox__single-display\" aria-hidden=\"true\">\n <ng-container\n *ngTemplateOutlet=\"\n selectedTemplate()!.templateRef;\n context: { $implicit: selectedOptions()[0] }\n \"\n />\n </div>\n }\n </div>\n\n @if (clearable() && hasValue() && !computedDisabled() && !readonly()) {\n <!-- Inline clear, BEFORE the chevron (ownsClearButton suppresses the\n wrapper's trailing copy). mousedown is prevented so the input keeps\n focus while clearing. -->\n <mlv-button-close\n class=\"mlv-combobox__clear\"\n (mousedown)=\"$event.preventDefault()\"\n (mlvClick)=\"onClear()\"\n mlvDensity=\"tight\"\n [ariaLabel]=\"_formI18n().clear\"\n />\n }\n <!-- The chevron is replaced by a spinner while the committed value's\n label is still resolving \u2014 the field is inert then, so a toggle\n button would be a dead control. -->\n @if (_awaitingValueLabel()) {\n <mlv-loader\n class=\"mlv-combobox__loader\"\n variant=\"circle\"\n indeterminate\n [size]=\"18\"\n [strokeWidth]=\"2\"\n [ariaLabel]=\"_i18n().loading\"\n />\n } @else {\n <button\n type=\"button\"\n class=\"mlv-combobox__arrow\"\n tabindex=\"-1\"\n [attr.aria-label]=\"_i18n().toggleOptions\"\n [disabled]=\"computedDisabled()\"\n (mousedown)=\"onChevronMousedown($event)\"\n >\n <svg size=\"20\" [lucideIcon]=\"dropdownIcon()\"></svg>\n </button>\n }\n </div>\n\n <mlv-popup\n [(opened)]=\"isOpen\"\n [width]=\"triggerWidth()\"\n [hasShadow]=\"true\"\n [hasBackdrop]=\"false\"\n [flexibleDimensions]=\"true\"\n [positions]=\"dropdownPositions\"\n [dismissExcludeElements]=\"_popupExcludeElements()\"\n [mobileMode]=\"mobileMode()\"\n [mobileTitle]=\"_resolvedMobileTitle()\"\n [mlvDensity]=\"mlvDensity()\"\n class=\"mlv-combobox__popup\"\n (afterOpened)=\"_onPopupOpened()\"\n (afterClosed)=\"_onPopupClosed()\"\n >\n <!-- Full-screen sheet only: an in-sheet search field (and, for\n multi-select, the selected chips) rendered in the popup header so\n type-to-filter survives the sheet's solid backdrop + focus trap.\n Not stamped while trigger-anchored, so desktop is unaffected. -->\n <ng-template mlvPopupHeaderContent>\n <div class=\"mlv-combobox__sheet-header\">\n @if (multiple() && _chipOptions().length) {\n <div class=\"mlv-combobox__sheet-chips\">\n @for (opt of _chipOptions(); track opt.value) {\n <mlv-chip\n class=\"mlv-combobox__chip\"\n [class.mlv-combobox__chip--armed]=\"_isChipArmed(opt)\"\n muted\n [closable]=\"!computedDisabled() && !readonly()\"\n (mousedown)=\"$event.preventDefault()\"\n (chipClose)=\"removeSelected(opt.value)\"\n >\n @if (selectedTemplate()?.templateRef; as tpl) {\n <ng-container\n *ngTemplateOutlet=\"tpl; context: { $implicit: opt }\"\n />\n } @else { {{ opt.label }} }\n </mlv-chip>\n }\n </div>\n }\n\n <mlv-input\n class=\"mlv-combobox__sheet-input\"\n [id]=\"_sheetInputId()\"\n [role]=\"_isFullscreen() ? 'combobox' : null\"\n [ariaLabel]=\"_resolvedMobileTitle()\"\n [ariaExpanded]=\"_isFullscreen() ? isOpen() : null\"\n [ariaHasPopup]=\"_isFullscreen() ? 'listbox' : null\"\n [ariaAutocomplete]=\"_isFullscreen() ? 'list' : null\"\n [ariaControls]=\"\n _isFullscreen() && isOpen() ? listboxId() : null\n \"\n [ariaActiveDescendant]=\"\n _isFullscreen() ? _activeOptionId() : null\n \"\n [placeholder]=\"\n _awaitingValueLabel() ? _i18n().loading : _resolvedPlaceholder()\n \"\n [disabled]=\"computedDisabled()\"\n [readonly]=\"readonly() || _awaitingValueLabel()\"\n [value]=\"_awaitingValueLabel() ? '' : searchQuery()\"\n [autocomplete]=\"'off'\"\n (input)=\"onSearchInput($event)\"\n (inputFocus)=\"onInputFocus()\"\n (inputBlur)=\"onInputBlur()\"\n (keydown.enter)=\"onEnterKey($event)\"\n (keydown.backspace)=\"onInputBackspace($event)\"\n (keydown.delete)=\"onInputDelete($event)\"\n (keydown.arrowDown)=\"onArrowDown($event)\"\n (keydown.arrowUp)=\"onArrowUp($event)\"\n (keydown.home)=\"onHome($event)\"\n (keydown.end)=\"onEnd($event)\"\n (keydown.escape)=\"onEscape($event)\"\n />\n </div>\n </ng-template>\n\n <ng-template mlvPopupContent>\n <!-- Keep DOM focus in the input while pointing at the panel: prevent the\n mousedown from blurring the field so the activedescendant model and\n open state survive option / scrollbar clicks. -->\n <div\n class=\"mlv-combobox__panel\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <mlv-dropdown-panel\n scrollMode=\"parent\"\n [options]=\"filteredOptions()\"\n [multiple]=\"multiple()\"\n [selectedValues]=\"selectionService.selectedValues()\"\n [itemTemplate]=\"itemTemplate()?.templateRef ?? null\"\n [highlightQuery]=\"_highlightQuery()\"\n [listboxId]=\"listboxId()\"\n focusMode=\"activedescendant\"\n [activeIndex]=\"activeIndex()\"\n [loading]=\"_panelLoading()\"\n [loadingText]=\"_i18n().loading\"\n [hasMore]=\"_adapter.hasMore()\"\n [loadingMore]=\"_adapter.loadingMore()\"\n (loadMore)=\"_adapter.loadMore()\"\n (valueChange)=\"selectValues($event)\"\n >\n <div class=\"mlv-combobox__empty\">\n @if (allowCreate() && searchQuery().trim()) { {{\n _pressEnterToAdd() }} } @else { {{ _i18n().noResults }} }\n </div>\n </mlv-dropdown-panel>\n </div>\n </ng-template>\n </mlv-popup>\n </mlv-popup-container>\n\n <!-- Polite announcement of the current result count for screen-reader users. -->\n <div class=\"mlv-combobox__sr-status\" aria-live=\"polite\" role=\"status\">\n {{ _resultsAnnouncement() }}\n </div>\n <!-- Polite announcement of the currently armed chip (Backspace flow). -->\n <div class=\"mlv-combobox__sr-status\" aria-live=\"polite\" role=\"status\">\n {{ _armedMessage() }}\n </div>\n </ng-template>\n\n @if (description()) {\n <mlv-description [id]=\"_descriptionId()\">{{ description() }}</mlv-description>\n } @if (message()) {\n <mlv-message [id]=\"_messageId()\" [state]=\"resolvedState()\">\n {{ message() }}\n </mlv-message>\n }\n</mlv-form-control-wrapper>\n", styles: [".mlv-combobox{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-combobox *{box-sizing:border-box}.mlv-combobox .mlv-form-control-wrapper__control-container{padding:0;height:auto;min-height:var(--form-ctrl-height)}.mlv-combobox__popup-container{display:flex;height:100%;flex-grow:1}.mlv-combobox__trigger{display:flex;width:100%;flex-wrap:wrap;align-items:center;align-content:center;gap:.25rem;cursor:text;padding:var(--mlv-control-padding);min-height:100%}.mlv-combobox__chip{flex-shrink:0}.mlv-combobox__field{position:relative;flex:1 1 6rem;min-width:3rem;display:flex;align-items:center}.mlv-combobox__field--template-display .mlv-input__native{color:transparent}.mlv-combobox__input{flex:1;min-width:0;color:var(--mlv-text-primary)}.mlv-combobox__single-display{position:absolute;inset:0;display:flex;align-items:center;pointer-events:none;color:var(--mlv-text-primary)}.mlv-combobox__chip--armed{outline:var(--mlv-stroke-width) solid var(--mlv-border-focus);outline-offset:.125rem;border-radius:var(--mlv-radius-full)}.mlv-combobox__clear{display:inline-flex;align-items:center;flex-shrink:0}.mlv-combobox__arrow{width:1.25rem;height:1.25rem;display:inline-flex;align-items:center;justify-content:center;padding:0;border:none;background:transparent;transition:color var(--mlv-duration-fast) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong);color:var(--mlv-text-tertiary);cursor:pointer;flex-shrink:0}.mlv-combobox__arrow:disabled{cursor:not-allowed;opacity:var(--mlv-disabled-opacity)}.mlv-combobox__loader{display:inline-flex;flex-shrink:0;width:1.25rem;height:1.25rem;align-items:center;justify-content:center;color:var(--mlv-text-tertiary)}.mlv-combobox--loading,.mlv-combobox--loading .mlv-combobox__input input{cursor:progress}.mlv-combobox__empty{padding:.75rem;text-align:center;color:var(--mlv-text-tertiary);font-size:.875rem}.mlv-combobox--open .mlv-combobox__arrow:not(:disabled),.mlv-combobox:hover .mlv-combobox__arrow:not(:disabled){color:var(--mlv-text-primary)}.mlv-form-control-wrapper--focused .mlv-combobox__arrow:not(:disabled){color:var(--mlv-text-primary)}.mlv-combobox--open .mlv-combobox__arrow{transform:rotate(180deg)}.mlv-combobox__popup{padding:0!important}.mlv-combobox__sheet-header{display:flex;flex-direction:column;gap:var(--mlv-spacing-2);width:100%}.mlv-combobox__sheet-chips{display:flex;flex-wrap:wrap;gap:.25rem}.mlv-combobox__sheet-input{display:block;width:100%}.mlv-combobox__sr-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MlvPopup, selector: "mlv-popup", inputs: ["position", "positions", "width", "height", "minWidth", "minHeight", "maxWidth", "maxHeight", "hasArrow", "hasShadow", "class", "mlvDensity", "flexibleDimensions", "scrollStrategy", "hasBackdrop", "restrictPosition", "panelRole", "modal", "ariaLabel", "dismissExcludeElements", "mobileMode", "mobileBreakpoint", "mobileTitle", "mobileCloseLabel", "opened"], outputs: ["openedChange", "afterOpened", "afterClosed"] }, { kind: "directive", type: MlvPopupContent, selector: "[mlvPopupContent]" }, { kind: "component", type: MlvPopupContainer, selector: "mlv-popup-container" }, { kind: "directive", type: MlvPopupHeaderContent, selector: "[mlvPopupHeaderContent]" }, { kind: "component", type: MlvDescription, selector: "mlv-description" }, { kind: "component", type: MlvFormControlWrapper, selector: "mlv-form-control-wrapper", outputs: ["clear"] }, { kind: "directive", type: MlvFormControlWrapperControl, selector: "[mlvFormControlWrapperControl]" }, { kind: "component", type: MlvHint, selector: "mlv-hint" }, { kind: "component", type: MlvLabel, selector: "mlv-label", inputs: ["for", "required"] }, { kind: "component", type: MlvMessage, selector: "mlv-message", inputs: ["state"] }, { kind: "component", type: LucideDynamicIcon, selector: "svg[lucideIcon]", inputs: ["lucideIcon"] }, { kind: "directive", type: MlvResizeObserver, selector: "[mlvResizeObserver]", outputs: ["resized"], exportAs: ["uiResizeObserver"] }, { kind: "component", type: MlvDropdownPanel, selector: "mlv-dropdown-panel", inputs: ["scrollMode", "minHeight", "maxHeight", "options", "multiple", "selectedValues", "itemTemplate", "focusMode", "activeIndex", "listboxId", "highlightQuery", "loading", "loadingText", "loadingMore", "hasMore", "infiniteScrollThreshold"], outputs: ["loadMore", "valueChange"] }, { kind: "component", type: MlvInput, selector: "mlv-input", inputs: ["type", "placeholder", "autocomplete", "inputMode", "maxLength", "minLength", "pattern", "name", "autofocus", "min", "max", "step", "bare", "projectControl", "role", "ariaExpanded", "ariaHasPopup", "ariaAutocomplete", "ariaControls", "ariaActiveDescendant", "ariaDescribedBy", "value"], outputs: ["valueChange", "inputFocus", "inputBlur"] }, { kind: "component", type: MlvChip, selector: "mlv-chip", inputs: ["tone", "muted", "rounded", "floating", "closable", "chipTabIndex", "closeAriaLabel"], outputs: ["chipClose"] }, { kind: "component", type: MlvButtonClose, selector: "mlv-button-close", inputs: ["variant", "shape", "ariaLabel"] }, { kind: "directive", type: MlvClick, selector: "[mlvClick]", inputs: ["disabled", "hostRole"], outputs: ["mlvClick"] }, { kind: "component", type: MlvLoader, selector: "mlv-loader", inputs: ["variant", "tone", "value", "max", "indeterminate", "size", "strokeWidth", "ariaLabel", "showHint", "color", "trackColor", "glow"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
873
+ }
874
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvCombobox, decorators: [{
875
+ type: Component,
876
+ args: [{ selector: 'mlv-combobox', imports: [
877
+ NgTemplateOutlet,
878
+ MlvPopup,
879
+ MlvPopupContent,
880
+ MlvPopupContainer,
881
+ MlvPopupHeaderContent,
882
+ MlvDescription,
883
+ MlvFormControlWrapper,
884
+ MlvFormControlWrapperControl,
885
+ MlvHint,
886
+ MlvLabel,
887
+ MlvMessage,
888
+ LucideDynamicIcon,
889
+ MlvResizeObserver,
890
+ MlvDropdownPanel,
891
+ MlvInput,
892
+ MlvChip,
893
+ MlvButtonClose,
894
+ MlvClick,
895
+ MlvLoader,
896
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
897
+ MlvSelectionService,
898
+ {
899
+ provide: MLV_FORM_CONTROL,
900
+ useExisting: forwardRef(() => MlvCombobox),
901
+ },
902
+ ], host: {
903
+ class: 'mlv-combobox',
904
+ '[class]': '"mlv-combobox--" + resolvedState()',
905
+ '[class.mlv-combobox--disabled]': 'computedDisabled()',
906
+ '[class.mlv-combobox--open]': 'isOpen()',
907
+ '[class.mlv-combobox--multiple]': 'multiple()',
908
+ '[class.mlv-combobox--loading]': '_awaitingValueLabel()',
909
+ }, template: "<mlv-form-control-wrapper (clear)=\"onClear()\">\n @if (label() || hint()) {\n <mlv-label [for]=\"id()\" [required]=\"required()\">\n {{ label() }} @if (hint()) {\n <mlv-hint>{{ hint() }}</mlv-hint>\n }\n </mlv-label>\n }\n\n <ng-template mlvFormControlWrapperControl>\n <mlv-popup-container class=\"mlv-combobox__popup-container\">\n <div\n class=\"mlv-combobox__trigger\"\n mlvResizeObserver\n #trigger\n [attr.aria-busy]=\"_awaitingValueLabel() || null\"\n (resized)=\"updateTriggerWidth($event)\"\n >\n @if (multiple()) { @for (opt of _chipOptions(); track opt.value) {\n <mlv-chip\n class=\"mlv-combobox__chip\"\n [class.mlv-combobox__chip--armed]=\"_isChipArmed(opt)\"\n muted\n [closable]=\"!computedDisabled() && !readonly()\"\n (mousedown)=\"$event.preventDefault()\"\n (chipClose)=\"removeSelected(opt.value)\"\n >\n @if (selectedTemplate()?.templateRef; as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: opt }\" />\n } @else { {{ opt.label }} }\n </mlv-chip>\n } }\n\n <div\n class=\"mlv-combobox__field\"\n [class.mlv-combobox__field--template-display]=\"_showSingleTemplate()\"\n >\n <mlv-input\n bare\n class=\"mlv-combobox__input\"\n [id]=\"id()\"\n [role]=\"_outerIsCombobox() ? 'combobox' : null\"\n [ariaExpanded]=\"_outerIsCombobox() ? isOpen() : null\"\n [ariaHasPopup]=\"_outerIsCombobox() ? 'listbox' : null\"\n [ariaAutocomplete]=\"_outerIsCombobox() ? 'list' : null\"\n [ariaControls]=\"_outerIsCombobox() && isOpen() ? listboxId() : null\"\n [ariaActiveDescendant]=\"\n _outerIsCombobox() ? _activeOptionId() : null\n \"\n [ariaLabel]=\"label() ? null : ariaLabel()\"\n [required]=\"required()\"\n [ariaDescribedBy]=\"_describedBy()\"\n [placeholder]=\"\n _awaitingValueLabel() ? _i18n().loading : _resolvedPlaceholder()\n \"\n [disabled]=\"computedDisabled()\"\n [readonly]=\"readonly() || _awaitingValueLabel()\"\n [value]=\"_awaitingValueLabel() ? '' : searchQuery()\"\n [autocomplete]=\"'off'\"\n (input)=\"onSearchInput($event)\"\n (inputFocus)=\"onInputFocus()\"\n (inputBlur)=\"onInputBlur()\"\n (click)=\"onTriggerClick()\"\n (keydown.enter)=\"onEnterKey($event)\"\n (keydown.backspace)=\"onInputBackspace($event)\"\n (keydown.delete)=\"onInputDelete($event)\"\n (keydown.arrowDown)=\"onArrowDown($event)\"\n (keydown.arrowUp)=\"onArrowUp($event)\"\n (keydown.home)=\"onHome($event)\"\n (keydown.end)=\"onEnd($event)\"\n (keydown.escape)=\"onEscape($event)\"\n />\n\n @if (_showSingleTemplate()) {\n <div class=\"mlv-combobox__single-display\" aria-hidden=\"true\">\n <ng-container\n *ngTemplateOutlet=\"\n selectedTemplate()!.templateRef;\n context: { $implicit: selectedOptions()[0] }\n \"\n />\n </div>\n }\n </div>\n\n @if (clearable() && hasValue() && !computedDisabled() && !readonly()) {\n <!-- Inline clear, BEFORE the chevron (ownsClearButton suppresses the\n wrapper's trailing copy). mousedown is prevented so the input keeps\n focus while clearing. -->\n <mlv-button-close\n class=\"mlv-combobox__clear\"\n (mousedown)=\"$event.preventDefault()\"\n (mlvClick)=\"onClear()\"\n mlvDensity=\"tight\"\n [ariaLabel]=\"_formI18n().clear\"\n />\n }\n <!-- The chevron is replaced by a spinner while the committed value's\n label is still resolving \u2014 the field is inert then, so a toggle\n button would be a dead control. -->\n @if (_awaitingValueLabel()) {\n <mlv-loader\n class=\"mlv-combobox__loader\"\n variant=\"circle\"\n indeterminate\n [size]=\"18\"\n [strokeWidth]=\"2\"\n [ariaLabel]=\"_i18n().loading\"\n />\n } @else {\n <button\n type=\"button\"\n class=\"mlv-combobox__arrow\"\n tabindex=\"-1\"\n [attr.aria-label]=\"_i18n().toggleOptions\"\n [disabled]=\"computedDisabled()\"\n (mousedown)=\"onChevronMousedown($event)\"\n >\n <svg size=\"20\" [lucideIcon]=\"dropdownIcon()\"></svg>\n </button>\n }\n </div>\n\n <mlv-popup\n [(opened)]=\"isOpen\"\n [width]=\"triggerWidth()\"\n [hasShadow]=\"true\"\n [hasBackdrop]=\"false\"\n [flexibleDimensions]=\"true\"\n [positions]=\"dropdownPositions\"\n [dismissExcludeElements]=\"_popupExcludeElements()\"\n [mobileMode]=\"mobileMode()\"\n [mobileTitle]=\"_resolvedMobileTitle()\"\n [mlvDensity]=\"mlvDensity()\"\n class=\"mlv-combobox__popup\"\n (afterOpened)=\"_onPopupOpened()\"\n (afterClosed)=\"_onPopupClosed()\"\n >\n <!-- Full-screen sheet only: an in-sheet search field (and, for\n multi-select, the selected chips) rendered in the popup header so\n type-to-filter survives the sheet's solid backdrop + focus trap.\n Not stamped while trigger-anchored, so desktop is unaffected. -->\n <ng-template mlvPopupHeaderContent>\n <div class=\"mlv-combobox__sheet-header\">\n @if (multiple() && _chipOptions().length) {\n <div class=\"mlv-combobox__sheet-chips\">\n @for (opt of _chipOptions(); track opt.value) {\n <mlv-chip\n class=\"mlv-combobox__chip\"\n [class.mlv-combobox__chip--armed]=\"_isChipArmed(opt)\"\n muted\n [closable]=\"!computedDisabled() && !readonly()\"\n (mousedown)=\"$event.preventDefault()\"\n (chipClose)=\"removeSelected(opt.value)\"\n >\n @if (selectedTemplate()?.templateRef; as tpl) {\n <ng-container\n *ngTemplateOutlet=\"tpl; context: { $implicit: opt }\"\n />\n } @else { {{ opt.label }} }\n </mlv-chip>\n }\n </div>\n }\n\n <mlv-input\n class=\"mlv-combobox__sheet-input\"\n [id]=\"_sheetInputId()\"\n [role]=\"_isFullscreen() ? 'combobox' : null\"\n [ariaLabel]=\"_resolvedMobileTitle()\"\n [ariaExpanded]=\"_isFullscreen() ? isOpen() : null\"\n [ariaHasPopup]=\"_isFullscreen() ? 'listbox' : null\"\n [ariaAutocomplete]=\"_isFullscreen() ? 'list' : null\"\n [ariaControls]=\"\n _isFullscreen() && isOpen() ? listboxId() : null\n \"\n [ariaActiveDescendant]=\"\n _isFullscreen() ? _activeOptionId() : null\n \"\n [placeholder]=\"\n _awaitingValueLabel() ? _i18n().loading : _resolvedPlaceholder()\n \"\n [disabled]=\"computedDisabled()\"\n [readonly]=\"readonly() || _awaitingValueLabel()\"\n [value]=\"_awaitingValueLabel() ? '' : searchQuery()\"\n [autocomplete]=\"'off'\"\n (input)=\"onSearchInput($event)\"\n (inputFocus)=\"onInputFocus()\"\n (inputBlur)=\"onInputBlur()\"\n (keydown.enter)=\"onEnterKey($event)\"\n (keydown.backspace)=\"onInputBackspace($event)\"\n (keydown.delete)=\"onInputDelete($event)\"\n (keydown.arrowDown)=\"onArrowDown($event)\"\n (keydown.arrowUp)=\"onArrowUp($event)\"\n (keydown.home)=\"onHome($event)\"\n (keydown.end)=\"onEnd($event)\"\n (keydown.escape)=\"onEscape($event)\"\n />\n </div>\n </ng-template>\n\n <ng-template mlvPopupContent>\n <!-- Keep DOM focus in the input while pointing at the panel: prevent the\n mousedown from blurring the field so the activedescendant model and\n open state survive option / scrollbar clicks. -->\n <div\n class=\"mlv-combobox__panel\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <mlv-dropdown-panel\n scrollMode=\"parent\"\n [options]=\"filteredOptions()\"\n [multiple]=\"multiple()\"\n [selectedValues]=\"selectionService.selectedValues()\"\n [itemTemplate]=\"itemTemplate()?.templateRef ?? null\"\n [highlightQuery]=\"_highlightQuery()\"\n [listboxId]=\"listboxId()\"\n focusMode=\"activedescendant\"\n [activeIndex]=\"activeIndex()\"\n [loading]=\"_panelLoading()\"\n [loadingText]=\"_i18n().loading\"\n [hasMore]=\"_adapter.hasMore()\"\n [loadingMore]=\"_adapter.loadingMore()\"\n (loadMore)=\"_adapter.loadMore()\"\n (valueChange)=\"selectValues($event)\"\n >\n <div class=\"mlv-combobox__empty\">\n @if (allowCreate() && searchQuery().trim()) { {{\n _pressEnterToAdd() }} } @else { {{ _i18n().noResults }} }\n </div>\n </mlv-dropdown-panel>\n </div>\n </ng-template>\n </mlv-popup>\n </mlv-popup-container>\n\n <!-- Polite announcement of the current result count for screen-reader users. -->\n <div class=\"mlv-combobox__sr-status\" aria-live=\"polite\" role=\"status\">\n {{ _resultsAnnouncement() }}\n </div>\n <!-- Polite announcement of the currently armed chip (Backspace flow). -->\n <div class=\"mlv-combobox__sr-status\" aria-live=\"polite\" role=\"status\">\n {{ _armedMessage() }}\n </div>\n </ng-template>\n\n @if (description()) {\n <mlv-description [id]=\"_descriptionId()\">{{ description() }}</mlv-description>\n } @if (message()) {\n <mlv-message [id]=\"_messageId()\" [state]=\"resolvedState()\">\n {{ message() }}\n </mlv-message>\n }\n</mlv-form-control-wrapper>\n", styles: [".mlv-combobox{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-combobox *{box-sizing:border-box}.mlv-combobox .mlv-form-control-wrapper__control-container{padding:0;height:auto;min-height:var(--form-ctrl-height)}.mlv-combobox__popup-container{display:flex;height:100%;flex-grow:1}.mlv-combobox__trigger{display:flex;width:100%;flex-wrap:wrap;align-items:center;align-content:center;gap:.25rem;cursor:text;padding:var(--mlv-control-padding);min-height:100%}.mlv-combobox__chip{flex-shrink:0}.mlv-combobox__field{position:relative;flex:1 1 6rem;min-width:3rem;display:flex;align-items:center}.mlv-combobox__field--template-display .mlv-input__native{color:transparent}.mlv-combobox__input{flex:1;min-width:0;color:var(--mlv-text-primary)}.mlv-combobox__single-display{position:absolute;inset:0;display:flex;align-items:center;pointer-events:none;color:var(--mlv-text-primary)}.mlv-combobox__chip--armed{outline:var(--mlv-stroke-width) solid var(--mlv-border-focus);outline-offset:.125rem;border-radius:var(--mlv-radius-full)}.mlv-combobox__clear{display:inline-flex;align-items:center;flex-shrink:0}.mlv-combobox__arrow{width:1.25rem;height:1.25rem;display:inline-flex;align-items:center;justify-content:center;padding:0;border:none;background:transparent;transition:color var(--mlv-duration-fast) var(--mlv-ease-out-strong),transform var(--mlv-duration-normal) var(--mlv-ease-out-strong);color:var(--mlv-text-tertiary);cursor:pointer;flex-shrink:0}.mlv-combobox__arrow:disabled{cursor:not-allowed;opacity:var(--mlv-disabled-opacity)}.mlv-combobox__loader{display:inline-flex;flex-shrink:0;width:1.25rem;height:1.25rem;align-items:center;justify-content:center;color:var(--mlv-text-tertiary)}.mlv-combobox--loading,.mlv-combobox--loading .mlv-combobox__input input{cursor:progress}.mlv-combobox__empty{padding:.75rem;text-align:center;color:var(--mlv-text-tertiary);font-size:.875rem}.mlv-combobox--open .mlv-combobox__arrow:not(:disabled),.mlv-combobox:hover .mlv-combobox__arrow:not(:disabled){color:var(--mlv-text-primary)}.mlv-form-control-wrapper--focused .mlv-combobox__arrow:not(:disabled){color:var(--mlv-text-primary)}.mlv-combobox--open .mlv-combobox__arrow{transform:rotate(180deg)}.mlv-combobox__popup{padding:0!important}.mlv-combobox__sheet-header{display:flex;flex-direction:column;gap:var(--mlv-spacing-2);width:100%}.mlv-combobox__sheet-chips{display:flex;flex-wrap:wrap;gap:.25rem}.mlv-combobox__sheet-input{display:block;width:100%}.mlv-combobox__sr-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
910
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], searchFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchFn", required: false }] }], searchDebounce: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchDebounce", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], allowCreate: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowCreate", required: false }] }], toOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "toOption", required: false }] }], compareWith: [{ type: i0.Input, args: [{ isSignal: true, alias: "compareWith", required: false }] }], matcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "matcher", required: false }] }], valueCreated: [{ type: i0.Output, args: ["valueCreated"] }], mobileMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileMode", required: false }] }], mlvDensity: [{ type: i0.Input, args: [{ isSignal: true, alias: "mlvDensity", required: false }] }], mobileTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileTitle", required: false }] }], itemTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvComboboxItemDef), { isSignal: true }] }], selectedTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvComboboxSelectedItemDef), { isSignal: true }] }], _input: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MlvInput), { isSignal: true }] }], _triggerRef: [{ type: i0.ViewChild, args: ['trigger', { isSignal: true }] }], _popupRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MlvPopup), { isSignal: true }] }] } });
911
+ //# sourceMappingURL=combobox.js.map