@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,92 @@
1
+ import { signal } from '@angular/core';
2
+ /**
3
+ * Builds the deterministic DOM `id` for the option row at `index` within a
4
+ * listbox, matching the id `mlv-dropdown-panel` stamps on each option. An
5
+ * owning combobox / autocomplete computes the same id to point its input's
6
+ * `aria-activedescendant` at the active row.
7
+ *
8
+ * This is the single source of truth for the activedescendant option-id format
9
+ * (`<listboxId>-option-<index>`), shared by `mlv-dropdown-panel`,
10
+ * `mlv-combobox`, and `[mlvAutocomplete]` so the id the panel renders and the
11
+ * id the trigger references can never drift.
12
+ *
13
+ * @param listboxId - The id of the listbox that owns the option.
14
+ * @param index - The option's flat index within the listbox.
15
+ * @returns The option's DOM id, e.g. `"my-listbox-option-3"`.
16
+ */
17
+ export function optionId(listboxId, index) {
18
+ return `${listboxId}-option-${index}`;
19
+ }
20
+ /**
21
+ * Signal-backed bookkeeping for the "active option" index of a WAI-ARIA
22
+ * activedescendant keyboard model — the shared engine behind `mlv-combobox`
23
+ * and `[mlvAutocomplete]`, where DOM focus stays on the text input and the
24
+ * highlighted option is tracked purely by index (mirrored into the input's
25
+ * `aria-activedescendant`).
26
+ *
27
+ * The active index is `-1` when no option is active. {@link move} advances it
28
+ * with wrap-around, treating a first move from `-1` as landing on the first
29
+ * (forward) or last (backward) option; {@link first} / {@link last} jump to the
30
+ * ends; {@link reset} clears it back to `-1`. The current option count is read
31
+ * lazily through the accessor supplied at construction, so the owner can back it
32
+ * with any signal / computed (e.g. a filtered-options length) without pushing
33
+ * the count on every keystroke.
34
+ */
35
+ export class MlvActiveDescendant {
36
+ _count;
37
+ /** @private The active option index; `-1` = no active option. */
38
+ _index = signal(-1, /* @ts-ignore */
39
+ ...(ngDevMode ? [{ debugName: "_index" }] : /* istanbul ignore next */ []));
40
+ /**
41
+ * The active option index as a read-only signal; `-1` when no option is
42
+ * active. Read it reactively (template / effect) or imperatively (call it in
43
+ * an event handler) — both track the same underlying state.
44
+ */
45
+ index = this._index.asReadonly();
46
+ /**
47
+ * @param _count Accessor returning the current number of navigable options.
48
+ * Read lazily on each {@link move} / {@link first} / {@link last} call, so it
49
+ * always reflects the live count (e.g. after the options are filtered).
50
+ */
51
+ constructor(_count) {
52
+ this._count = _count;
53
+ }
54
+ /**
55
+ * Advances the active option by `delta` with wrap-around. With no option
56
+ * active (`-1`), a forward move (`delta > 0`) lands on the first option and a
57
+ * backward move (`delta < 0`) on the last; otherwise the index wraps modulo
58
+ * the option count. Resets to `-1` when there are no options.
59
+ *
60
+ * @param delta Step to move by (`+1` next, `-1` previous).
61
+ */
62
+ move(delta) {
63
+ const count = this._count();
64
+ if (count === 0) {
65
+ this._index.set(-1);
66
+ return;
67
+ }
68
+ const current = this._index();
69
+ const next = current < 0
70
+ ? delta > 0
71
+ ? 0
72
+ : count - 1
73
+ : (current + delta + count) % count;
74
+ this._index.set(next);
75
+ }
76
+ /** Activates the first option. No-op when there are no options. */
77
+ first() {
78
+ if (this._count() > 0)
79
+ this._index.set(0);
80
+ }
81
+ /** Activates the last option. No-op when there are no options. */
82
+ last() {
83
+ const count = this._count();
84
+ if (count > 0)
85
+ this._index.set(count - 1);
86
+ }
87
+ /** Clears the active option back to `-1` (nothing active). */
88
+ reset() {
89
+ this._index.set(-1);
90
+ }
91
+ }
92
+ //# sourceMappingURL=active-descendant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-descendant.js","sourceRoot":"","sources":["../../../../../../libs/core/dropdown/src/lib/active-descendant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,QAAQ,CAAC,SAAiB,EAAE,KAAa;IACvD,OAAO,GAAG,SAAS,WAAW,KAAK,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,mBAAmB;IAgBD;IAf7B,iEAAiE;IAChD,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;+EAAC,CAAC;IAErC;;;;OAIG;IACM,KAAK,GAAmB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAE1D;;;;OAIG;IACH,YAA6B,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAErD;;;;;;;OAOG;IACH,IAAI,CAAC,KAAa;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,GACR,OAAO,GAAG,CAAC;YACT,CAAC,CAAC,KAAK,GAAG,CAAC;gBACT,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,KAAK,GAAG,CAAC;YACb,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,mEAAmE;IACnE,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,kEAAkE;IAClE,IAAI;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,8DAA8D;IAC9D,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;CACF","sourcesContent":["import { signal } from '@angular/core';\nimport type { Signal } from '@angular/core';\n\n/**\n * Builds the deterministic DOM `id` for the option row at `index` within a\n * listbox, matching the id `mlv-dropdown-panel` stamps on each option. An\n * owning combobox / autocomplete computes the same id to point its input's\n * `aria-activedescendant` at the active row.\n *\n * This is the single source of truth for the activedescendant option-id format\n * (`<listboxId>-option-<index>`), shared by `mlv-dropdown-panel`,\n * `mlv-combobox`, and `[mlvAutocomplete]` so the id the panel renders and the\n * id the trigger references can never drift.\n *\n * @param listboxId - The id of the listbox that owns the option.\n * @param index - The option's flat index within the listbox.\n * @returns The option's DOM id, e.g. `\"my-listbox-option-3\"`.\n */\nexport function optionId(listboxId: string, index: number): string {\n return `${listboxId}-option-${index}`;\n}\n\n/**\n * Signal-backed bookkeeping for the \"active option\" index of a WAI-ARIA\n * activedescendant keyboard model — the shared engine behind `mlv-combobox`\n * and `[mlvAutocomplete]`, where DOM focus stays on the text input and the\n * highlighted option is tracked purely by index (mirrored into the input's\n * `aria-activedescendant`).\n *\n * The active index is `-1` when no option is active. {@link move} advances it\n * with wrap-around, treating a first move from `-1` as landing on the first\n * (forward) or last (backward) option; {@link first} / {@link last} jump to the\n * ends; {@link reset} clears it back to `-1`. The current option count is read\n * lazily through the accessor supplied at construction, so the owner can back it\n * with any signal / computed (e.g. a filtered-options length) without pushing\n * the count on every keystroke.\n */\nexport class MlvActiveDescendant {\n /** @private The active option index; `-1` = no active option. */\n private readonly _index = signal(-1);\n\n /**\n * The active option index as a read-only signal; `-1` when no option is\n * active. Read it reactively (template / effect) or imperatively (call it in\n * an event handler) — both track the same underlying state.\n */\n readonly index: Signal<number> = this._index.asReadonly();\n\n /**\n * @param _count Accessor returning the current number of navigable options.\n * Read lazily on each {@link move} / {@link first} / {@link last} call, so it\n * always reflects the live count (e.g. after the options are filtered).\n */\n constructor(private readonly _count: () => number) {}\n\n /**\n * Advances the active option by `delta` with wrap-around. With no option\n * active (`-1`), a forward move (`delta > 0`) lands on the first option and a\n * backward move (`delta < 0`) on the last; otherwise the index wraps modulo\n * the option count. Resets to `-1` when there are no options.\n *\n * @param delta Step to move by (`+1` next, `-1` previous).\n */\n move(delta: number): void {\n const count = this._count();\n if (count === 0) {\n this._index.set(-1);\n return;\n }\n const current = this._index();\n const next =\n current < 0\n ? delta > 0\n ? 0\n : count - 1\n : (current + delta + count) % count;\n this._index.set(next);\n }\n\n /** Activates the first option. No-op when there are no options. */\n first(): void {\n if (this._count() > 0) this._index.set(0);\n }\n\n /** Activates the last option. No-op when there are no options. */\n last(): void {\n const count = this._count();\n if (count > 0) this._index.set(count - 1);\n }\n\n /** Clears the active option back to `-1` (nothing active). */\n reset(): void {\n this._index.set(-1);\n }\n}\n"]}
@@ -0,0 +1,295 @@
1
+ import { afterNextRender, afterRenderEffect, ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, isDevMode, output, signal, untracked, viewChild, ViewEncapsulation, } from '@angular/core';
2
+ import { DOCUMENT, NgTemplateOutlet } from '@angular/common';
3
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
+ import { MlvList, MlvListItem, MlvListItemSelectable, MlvListSelectable, } from '@malva-ui/core/list';
5
+ import { LucideCheck } from '@lucide/angular';
6
+ import { MlvSelectionService } from '@malva-ui/core/form-utils';
7
+ import { MlvScrollbar } from '@malva-ui/core/scrollbar';
8
+ import { MlvInfiniteScroll } from '@malva-ui/cdk/infinite-scroll';
9
+ import { mlvNextId } from '@malva-ui/cdk/utils';
10
+ import { hasOptionGroups } from '../select-option';
11
+ import { optionId } from '../active-descendant';
12
+ import { MlvHighlightMatchPipe } from '../highlight-match.pipe';
13
+ import { fromEvent, startWith } from 'rxjs';
14
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
15
+ import * as i0 from "@angular/core";
16
+ export class MlvDropdownPanel {
17
+ /**
18
+ * Chooses the single scroll owner for this panel.
19
+ *
20
+ * Standalone panels scroll themselves. Panels composed inside `mlv-popup`
21
+ * delegate to the popup so the DOM never contains nested scroll regions.
22
+ */
23
+ scrollMode = input('self', /* @ts-ignore */
24
+ ...(ngDevMode ? [{ debugName: "scrollMode" }] : /* istanbul ignore next */ []));
25
+ minHeight = input(0, /* @ts-ignore */
26
+ ...(ngDevMode ? [{ debugName: "minHeight" }] : /* istanbul ignore next */ []));
27
+ maxHeight = input(0, /* @ts-ignore */
28
+ ...(ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []));
29
+ options = input([], /* @ts-ignore */
30
+ ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
31
+ /** Whether multiple options can be selected. */
32
+ multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
33
+ selectedValues = input([], /* @ts-ignore */
34
+ ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
35
+ itemTemplate = input(null, /* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
37
+ /**
38
+ * Focus strategy forwarded to the inner aria listbox.
39
+ *
40
+ * - `'roving'` (default) — DOM focus moves onto the active option (`tabindex`).
41
+ * Used by `mlv-select`.
42
+ * - `'activedescendant'` — DOM focus stays on the owning trigger/input; the
43
+ * active option is tracked via `aria-activedescendant`. Used by
44
+ * `mlv-combobox`, whose text input must retain focus so typing keeps
45
+ * working while navigating options.
46
+ */
47
+ focusMode = input('roving', /* @ts-ignore */
48
+ ...(ngDevMode ? [{ debugName: "focusMode" }] : /* istanbul ignore next */ []));
49
+ /**
50
+ * Index of the option that is visually "active" (highlighted) under the
51
+ * activedescendant model. `-1` (default) means no active option. The panel
52
+ * renders a deterministic `[id]` on each option (`<listboxId>-option-<index>`)
53
+ * so an owning combobox can point its input's `aria-activedescendant` at the
54
+ * active row and keep the highlight in sync.
55
+ */
56
+ activeIndex = input(-1, /* @ts-ignore */
57
+ ...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
58
+ /**
59
+ * Optional HTML `id` to assign to the inner `<mlv-list>` listbox element.
60
+ * Allows a parent combobox or select to reference this listbox via `aria-controls`.
61
+ */
62
+ listboxId = input(null, /* @ts-ignore */
63
+ ...(ngDevMode ? [{ debugName: "listboxId" }] : /* istanbul ignore next */ []));
64
+ /**
65
+ * When non-empty, the default option row emphasises the matched substring of
66
+ * this query inside each suggestion label (case- and diacritic-insensitive;
67
+ * see {@link MlvHighlightMatchPipe}). Ignored for rows rendered by a custom
68
+ * {@link itemTemplate}. Empty (default) renders the label as plain text —
69
+ * ungrouped, un-highlighted lists are byte-for-byte unchanged.
70
+ */
71
+ highlightQuery = input('', /* @ts-ignore */
72
+ ...(ngDevMode ? [{ debugName: "highlightQuery" }] : /* istanbul ignore next */ []));
73
+ /**
74
+ * When `true`, the panel renders a loading affordance instead of the option
75
+ * list / empty state — used by `[mlvAutocomplete]` while an async `search`
76
+ * resolves. The {@link loadingText} is announced politely.
77
+ */
78
+ loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
79
+ /**
80
+ * Text shown (and announced) inside the loading affordance while
81
+ * {@link loading} is `true`. Localise by binding a translated string.
82
+ * @default 'Loading…'
83
+ */
84
+ loadingText = input('Loading…', /* @ts-ignore */
85
+ ...(ngDevMode ? [{ debugName: "loadingText" }] : /* istanbul ignore next */ []));
86
+ /**
87
+ * When `true`, a page beyond the first is being fetched: renders a polite
88
+ * bottom status row (`loadingText`) after the last option. The listbox and
89
+ * existing options stay interactive.
90
+ * @default false
91
+ */
92
+ loadingMore = input(false, { ...(ngDevMode ? { debugName: "loadingMore" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
93
+ /**
94
+ * Whether more pages exist. When `true` the panel observes its scroll owner
95
+ * and emits {@link loadMore} as the user nears the end of the list.
96
+ * @default false
97
+ */
98
+ hasMore = input(false, { ...(ngDevMode ? { debugName: "hasMore" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
99
+ /** Distance (px) from the end of the scroll owner at which {@link loadMore} fires. */
100
+ infiniteScrollThreshold = input(150, /* @ts-ignore */
101
+ ...(ngDevMode ? [{ debugName: "infiniteScrollThreshold" }] : /* istanbul ignore next */ []));
102
+ /** Emits when the user scrolls within `infiniteScrollThreshold` of the end while `hasMore`. */
103
+ loadMore = output();
104
+ /**
105
+ * @protected Effective listbox id forwarded to the aria `Listbox.id` input on
106
+ * the inner `<mlv-list>`. Uses the consumer-provided {@link listboxId} when
107
+ * set, otherwise a stable generated fallback so the rendered listbox always
108
+ * carries a valid unique DOM id (aria would otherwise mint its own, breaking
109
+ * a parent trigger's `aria-controls` linkage).
110
+ */
111
+ _resolvedListboxId = computed(() => this.listboxId() ?? this._fallbackListboxId, /* @ts-ignore */
112
+ ...(ngDevMode ? [{ debugName: "_resolvedListboxId" }] : /* istanbul ignore next */ []));
113
+ /** @private Stable generated id used when no `listboxId` is supplied. */
114
+ _fallbackListboxId = mlvNextId('mlv-dropdown-listbox');
115
+ /**
116
+ * @protected Whether the current options declare groups (at least one option
117
+ * carries a non-empty `group`). When `false` the template renders the exact
118
+ * flat option list as before — plain / ungrouped arrays are unaffected.
119
+ */
120
+ _isGrouped = computed(() => hasOptionGroups(this.options()), /* @ts-ignore */
121
+ ...(ngDevMode ? [{ debugName: "_isGrouped" }] : /* istanbul ignore next */ []));
122
+ /**
123
+ * @protected The options clustered into consecutive same-group runs for
124
+ * rendering under sticky headers. Consecutive-run grouping (no reordering)
125
+ * keeps DOM order identical to the flat `options()` order, so option indices,
126
+ * `optionId`, `activeIndex`, and aria's DOM-order navigation all stay aligned.
127
+ * Each entry retains its flat index into `options()`. A run of options without
128
+ * a group (empty/undefined) becomes a headerless cluster (`label: null`).
129
+ */
130
+ _groups = computed(() => {
131
+ const listboxId = this._resolvedListboxId();
132
+ const groups = [];
133
+ this.options().forEach((option, index) => {
134
+ const label = option.group ? option.group : null;
135
+ const current = groups[groups.length - 1];
136
+ if (current && current.label === label) {
137
+ current.entries.push({ option, index });
138
+ }
139
+ else {
140
+ groups.push({
141
+ label,
142
+ headerId: label ? `${listboxId}-group-${groups.length}` : null,
143
+ entries: [{ option, index }],
144
+ });
145
+ }
146
+ });
147
+ return groups;
148
+ }, /* @ts-ignore */
149
+ ...(ngDevMode ? [{ debugName: "_groups" }] : /* istanbul ignore next */ []));
150
+ /** @protected Effective max panel height in px — the `maxHeight` input when set, else the viewport-derived default. */
151
+ _calculatedMaxHeight = computed(() => {
152
+ const inputMaxHeight = this.maxHeight();
153
+ return inputMaxHeight > 0 ? inputMaxHeight : this._defaultMaxHeight();
154
+ }, /* @ts-ignore */
155
+ ...(ngDevMode ? [{ debugName: "_calculatedMaxHeight" }] : /* istanbul ignore next */ []));
156
+ valueChange = output();
157
+ /** @private Selection service coordinating focus-first requests from a parent select/combobox. */
158
+ _selectionService = inject(MlvSelectionService);
159
+ /** @private Set of currently selected values for O(1) membership checks. */
160
+ _selectedSet = computed(() => new Set(this.selectedValues()), /* @ts-ignore */
161
+ ...(ngDevMode ? [{ debugName: "_selectedSet" }] : /* istanbul ignore next */ []));
162
+ /** @private Default max panel height (px) derived from the viewport height. */
163
+ _defaultMaxHeight = signal(0, /* @ts-ignore */
164
+ ...(ngDevMode ? [{ debugName: "_defaultMaxHeight" }] : /* istanbul ignore next */ []));
165
+ /** @private The inner selectable list directive, used to move focus to the first option. */
166
+ _listSelectable = viewChild(MlvListSelectable, /* @ts-ignore */
167
+ ...(ngDevMode ? [{ debugName: "_listSelectable" }] : /* istanbul ignore next */ []));
168
+ /** @private The panel's own scrollbar (`scrollMode="self"` only). */
169
+ _scrollbar = viewChild(MlvScrollbar, /* @ts-ignore */
170
+ ...(ngDevMode ? [{ debugName: "_scrollbar" }] : /* istanbul ignore next */ []));
171
+ /** @private The sentinel-hosted infinite-scroll directive, re-checked after each option append. */
172
+ _infiniteScroll = viewChild(MlvInfiniteScroll, /* @ts-ignore */
173
+ ...(ngDevMode ? [{ debugName: "_infiniteScroll" }] : /* istanbul ignore next */ []));
174
+ /**
175
+ * @protected The element that actually scrolls: the panel's own scrollbar
176
+ * viewport (`scrollMode="self"`) or the nearest ancestor `mlv-scrollbar`
177
+ * viewport — the owning `mlv-popup`'s — in parent mode. Resolved after the
178
+ * first render; the sentinel directive stays disabled until then.
179
+ */
180
+ _scrollContainer = signal(null, /* @ts-ignore */
181
+ ...(ngDevMode ? [{ debugName: "_scrollContainer" }] : /* istanbul ignore next */ []));
182
+ /**
183
+ * @private Whether the scroll-owner lookup has already run. It needs the first
184
+ * render, so a `null` {@link _scrollContainer} before that means "not resolved
185
+ * yet", not "no owner" — the dev warning must not fire on it.
186
+ */
187
+ _scrollOwnerResolved = signal(false, /* @ts-ignore */
188
+ ...(ngDevMode ? [{ debugName: "_scrollOwnerResolved" }] : /* istanbul ignore next */ []));
189
+ /** @private Latches the dev-mode "no scroll owner" warning to once per panel. */
190
+ _warnedNoScrollOwner = false;
191
+ /** @private Host element, used to scroll the active option into view (activedescendant model). */
192
+ _host = inject(ElementRef);
193
+ /** @private Angular-provided document used to access the browser viewport safely. */
194
+ _document = inject(DOCUMENT);
195
+ constructor() {
196
+ const viewport = this._document.defaultView;
197
+ if (viewport) {
198
+ fromEvent(viewport, 'resize')
199
+ .pipe(startWith(null), takeUntilDestroyed())
200
+ .subscribe(() => {
201
+ this._defaultMaxHeight.set(viewport.innerHeight * 0.4);
202
+ });
203
+ }
204
+ this._selectionService.focusFirst$
205
+ .pipe(takeUntilDestroyed())
206
+ .subscribe(() => {
207
+ this._listSelectable()?.focusFirst();
208
+ });
209
+ // Keep the activedescendant-active option scrolled into view. DOM focus
210
+ // never lands on the option in this mode (it stays on the owning combobox
211
+ // input), so the native scroll-on-focus does not apply.
212
+ effect(() => {
213
+ const index = this.activeIndex();
214
+ if (this.focusMode() !== 'activedescendant' || index < 0)
215
+ return;
216
+ const el = this._host.nativeElement.querySelector(`[id="${this.optionId(index)}"]`);
217
+ // Optional call: `scrollIntoView` is absent in some environments (jsdom).
218
+ el?.scrollIntoView?.({ block: 'nearest' });
219
+ });
220
+ // Resolve the paging sentinel's scroll owner once the view exists: the
221
+ // panel's own scrollbar viewport, or the ancestor popup viewport it
222
+ // delegates scrolling to.
223
+ afterNextRender(() => {
224
+ const own = this._scrollbar()?.viewportElement ?? null;
225
+ const parent = this._host.nativeElement.closest('.mlv-scrollbar__viewport');
226
+ this._scrollContainer.set(this.scrollMode() === 'self' ? own : parent);
227
+ this._scrollOwnerResolved.set(true);
228
+ });
229
+ // Dev-mode diagnostic: an armed sentinel with no scroll owner is silent —
230
+ // `scrollMode="parent"` finds nothing unless the panel renders inside an
231
+ // `mlv-scrollbar` viewport. Re-checked reactively so a `hasMore` that flips
232
+ // true later is caught too; warned at most once per panel instance.
233
+ if (isDevMode()) {
234
+ effect(() => {
235
+ const missing = this.hasMore() &&
236
+ this._scrollOwnerResolved() &&
237
+ this._scrollContainer() === null;
238
+ if (!missing)
239
+ return;
240
+ untracked(() => {
241
+ if (this._warnedNoScrollOwner)
242
+ return;
243
+ this._warnedNoScrollOwner = true;
244
+ console.warn('[mlv-dropdown-panel] hasMore is set but no scroll owner was found — in scrollMode="parent" the panel must render inside an mlv-scrollbar viewport (e.g. mlv-popup); lazy paging will not fire.');
245
+ });
246
+ });
247
+ }
248
+ // Auto-fill: after any render where the option set changed, re-measure so a
249
+ // short page immediately requests the next one.
250
+ afterRenderEffect(() => {
251
+ this.options();
252
+ this._infiniteScroll()?.check();
253
+ });
254
+ }
255
+ isValueSelected(value) {
256
+ return this._selectedSet().has(value);
257
+ }
258
+ /**
259
+ * Deterministic DOM `id` for the option at `index`, forwarded to aria's
260
+ * `ngOption` id. An owning combobox computes the same id (via the shared
261
+ * {@link optionId} helper) to wire its input's `aria-activedescendant`.
262
+ */
263
+ optionId(index) {
264
+ return optionId(this._resolvedListboxId(), index);
265
+ }
266
+ /**
267
+ * Re-emits the aria listbox selection. `@angular/aria`'s `ngListbox` emits the
268
+ * selected values array directly (unlike CdkListbox's `ListboxValueChangeEvent`).
269
+ */
270
+ onValueChange(values) {
271
+ this.valueChange.emit(values);
272
+ }
273
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDropdownPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
274
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvDropdownPanel, isStandalone: true, selector: "mlv-dropdown-panel", inputs: { scrollMode: { classPropertyName: "scrollMode", publicName: "scrollMode", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, focusMode: { classPropertyName: "focusMode", publicName: "focusMode", isSignal: true, isRequired: false, transformFunction: null }, activeIndex: { classPropertyName: "activeIndex", publicName: "activeIndex", isSignal: true, isRequired: false, transformFunction: null }, listboxId: { classPropertyName: "listboxId", publicName: "listboxId", isSignal: true, isRequired: false, transformFunction: null }, highlightQuery: { classPropertyName: "highlightQuery", publicName: "highlightQuery", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingText: { classPropertyName: "loadingText", publicName: "loadingText", isSignal: true, isRequired: false, transformFunction: null }, loadingMore: { classPropertyName: "loadingMore", publicName: "loadingMore", isSignal: true, isRequired: false, transformFunction: null }, hasMore: { classPropertyName: "hasMore", publicName: "hasMore", isSignal: true, isRequired: false, transformFunction: null }, infiniteScrollThreshold: { classPropertyName: "infiniteScrollThreshold", publicName: "infiniteScrollThreshold", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loadMore: "loadMore", valueChange: "valueChange" }, host: { properties: { "class.mlv-dropdown-panel--parent-scroll": "scrollMode() === \"parent\"", "class.mlv-dropdown-panel--loading": "loading()", "style.max-height.px": "_calculatedMaxHeight()" }, classAttribute: "mlv-dropdown-panel" }, viewQueries: [{ propertyName: "_listSelectable", first: true, predicate: MlvListSelectable, descendants: true, isSignal: true }, { propertyName: "_scrollbar", first: true, predicate: MlvScrollbar, descendants: true, isSignal: true }, { propertyName: "_infiniteScroll", first: true, predicate: MlvInfiniteScroll, descendants: true, isSignal: true }], ngImport: i0, template: "@if (scrollMode() === 'self') {\n<mlv-scrollbar class=\"mlv-dropdown-panel__scrollbar\" [viewportTabIndex]=\"-1\">\n <ng-container [ngTemplateOutlet]=\"panelContent\" />\n</mlv-scrollbar>\n} @else {\n<ng-container [ngTemplateOutlet]=\"panelContent\" />\n}\n\n<ng-template #panelContent>\n <!-- Async loading affordance (used by [mlvAutocomplete]). Rendered above the\n listbox so the listbox element (aria-controls target) still exists while a\n search resolves; the empty \"no results\" projection is suppressed meanwhile. -->\n @if (loading()) {\n <div class=\"mlv-dropdown-panel__loading\" role=\"status\" aria-live=\"polite\">\n <span class=\"mlv-dropdown-panel__spinner\" aria-hidden=\"true\"></span>\n <span class=\"mlv-dropdown-panel__loading-text\">{{ loadingText() }}</span>\n </div>\n }\n\n <!-- selectionMode=\"explicit\" + softDisabled=\"false\" reproduce the previous CdkListbox\n behaviour: arrow keys move focus (never commit the value) and skip disabled options.\n listRole/itemRole are pinned to the listbox pattern so aria's pointer selection can\n resolve each option via closest('[role=\"option\"]').\n [listboxId] forwards the consumer id into aria's Listbox.id input so the rendered\n [attr.id]=\"id()\" equals it \u2014 otherwise aria mints its own id and a parent\n select/combobox trigger's aria-controls would dangle. -->\n <mlv-list\n class=\"mlv-dropdown-panel__listbox\"\n selectable\n listRole=\"listbox\"\n selectionMode=\"explicit\"\n [softDisabled]=\"false\"\n [focusMode]=\"focusMode()\"\n [attr.aria-busy]=\"loading() || loadingMore() ? true : null\"\n [listboxId]=\"_resolvedListboxId()\"\n [multiple]=\"multiple()\"\n [value]=\"selectedValues()\"\n (valueChange)=\"onValueChange($event)\"\n >\n @if (_isGrouped()) {\n <!-- Grouped rendering: consecutive same-group runs become APG listbox groups\n (role=\"group\" + aria-labelledby \u2192 a non-selectable, presentational sticky\n header). Options stay flat descendants of the listbox, so aria registers\n and navigates them exactly as ungrouped; headers are not aria options and\n are skipped by keyboard nav / type-ahead. Each option keeps its flat index\n so optionId / activeIndex line up with an owning combobox. -->\n @for (group of _groups(); track $index) { @if (group.label) {\n <div\n class=\"mlv-dropdown-panel__group\"\n role=\"group\"\n [attr.aria-labelledby]=\"group.headerId\"\n >\n <div\n class=\"mlv-dropdown-panel__group-header\"\n role=\"presentation\"\n [id]=\"group.headerId\"\n >\n {{ group.label }}\n </div>\n @for (entry of group.entries; track entry.option.value) {\n <ng-container\n *ngTemplateOutlet=\"optionRow; context: { option: entry.option, index: entry.index }\"\n />\n }\n </div>\n } @else { @for (entry of group.entries; track entry.option.value) {\n <ng-container\n *ngTemplateOutlet=\"optionRow; context: { option: entry.option, index: entry.index }\"\n />\n } } } } @else { @for (option of options(); track option.value; let i =\n $index) {\n <ng-container\n *ngTemplateOutlet=\"optionRow; context: { option: option, index: i }\"\n />\n } @empty { @if (!loading()) {\n <ng-content />\n } } }\n\n <!-- Single source of truth for an option row, outlet-ed by both the flat and\n the grouped branches. Declared INSIDE <mlv-list> so its declaration\n injector carries the aria LISTBOX token \u2014 an outlet-ed <mlv-list-item>\n resolves DI from the template's declaration context, not its insertion\n point. `index` is the flat index into options(). -->\n <ng-template #optionRow let-option=\"option\" let-index=\"index\">\n <mlv-list-item\n class=\"mlv-dropdown-panel__item\"\n itemRole=\"option\"\n [class.mlv-dropdown-panel__item--active]=\"index === activeIndex()\"\n [value]=\"option.value\"\n [label]=\"option.label\"\n [optionId]=\"optionId(index)\"\n >\n @if (itemTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"itemTemplate()!; context: { $implicit: option }\"\n />\n } @else {\n <span class=\"mlv-dropdown-panel__item-label\">\n @if (highlightQuery()) { @for (seg of option.label |\n mlvHighlightMatch: highlightQuery(); track $index) { @if (seg.matched)\n {<mark class=\"mlv-dropdown-panel__match\">{{ seg.text }}</mark>} @else\n {{{ seg.text }}} } } @else {{{ option.label }}}\n </span>\n @if (isValueSelected(option.value)) {\n <svg\n class=\"mlv-dropdown-panel__item-check\"\n lucideCheck\n size=\"16\"\n strokeWidth=\"2\"\n />\n } }\n </mlv-list-item>\n </ng-template>\n </mlv-list>\n\n <!-- Next-page affordance. Sits after the last option (unlike the top\n `__loading` row) so appended rows are not pushed around, and stays a\n polite status region \u2014 the listbox itself keeps its options interactive. -->\n @if (loadingMore()) {\n <div\n class=\"mlv-dropdown-panel__loading-more\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <span class=\"mlv-dropdown-panel__spinner\" aria-hidden=\"true\"></span>\n <span class=\"mlv-dropdown-panel__loading-text\">{{ loadingText() }}</span>\n </div>\n }\n\n <!-- Paging sentinel. The directive listens on the real scroll owner via\n [scrollContainer]; it stays disabled until that element is resolved so\n its initial measurement never runs against the non-scrolling panel host. -->\n <div\n class=\"mlv-dropdown-panel__sentinel\"\n aria-hidden=\"true\"\n mlvInfiniteScroll\n [scrollContainer]=\"_scrollContainer()\"\n [disabled]=\"!hasMore() || !_scrollContainer()\"\n [hasMore]=\"hasMore()\"\n [loading]=\"loading() || loadingMore()\"\n [threshold]=\"infiniteScrollThreshold()\"\n (loadMore)=\"loadMore.emit()\"\n ></div>\n</ng-template>\n", styles: [".mlv-dropdown-panel{display:flex;flex-direction:column;overflow:hidden;min-height:0}.mlv-dropdown-panel--surface{background-color:var(--mlv-background-raised);border:var(--mlv-stroke-width) solid var(--mlv-border-subtle);border-radius:var(--mlv-popover-surface-radius);box-shadow:var(--mlv-shadow-floating)}.mlv-dropdown-panel--parent-scroll{overflow:visible}.mlv-dropdown-panel__scrollbar{flex:1 1 auto;width:100%;min-height:0}.mlv-dropdown-panel__scrollbar>.mlv-scrollbar__viewport{overflow-x:hidden}.mlv-dropdown-panel .mlv-dropdown-panel__listbox{--mlv-list-padding-block: var(--mlv-popover-inset);--mlv-list-padding-inline: var(--mlv-popover-inset)}.mlv-dropdown-panel .mlv-dropdown-panel__listbox .mlv-list-item__content{display:flex;align-items:center;justify-content:space-between;width:100%}.mlv-dropdown-panel__item--active .mlv-list-item__surface{background-color:var(--mlv-popover-item-bg-hover)}.mlv-dropdown-panel__group{display:block}.mlv-dropdown-panel .mlv-dropdown-panel__group:not(:last-child){margin-bottom:var(--mlv-spacing-1)}.mlv-dropdown-panel__group-header{position:sticky;top:0;z-index:1;padding:var(--mlv-spacing-1-5) var(--mlv-spacing-2);font-size:var(--mlv-typography-body-s-size);font-weight:var(--mlv-font-weight-semibold);line-height:var(--mlv-typography-body-s-line-height);color:var(--mlv-text-secondary);text-transform:uppercase;letter-spacing:.06em;background-color:color-mix(in srgb,var(--mlv-background-raised) 88%,transparent);backdrop-filter:saturate(1.4) blur(.5rem);-webkit-backdrop-filter:saturate(1.4) blur(.5rem);pointer-events:none;-webkit-user-select:none;user-select:none}.mlv-dropdown-panel__item-label{flex:1;min-width:0}.mlv-dropdown-panel__item-check{color:var(--mlv-text-action);flex-shrink:0}.mlv-dropdown-panel__match{background-color:transparent;color:var(--mlv-text-action);font-weight:var(--mlv-font-weight-semibold);padding:0}.mlv-dropdown-panel__loading,.mlv-dropdown-panel__loading-more{display:flex;align-items:center;gap:var(--mlv-spacing-2);padding:var(--mlv-spacing-2) var(--mlv-spacing-3);color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-s-size);line-height:var(--mlv-typography-body-s-line-height)}.mlv-dropdown-panel--loading .mlv-dropdown-panel__item-label,.mlv-dropdown-panel--loading .mlv-dropdown-panel__item-check{color:var(--mlv-text-secondary);transition:color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-dropdown-panel__sentinel{height:0;overflow:hidden}.mlv-dropdown-panel__spinner{width:1rem;height:1rem;flex-shrink:0;border:var(--mlv-stroke-width) solid var(--mlv-border-normal);border-top-color:var(--mlv-text-action);border-radius:var(--mlv-radius-full);animation:mlv-dropdown-panel-spin var(--mlv-duration-slower) linear infinite}@media(prefers-reduced-motion:reduce){.mlv-dropdown-panel__spinner{animation-duration:calc(var(--mlv-duration-slower) * 4)}.mlv-dropdown-panel--loading .mlv-dropdown-panel__item-label,.mlv-dropdown-panel--loading .mlv-dropdown-panel__item-check{transition:none}}@keyframes mlv-dropdown-panel-spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MlvList, selector: "mlv-list", inputs: ["listRole", "variant"] }, { kind: "component", type: MlvListItem, selector: "mlv-list-item", inputs: ["itemRole", "unread", "accent"] }, { kind: "directive", type: MlvListItemSelectable, selector: "mlv-list-item[value]", exportAs: ["uiListItemSelectable"] }, { kind: "directive", type: MlvListSelectable, selector: "mlv-list[selectable]" }, { kind: "component", type: LucideCheck, selector: "svg[lucideCheck]" }, { kind: "component", type: MlvScrollbar, selector: "mlv-scrollbar", inputs: ["orientation", "scrollbarSize", "disabled", "ariaLabel", "viewportTabIndex"] }, { kind: "directive", type: MlvInfiniteScroll, selector: "[mlvInfiniteScroll]", inputs: ["threshold", "loading", "hasMore", "disabled", "orientation", "scrollContainer"], outputs: ["loadMore"], exportAs: ["mlvInfiniteScroll"] }, { kind: "pipe", type: MlvHighlightMatchPipe, name: "mlvHighlightMatch" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
275
+ }
276
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDropdownPanel, decorators: [{
277
+ type: Component,
278
+ args: [{ selector: 'mlv-dropdown-panel', imports: [
279
+ NgTemplateOutlet,
280
+ MlvList,
281
+ MlvListItem,
282
+ MlvListItemSelectable,
283
+ MlvListSelectable,
284
+ LucideCheck,
285
+ MlvHighlightMatchPipe,
286
+ MlvScrollbar,
287
+ MlvInfiniteScroll,
288
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
289
+ class: 'mlv-dropdown-panel',
290
+ '[class.mlv-dropdown-panel--parent-scroll]': 'scrollMode() === "parent"',
291
+ '[class.mlv-dropdown-panel--loading]': 'loading()',
292
+ '[style.max-height.px]': '_calculatedMaxHeight()',
293
+ }, template: "@if (scrollMode() === 'self') {\n<mlv-scrollbar class=\"mlv-dropdown-panel__scrollbar\" [viewportTabIndex]=\"-1\">\n <ng-container [ngTemplateOutlet]=\"panelContent\" />\n</mlv-scrollbar>\n} @else {\n<ng-container [ngTemplateOutlet]=\"panelContent\" />\n}\n\n<ng-template #panelContent>\n <!-- Async loading affordance (used by [mlvAutocomplete]). Rendered above the\n listbox so the listbox element (aria-controls target) still exists while a\n search resolves; the empty \"no results\" projection is suppressed meanwhile. -->\n @if (loading()) {\n <div class=\"mlv-dropdown-panel__loading\" role=\"status\" aria-live=\"polite\">\n <span class=\"mlv-dropdown-panel__spinner\" aria-hidden=\"true\"></span>\n <span class=\"mlv-dropdown-panel__loading-text\">{{ loadingText() }}</span>\n </div>\n }\n\n <!-- selectionMode=\"explicit\" + softDisabled=\"false\" reproduce the previous CdkListbox\n behaviour: arrow keys move focus (never commit the value) and skip disabled options.\n listRole/itemRole are pinned to the listbox pattern so aria's pointer selection can\n resolve each option via closest('[role=\"option\"]').\n [listboxId] forwards the consumer id into aria's Listbox.id input so the rendered\n [attr.id]=\"id()\" equals it \u2014 otherwise aria mints its own id and a parent\n select/combobox trigger's aria-controls would dangle. -->\n <mlv-list\n class=\"mlv-dropdown-panel__listbox\"\n selectable\n listRole=\"listbox\"\n selectionMode=\"explicit\"\n [softDisabled]=\"false\"\n [focusMode]=\"focusMode()\"\n [attr.aria-busy]=\"loading() || loadingMore() ? true : null\"\n [listboxId]=\"_resolvedListboxId()\"\n [multiple]=\"multiple()\"\n [value]=\"selectedValues()\"\n (valueChange)=\"onValueChange($event)\"\n >\n @if (_isGrouped()) {\n <!-- Grouped rendering: consecutive same-group runs become APG listbox groups\n (role=\"group\" + aria-labelledby \u2192 a non-selectable, presentational sticky\n header). Options stay flat descendants of the listbox, so aria registers\n and navigates them exactly as ungrouped; headers are not aria options and\n are skipped by keyboard nav / type-ahead. Each option keeps its flat index\n so optionId / activeIndex line up with an owning combobox. -->\n @for (group of _groups(); track $index) { @if (group.label) {\n <div\n class=\"mlv-dropdown-panel__group\"\n role=\"group\"\n [attr.aria-labelledby]=\"group.headerId\"\n >\n <div\n class=\"mlv-dropdown-panel__group-header\"\n role=\"presentation\"\n [id]=\"group.headerId\"\n >\n {{ group.label }}\n </div>\n @for (entry of group.entries; track entry.option.value) {\n <ng-container\n *ngTemplateOutlet=\"optionRow; context: { option: entry.option, index: entry.index }\"\n />\n }\n </div>\n } @else { @for (entry of group.entries; track entry.option.value) {\n <ng-container\n *ngTemplateOutlet=\"optionRow; context: { option: entry.option, index: entry.index }\"\n />\n } } } } @else { @for (option of options(); track option.value; let i =\n $index) {\n <ng-container\n *ngTemplateOutlet=\"optionRow; context: { option: option, index: i }\"\n />\n } @empty { @if (!loading()) {\n <ng-content />\n } } }\n\n <!-- Single source of truth for an option row, outlet-ed by both the flat and\n the grouped branches. Declared INSIDE <mlv-list> so its declaration\n injector carries the aria LISTBOX token \u2014 an outlet-ed <mlv-list-item>\n resolves DI from the template's declaration context, not its insertion\n point. `index` is the flat index into options(). -->\n <ng-template #optionRow let-option=\"option\" let-index=\"index\">\n <mlv-list-item\n class=\"mlv-dropdown-panel__item\"\n itemRole=\"option\"\n [class.mlv-dropdown-panel__item--active]=\"index === activeIndex()\"\n [value]=\"option.value\"\n [label]=\"option.label\"\n [optionId]=\"optionId(index)\"\n >\n @if (itemTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"itemTemplate()!; context: { $implicit: option }\"\n />\n } @else {\n <span class=\"mlv-dropdown-panel__item-label\">\n @if (highlightQuery()) { @for (seg of option.label |\n mlvHighlightMatch: highlightQuery(); track $index) { @if (seg.matched)\n {<mark class=\"mlv-dropdown-panel__match\">{{ seg.text }}</mark>} @else\n {{{ seg.text }}} } } @else {{{ option.label }}}\n </span>\n @if (isValueSelected(option.value)) {\n <svg\n class=\"mlv-dropdown-panel__item-check\"\n lucideCheck\n size=\"16\"\n strokeWidth=\"2\"\n />\n } }\n </mlv-list-item>\n </ng-template>\n </mlv-list>\n\n <!-- Next-page affordance. Sits after the last option (unlike the top\n `__loading` row) so appended rows are not pushed around, and stays a\n polite status region \u2014 the listbox itself keeps its options interactive. -->\n @if (loadingMore()) {\n <div\n class=\"mlv-dropdown-panel__loading-more\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <span class=\"mlv-dropdown-panel__spinner\" aria-hidden=\"true\"></span>\n <span class=\"mlv-dropdown-panel__loading-text\">{{ loadingText() }}</span>\n </div>\n }\n\n <!-- Paging sentinel. The directive listens on the real scroll owner via\n [scrollContainer]; it stays disabled until that element is resolved so\n its initial measurement never runs against the non-scrolling panel host. -->\n <div\n class=\"mlv-dropdown-panel__sentinel\"\n aria-hidden=\"true\"\n mlvInfiniteScroll\n [scrollContainer]=\"_scrollContainer()\"\n [disabled]=\"!hasMore() || !_scrollContainer()\"\n [hasMore]=\"hasMore()\"\n [loading]=\"loading() || loadingMore()\"\n [threshold]=\"infiniteScrollThreshold()\"\n (loadMore)=\"loadMore.emit()\"\n ></div>\n</ng-template>\n", styles: [".mlv-dropdown-panel{display:flex;flex-direction:column;overflow:hidden;min-height:0}.mlv-dropdown-panel--surface{background-color:var(--mlv-background-raised);border:var(--mlv-stroke-width) solid var(--mlv-border-subtle);border-radius:var(--mlv-popover-surface-radius);box-shadow:var(--mlv-shadow-floating)}.mlv-dropdown-panel--parent-scroll{overflow:visible}.mlv-dropdown-panel__scrollbar{flex:1 1 auto;width:100%;min-height:0}.mlv-dropdown-panel__scrollbar>.mlv-scrollbar__viewport{overflow-x:hidden}.mlv-dropdown-panel .mlv-dropdown-panel__listbox{--mlv-list-padding-block: var(--mlv-popover-inset);--mlv-list-padding-inline: var(--mlv-popover-inset)}.mlv-dropdown-panel .mlv-dropdown-panel__listbox .mlv-list-item__content{display:flex;align-items:center;justify-content:space-between;width:100%}.mlv-dropdown-panel__item--active .mlv-list-item__surface{background-color:var(--mlv-popover-item-bg-hover)}.mlv-dropdown-panel__group{display:block}.mlv-dropdown-panel .mlv-dropdown-panel__group:not(:last-child){margin-bottom:var(--mlv-spacing-1)}.mlv-dropdown-panel__group-header{position:sticky;top:0;z-index:1;padding:var(--mlv-spacing-1-5) var(--mlv-spacing-2);font-size:var(--mlv-typography-body-s-size);font-weight:var(--mlv-font-weight-semibold);line-height:var(--mlv-typography-body-s-line-height);color:var(--mlv-text-secondary);text-transform:uppercase;letter-spacing:.06em;background-color:color-mix(in srgb,var(--mlv-background-raised) 88%,transparent);backdrop-filter:saturate(1.4) blur(.5rem);-webkit-backdrop-filter:saturate(1.4) blur(.5rem);pointer-events:none;-webkit-user-select:none;user-select:none}.mlv-dropdown-panel__item-label{flex:1;min-width:0}.mlv-dropdown-panel__item-check{color:var(--mlv-text-action);flex-shrink:0}.mlv-dropdown-panel__match{background-color:transparent;color:var(--mlv-text-action);font-weight:var(--mlv-font-weight-semibold);padding:0}.mlv-dropdown-panel__loading,.mlv-dropdown-panel__loading-more{display:flex;align-items:center;gap:var(--mlv-spacing-2);padding:var(--mlv-spacing-2) var(--mlv-spacing-3);color:var(--mlv-text-secondary);font-size:var(--mlv-typography-body-s-size);line-height:var(--mlv-typography-body-s-line-height)}.mlv-dropdown-panel--loading .mlv-dropdown-panel__item-label,.mlv-dropdown-panel--loading .mlv-dropdown-panel__item-check{color:var(--mlv-text-secondary);transition:color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-dropdown-panel__sentinel{height:0;overflow:hidden}.mlv-dropdown-panel__spinner{width:1rem;height:1rem;flex-shrink:0;border:var(--mlv-stroke-width) solid var(--mlv-border-normal);border-top-color:var(--mlv-text-action);border-radius:var(--mlv-radius-full);animation:mlv-dropdown-panel-spin var(--mlv-duration-slower) linear infinite}@media(prefers-reduced-motion:reduce){.mlv-dropdown-panel__spinner{animation-duration:calc(var(--mlv-duration-slower) * 4)}.mlv-dropdown-panel--loading .mlv-dropdown-panel__item-label,.mlv-dropdown-panel--loading .mlv-dropdown-panel__item-check{transition:none}}@keyframes mlv-dropdown-panel-spin{to{transform:rotate(360deg)}}\n"] }]
294
+ }], ctorParameters: () => [], propDecorators: { scrollMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollMode", required: false }] }], minHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "minHeight", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], focusMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusMode", required: false }] }], activeIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeIndex", required: false }] }], listboxId: [{ type: i0.Input, args: [{ isSignal: true, alias: "listboxId", required: false }] }], highlightQuery: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightQuery", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], loadingText: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingText", required: false }] }], loadingMore: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingMore", required: false }] }], hasMore: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasMore", required: false }] }], infiniteScrollThreshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "infiniteScrollThreshold", required: false }] }], loadMore: [{ type: i0.Output, args: ["loadMore"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], _listSelectable: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MlvListSelectable), { isSignal: true }] }], _scrollbar: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MlvScrollbar), { isSignal: true }] }], _infiniteScroll: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MlvInfiniteScroll), { isSignal: true }] }] } });
295
+ //# sourceMappingURL=dropdown-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-panel.js","sourceRoot":"","sources":["../../../../../../../libs/core/dropdown/src/lib/dropdown-panel/dropdown-panel.ts","../../../../../../../libs/core/dropdown/src/lib/dropdown-panel/dropdown-panel.html"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,SAAS,EACT,QAAQ,EACR,MAAM,EACN,UAAU,EACV,MAAM,EACN,KAAK,EACL,SAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,SAAS,EACT,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,OAAO,EACP,WAAW,EACX,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;;AAgDhE,MAAM,OAAO,gBAAgB;IAC3B;;;;;OAKG;IACM,UAAU,GAAG,KAAK,CAAoB,MAAM;mFAAC,CAAC;IAE9C,SAAS,GAAG,KAAK,CAAS,CAAC;kFAAC,CAAC;IAC7B,SAAS,GAAG,KAAK,CAAS,CAAC;kFAAC,CAAC;IAC7B,OAAO,GAAG,KAAK,CAAuB,EAAE;gFAAC,CAAC;IACnD,gDAAgD;IACvC,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFACpD,SAAS,EAAE,qBAAqB,GAChC,CAAC;IACM,cAAc,GAAG,KAAK,CAAM,EAAE;uFAAC,CAAC;IAChC,YAAY,GAAG,KAAK,CAElB,IAAI;qFAAC,CAAC;IACjB;;;;;;;;;OASG;IACM,SAAS,GAAG,KAAK,CAAgC,QAAQ;kFAAC,CAAC;IACpE;;;;;;OAMG;IACM,WAAW,GAAG,KAAK,CAAS,CAAC,CAAC;oFAAC,CAAC;IACzC;;;OAGG;IACM,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC,CAAC;IAEhD;;;;;;OAMG;IACM,cAAc,GAAG,KAAK,CAAS,EAAE;uFAAC,CAAC;IAE5C;;;;OAIG;IACM,OAAO,GAAG,KAAK,CAAwB,KAAK,+EACnD,SAAS,EAAE,qBAAqB,GAChC,CAAC;IAEH;;;;OAIG;IACM,WAAW,GAAG,KAAK,CAAS,UAAU;oFAAC,CAAC;IAEjD;;;;;OAKG;IACM,WAAW,GAAG,KAAK,CAAwB,KAAK,mFACvD,SAAS,EAAE,qBAAqB,GAChC,CAAC;IAEH;;;;OAIG;IACM,OAAO,GAAG,KAAK,CAAwB,KAAK,+EACnD,SAAS,EAAE,qBAAqB,GAChC,CAAC;IAEH,sFAAsF;IAC7E,uBAAuB,GAAG,KAAK,CAAS,GAAG;gGAAC,CAAC;IAEtD,+FAA+F;IACtF,QAAQ,GAAG,MAAM,EAAQ,CAAC;IAEnC;;;;;;OAMG;IACgB,kBAAkB,GAAG,QAAQ,CAC9C,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,kBAAkB;2FAClD,CAAC;IAEF,yEAAyE;IACxD,kBAAkB,GAAG,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAExE;;;;OAIG;IACgB,UAAU,GAAG,QAAQ,CAAC,GAAG,EAAE,CAC5C,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;mFAChC,CAAC;IAEF;;;;;;;OAOG;IACgB,OAAO,GAAG,QAAQ,CAA2B,GAAG,EAAE;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAA6B,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACvC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK;oBACL,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI;oBAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;iBAC7B,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;gFAAC,CAAC;IAEH,uHAAuH;IACpG,oBAAoB,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACxC,OAAO,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACxE,CAAC;6FAAC,CAAC;IAEM,WAAW,GAAG,MAAM,EAAgB,CAAC;IAE9C,kGAAkG;IACjF,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACjE,4EAA4E;IAC3D,YAAY,GAAG,QAAQ,CACtC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;qFACrC,CAAC;IACF,+EAA+E;IAC9D,iBAAiB,GAAG,MAAM,CAAC,CAAC;0FAAC,CAAC;IAC/C,4FAA4F;IAC3E,eAAe,GAAG,SAAS,CAAC,iBAAiB;wFAAC,CAAC;IAEhE,qEAAqE;IACpD,UAAU,GAAG,SAAS,CAAC,YAAY;mFAAC,CAAC;IAEtD,mGAAmG;IAClF,eAAe,GAAG,SAAS,CAAC,iBAAiB;wFAAC,CAAC;IAEhE;;;;;OAKG;IACgB,gBAAgB,GAAG,MAAM,CAAqB,IAAI;yFAAC,CAAC;IAEvE;;;;OAIG;IACc,oBAAoB,GAAG,MAAM,CAAC,KAAK;6FAAC,CAAC;IAEtD,iFAAiF;IACzE,oBAAoB,GAAG,KAAK,CAAC;IAErC,kGAAkG;IACjF,KAAK,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;IACrE,qFAAqF;IACpE,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE9C;QACE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;iBAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,EAAE,CAAC;iBAC3C,SAAS,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,WAAW;aAC/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC1B,SAAS,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QAEL,wEAAwE;QACxE,0EAA0E;QAC1E,wDAAwD;QACxD,MAAM,CAAC,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,kBAAkB,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO;YACjE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAC/C,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CACjC,CAAC;YACF,0EAA0E;YAC1E,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,uEAAuE;QACvE,oEAAoE;QACpE,0BAA0B;QAC1B,eAAe,CAAC,GAAG,EAAE;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,eAAe,IAAI,IAAI,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAC7C,0BAA0B,CAC3B,CAAC;YACF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACvE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,0EAA0E;QAC1E,yEAAyE;QACzE,4EAA4E;QAC5E,oEAAoE;QACpE,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,EAAE;gBACV,MAAM,OAAO,GACX,IAAI,CAAC,OAAO,EAAE;oBACd,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI,CAAC;gBACnC,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACrB,SAAS,CAAC,GAAG,EAAE;oBACb,IAAI,IAAI,CAAC,oBAAoB;wBAAE,OAAO;oBACtC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;oBACjC,OAAO,CAAC,IAAI,CACV,gMAAgM,CACjM,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,4EAA4E;QAC5E,gDAAgD;QAChD,iBAAiB,CAAC,GAAG,EAAE;YACrB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,KAAQ;QACtB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,KAAa;QACpB,OAAO,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,MAAoB;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;uGA1RU,gBAAgB;2FAAhB,gBAAgB,wkFAkKkB,iBAAiB,6FAGtB,YAAY,kGAGP,iBAAiB,gEC7PhE,s9LAgJA,ujGDhFI,gBAAgB,oJAChB,OAAO,sFACP,WAAW,oGACX,qBAAqB,qGACrB,iBAAiB,iEACjB,WAAW,6DAEX,YAAY,iJACZ,iBAAiB,8MAFjB,qBAAqB;;2FAeZ,gBAAgB;kBAxB5B,SAAS;+BACE,oBAAoB,WACrB;wBACP,gBAAgB;wBAChB,OAAO;wBACP,WAAW;wBACX,qBAAqB;wBACrB,iBAAiB;wBACjB,WAAW;wBACX,qBAAqB;wBACrB,YAAY;wBACZ,iBAAiB;qBAClB,iBAGc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,QACzC;wBACJ,KAAK,EAAE,oBAAoB;wBAC3B,2CAA2C,EAAE,2BAA2B;wBACxE,qCAAqC,EAAE,WAAW;wBAClD,uBAAuB,EAAE,wBAAwB;qBAClD;i0DAoK4C,iBAAiB,yFAGtB,YAAY,8FAGP,iBAAiB","sourcesContent":["import type { TemplateRef } from '@angular/core';\nimport {\n afterNextRender,\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n isDevMode,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n MlvList,\n MlvListItem,\n MlvListItemSelectable,\n MlvListSelectable,\n} from '@malva-ui/core/list';\nimport { LucideCheck } from '@lucide/angular';\nimport { MlvSelectionService } from '@malva-ui/core/form-utils';\nimport { MlvScrollbar } from '@malva-ui/core/scrollbar';\nimport { MlvInfiniteScroll } from '@malva-ui/cdk/infinite-scroll';\nimport { mlvNextId } from '@malva-ui/cdk/utils';\nimport type { MlvSelectOption } from '../select-option';\nimport { hasOptionGroups } from '../select-option';\nimport { optionId } from '../active-descendant';\nimport { MlvHighlightMatchPipe } from '../highlight-match.pipe';\nimport { fromEvent, startWith } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * One option within a rendered group, paired with its flat index into the\n * panel's `options()` array. The flat index (not a group-local index) is what\n * the panel forwards to {@link MlvDropdownPanel.optionId} and matches\n * against `activeIndex`, so an owning combobox's activedescendant model stays\n * aligned regardless of grouping.\n */\ninterface DropdownOptionEntry<T> {\n readonly option: MlvSelectOption<T>;\n readonly index: number;\n}\n\n/**\n * A rendered cluster of consecutive options that share the same group label.\n * `label`/`headerId` are `null` for an ungrouped (headerless) run.\n */\ninterface DropdownOptionGroup<T> {\n readonly label: string | null;\n readonly headerId: string | null;\n readonly entries: DropdownOptionEntry<T>[];\n}\n\n@Component({\n selector: 'mlv-dropdown-panel',\n imports: [\n NgTemplateOutlet,\n MlvList,\n MlvListItem,\n MlvListItemSelectable,\n MlvListSelectable,\n LucideCheck,\n MlvHighlightMatchPipe,\n MlvScrollbar,\n MlvInfiniteScroll,\n ],\n templateUrl: './dropdown-panel.html',\n styleUrl: './dropdown-panel.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mlv-dropdown-panel',\n '[class.mlv-dropdown-panel--parent-scroll]': 'scrollMode() === \"parent\"',\n '[class.mlv-dropdown-panel--loading]': 'loading()',\n '[style.max-height.px]': '_calculatedMaxHeight()',\n },\n})\nexport class MlvDropdownPanel<T> {\n /**\n * Chooses the single scroll owner for this panel.\n *\n * Standalone panels scroll themselves. Panels composed inside `mlv-popup`\n * delegate to the popup so the DOM never contains nested scroll regions.\n */\n readonly scrollMode = input<'self' | 'parent'>('self');\n\n readonly minHeight = input<number>(0);\n readonly maxHeight = input<number>(0);\n readonly options = input<MlvSelectOption<T>[]>([]);\n /** Whether multiple options can be selected. */\n readonly multiple = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n readonly selectedValues = input<T[]>([]);\n readonly itemTemplate = input<TemplateRef<{\n $implicit: MlvSelectOption<T>;\n }> | null>(null);\n /**\n * Focus strategy forwarded to the inner aria listbox.\n *\n * - `'roving'` (default) — DOM focus moves onto the active option (`tabindex`).\n * Used by `mlv-select`.\n * - `'activedescendant'` — DOM focus stays on the owning trigger/input; the\n * active option is tracked via `aria-activedescendant`. Used by\n * `mlv-combobox`, whose text input must retain focus so typing keeps\n * working while navigating options.\n */\n readonly focusMode = input<'roving' | 'activedescendant'>('roving');\n /**\n * Index of the option that is visually \"active\" (highlighted) under the\n * activedescendant model. `-1` (default) means no active option. The panel\n * renders a deterministic `[id]` on each option (`<listboxId>-option-<index>`)\n * so an owning combobox can point its input's `aria-activedescendant` at the\n * active row and keep the highlight in sync.\n */\n readonly activeIndex = input<number>(-1);\n /**\n * Optional HTML `id` to assign to the inner `<mlv-list>` listbox element.\n * Allows a parent combobox or select to reference this listbox via `aria-controls`.\n */\n readonly listboxId = input<string | null>(null);\n\n /**\n * When non-empty, the default option row emphasises the matched substring of\n * this query inside each suggestion label (case- and diacritic-insensitive;\n * see {@link MlvHighlightMatchPipe}). Ignored for rows rendered by a custom\n * {@link itemTemplate}. Empty (default) renders the label as plain text —\n * ungrouped, un-highlighted lists are byte-for-byte unchanged.\n */\n readonly highlightQuery = input<string>('');\n\n /**\n * When `true`, the panel renders a loading affordance instead of the option\n * list / empty state — used by `[mlvAutocomplete]` while an async `search`\n * resolves. The {@link loadingText} is announced politely.\n */\n readonly loading = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Text shown (and announced) inside the loading affordance while\n * {@link loading} is `true`. Localise by binding a translated string.\n * @default 'Loading…'\n */\n readonly loadingText = input<string>('Loading…');\n\n /**\n * When `true`, a page beyond the first is being fetched: renders a polite\n * bottom status row (`loadingText`) after the last option. The listbox and\n * existing options stay interactive.\n * @default false\n */\n readonly loadingMore = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Whether more pages exist. When `true` the panel observes its scroll owner\n * and emits {@link loadMore} as the user nears the end of the list.\n * @default false\n */\n readonly hasMore = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /** Distance (px) from the end of the scroll owner at which {@link loadMore} fires. */\n readonly infiniteScrollThreshold = input<number>(150);\n\n /** Emits when the user scrolls within `infiniteScrollThreshold` of the end while `hasMore`. */\n readonly loadMore = output<void>();\n\n /**\n * @protected Effective listbox id forwarded to the aria `Listbox.id` input on\n * the inner `<mlv-list>`. Uses the consumer-provided {@link listboxId} when\n * set, otherwise a stable generated fallback so the rendered listbox always\n * carries a valid unique DOM id (aria would otherwise mint its own, breaking\n * a parent trigger's `aria-controls` linkage).\n */\n protected readonly _resolvedListboxId = computed(\n () => this.listboxId() ?? this._fallbackListboxId,\n );\n\n /** @private Stable generated id used when no `listboxId` is supplied. */\n private readonly _fallbackListboxId = mlvNextId('mlv-dropdown-listbox');\n\n /**\n * @protected Whether the current options declare groups (at least one option\n * carries a non-empty `group`). When `false` the template renders the exact\n * flat option list as before — plain / ungrouped arrays are unaffected.\n */\n protected readonly _isGrouped = computed(() =>\n hasOptionGroups(this.options()),\n );\n\n /**\n * @protected The options clustered into consecutive same-group runs for\n * rendering under sticky headers. Consecutive-run grouping (no reordering)\n * keeps DOM order identical to the flat `options()` order, so option indices,\n * `optionId`, `activeIndex`, and aria's DOM-order navigation all stay aligned.\n * Each entry retains its flat index into `options()`. A run of options without\n * a group (empty/undefined) becomes a headerless cluster (`label: null`).\n */\n protected readonly _groups = computed<DropdownOptionGroup<T>[]>(() => {\n const listboxId = this._resolvedListboxId();\n const groups: DropdownOptionGroup<T>[] = [];\n this.options().forEach((option, index) => {\n const label = option.group ? option.group : null;\n const current = groups[groups.length - 1];\n if (current && current.label === label) {\n current.entries.push({ option, index });\n } else {\n groups.push({\n label,\n headerId: label ? `${listboxId}-group-${groups.length}` : null,\n entries: [{ option, index }],\n });\n }\n });\n return groups;\n });\n\n /** @protected Effective max panel height in px — the `maxHeight` input when set, else the viewport-derived default. */\n protected readonly _calculatedMaxHeight = computed(() => {\n const inputMaxHeight = this.maxHeight();\n return inputMaxHeight > 0 ? inputMaxHeight : this._defaultMaxHeight();\n });\n\n readonly valueChange = output<readonly T[]>();\n\n /** @private Selection service coordinating focus-first requests from a parent select/combobox. */\n private readonly _selectionService = inject(MlvSelectionService);\n /** @private Set of currently selected values for O(1) membership checks. */\n private readonly _selectedSet = computed(\n () => new Set(this.selectedValues()),\n );\n /** @private Default max panel height (px) derived from the viewport height. */\n private readonly _defaultMaxHeight = signal(0);\n /** @private The inner selectable list directive, used to move focus to the first option. */\n private readonly _listSelectable = viewChild(MlvListSelectable);\n\n /** @private The panel's own scrollbar (`scrollMode=\"self\"` only). */\n private readonly _scrollbar = viewChild(MlvScrollbar);\n\n /** @private The sentinel-hosted infinite-scroll directive, re-checked after each option append. */\n private readonly _infiniteScroll = viewChild(MlvInfiniteScroll);\n\n /**\n * @protected The element that actually scrolls: the panel's own scrollbar\n * viewport (`scrollMode=\"self\"`) or the nearest ancestor `mlv-scrollbar`\n * viewport — the owning `mlv-popup`'s — in parent mode. Resolved after the\n * first render; the sentinel directive stays disabled until then.\n */\n protected readonly _scrollContainer = signal<HTMLElement | null>(null);\n\n /**\n * @private Whether the scroll-owner lookup has already run. It needs the first\n * render, so a `null` {@link _scrollContainer} before that means \"not resolved\n * yet\", not \"no owner\" — the dev warning must not fire on it.\n */\n private readonly _scrollOwnerResolved = signal(false);\n\n /** @private Latches the dev-mode \"no scroll owner\" warning to once per panel. */\n private _warnedNoScrollOwner = false;\n\n /** @private Host element, used to scroll the active option into view (activedescendant model). */\n private readonly _host = inject<ElementRef<HTMLElement>>(ElementRef);\n /** @private Angular-provided document used to access the browser viewport safely. */\n private readonly _document = inject(DOCUMENT);\n\n constructor() {\n const viewport = this._document.defaultView;\n if (viewport) {\n fromEvent(viewport, 'resize')\n .pipe(startWith(null), takeUntilDestroyed())\n .subscribe(() => {\n this._defaultMaxHeight.set(viewport.innerHeight * 0.4);\n });\n }\n\n this._selectionService.focusFirst$\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n this._listSelectable()?.focusFirst();\n });\n\n // Keep the activedescendant-active option scrolled into view. DOM focus\n // never lands on the option in this mode (it stays on the owning combobox\n // input), so the native scroll-on-focus does not apply.\n effect(() => {\n const index = this.activeIndex();\n if (this.focusMode() !== 'activedescendant' || index < 0) return;\n const el = this._host.nativeElement.querySelector<HTMLElement>(\n `[id=\"${this.optionId(index)}\"]`,\n );\n // Optional call: `scrollIntoView` is absent in some environments (jsdom).\n el?.scrollIntoView?.({ block: 'nearest' });\n });\n\n // Resolve the paging sentinel's scroll owner once the view exists: the\n // panel's own scrollbar viewport, or the ancestor popup viewport it\n // delegates scrolling to.\n afterNextRender(() => {\n const own = this._scrollbar()?.viewportElement ?? null;\n const parent = this._host.nativeElement.closest<HTMLElement>(\n '.mlv-scrollbar__viewport',\n );\n this._scrollContainer.set(this.scrollMode() === 'self' ? own : parent);\n this._scrollOwnerResolved.set(true);\n });\n\n // Dev-mode diagnostic: an armed sentinel with no scroll owner is silent —\n // `scrollMode=\"parent\"` finds nothing unless the panel renders inside an\n // `mlv-scrollbar` viewport. Re-checked reactively so a `hasMore` that flips\n // true later is caught too; warned at most once per panel instance.\n if (isDevMode()) {\n effect(() => {\n const missing =\n this.hasMore() &&\n this._scrollOwnerResolved() &&\n this._scrollContainer() === null;\n if (!missing) return;\n untracked(() => {\n if (this._warnedNoScrollOwner) return;\n this._warnedNoScrollOwner = true;\n console.warn(\n '[mlv-dropdown-panel] hasMore is set but no scroll owner was found — in scrollMode=\"parent\" the panel must render inside an mlv-scrollbar viewport (e.g. mlv-popup); lazy paging will not fire.',\n );\n });\n });\n }\n\n // Auto-fill: after any render where the option set changed, re-measure so a\n // short page immediately requests the next one.\n afterRenderEffect(() => {\n this.options();\n this._infiniteScroll()?.check();\n });\n }\n\n isValueSelected(value: T): boolean {\n return this._selectedSet().has(value);\n }\n\n /**\n * Deterministic DOM `id` for the option at `index`, forwarded to aria's\n * `ngOption` id. An owning combobox computes the same id (via the shared\n * {@link optionId} helper) to wire its input's `aria-activedescendant`.\n */\n optionId(index: number): string {\n return optionId(this._resolvedListboxId(), index);\n }\n\n /**\n * Re-emits the aria listbox selection. `@angular/aria`'s `ngListbox` emits the\n * selected values array directly (unlike CdkListbox's `ListboxValueChangeEvent`).\n */\n onValueChange(values: readonly T[]): void {\n this.valueChange.emit(values);\n }\n}\n","@if (scrollMode() === 'self') {\n<mlv-scrollbar class=\"mlv-dropdown-panel__scrollbar\" [viewportTabIndex]=\"-1\">\n <ng-container [ngTemplateOutlet]=\"panelContent\" />\n</mlv-scrollbar>\n} @else {\n<ng-container [ngTemplateOutlet]=\"panelContent\" />\n}\n\n<ng-template #panelContent>\n <!-- Async loading affordance (used by [mlvAutocomplete]). Rendered above the\n listbox so the listbox element (aria-controls target) still exists while a\n search resolves; the empty \"no results\" projection is suppressed meanwhile. -->\n @if (loading()) {\n <div class=\"mlv-dropdown-panel__loading\" role=\"status\" aria-live=\"polite\">\n <span class=\"mlv-dropdown-panel__spinner\" aria-hidden=\"true\"></span>\n <span class=\"mlv-dropdown-panel__loading-text\">{{ loadingText() }}</span>\n </div>\n }\n\n <!-- selectionMode=\"explicit\" + softDisabled=\"false\" reproduce the previous CdkListbox\n behaviour: arrow keys move focus (never commit the value) and skip disabled options.\n listRole/itemRole are pinned to the listbox pattern so aria's pointer selection can\n resolve each option via closest('[role=\"option\"]').\n [listboxId] forwards the consumer id into aria's Listbox.id input so the rendered\n [attr.id]=\"id()\" equals it — otherwise aria mints its own id and a parent\n select/combobox trigger's aria-controls would dangle. -->\n <mlv-list\n class=\"mlv-dropdown-panel__listbox\"\n selectable\n listRole=\"listbox\"\n selectionMode=\"explicit\"\n [softDisabled]=\"false\"\n [focusMode]=\"focusMode()\"\n [attr.aria-busy]=\"loading() || loadingMore() ? true : null\"\n [listboxId]=\"_resolvedListboxId()\"\n [multiple]=\"multiple()\"\n [value]=\"selectedValues()\"\n (valueChange)=\"onValueChange($event)\"\n >\n @if (_isGrouped()) {\n <!-- Grouped rendering: consecutive same-group runs become APG listbox groups\n (role=\"group\" + aria-labelledby → a non-selectable, presentational sticky\n header). Options stay flat descendants of the listbox, so aria registers\n and navigates them exactly as ungrouped; headers are not aria options and\n are skipped by keyboard nav / type-ahead. Each option keeps its flat index\n so optionId / activeIndex line up with an owning combobox. -->\n @for (group of _groups(); track $index) { @if (group.label) {\n <div\n class=\"mlv-dropdown-panel__group\"\n role=\"group\"\n [attr.aria-labelledby]=\"group.headerId\"\n >\n <div\n class=\"mlv-dropdown-panel__group-header\"\n role=\"presentation\"\n [id]=\"group.headerId\"\n >\n {{ group.label }}\n </div>\n @for (entry of group.entries; track entry.option.value) {\n <ng-container\n *ngTemplateOutlet=\"optionRow; context: { option: entry.option, index: entry.index }\"\n />\n }\n </div>\n } @else { @for (entry of group.entries; track entry.option.value) {\n <ng-container\n *ngTemplateOutlet=\"optionRow; context: { option: entry.option, index: entry.index }\"\n />\n } } } } @else { @for (option of options(); track option.value; let i =\n $index) {\n <ng-container\n *ngTemplateOutlet=\"optionRow; context: { option: option, index: i }\"\n />\n } @empty { @if (!loading()) {\n <ng-content />\n } } }\n\n <!-- Single source of truth for an option row, outlet-ed by both the flat and\n the grouped branches. Declared INSIDE <mlv-list> so its declaration\n injector carries the aria LISTBOX token — an outlet-ed <mlv-list-item>\n resolves DI from the template's declaration context, not its insertion\n point. `index` is the flat index into options(). -->\n <ng-template #optionRow let-option=\"option\" let-index=\"index\">\n <mlv-list-item\n class=\"mlv-dropdown-panel__item\"\n itemRole=\"option\"\n [class.mlv-dropdown-panel__item--active]=\"index === activeIndex()\"\n [value]=\"option.value\"\n [label]=\"option.label\"\n [optionId]=\"optionId(index)\"\n >\n @if (itemTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"itemTemplate()!; context: { $implicit: option }\"\n />\n } @else {\n <span class=\"mlv-dropdown-panel__item-label\">\n @if (highlightQuery()) { @for (seg of option.label |\n mlvHighlightMatch: highlightQuery(); track $index) { @if (seg.matched)\n {<mark class=\"mlv-dropdown-panel__match\">{{ seg.text }}</mark>} @else\n {{{ seg.text }}} } } @else {{{ option.label }}}\n </span>\n @if (isValueSelected(option.value)) {\n <svg\n class=\"mlv-dropdown-panel__item-check\"\n lucideCheck\n size=\"16\"\n strokeWidth=\"2\"\n />\n } }\n </mlv-list-item>\n </ng-template>\n </mlv-list>\n\n <!-- Next-page affordance. Sits after the last option (unlike the top\n `__loading` row) so appended rows are not pushed around, and stays a\n polite status region — the listbox itself keeps its options interactive. -->\n @if (loadingMore()) {\n <div\n class=\"mlv-dropdown-panel__loading-more\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <span class=\"mlv-dropdown-panel__spinner\" aria-hidden=\"true\"></span>\n <span class=\"mlv-dropdown-panel__loading-text\">{{ loadingText() }}</span>\n </div>\n }\n\n <!-- Paging sentinel. The directive listens on the real scroll owner via\n [scrollContainer]; it stays disabled until that element is resolved so\n its initial measurement never runs against the non-scrolling panel host. -->\n <div\n class=\"mlv-dropdown-panel__sentinel\"\n aria-hidden=\"true\"\n mlvInfiniteScroll\n [scrollContainer]=\"_scrollContainer()\"\n [disabled]=\"!hasMore() || !_scrollContainer()\"\n [hasMore]=\"hasMore()\"\n [loading]=\"loading() || loadingMore()\"\n [threshold]=\"infiniteScrollThreshold()\"\n (loadMore)=\"loadMore.emit()\"\n ></div>\n</ng-template>\n"]}
@@ -0,0 +1,36 @@
1
+ import { Pipe } from '@angular/core';
2
+ import { matchSegments } from './option-matcher';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Splits a label into matched / unmatched {@link MlvMatchSegment}s for the given
6
+ * query so a template can emphasise the matched substring (case- and
7
+ * diacritic-insensitive; see {@link matchSegments}). Used by
8
+ * `mlv-dropdown-panel` to highlight the query inside each suggestion.
9
+ *
10
+ * @example
11
+ * ```html
12
+ * @for (seg of option.label | mlvHighlightMatch:query; track $index) {
13
+ * @if (seg.matched) { <mark>{{ seg.text }}</mark> }
14
+ * @else { {{ seg.text }} }
15
+ * }
16
+ * ```
17
+ */
18
+ export class MlvHighlightMatchPipe {
19
+ /**
20
+ * @param label - The label to segment. Nullish input yields an empty result.
21
+ * @param query - The query to highlight; empty query returns one unmatched
22
+ * segment containing the whole label.
23
+ */
24
+ transform(label, query) {
25
+ if (!label)
26
+ return [];
27
+ return matchSegments(label, query ?? '');
28
+ }
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvHighlightMatchPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
30
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.7", ngImport: i0, type: MlvHighlightMatchPipe, isStandalone: true, name: "mlvHighlightMatch" });
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvHighlightMatchPipe, decorators: [{
33
+ type: Pipe,
34
+ args: [{ name: 'mlvHighlightMatch' }]
35
+ }] });
36
+ //# sourceMappingURL=highlight-match.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight-match.pipe.js","sourceRoot":"","sources":["../../../../../../libs/core/dropdown/src/lib/highlight-match.pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;;AAEjD;;;;;;;;;;;;;GAaG;AAEH,MAAM,OAAO,qBAAqB;IAChC;;;;OAIG;IACH,SAAS,CACP,KAAgC,EAChC,KAAa;QAEb,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;uGAZU,qBAAqB;qGAArB,qBAAqB;;2FAArB,qBAAqB;kBADjC,IAAI;mBAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE","sourcesContent":["import { Pipe } from '@angular/core';\nimport type { PipeTransform } from '@angular/core';\nimport type { MlvMatchSegment } from './option-matcher';\nimport { matchSegments } from './option-matcher';\n\n/**\n * Splits a label into matched / unmatched {@link MlvMatchSegment}s for the given\n * query so a template can emphasise the matched substring (case- and\n * diacritic-insensitive; see {@link matchSegments}). Used by\n * `mlv-dropdown-panel` to highlight the query inside each suggestion.\n *\n * @example\n * ```html\n * @for (seg of option.label | mlvHighlightMatch:query; track $index) {\n * @if (seg.matched) { <mark>{{ seg.text }}</mark> }\n * @else { {{ seg.text }} }\n * }\n * ```\n */\n@Pipe({ name: 'mlvHighlightMatch' })\nexport class MlvHighlightMatchPipe implements PipeTransform {\n /**\n * @param label - The label to segment. Nullish input yields an empty result.\n * @param query - The query to highlight; empty query returns one unmatched\n * segment containing the whole label.\n */\n transform(\n label: string | null | undefined,\n query: string,\n ): MlvMatchSegment[] {\n if (!label) return [];\n return matchSegments(label, query ?? '');\n }\n}\n"]}