@malva-ui/core 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -1
- package/README.md +15 -0
- package/docs/ai/avatar.md +2 -0
- package/docs/ai/breadcrumb.md +67 -7
- package/docs/ai/button.md +74 -19
- package/docs/ai/card.md +8 -6
- package/docs/ai/chat.md +59 -45
- package/docs/ai/checkbox.md +12 -0
- package/docs/ai/combobox.md +18 -2
- package/docs/ai/copy-to-clipboard.md +1 -1
- package/docs/ai/core.md +15 -0
- package/docs/ai/data-table.md +89 -54
- package/docs/ai/dialog.md +76 -67
- package/docs/ai/drawer.md +15 -12
- package/docs/ai/dropdown.md +24 -19
- package/docs/ai/empty-state.md +3 -3
- package/docs/ai/filter.md +24 -5
- package/docs/ai/form-utils.md +160 -5
- package/docs/ai/icon-toggle.md +160 -0
- package/docs/ai/input.md +30 -0
- package/docs/ai/layout.md +23 -0
- package/docs/ai/list.md +10 -6
- package/docs/ai/menu.md +75 -1
- package/docs/ai/page.md +220 -60
- package/docs/ai/radio.md +9 -0
- package/docs/ai/scrollbar.md +30 -8
- package/docs/ai/segmented.md +35 -35
- package/docs/ai/select.md +30 -5
- package/docs/ai/sidebar.md +45 -27
- package/docs/ai/switch.md +114 -19
- package/docs/ai/table.md +69 -0
- package/docs/ai/tabs.md +2 -1
- package/docs/ai/tile.md +311 -85
- package/docs/ai/timeline.md +63 -39
- package/docs/ai/tokenizer.md +21 -5
- package/docs/ai/tooltip.md +5 -5
- package/docs/ai/view-variant.md +75 -0
- package/fesm2022/malva-ui-core-accordion.mjs +167 -0
- package/fesm2022/malva-ui-core-accordion.mjs.map +1 -0
- package/fesm2022/malva-ui-core-action-bar.mjs +111 -0
- package/fesm2022/malva-ui-core-action-bar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-alert.mjs +173 -0
- package/fesm2022/malva-ui-core-alert.mjs.map +1 -0
- package/fesm2022/malva-ui-core-autocomplete.mjs +775 -0
- package/fesm2022/malva-ui-core-autocomplete.mjs.map +1 -0
- package/fesm2022/malva-ui-core-avatar-group.mjs +224 -0
- package/fesm2022/malva-ui-core-avatar-group.mjs.map +1 -0
- package/fesm2022/malva-ui-core-avatar.mjs +247 -0
- package/fesm2022/malva-ui-core-avatar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-badge.mjs +122 -0
- package/fesm2022/malva-ui-core-badge.mjs.map +1 -0
- package/fesm2022/malva-ui-core-bottom-nav.mjs +161 -0
- package/fesm2022/malva-ui-core-bottom-nav.mjs.map +1 -0
- package/fesm2022/malva-ui-core-breadcrumb.mjs +494 -0
- package/fesm2022/malva-ui-core-breadcrumb.mjs.map +1 -0
- package/fesm2022/malva-ui-core-button.mjs +406 -0
- package/fesm2022/malva-ui-core-button.mjs.map +1 -0
- package/fesm2022/malva-ui-core-calendar.mjs +938 -0
- package/fesm2022/malva-ui-core-calendar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-card.mjs +164 -0
- package/fesm2022/malva-ui-core-card.mjs.map +1 -0
- package/fesm2022/malva-ui-core-chat.mjs +825 -0
- package/fesm2022/malva-ui-core-chat.mjs.map +1 -0
- package/fesm2022/malva-ui-core-checkbox.mjs +272 -0
- package/fesm2022/malva-ui-core-checkbox.mjs.map +1 -0
- package/fesm2022/malva-ui-core-chip.mjs +176 -0
- package/fesm2022/malva-ui-core-chip.mjs.map +1 -0
- package/fesm2022/malva-ui-core-color-picker.mjs +1204 -0
- package/fesm2022/malva-ui-core-color-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-combobox.mjs +945 -0
- package/fesm2022/malva-ui-core-combobox.mjs.map +1 -0
- package/fesm2022/malva-ui-core-copy-to-clipboard.mjs +255 -0
- package/fesm2022/malva-ui-core-copy-to-clipboard.mjs.map +1 -0
- package/fesm2022/malva-ui-core-data-table.mjs +2696 -0
- package/fesm2022/malva-ui-core-data-table.mjs.map +1 -0
- package/fesm2022/malva-ui-core-date-range-picker.mjs +276 -0
- package/fesm2022/malva-ui-core-date-range-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-day-picker.mjs +131 -0
- package/fesm2022/malva-ui-core-day-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-dialog-routable-dialog-CvjXMtlD.mjs +94 -0
- package/fesm2022/malva-ui-core-dialog-routable-dialog-CvjXMtlD.mjs.map +1 -0
- package/fesm2022/malva-ui-core-dialog.mjs +1223 -0
- package/fesm2022/malva-ui-core-dialog.mjs.map +1 -0
- package/fesm2022/malva-ui-core-divider.mjs +80 -0
- package/fesm2022/malva-ui-core-divider.mjs.map +1 -0
- package/fesm2022/malva-ui-core-drawer-routable-drawer-qUk6Etnx.mjs +94 -0
- package/fesm2022/malva-ui-core-drawer-routable-drawer-qUk6Etnx.mjs.map +1 -0
- package/fesm2022/malva-ui-core-drawer.mjs +814 -0
- package/fesm2022/malva-ui-core-drawer.mjs.map +1 -0
- package/fesm2022/malva-ui-core-dropdown.mjs +994 -0
- package/fesm2022/malva-ui-core-dropdown.mjs.map +1 -0
- package/fesm2022/malva-ui-core-empty-state.mjs +50 -0
- package/fesm2022/malva-ui-core-empty-state.mjs.map +1 -0
- package/fesm2022/malva-ui-core-expand.mjs +130 -0
- package/fesm2022/malva-ui-core-expand.mjs.map +1 -0
- package/fesm2022/malva-ui-core-file-upload.mjs +451 -0
- package/fesm2022/malva-ui-core-file-upload.mjs.map +1 -0
- package/fesm2022/malva-ui-core-filter.mjs +1627 -0
- package/fesm2022/malva-ui-core-filter.mjs.map +1 -0
- package/fesm2022/malva-ui-core-form-utils-testing.mjs +39 -0
- package/fesm2022/malva-ui-core-form-utils-testing.mjs.map +1 -0
- package/fesm2022/malva-ui-core-form-utils.mjs +977 -0
- package/fesm2022/malva-ui-core-form-utils.mjs.map +1 -0
- package/fesm2022/malva-ui-core-form.mjs +283 -0
- package/fesm2022/malva-ui-core-form.mjs.map +1 -0
- package/fesm2022/malva-ui-core-icon-toggle.mjs +120 -0
- package/fesm2022/malva-ui-core-icon-toggle.mjs.map +1 -0
- package/fesm2022/malva-ui-core-input.mjs +375 -0
- package/fesm2022/malva-ui-core-input.mjs.map +1 -0
- package/fesm2022/malva-ui-core-kbd.mjs +131 -0
- package/fesm2022/malva-ui-core-kbd.mjs.map +1 -0
- package/fesm2022/malva-ui-core-layout.mjs +212 -0
- package/fesm2022/malva-ui-core-layout.mjs.map +1 -0
- package/fesm2022/malva-ui-core-link.mjs +89 -0
- package/fesm2022/malva-ui-core-link.mjs.map +1 -0
- package/fesm2022/malva-ui-core-list.mjs +413 -0
- package/fesm2022/malva-ui-core-list.mjs.map +1 -0
- package/fesm2022/malva-ui-core-loader.mjs +141 -0
- package/fesm2022/malva-ui-core-loader.mjs.map +1 -0
- package/fesm2022/malva-ui-core-menu.mjs +2540 -0
- package/fesm2022/malva-ui-core-menu.mjs.map +1 -0
- package/fesm2022/malva-ui-core-notification.mjs +201 -0
- package/fesm2022/malva-ui-core-notification.mjs.map +1 -0
- package/fesm2022/malva-ui-core-number-input.mjs +404 -0
- package/fesm2022/malva-ui-core-number-input.mjs.map +1 -0
- package/fesm2022/malva-ui-core-page.mjs +1898 -0
- package/fesm2022/malva-ui-core-page.mjs.map +1 -0
- package/fesm2022/malva-ui-core-pagination.mjs +458 -0
- package/fesm2022/malva-ui-core-pagination.mjs.map +1 -0
- package/fesm2022/malva-ui-core-pin-input.mjs +405 -0
- package/fesm2022/malva-ui-core-pin-input.mjs.map +1 -0
- package/fesm2022/malva-ui-core-popup.mjs +1488 -0
- package/fesm2022/malva-ui-core-popup.mjs.map +1 -0
- package/fesm2022/malva-ui-core-progress.mjs +109 -0
- package/fesm2022/malva-ui-core-progress.mjs.map +1 -0
- package/fesm2022/malva-ui-core-radio.mjs +317 -0
- package/fesm2022/malva-ui-core-radio.mjs.map +1 -0
- package/fesm2022/malva-ui-core-rating.mjs +236 -0
- package/fesm2022/malva-ui-core-rating.mjs.map +1 -0
- package/fesm2022/malva-ui-core-scrollbar.mjs +430 -0
- package/fesm2022/malva-ui-core-scrollbar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-search-field.mjs +578 -0
- package/fesm2022/malva-ui-core-search-field.mjs.map +1 -0
- package/fesm2022/malva-ui-core-segmented.mjs +458 -0
- package/fesm2022/malva-ui-core-segmented.mjs.map +1 -0
- package/fesm2022/malva-ui-core-select.mjs +855 -0
- package/fesm2022/malva-ui-core-select.mjs.map +1 -0
- package/fesm2022/malva-ui-core-sidebar.mjs +1504 -0
- package/fesm2022/malva-ui-core-sidebar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-skeleton.mjs +85 -0
- package/fesm2022/malva-ui-core-skeleton.mjs.map +1 -0
- package/fesm2022/malva-ui-core-slider.mjs +514 -0
- package/fesm2022/malva-ui-core-slider.mjs.map +1 -0
- package/fesm2022/malva-ui-core-split-pane.mjs +359 -0
- package/fesm2022/malva-ui-core-split-pane.mjs.map +1 -0
- package/fesm2022/malva-ui-core-status-indicator.mjs +78 -0
- package/fesm2022/malva-ui-core-status-indicator.mjs.map +1 -0
- package/fesm2022/malva-ui-core-stepper.mjs +332 -0
- package/fesm2022/malva-ui-core-stepper.mjs.map +1 -0
- package/fesm2022/malva-ui-core-switch.mjs +272 -0
- package/fesm2022/malva-ui-core-switch.mjs.map +1 -0
- package/fesm2022/malva-ui-core-table.mjs +79 -0
- package/fesm2022/malva-ui-core-table.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tabs.mjs +794 -0
- package/fesm2022/malva-ui-core-tabs.mjs.map +1 -0
- package/fesm2022/malva-ui-core-textarea.mjs +201 -0
- package/fesm2022/malva-ui-core-textarea.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tile.mjs +1404 -0
- package/fesm2022/malva-ui-core-tile.mjs.map +1 -0
- package/fesm2022/malva-ui-core-time-picker.mjs +533 -0
- package/fesm2022/malva-ui-core-time-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-timeline.mjs +216 -0
- package/fesm2022/malva-ui-core-timeline.mjs.map +1 -0
- package/fesm2022/malva-ui-core-title.mjs +178 -0
- package/fesm2022/malva-ui-core-title.mjs.map +1 -0
- package/fesm2022/malva-ui-core-toast.mjs +749 -0
- package/fesm2022/malva-ui-core-toast.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tokenizer.mjs +502 -0
- package/fesm2022/malva-ui-core-tokenizer.mjs.map +1 -0
- package/fesm2022/malva-ui-core-toolbar.mjs +141 -0
- package/fesm2022/malva-ui-core-toolbar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tooltip.mjs +432 -0
- package/fesm2022/malva-ui-core-tooltip.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tree.mjs +505 -0
- package/fesm2022/malva-ui-core-tree.mjs.map +1 -0
- package/fesm2022/malva-ui-core-view-variant.mjs +292 -0
- package/fesm2022/malva-ui-core-view-variant.mjs.map +1 -0
- package/fesm2022/malva-ui-core.mjs +77 -0
- package/fesm2022/malva-ui-core.mjs.map +1 -0
- package/package.json +179 -156
- package/styles/malva-ui.css +253 -220
- package/styles/tokens.md +174 -173
- package/table/README.md +46 -0
- package/types/malva-ui-core-accordion.d.ts +121 -0
- package/types/malva-ui-core-action-bar.d.ts +82 -0
- package/types/malva-ui-core-alert.d.ts +131 -0
- package/types/malva-ui-core-autocomplete.d.ts +301 -0
- package/types/malva-ui-core-avatar-group.d.ts +119 -0
- package/types/malva-ui-core-avatar.d.ts +156 -0
- package/types/malva-ui-core-badge.d.ts +97 -0
- package/types/malva-ui-core-bottom-nav.d.ts +104 -0
- package/types/malva-ui-core-breadcrumb.d.ts +308 -0
- package/types/malva-ui-core-button.d.ts +194 -0
- package/types/malva-ui-core-calendar.d.ts +339 -0
- package/types/malva-ui-core-card.d.ts +88 -0
- package/types/malva-ui-core-chat.d.ts +375 -0
- package/types/malva-ui-core-checkbox.d.ts +158 -0
- package/types/malva-ui-core-chip.d.ts +128 -0
- package/types/malva-ui-core-color-picker.d.ts +442 -0
- package/types/malva-ui-core-combobox.d.ts +419 -0
- package/types/malva-ui-core-copy-to-clipboard.d.ts +148 -0
- package/types/malva-ui-core-data-table.d.ts +1074 -0
- package/types/malva-ui-core-date-range-picker.d.ts +149 -0
- package/types/malva-ui-core-day-picker.d.ts +55 -0
- package/types/malva-ui-core-dialog.d.ts +597 -0
- package/types/malva-ui-core-divider.d.ts +68 -0
- package/types/malva-ui-core-drawer.d.ts +333 -0
- package/types/malva-ui-core-dropdown.d.ts +592 -0
- package/types/malva-ui-core-empty-state.d.ts +37 -0
- package/types/malva-ui-core-expand.d.ts +102 -0
- package/types/malva-ui-core-file-upload.d.ts +267 -0
- package/types/malva-ui-core-filter.d.ts +552 -0
- package/types/malva-ui-core-form-utils-testing.d.ts +50 -0
- package/types/malva-ui-core-form-utils.d.ts +579 -0
- package/types/malva-ui-core-form.d.ts +176 -0
- package/types/malva-ui-core-icon-toggle.d.ts +80 -0
- package/types/malva-ui-core-input.d.ts +262 -0
- package/types/malva-ui-core-kbd.d.ts +56 -0
- package/types/malva-ui-core-layout.d.ts +70 -0
- package/types/malva-ui-core-link.d.ts +28 -0
- package/types/malva-ui-core-list.d.ts +252 -0
- package/types/malva-ui-core-loader.d.ts +89 -0
- package/types/malva-ui-core-menu.d.ts +954 -0
- package/types/malva-ui-core-notification.d.ts +122 -0
- package/types/malva-ui-core-number-input.d.ts +167 -0
- package/types/malva-ui-core-page.d.ts +799 -0
- package/types/malva-ui-core-pagination.d.ts +261 -0
- package/types/malva-ui-core-pin-input.d.ts +203 -0
- package/types/malva-ui-core-popup.d.ts +834 -0
- package/types/malva-ui-core-progress.d.ts +73 -0
- package/types/malva-ui-core-radio.d.ts +130 -0
- package/types/malva-ui-core-rating.d.ts +115 -0
- package/types/malva-ui-core-scrollbar.d.ts +203 -0
- package/types/malva-ui-core-search-field.d.ts +408 -0
- package/types/malva-ui-core-segmented.d.ts +206 -0
- package/types/malva-ui-core-select.d.ts +456 -0
- package/types/malva-ui-core-sidebar.d.ts +698 -0
- package/types/malva-ui-core-skeleton.d.ts +64 -0
- package/types/malva-ui-core-slider.d.ts +219 -0
- package/types/malva-ui-core-split-pane.d.ts +149 -0
- package/types/malva-ui-core-status-indicator.d.ts +65 -0
- package/types/malva-ui-core-stepper.d.ts +168 -0
- package/types/malva-ui-core-switch.d.ts +146 -0
- package/types/malva-ui-core-table.d.ts +37 -0
- package/types/malva-ui-core-tabs.d.ts +339 -0
- package/types/malva-ui-core-textarea.d.ts +79 -0
- package/types/malva-ui-core-tile.d.ts +373 -0
- package/types/malva-ui-core-time-picker.d.ts +141 -0
- package/types/malva-ui-core-timeline.d.ts +188 -0
- package/types/malva-ui-core-title.d.ts +66 -0
- package/types/malva-ui-core-toast.d.ts +432 -0
- package/types/malva-ui-core-tokenizer.d.ts +217 -0
- package/types/malva-ui-core-toolbar.d.ts +91 -0
- package/types/malva-ui-core-tooltip.d.ts +200 -0
- package/types/malva-ui-core-tree.d.ts +289 -0
- package/types/malva-ui-core-view-variant.d.ts +207 -0
- package/types/malva-ui-core.d.ts +72 -0
- package/view-variant/README.md +3 -0
- package/accordion/index.d.ts +0 -3
- package/accordion/lib/accordion/accordion.d.ts +0 -47
- package/accordion/lib/accordion-item/accordion-header.d.ts +0 -22
- package/accordion/lib/accordion-item/accordion-item.d.ts +0 -49
- package/accordion/malva-ui-core-accordion.d.ts +0 -5
- package/action-bar/index.d.ts +0 -4
- package/action-bar/lib/action-bar/action-bar.d.ts +0 -59
- package/action-bar/lib/action-bar/components/action-bar-actions.d.ts +0 -9
- package/action-bar/lib/action-bar/components/action-bar-logo.d.ts +0 -5
- package/action-bar/lib/action-bar/components/action-bar-spacer.d.ts +0 -5
- package/action-bar/malva-ui-core-action-bar.d.ts +0 -5
- package/alert/index.d.ts +0 -2
- package/alert/lib/alert/alert.d.ts +0 -84
- package/alert/lib/alert/alert.directives.d.ts +0 -44
- package/alert/malva-ui-core-alert.d.ts +0 -5
- package/autocomplete/index.d.ts +0 -1
- package/autocomplete/lib/autocomplete/autocomplete.d.ts +0 -296
- package/autocomplete/malva-ui-core-autocomplete.d.ts +0 -5
- package/avatar/index.d.ts +0 -2
- package/avatar/lib/avatar/avatar.d.ts +0 -125
- package/avatar/lib/color-from-text.pipe.d.ts +0 -21
- package/avatar/malva-ui-core-avatar.d.ts +0 -5
- package/avatar-group/index.d.ts +0 -1
- package/avatar-group/lib/avatar-group/avatar-group.d.ts +0 -115
- package/avatar-group/malva-ui-core-avatar-group.d.ts +0 -5
- package/badge/index.d.ts +0 -2
- package/badge/lib/badge/badge.d.ts +0 -59
- package/badge/lib/badge-icon.d.ts +0 -35
- package/badge/malva-ui-core-badge.d.ts +0 -5
- package/bottom-nav/index.d.ts +0 -1
- package/bottom-nav/lib/bottom-nav/bottom-nav.d.ts +0 -99
- package/bottom-nav/malva-ui-core-bottom-nav.d.ts +0 -5
- package/breadcrumb/index.d.ts +0 -5
- package/breadcrumb/lib/breadcrumb/breadcrumb-item-host.d.ts +0 -32
- package/breadcrumb/lib/breadcrumb/breadcrumb-item.d.ts +0 -41
- package/breadcrumb/lib/breadcrumb/breadcrumb-separator.d.ts +0 -31
- package/breadcrumb/lib/breadcrumb/breadcrumb.d.ts +0 -151
- package/breadcrumb/lib/breadcrumb/breadcrumb.types.d.ts +0 -26
- package/breadcrumb/malva-ui-core-breadcrumb.d.ts +0 -5
- package/button/index.d.ts +0 -7
- package/button/lib/button/button.d.ts +0 -61
- package/button/lib/button-close/button-close.d.ts +0 -24
- package/button/lib/button-group/button-group.d.ts +0 -21
- package/button/lib/button-split/button-split.d.ts +0 -21
- package/button/lib/button-toggle/button-toggle.d.ts +0 -33
- package/button/lib/button-variant.token.d.ts +0 -13
- package/button/lib/button.directives.d.ts +0 -14
- package/button/lib/button.types.d.ts +0 -8
- package/button/malva-ui-core-button.d.ts +0 -5
- package/calendar/index.d.ts +0 -3
- package/calendar/lib/calendar/calendar.d.ts +0 -182
- package/calendar/lib/date-provider/date-adapter.d.ts +0 -92
- package/calendar/lib/date-provider/native-date-adapter.d.ts +0 -60
- package/calendar/malva-ui-core-calendar.d.ts +0 -5
- package/card/index.d.ts +0 -5
- package/card/lib/card/card.d.ts +0 -43
- package/card/lib/card-actions-def.d.ts +0 -10
- package/card/lib/card-footer-def.d.ts +0 -13
- package/card/lib/card-header-def.d.ts +0 -10
- package/card/lib/card-subheader-def.d.ts +0 -16
- package/card/malva-ui-core-card.d.ts +0 -5
- package/chat/index.d.ts +0 -9
- package/chat/lib/chat/chat.d.ts +0 -133
- package/chat/lib/chat-audio/chat-audio.d.ts +0 -51
- package/chat/lib/chat-audio/chat-audio.service.d.ts +0 -21
- package/chat/lib/chat-date/chat-date.d.ts +0 -16
- package/chat/lib/chat-format.d.ts +0 -5
- package/chat/lib/chat-media-grid/chat-media-grid.d.ts +0 -32
- package/chat/lib/chat-message/chat-message.d.ts +0 -45
- package/chat/lib/chat-render-list.d.ts +0 -16
- package/chat/lib/chat-tokens.d.ts +0 -25
- package/chat/lib/chat-typing/chat-typing.d.ts +0 -16
- package/chat/lib/chat.types.d.ts +0 -80
- package/chat/lib/defs/chat-author-def.d.ts +0 -30
- package/chat/lib/defs/chat-date-def.d.ts +0 -22
- package/chat/lib/defs/chat-message-def.d.ts +0 -23
- package/chat/malva-ui-core-chat.d.ts +0 -5
- package/checkbox/index.d.ts +0 -3
- package/checkbox/lib/checkbox/checkbox.d.ts +0 -129
- package/checkbox/lib/checkbox-group/checkbox-group.d.ts +0 -24
- package/checkbox/lib/checkbox-group-token.d.ts +0 -6
- package/checkbox/malva-ui-core-checkbox.d.ts +0 -5
- package/chip/index.d.ts +0 -2
- package/chip/lib/chip/chip.d.ts +0 -107
- package/chip/lib/chip/chip.directives.d.ts +0 -18
- package/chip/malva-ui-core-chip.d.ts +0 -5
- package/color-picker/index.d.ts +0 -3
- package/color-picker/lib/color-picker/color-picker.d.ts +0 -188
- package/color-picker/lib/color-picker-popup/color-picker-popup.d.ts +0 -151
- package/color-picker/lib/color-utils/color-utils.d.ts +0 -102
- package/color-picker/malva-ui-core-color-picker.d.ts +0 -5
- package/combobox/index.d.ts +0 -2
- package/combobox/lib/combobox/combobox.d.ts +0 -400
- package/combobox/lib/combobox-template.directives.d.ts +0 -10
- package/combobox/malva-ui-core-combobox.d.ts +0 -5
- package/copy-to-clipboard/index.d.ts +0 -1
- package/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.d.ts +0 -130
- package/copy-to-clipboard/malva-ui-core-copy-to-clipboard.d.ts +0 -5
- package/data-table/index.d.ts +0 -8
- package/data-table/lib/data-source.d.ts +0 -5
- package/data-table/lib/data-table/data-table-layout.d.ts +0 -31
- package/data-table/lib/data-table/data-table.d.ts +0 -699
- package/data-table/lib/data-table/services/data-table-column-visibility.service.d.ts +0 -19
- package/data-table/lib/data-table/services/data-table-editing.service.d.ts +0 -37
- package/data-table/lib/data-table/services/data-table-pinning.service.d.ts +0 -37
- package/data-table/lib/data-table-cell.d.ts +0 -44
- package/data-table/lib/data-table-edit-cell.d.ts +0 -44
- package/data-table/lib/data-table-error.d.ts +0 -37
- package/data-table/lib/data-table-footer.d.ts +0 -26
- package/data-table/lib/data-table-no-data.d.ts +0 -19
- package/data-table/lib/filter-dropdown/filter-dropdown.d.ts +0 -54
- package/data-table/lib/types.d.ts +0 -134
- package/data-table/malva-ui-core-data-table.d.ts +0 -5
- package/date-range-picker/index.d.ts +0 -1
- package/date-range-picker/lib/date-range-picker/date-range-picker.d.ts +0 -145
- package/date-range-picker/malva-ui-core-date-range-picker.d.ts +0 -5
- package/day-picker/index.d.ts +0 -1
- package/day-picker/lib/day-picker/day-picker.d.ts +0 -51
- package/day-picker/malva-ui-core-day-picker.d.ts +0 -5
- package/dialog/index.d.ts +0 -11
- package/dialog/lib/confirm-dialog-options.d.ts +0 -41
- package/dialog/lib/confirm-dialog.d.ts +0 -52
- package/dialog/lib/dialog/dialog.d.ts +0 -22
- package/dialog/lib/dialog-body.d.ts +0 -9
- package/dialog/lib/dialog-close.d.ts +0 -27
- package/dialog/lib/dialog-config.d.ts +0 -112
- package/dialog/lib/dialog-container.d.ts +0 -40
- package/dialog/lib/dialog-footer.d.ts +0 -13
- package/dialog/lib/dialog-header.d.ts +0 -74
- package/dialog/lib/dialog-ref.d.ts +0 -95
- package/dialog/lib/dialog-template.d.ts +0 -65
- package/dialog/lib/dialog-text-content.d.ts +0 -24
- package/dialog/lib/dialog.service.d.ts +0 -63
- package/dialog/lib/generate-routable-dialog-route.d.ts +0 -49
- package/dialog/lib/inject-dialog-ref.d.ts +0 -8
- package/dialog/lib/routable-dialog.d.ts +0 -30
- package/dialog/malva-ui-core-dialog.d.ts +0 -5
- package/divider/index.d.ts +0 -1
- package/divider/lib/divider/divider.d.ts +0 -64
- package/divider/malva-ui-core-divider.d.ts +0 -5
- package/drawer/index.d.ts +0 -11
- package/drawer/lib/drawer/drawer.d.ts +0 -106
- package/drawer/lib/drawer-body.d.ts +0 -8
- package/drawer/lib/drawer-content.d.ts +0 -6
- package/drawer/lib/drawer-footer.d.ts +0 -5
- package/drawer/lib/drawer-header.d.ts +0 -5
- package/drawer/lib/drawer-ref.d.ts +0 -29
- package/drawer/lib/drawer-resize.d.ts +0 -65
- package/drawer/lib/drawer-section/drawer-section.d.ts +0 -15
- package/drawer/lib/drawer-sections/drawer-sections.d.ts +0 -22
- package/drawer/lib/drawer-sections.service.d.ts +0 -42
- package/drawer/lib/drawer.service.d.ts +0 -66
- package/drawer/lib/generate-routable-drawer-route.d.ts +0 -42
- package/drawer/lib/routable-drawer.d.ts +0 -30
- package/drawer/malva-ui-core-drawer.d.ts +0 -5
- package/dropdown/index.d.ts +0 -9
- package/dropdown/lib/active-descendant.d.ts +0 -64
- package/dropdown/lib/dropdown-panel/dropdown-panel.d.ts +0 -178
- package/dropdown/lib/highlight-match.pipe.d.ts +0 -27
- package/dropdown/lib/option-matcher.d.ts +0 -87
- package/dropdown/lib/options-adapter.d.ts +0 -142
- package/dropdown/lib/options-result.d.ts +0 -6
- package/dropdown/lib/reconciliation.d.ts +0 -19
- package/dropdown/lib/select-data-source.d.ts +0 -18
- package/dropdown/lib/select-option.d.ts +0 -37
- package/dropdown/malva-ui-core-dropdown.d.ts +0 -5
- package/empty-state/index.d.ts +0 -1
- package/empty-state/lib/empty-state/empty-state.d.ts +0 -34
- package/empty-state/malva-ui-core-empty-state.d.ts +0 -5
- package/esm2022/accordion/index.js +0 -4
- package/esm2022/accordion/index.js.map +0 -1
- package/esm2022/accordion/lib/accordion/accordion.js +0 -65
- package/esm2022/accordion/lib/accordion/accordion.js.map +0 -1
- package/esm2022/accordion/lib/accordion-item/accordion-header.js +0 -30
- package/esm2022/accordion/lib/accordion-item/accordion-header.js.map +0 -1
- package/esm2022/accordion/lib/accordion-item/accordion-item.js +0 -70
- package/esm2022/accordion/lib/accordion-item/accordion-item.js.map +0 -1
- package/esm2022/accordion/malva-ui-core-accordion.js +0 -5
- package/esm2022/accordion/malva-ui-core-accordion.js.map +0 -1
- package/esm2022/action-bar/index.js +0 -5
- package/esm2022/action-bar/index.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/action-bar.js +0 -64
- package/esm2022/action-bar/lib/action-bar/action-bar.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js +0 -20
- package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js +0 -13
- package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js +0 -13
- package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js.map +0 -1
- package/esm2022/action-bar/malva-ui-core-action-bar.js +0 -5
- package/esm2022/action-bar/malva-ui-core-action-bar.js.map +0 -1
- package/esm2022/alert/index.js +0 -3
- package/esm2022/alert/index.js.map +0 -1
- package/esm2022/alert/lib/alert/alert.directives.js +0 -53
- package/esm2022/alert/lib/alert/alert.directives.js.map +0 -1
- package/esm2022/alert/lib/alert/alert.js +0 -118
- package/esm2022/alert/lib/alert/alert.js.map +0 -1
- package/esm2022/alert/malva-ui-core-alert.js +0 -5
- package/esm2022/alert/malva-ui-core-alert.js.map +0 -1
- package/esm2022/autocomplete/index.js +0 -2
- package/esm2022/autocomplete/index.js.map +0 -1
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.js +0 -765
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.js.map +0 -1
- package/esm2022/autocomplete/malva-ui-core-autocomplete.js +0 -5
- package/esm2022/autocomplete/malva-ui-core-autocomplete.js.map +0 -1
- package/esm2022/avatar/index.js +0 -3
- package/esm2022/avatar/index.js.map +0 -1
- package/esm2022/avatar/lib/avatar/avatar.js +0 -192
- package/esm2022/avatar/lib/avatar/avatar.js.map +0 -1
- package/esm2022/avatar/lib/color-from-text.pipe.js +0 -39
- package/esm2022/avatar/lib/color-from-text.pipe.js.map +0 -1
- package/esm2022/avatar/malva-ui-core-avatar.js +0 -5
- package/esm2022/avatar/malva-ui-core-avatar.js.map +0 -1
- package/esm2022/avatar-group/index.js +0 -2
- package/esm2022/avatar-group/index.js.map +0 -1
- package/esm2022/avatar-group/lib/avatar-group/avatar-group.js +0 -217
- package/esm2022/avatar-group/lib/avatar-group/avatar-group.js.map +0 -1
- package/esm2022/avatar-group/malva-ui-core-avatar-group.js +0 -5
- package/esm2022/avatar-group/malva-ui-core-avatar-group.js.map +0 -1
- package/esm2022/badge/index.js +0 -3
- package/esm2022/badge/index.js.map +0 -1
- package/esm2022/badge/lib/badge/badge.js +0 -71
- package/esm2022/badge/lib/badge/badge.js.map +0 -1
- package/esm2022/badge/lib/badge-icon.js +0 -47
- package/esm2022/badge/lib/badge-icon.js.map +0 -1
- package/esm2022/badge/malva-ui-core-badge.js +0 -5
- package/esm2022/badge/malva-ui-core-badge.js.map +0 -1
- package/esm2022/bottom-nav/index.js +0 -2
- package/esm2022/bottom-nav/index.js.map +0 -1
- package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js +0 -155
- package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js.map +0 -1
- package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js +0 -5
- package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js.map +0 -1
- package/esm2022/breadcrumb/index.js +0 -6
- package/esm2022/breadcrumb/index.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js +0 -43
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js +0 -110
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js +0 -38
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js +0 -284
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js.map +0 -1
- package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js +0 -5
- package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js.map +0 -1
- package/esm2022/button/index.js +0 -8
- package/esm2022/button/index.js.map +0 -1
- package/esm2022/button/lib/button/button.js +0 -137
- package/esm2022/button/lib/button/button.js.map +0 -1
- package/esm2022/button/lib/button-close/button-close.js +0 -52
- package/esm2022/button/lib/button-close/button-close.js.map +0 -1
- package/esm2022/button/lib/button-group/button-group.js +0 -44
- package/esm2022/button/lib/button-group/button-group.js.map +0 -1
- package/esm2022/button/lib/button-split/button-split.js +0 -44
- package/esm2022/button/lib/button-split/button-split.js.map +0 -1
- package/esm2022/button/lib/button-toggle/button-toggle.js +0 -94
- package/esm2022/button/lib/button-toggle/button-toggle.js.map +0 -1
- package/esm2022/button/lib/button-variant.token.js +0 -4
- package/esm2022/button/lib/button-variant.token.js.map +0 -1
- package/esm2022/button/lib/button.directives.js +0 -37
- package/esm2022/button/lib/button.directives.js.map +0 -1
- package/esm2022/button/lib/button.types.js +0 -1
- package/esm2022/button/lib/button.types.js.map +0 -1
- package/esm2022/button/malva-ui-core-button.js +0 -5
- package/esm2022/button/malva-ui-core-button.js.map +0 -1
- package/esm2022/calendar/index.js +0 -4
- package/esm2022/calendar/index.js.map +0 -1
- package/esm2022/calendar/lib/calendar/calendar.js +0 -672
- package/esm2022/calendar/lib/calendar/calendar.js.map +0 -1
- package/esm2022/calendar/lib/date-provider/date-adapter.js +0 -111
- package/esm2022/calendar/lib/date-provider/date-adapter.js.map +0 -1
- package/esm2022/calendar/lib/date-provider/native-date-adapter.js +0 -151
- package/esm2022/calendar/lib/date-provider/native-date-adapter.js.map +0 -1
- package/esm2022/calendar/malva-ui-core-calendar.js +0 -5
- package/esm2022/calendar/malva-ui-core-calendar.js.map +0 -1
- package/esm2022/card/index.js +0 -6
- package/esm2022/card/index.js.map +0 -1
- package/esm2022/card/lib/card/card.js +0 -54
- package/esm2022/card/lib/card/card.js.map +0 -1
- package/esm2022/card/lib/card-actions-def.js +0 -27
- package/esm2022/card/lib/card-actions-def.js.map +0 -1
- package/esm2022/card/lib/card-footer-def.js +0 -32
- package/esm2022/card/lib/card-footer-def.js.map +0 -1
- package/esm2022/card/lib/card-header-def.js +0 -27
- package/esm2022/card/lib/card-header-def.js.map +0 -1
- package/esm2022/card/lib/card-subheader-def.js +0 -33
- package/esm2022/card/lib/card-subheader-def.js.map +0 -1
- package/esm2022/card/malva-ui-core-card.js +0 -5
- package/esm2022/card/malva-ui-core-card.js.map +0 -1
- package/esm2022/chat/index.js +0 -10
- package/esm2022/chat/index.js.map +0 -1
- package/esm2022/chat/lib/chat/chat.js +0 -326
- package/esm2022/chat/lib/chat/chat.js.map +0 -1
- package/esm2022/chat/lib/chat-audio/chat-audio.js +0 -110
- package/esm2022/chat/lib/chat-audio/chat-audio.js.map +0 -1
- package/esm2022/chat/lib/chat-audio/chat-audio.service.js +0 -28
- package/esm2022/chat/lib/chat-audio/chat-audio.service.js.map +0 -1
- package/esm2022/chat/lib/chat-date/chat-date.js +0 -46
- package/esm2022/chat/lib/chat-date/chat-date.js.map +0 -1
- package/esm2022/chat/lib/chat-format.js +0 -11
- package/esm2022/chat/lib/chat-format.js.map +0 -1
- package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js +0 -53
- package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js.map +0 -1
- package/esm2022/chat/lib/chat-message/chat-message.js +0 -86
- package/esm2022/chat/lib/chat-message/chat-message.js.map +0 -1
- package/esm2022/chat/lib/chat-render-list.js +0 -55
- package/esm2022/chat/lib/chat-render-list.js.map +0 -1
- package/esm2022/chat/lib/chat-tokens.js +0 -9
- package/esm2022/chat/lib/chat-tokens.js.map +0 -1
- package/esm2022/chat/lib/chat-typing/chat-typing.js +0 -50
- package/esm2022/chat/lib/chat-typing/chat-typing.js.map +0 -1
- package/esm2022/chat/lib/chat.types.js +0 -1
- package/esm2022/chat/lib/chat.types.js.map +0 -1
- package/esm2022/chat/lib/defs/chat-author-def.js +0 -27
- package/esm2022/chat/lib/defs/chat-author-def.js.map +0 -1
- package/esm2022/chat/lib/defs/chat-date-def.js +0 -24
- package/esm2022/chat/lib/defs/chat-date-def.js.map +0 -1
- package/esm2022/chat/lib/defs/chat-message-def.js +0 -30
- package/esm2022/chat/lib/defs/chat-message-def.js.map +0 -1
- package/esm2022/chat/malva-ui-core-chat.js +0 -5
- package/esm2022/chat/malva-ui-core-chat.js.map +0 -1
- package/esm2022/checkbox/index.js +0 -4
- package/esm2022/checkbox/index.js.map +0 -1
- package/esm2022/checkbox/lib/checkbox/checkbox.js +0 -201
- package/esm2022/checkbox/lib/checkbox/checkbox.js.map +0 -1
- package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js +0 -68
- package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js.map +0 -1
- package/esm2022/checkbox/lib/checkbox-group-token.js +0 -3
- package/esm2022/checkbox/lib/checkbox-group-token.js.map +0 -1
- package/esm2022/checkbox/malva-ui-core-checkbox.js +0 -5
- package/esm2022/checkbox/malva-ui-core-checkbox.js.map +0 -1
- package/esm2022/chip/index.js +0 -3
- package/esm2022/chip/index.js.map +0 -1
- package/esm2022/chip/lib/chip/chip.directives.js +0 -32
- package/esm2022/chip/lib/chip/chip.directives.js.map +0 -1
- package/esm2022/chip/lib/chip/chip.js +0 -140
- package/esm2022/chip/lib/chip/chip.js.map +0 -1
- package/esm2022/chip/malva-ui-core-chip.js +0 -5
- package/esm2022/chip/malva-ui-core-chip.js.map +0 -1
- package/esm2022/color-picker/index.js +0 -4
- package/esm2022/color-picker/index.js.map +0 -1
- package/esm2022/color-picker/lib/color-picker/color-picker.js +0 -530
- package/esm2022/color-picker/lib/color-picker/color-picker.js.map +0 -1
- package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js +0 -419
- package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js.map +0 -1
- package/esm2022/color-picker/lib/color-utils/color-utils.js +0 -256
- package/esm2022/color-picker/lib/color-utils/color-utils.js.map +0 -1
- package/esm2022/color-picker/malva-ui-core-color-picker.js +0 -5
- package/esm2022/color-picker/malva-ui-core-color-picker.js.map +0 -1
- package/esm2022/combobox/index.js +0 -3
- package/esm2022/combobox/index.js.map +0 -1
- package/esm2022/combobox/lib/combobox/combobox.js +0 -911
- package/esm2022/combobox/lib/combobox/combobox.js.map +0 -1
- package/esm2022/combobox/lib/combobox-template.directives.js +0 -24
- package/esm2022/combobox/lib/combobox-template.directives.js.map +0 -1
- package/esm2022/combobox/malva-ui-core-combobox.js +0 -5
- package/esm2022/combobox/malva-ui-core-combobox.js.map +0 -1
- package/esm2022/copy-to-clipboard/index.js +0 -2
- package/esm2022/copy-to-clipboard/index.js.map +0 -1
- package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js +0 -201
- package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js.map +0 -1
- package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js +0 -5
- package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js.map +0 -1
- package/esm2022/data-table/index.js +0 -9
- package/esm2022/data-table/index.js.map +0 -1
- package/esm2022/data-table/lib/data-source.js +0 -6
- package/esm2022/data-table/lib/data-source.js.map +0 -1
- package/esm2022/data-table/lib/data-table/data-table-layout.js +0 -84
- package/esm2022/data-table/lib/data-table/data-table-layout.js.map +0 -1
- package/esm2022/data-table/lib/data-table/data-table.js +0 -1846
- package/esm2022/data-table/lib/data-table/data-table.js.map +0 -1
- package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js +0 -37
- package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js.map +0 -1
- package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js +0 -63
- package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js.map +0 -1
- package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js +0 -68
- package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js.map +0 -1
- package/esm2022/data-table/lib/data-table-cell.js +0 -46
- package/esm2022/data-table/lib/data-table-cell.js.map +0 -1
- package/esm2022/data-table/lib/data-table-edit-cell.js +0 -46
- package/esm2022/data-table/lib/data-table-edit-cell.js.map +0 -1
- package/esm2022/data-table/lib/data-table-error.js +0 -37
- package/esm2022/data-table/lib/data-table-error.js.map +0 -1
- package/esm2022/data-table/lib/data-table-footer.js +0 -33
- package/esm2022/data-table/lib/data-table-footer.js.map +0 -1
- package/esm2022/data-table/lib/data-table-no-data.js +0 -26
- package/esm2022/data-table/lib/data-table-no-data.js.map +0 -1
- package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js +0 -224
- package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js.map +0 -1
- package/esm2022/data-table/lib/types.js +0 -1
- package/esm2022/data-table/lib/types.js.map +0 -1
- package/esm2022/data-table/malva-ui-core-data-table.js +0 -5
- package/esm2022/data-table/malva-ui-core-data-table.js.map +0 -1
- package/esm2022/date-range-picker/index.js +0 -2
- package/esm2022/date-range-picker/index.js.map +0 -1
- package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js +0 -269
- package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js.map +0 -1
- package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js +0 -5
- package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js.map +0 -1
- package/esm2022/day-picker/index.js +0 -2
- package/esm2022/day-picker/index.js.map +0 -1
- package/esm2022/day-picker/lib/day-picker/day-picker.js +0 -124
- package/esm2022/day-picker/lib/day-picker/day-picker.js.map +0 -1
- package/esm2022/day-picker/malva-ui-core-day-picker.js +0 -5
- package/esm2022/day-picker/malva-ui-core-day-picker.js.map +0 -1
- package/esm2022/dialog/index.js +0 -12
- package/esm2022/dialog/index.js.map +0 -1
- package/esm2022/dialog/lib/confirm-dialog-options.js +0 -1
- package/esm2022/dialog/lib/confirm-dialog-options.js.map +0 -1
- package/esm2022/dialog/lib/confirm-dialog.js +0 -155
- package/esm2022/dialog/lib/confirm-dialog.js.map +0 -1
- package/esm2022/dialog/lib/dialog/dialog.js +0 -40
- package/esm2022/dialog/lib/dialog/dialog.js.map +0 -1
- package/esm2022/dialog/lib/dialog-body.js +0 -33
- package/esm2022/dialog/lib/dialog-body.js.map +0 -1
- package/esm2022/dialog/lib/dialog-close.js +0 -45
- package/esm2022/dialog/lib/dialog-close.js.map +0 -1
- package/esm2022/dialog/lib/dialog-config.js +0 -23
- package/esm2022/dialog/lib/dialog-config.js.map +0 -1
- package/esm2022/dialog/lib/dialog-container.js +0 -69
- package/esm2022/dialog/lib/dialog-container.js.map +0 -1
- package/esm2022/dialog/lib/dialog-footer.js +0 -29
- package/esm2022/dialog/lib/dialog-footer.js.map +0 -1
- package/esm2022/dialog/lib/dialog-header.js +0 -181
- package/esm2022/dialog/lib/dialog-header.js.map +0 -1
- package/esm2022/dialog/lib/dialog-ref.js +0 -167
- package/esm2022/dialog/lib/dialog-ref.js.map +0 -1
- package/esm2022/dialog/lib/dialog-template.js +0 -136
- package/esm2022/dialog/lib/dialog-template.js.map +0 -1
- package/esm2022/dialog/lib/dialog-text-content.js +0 -59
- package/esm2022/dialog/lib/dialog-text-content.js.map +0 -1
- package/esm2022/dialog/lib/dialog.service.js +0 -205
- package/esm2022/dialog/lib/dialog.service.js.map +0 -1
- package/esm2022/dialog/lib/generate-routable-dialog-route.js +0 -59
- package/esm2022/dialog/lib/generate-routable-dialog-route.js.map +0 -1
- package/esm2022/dialog/lib/inject-dialog-ref.js +0 -16
- package/esm2022/dialog/lib/inject-dialog-ref.js.map +0 -1
- package/esm2022/dialog/lib/routable-dialog.js +0 -91
- package/esm2022/dialog/lib/routable-dialog.js.map +0 -1
- package/esm2022/dialog/malva-ui-core-dialog.js +0 -5
- package/esm2022/dialog/malva-ui-core-dialog.js.map +0 -1
- package/esm2022/divider/index.js +0 -2
- package/esm2022/divider/index.js.map +0 -1
- package/esm2022/divider/lib/divider/divider.js +0 -73
- package/esm2022/divider/lib/divider/divider.js.map +0 -1
- package/esm2022/divider/malva-ui-core-divider.js +0 -5
- package/esm2022/divider/malva-ui-core-divider.js.map +0 -1
- package/esm2022/drawer/index.js +0 -12
- package/esm2022/drawer/index.js.map +0 -1
- package/esm2022/drawer/lib/drawer/drawer.js +0 -180
- package/esm2022/drawer/lib/drawer/drawer.js.map +0 -1
- package/esm2022/drawer/lib/drawer-body.js +0 -32
- package/esm2022/drawer/lib/drawer-body.js.map +0 -1
- package/esm2022/drawer/lib/drawer-content.js +0 -14
- package/esm2022/drawer/lib/drawer-content.js.map +0 -1
- package/esm2022/drawer/lib/drawer-footer.js +0 -14
- package/esm2022/drawer/lib/drawer-footer.js.map +0 -1
- package/esm2022/drawer/lib/drawer-header.js +0 -14
- package/esm2022/drawer/lib/drawer-header.js.map +0 -1
- package/esm2022/drawer/lib/drawer-ref.js +0 -31
- package/esm2022/drawer/lib/drawer-ref.js.map +0 -1
- package/esm2022/drawer/lib/drawer-resize.js +0 -243
- package/esm2022/drawer/lib/drawer-resize.js.map +0 -1
- package/esm2022/drawer/lib/drawer-section/drawer-section.js +0 -26
- package/esm2022/drawer/lib/drawer-section/drawer-section.js.map +0 -1
- package/esm2022/drawer/lib/drawer-sections/drawer-sections.js +0 -58
- package/esm2022/drawer/lib/drawer-sections/drawer-sections.js.map +0 -1
- package/esm2022/drawer/lib/drawer-sections.service.js +0 -83
- package/esm2022/drawer/lib/drawer-sections.service.js.map +0 -1
- package/esm2022/drawer/lib/drawer.service.js +0 -86
- package/esm2022/drawer/lib/drawer.service.js.map +0 -1
- package/esm2022/drawer/lib/generate-routable-drawer-route.js +0 -52
- package/esm2022/drawer/lib/generate-routable-drawer-route.js.map +0 -1
- package/esm2022/drawer/lib/routable-drawer.js +0 -91
- package/esm2022/drawer/lib/routable-drawer.js.map +0 -1
- package/esm2022/drawer/malva-ui-core-drawer.js +0 -5
- package/esm2022/drawer/malva-ui-core-drawer.js.map +0 -1
- package/esm2022/dropdown/index.js +0 -10
- package/esm2022/dropdown/index.js.map +0 -1
- package/esm2022/dropdown/lib/active-descendant.js +0 -92
- package/esm2022/dropdown/lib/active-descendant.js.map +0 -1
- package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js +0 -295
- package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js.map +0 -1
- package/esm2022/dropdown/lib/highlight-match.pipe.js +0 -36
- package/esm2022/dropdown/lib/highlight-match.pipe.js.map +0 -1
- package/esm2022/dropdown/lib/option-matcher.js +0 -124
- package/esm2022/dropdown/lib/option-matcher.js.map +0 -1
- package/esm2022/dropdown/lib/options-adapter.js +0 -356
- package/esm2022/dropdown/lib/options-adapter.js.map +0 -1
- package/esm2022/dropdown/lib/options-result.js +0 -11
- package/esm2022/dropdown/lib/options-result.js.map +0 -1
- package/esm2022/dropdown/lib/reconciliation.js +0 -32
- package/esm2022/dropdown/lib/reconciliation.js.map +0 -1
- package/esm2022/dropdown/lib/select-data-source.js +0 -21
- package/esm2022/dropdown/lib/select-data-source.js.map +0 -1
- package/esm2022/dropdown/lib/select-option.js +0 -25
- package/esm2022/dropdown/lib/select-option.js.map +0 -1
- package/esm2022/dropdown/malva-ui-core-dropdown.js +0 -5
- package/esm2022/dropdown/malva-ui-core-dropdown.js.map +0 -1
- package/esm2022/empty-state/index.js +0 -2
- package/esm2022/empty-state/index.js.map +0 -1
- package/esm2022/empty-state/lib/empty-state/empty-state.js +0 -43
- package/esm2022/empty-state/lib/empty-state/empty-state.js.map +0 -1
- package/esm2022/empty-state/malva-ui-core-empty-state.js +0 -5
- package/esm2022/empty-state/malva-ui-core-empty-state.js.map +0 -1
- package/esm2022/expand/index.js +0 -3
- package/esm2022/expand/index.js.map +0 -1
- package/esm2022/expand/lib/expand/expand-content.js +0 -33
- package/esm2022/expand/lib/expand/expand-content.js.map +0 -1
- package/esm2022/expand/lib/expand/expand.js +0 -93
- package/esm2022/expand/lib/expand/expand.js.map +0 -1
- package/esm2022/expand/malva-ui-core-expand.js +0 -5
- package/esm2022/expand/malva-ui-core-expand.js.map +0 -1
- package/esm2022/file-upload/index.js +0 -5
- package/esm2022/file-upload/index.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload/file-upload.js +0 -324
- package/esm2022/file-upload/lib/file-upload/file-upload.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload/file-upload.types.js +0 -1
- package/esm2022/file-upload/lib/file-upload/file-upload.types.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload-action.js +0 -65
- package/esm2022/file-upload/lib/file-upload-action.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js +0 -55
- package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js.map +0 -1
- package/esm2022/file-upload/malva-ui-core-file-upload.js +0 -5
- package/esm2022/file-upload/malva-ui-core-file-upload.js.map +0 -1
- package/esm2022/filter/index.js +0 -4
- package/esm2022/filter/index.js.map +0 -1
- package/esm2022/filter/lib/filter/filter.js +0 -552
- package/esm2022/filter/lib/filter/filter.js.map +0 -1
- package/esm2022/filter/lib/filter.types.js +0 -1
- package/esm2022/filter/lib/filter.types.js.map +0 -1
- package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js +0 -518
- package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js.map +0 -1
- package/esm2022/filter/malva-ui-core-filter.js +0 -5
- package/esm2022/filter/malva-ui-core-filter.js.map +0 -1
- package/esm2022/form/index.js +0 -7
- package/esm2022/form/index.js.map +0 -1
- package/esm2022/form/lib/fieldset/fieldset.js +0 -101
- package/esm2022/form/lib/fieldset/fieldset.js.map +0 -1
- package/esm2022/form/lib/fieldset-span.js +0 -49
- package/esm2022/form/lib/fieldset-span.js.map +0 -1
- package/esm2022/form/lib/form/form.js +0 -60
- package/esm2022/form/lib/form/form.js.map +0 -1
- package/esm2022/form/lib/form-actions.js +0 -34
- package/esm2022/form/lib/form-actions.js.map +0 -1
- package/esm2022/form/lib/form-gap.js +0 -15
- package/esm2022/form/lib/form-gap.js.map +0 -1
- package/esm2022/form/lib/form-header.js +0 -27
- package/esm2022/form/lib/form-header.js.map +0 -1
- package/esm2022/form/lib/form.types.js +0 -1
- package/esm2022/form/lib/form.types.js.map +0 -1
- package/esm2022/form/malva-ui-core-form.js +0 -5
- package/esm2022/form/malva-ui-core-form.js.map +0 -1
- package/esm2022/form-utils/index.js +0 -16
- package/esm2022/form-utils/index.js.map +0 -1
- package/esm2022/form-utils/lib/aria-value-bridge.js +0 -57
- package/esm2022/form-utils/lib/aria-value-bridge.js.map +0 -1
- package/esm2022/form-utils/lib/description/description.js +0 -24
- package/esm2022/form-utils/lib/description/description.js.map +0 -1
- package/esm2022/form-utils/lib/focusable-group-base.js +0 -87
- package/esm2022/form-utils/lib/focusable-group-base.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js +0 -192
- package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-sides.js +0 -34
- package/esm2022/form-utils/lib/form-control-sides.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js +0 -14
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js +0 -47
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js.map +0 -1
- package/esm2022/form-utils/lib/form-field/form-field.js +0 -245
- package/esm2022/form-utils/lib/form-field/form-field.js.map +0 -1
- package/esm2022/form-utils/lib/hint/hint.js +0 -11
- package/esm2022/form-utils/lib/hint/hint.js.map +0 -1
- package/esm2022/form-utils/lib/label/label.js +0 -55
- package/esm2022/form-utils/lib/label/label.js.map +0 -1
- package/esm2022/form-utils/lib/message/message.js +0 -20
- package/esm2022/form-utils/lib/message/message.js.map +0 -1
- package/esm2022/form-utils/lib/models/error-display-strategy.js +0 -1
- package/esm2022/form-utils/lib/models/error-display-strategy.js.map +0 -1
- package/esm2022/form-utils/lib/models/form-control-connector.js +0 -3
- package/esm2022/form-utils/lib/models/form-control-connector.js.map +0 -1
- package/esm2022/form-utils/lib/models/form-state.js +0 -1
- package/esm2022/form-utils/lib/models/form-state.js.map +0 -1
- package/esm2022/form-utils/lib/selection.service.js +0 -81
- package/esm2022/form-utils/lib/selection.service.js.map +0 -1
- package/esm2022/form-utils/malva-ui-core-form-utils.js +0 -5
- package/esm2022/form-utils/malva-ui-core-form-utils.js.map +0 -1
- package/esm2022/form-utils/testing/index.js +0 -2
- package/esm2022/form-utils/testing/index.js.map +0 -1
- package/esm2022/form-utils/testing/lib/forms-binding-matrix.js +0 -32
- package/esm2022/form-utils/testing/lib/forms-binding-matrix.js.map +0 -1
- package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js +0 -5
- package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js.map +0 -1
- package/esm2022/index.js +0 -70
- package/esm2022/index.js.map +0 -1
- package/esm2022/input/index.js +0 -4
- package/esm2022/input/index.js.map +0 -1
- package/esm2022/input/lib/input/input-native.js +0 -49
- package/esm2022/input/lib/input/input-native.js.map +0 -1
- package/esm2022/input/lib/input/input-value-accessor.js +0 -4
- package/esm2022/input/lib/input/input-value-accessor.js.map +0 -1
- package/esm2022/input/lib/input/input.js +0 -277
- package/esm2022/input/lib/input/input.js.map +0 -1
- package/esm2022/input/lib/input/password-strength.js +0 -46
- package/esm2022/input/lib/input/password-strength.js.map +0 -1
- package/esm2022/input/malva-ui-core-input.js +0 -5
- package/esm2022/input/malva-ui-core-input.js.map +0 -1
- package/esm2022/kbd/index.js +0 -2
- package/esm2022/kbd/index.js.map +0 -1
- package/esm2022/kbd/lib/kbd/kbd.js +0 -124
- package/esm2022/kbd/lib/kbd/kbd.js.map +0 -1
- package/esm2022/kbd/malva-ui-core-kbd.js +0 -5
- package/esm2022/kbd/malva-ui-core-kbd.js.map +0 -1
- package/esm2022/layout/index.js +0 -5
- package/esm2022/layout/index.js.map +0 -1
- package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js +0 -14
- package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js.map +0 -1
- package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js +0 -14
- package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js.map +0 -1
- package/esm2022/layout/lib/layout/layout.js +0 -43
- package/esm2022/layout/lib/layout/layout.js.map +0 -1
- package/esm2022/layout/lib/layout/services/theme.service.js +0 -121
- package/esm2022/layout/lib/layout/services/theme.service.js.map +0 -1
- package/esm2022/layout/malva-ui-core-layout.js +0 -5
- package/esm2022/layout/malva-ui-core-layout.js.map +0 -1
- package/esm2022/link/index.js +0 -3
- package/esm2022/link/index.js.map +0 -1
- package/esm2022/link/lib/link/link.directives.js +0 -24
- package/esm2022/link/lib/link/link.directives.js.map +0 -1
- package/esm2022/link/lib/link/link.js +0 -61
- package/esm2022/link/lib/link/link.js.map +0 -1
- package/esm2022/link/malva-ui-core-link.js +0 -5
- package/esm2022/link/malva-ui-core-link.js.map +0 -1
- package/esm2022/list/index.js +0 -14
- package/esm2022/list/index.js.map +0 -1
- package/esm2022/list/lib/list/list.js +0 -28
- package/esm2022/list/lib/list/list.js.map +0 -1
- package/esm2022/list/lib/list-item/list-item.js +0 -125
- package/esm2022/list/lib/list-item/list-item.js.map +0 -1
- package/esm2022/list/lib/list-item-actions.js +0 -23
- package/esm2022/list/lib/list-item-actions.js.map +0 -1
- package/esm2022/list/lib/list-item-byline.js +0 -13
- package/esm2022/list/lib/list-item-byline.js.map +0 -1
- package/esm2022/list/lib/list-item-group/list-item-group.js +0 -25
- package/esm2022/list/lib/list-item-group/list-item-group.js.map +0 -1
- package/esm2022/list/lib/list-item-link/list-item-link.js +0 -20
- package/esm2022/list/lib/list-item-link/list-item-link.js.map +0 -1
- package/esm2022/list/lib/list-item-media.js +0 -13
- package/esm2022/list/lib/list-item-media.js.map +0 -1
- package/esm2022/list/lib/list-item-meta.js +0 -13
- package/esm2022/list/lib/list-item-meta.js.map +0 -1
- package/esm2022/list/lib/list-item-prefix.js +0 -13
- package/esm2022/list/lib/list-item-prefix.js.map +0 -1
- package/esm2022/list/lib/list-item-suffix.js +0 -13
- package/esm2022/list/lib/list-item-suffix.js.map +0 -1
- package/esm2022/list/lib/list-item-template.js +0 -14
- package/esm2022/list/lib/list-item-template.js.map +0 -1
- package/esm2022/list/lib/list-item-title.js +0 -13
- package/esm2022/list/lib/list-item-title.js.map +0 -1
- package/esm2022/list/lib/list-selectable.js +0 -116
- package/esm2022/list/lib/list-selectable.js.map +0 -1
- package/esm2022/list/malva-ui-core-list.js +0 -5
- package/esm2022/list/malva-ui-core-list.js.map +0 -1
- package/esm2022/loader/index.js +0 -2
- package/esm2022/loader/index.js.map +0 -1
- package/esm2022/loader/lib/loader/loader.js +0 -134
- package/esm2022/loader/lib/loader/loader.js.map +0 -1
- package/esm2022/loader/malva-ui-core-loader.js +0 -5
- package/esm2022/loader/malva-ui-core-loader.js.map +0 -1
- package/esm2022/malva-ui-core.js +0 -5
- package/esm2022/malva-ui-core.js.map +0 -1
- package/esm2022/menu/index.js +0 -10
- package/esm2022/menu/index.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-group-label.js +0 -35
- package/esm2022/menu/lib/menu/menu-group-label.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-group.js +0 -44
- package/esm2022/menu/lib/menu/menu-group.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-item.js +0 -117
- package/esm2022/menu/lib/menu/menu-item.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-separator.js +0 -41
- package/esm2022/menu/lib/menu/menu-separator.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-trigger.js +0 -653
- package/esm2022/menu/lib/menu/menu-trigger.js.map +0 -1
- package/esm2022/menu/lib/menu/menu.js +0 -308
- package/esm2022/menu/lib/menu/menu.js.map +0 -1
- package/esm2022/menu/lib/menu/menu.types.js +0 -4
- package/esm2022/menu/lib/menu/menu.types.js.map +0 -1
- package/esm2022/menu/lib/menu/menubar.js +0 -257
- package/esm2022/menu/lib/menu/menubar.js.map +0 -1
- package/esm2022/menu/lib/menu/menubar.types.js +0 -4
- package/esm2022/menu/lib/menu/menubar.types.js.map +0 -1
- package/esm2022/menu/lib/menu/submenu-aim.js +0 -30
- package/esm2022/menu/lib/menu/submenu-aim.js.map +0 -1
- package/esm2022/menu/malva-ui-core-menu.js +0 -5
- package/esm2022/menu/malva-ui-core-menu.js.map +0 -1
- package/esm2022/notification/index.js +0 -5
- package/esm2022/notification/index.js.map +0 -1
- package/esm2022/notification/lib/notification-item/notification-item.js +0 -65
- package/esm2022/notification/lib/notification-item/notification-item.js.map +0 -1
- package/esm2022/notification/lib/notification-ref.js +0 -13
- package/esm2022/notification/lib/notification-ref.js.map +0 -1
- package/esm2022/notification/lib/notification.service.js +0 -118
- package/esm2022/notification/lib/notification.service.js.map +0 -1
- package/esm2022/notification/lib/notification.types.js +0 -6
- package/esm2022/notification/lib/notification.types.js.map +0 -1
- package/esm2022/notification/malva-ui-core-notification.js +0 -5
- package/esm2022/notification/malva-ui-core-notification.js.map +0 -1
- package/esm2022/number-input/index.js +0 -2
- package/esm2022/number-input/index.js.map +0 -1
- package/esm2022/number-input/lib/number-input/number-input.js +0 -395
- package/esm2022/number-input/lib/number-input/number-input.js.map +0 -1
- package/esm2022/number-input/malva-ui-core-number-input.js +0 -5
- package/esm2022/number-input/malva-ui-core-number-input.js.map +0 -1
- package/esm2022/page/index.js +0 -15
- package/esm2022/page/index.js.map +0 -1
- package/esm2022/page/lib/page/page-scroll.token.js +0 -9
- package/esm2022/page/lib/page/page-scroll.token.js.map +0 -1
- package/esm2022/page/lib/page/page-snap-controller.js +0 -170
- package/esm2022/page/lib/page/page-snap-controller.js.map +0 -1
- package/esm2022/page/lib/page/page-snap.directive.js +0 -65
- package/esm2022/page/lib/page/page-snap.directive.js.map +0 -1
- package/esm2022/page/lib/page/page.js +0 -173
- package/esm2022/page/lib/page/page.js.map +0 -1
- package/esm2022/page/lib/page-content/page-aside.js +0 -13
- package/esm2022/page/lib/page-content/page-aside.js.map +0 -1
- package/esm2022/page/lib/page-content/page-content.js +0 -72
- package/esm2022/page/lib/page-content/page-content.js.map +0 -1
- package/esm2022/page/lib/page-dock/page-dock.js +0 -128
- package/esm2022/page/lib/page-dock/page-dock.js.map +0 -1
- package/esm2022/page/lib/page-dock/page-dock.slots.js +0 -39
- package/esm2022/page/lib/page-dock/page-dock.slots.js.map +0 -1
- package/esm2022/page/lib/page-header/page-header.directives.js +0 -88
- package/esm2022/page/lib/page-header/page-header.directives.js.map +0 -1
- package/esm2022/page/lib/page-header/page-header.js +0 -124
- package/esm2022/page/lib/page-header/page-header.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell-color.js +0 -193
- package/esm2022/page/lib/page-shell/page-shell-color.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell-css-color.js +0 -207
- package/esm2022/page/lib/page-shell/page-shell-css-color.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell.js +0 -131
- package/esm2022/page/lib/page-shell/page-shell.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell.slots.js +0 -41
- package/esm2022/page/lib/page-shell/page-shell.slots.js.map +0 -1
- package/esm2022/page/lib/page-summary/page-summary-item.js +0 -26
- package/esm2022/page/lib/page-summary/page-summary-item.js.map +0 -1
- package/esm2022/page/lib/page-summary/page-summary.js +0 -87
- package/esm2022/page/lib/page-summary/page-summary.js.map +0 -1
- package/esm2022/page/malva-ui-core-page.js +0 -5
- package/esm2022/page/malva-ui-core-page.js.map +0 -1
- package/esm2022/pagination/index.js +0 -5
- package/esm2022/pagination/index.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.directives.js +0 -58
- package/esm2022/pagination/lib/pagination/pagination.directives.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.js +0 -293
- package/esm2022/pagination/lib/pagination/pagination.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.model.js +0 -1
- package/esm2022/pagination/lib/pagination/pagination.model.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.service.js +0 -108
- package/esm2022/pagination/lib/pagination/pagination.service.js.map +0 -1
- package/esm2022/pagination/malva-ui-core-pagination.js +0 -5
- package/esm2022/pagination/malva-ui-core-pagination.js.map +0 -1
- package/esm2022/pin-input/index.js +0 -3
- package/esm2022/pin-input/index.js.map +0 -1
- package/esm2022/pin-input/lib/pin-input/pin-input-separator.js +0 -31
- package/esm2022/pin-input/lib/pin-input/pin-input-separator.js.map +0 -1
- package/esm2022/pin-input/lib/pin-input/pin-input.js +0 -365
- package/esm2022/pin-input/lib/pin-input/pin-input.js.map +0 -1
- package/esm2022/pin-input/malva-ui-core-pin-input.js +0 -5
- package/esm2022/pin-input/malva-ui-core-pin-input.js.map +0 -1
- package/esm2022/popup/index.js +0 -10
- package/esm2022/popup/index.js.map +0 -1
- package/esm2022/popup/lib/popup/popup.js +0 -500
- package/esm2022/popup/lib/popup/popup.js.map +0 -1
- package/esm2022/popup/lib/popup-container/popup-container.js +0 -169
- package/esm2022/popup/lib/popup-container/popup-container.js.map +0 -1
- package/esm2022/popup/lib/popup-container/popup-container.token.js +0 -9
- package/esm2022/popup/lib/popup-container/popup-container.token.js.map +0 -1
- package/esm2022/popup/lib/popup-content.js +0 -14
- package/esm2022/popup/lib/popup-content.js.map +0 -1
- package/esm2022/popup/lib/popup-header-content.js +0 -26
- package/esm2022/popup/lib/popup-header-content.js.map +0 -1
- package/esm2022/popup/lib/popup-pinned-content.js +0 -25
- package/esm2022/popup/lib/popup-pinned-content.js.map +0 -1
- package/esm2022/popup/lib/popup-positions.js +0 -252
- package/esm2022/popup/lib/popup-positions.js.map +0 -1
- package/esm2022/popup/lib/popup-trigger/popup-trigger.js +0 -308
- package/esm2022/popup/lib/popup-trigger/popup-trigger.js.map +0 -1
- package/esm2022/popup/lib/popup.service.js +0 -188
- package/esm2022/popup/lib/popup.service.js.map +0 -1
- package/esm2022/popup/malva-ui-core-popup.js +0 -5
- package/esm2022/popup/malva-ui-core-popup.js.map +0 -1
- package/esm2022/progress/index.js +0 -2
- package/esm2022/progress/index.js.map +0 -1
- package/esm2022/progress/lib/progress/progress.js +0 -102
- package/esm2022/progress/lib/progress/progress.js.map +0 -1
- package/esm2022/progress/malva-ui-core-progress.js +0 -5
- package/esm2022/progress/malva-ui-core-progress.js.map +0 -1
- package/esm2022/radio/index.js +0 -3
- package/esm2022/radio/index.js.map +0 -1
- package/esm2022/radio/lib/radio/radio.js +0 -134
- package/esm2022/radio/lib/radio/radio.js.map +0 -1
- package/esm2022/radio/lib/radio-group/radio-group.js +0 -176
- package/esm2022/radio/lib/radio-group/radio-group.js.map +0 -1
- package/esm2022/radio/lib/radio-group-token.js +0 -3
- package/esm2022/radio/lib/radio-group-token.js.map +0 -1
- package/esm2022/radio/malva-ui-core-radio.js +0 -5
- package/esm2022/radio/malva-ui-core-radio.js.map +0 -1
- package/esm2022/rating/index.js +0 -2
- package/esm2022/rating/index.js.map +0 -1
- package/esm2022/rating/lib/rating/rating.js +0 -208
- package/esm2022/rating/lib/rating/rating.js.map +0 -1
- package/esm2022/rating/malva-ui-core-rating.js +0 -5
- package/esm2022/rating/malva-ui-core-rating.js.map +0 -1
- package/esm2022/scrollbar/index.js +0 -2
- package/esm2022/scrollbar/index.js.map +0 -1
- package/esm2022/scrollbar/lib/scrollbar/scrollbar.js +0 -388
- package/esm2022/scrollbar/lib/scrollbar/scrollbar.js.map +0 -1
- package/esm2022/scrollbar/malva-ui-core-scrollbar.js +0 -5
- package/esm2022/scrollbar/malva-ui-core-scrollbar.js.map +0 -1
- package/esm2022/search-field/index.js +0 -3
- package/esm2022/search-field/index.js.map +0 -1
- package/esm2022/search-field/lib/search-field/search-field.js +0 -535
- package/esm2022/search-field/lib/search-field/search-field.js.map +0 -1
- package/esm2022/search-field/lib/search-field/search-overlay-content.js +0 -35
- package/esm2022/search-field/lib/search-field/search-overlay-content.js.map +0 -1
- package/esm2022/search-field/malva-ui-core-search-field.js +0 -5
- package/esm2022/search-field/malva-ui-core-search-field.js.map +0 -1
- package/esm2022/segmented/index.js +0 -5
- package/esm2022/segmented/index.js.map +0 -1
- package/esm2022/segmented/lib/segmented/segmented.js +0 -248
- package/esm2022/segmented/lib/segmented/segmented.js.map +0 -1
- package/esm2022/segmented/lib/segmented-item/segmented-item.js +0 -194
- package/esm2022/segmented/lib/segmented-item/segmented-item.js.map +0 -1
- package/esm2022/segmented/lib/segmented-token.js +0 -4
- package/esm2022/segmented/lib/segmented-token.js.map +0 -1
- package/esm2022/segmented/lib/segmented.types.js +0 -1
- package/esm2022/segmented/lib/segmented.types.js.map +0 -1
- package/esm2022/segmented/malva-ui-core-segmented.js +0 -5
- package/esm2022/segmented/malva-ui-core-segmented.js.map +0 -1
- package/esm2022/select/index.js +0 -4
- package/esm2022/select/index.js.map +0 -1
- package/esm2022/select/lib/select/select.js +0 -685
- package/esm2022/select/lib/select/select.js.map +0 -1
- package/esm2022/select/lib/select-option.js +0 -2
- package/esm2022/select/lib/select-option.js.map +0 -1
- package/esm2022/select/lib/select-template.directives.js +0 -34
- package/esm2022/select/lib/select-template.directives.js.map +0 -1
- package/esm2022/select/malva-ui-core-select.js +0 -5
- package/esm2022/select/malva-ui-core-select.js.map +0 -1
- package/esm2022/sidebar/index.js +0 -16
- package/esm2022/sidebar/index.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar/sidebar.js +0 -251
- package/esm2022/sidebar/lib/sidebar/sidebar.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-content.js +0 -37
- package/esm2022/sidebar/lib/sidebar-content.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-context.js +0 -3
- package/esm2022/sidebar/lib/sidebar-context.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-footer.js +0 -20
- package/esm2022/sidebar/lib/sidebar-footer.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js +0 -341
- package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-header.js +0 -20
- package/esm2022/sidebar/lib/sidebar-header.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js +0 -216
- package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-item-host.js +0 -39
- package/esm2022/sidebar/lib/sidebar-item-host.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-item-icon.js +0 -14
- package/esm2022/sidebar/lib/sidebar-item-icon.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-mode.js +0 -1
- package/esm2022/sidebar/lib/sidebar-mode.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js +0 -202
- package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js +0 -159
- package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js +0 -35
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js +0 -107
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js.map +0 -1
- package/esm2022/sidebar/malva-ui-core-sidebar.js +0 -5
- package/esm2022/sidebar/malva-ui-core-sidebar.js.map +0 -1
- package/esm2022/skeleton/index.js +0 -2
- package/esm2022/skeleton/index.js.map +0 -1
- package/esm2022/skeleton/lib/skeleton/skeleton.js +0 -78
- package/esm2022/skeleton/lib/skeleton/skeleton.js.map +0 -1
- package/esm2022/skeleton/malva-ui-core-skeleton.js +0 -5
- package/esm2022/skeleton/malva-ui-core-skeleton.js.map +0 -1
- package/esm2022/slider/index.js +0 -3
- package/esm2022/slider/index.js.map +0 -1
- package/esm2022/slider/lib/slider/slider-tooltip-def.js +0 -31
- package/esm2022/slider/lib/slider/slider-tooltip-def.js.map +0 -1
- package/esm2022/slider/lib/slider/slider.js +0 -468
- package/esm2022/slider/lib/slider/slider.js.map +0 -1
- package/esm2022/slider/malva-ui-core-slider.js +0 -5
- package/esm2022/slider/malva-ui-core-slider.js.map +0 -1
- package/esm2022/split-pane/index.js +0 -4
- package/esm2022/split-pane/index.js.map +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane-panel.js +0 -49
- package/esm2022/split-pane/lib/split-pane/split-pane-panel.js.map +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane.js +0 -290
- package/esm2022/split-pane/lib/split-pane/split-pane.js.map +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane.types.js +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane.types.js.map +0 -1
- package/esm2022/split-pane/malva-ui-core-split-pane.js +0 -5
- package/esm2022/split-pane/malva-ui-core-split-pane.js.map +0 -1
- package/esm2022/status-indicator/index.js +0 -2
- package/esm2022/status-indicator/index.js.map +0 -1
- package/esm2022/status-indicator/lib/status-indicator/status-indicator.js +0 -71
- package/esm2022/status-indicator/lib/status-indicator/status-indicator.js.map +0 -1
- package/esm2022/status-indicator/malva-ui-core-status-indicator.js +0 -5
- package/esm2022/status-indicator/malva-ui-core-status-indicator.js.map +0 -1
- package/esm2022/stepper/index.js +0 -5
- package/esm2022/stepper/index.js.map +0 -1
- package/esm2022/stepper/lib/stepper/step-header.js +0 -46
- package/esm2022/stepper/lib/stepper/step-header.js.map +0 -1
- package/esm2022/stepper/lib/stepper/step.js +0 -65
- package/esm2022/stepper/lib/stepper/step.js.map +0 -1
- package/esm2022/stepper/lib/stepper/stepper-token.js +0 -4
- package/esm2022/stepper/lib/stepper/stepper-token.js.map +0 -1
- package/esm2022/stepper/lib/stepper/stepper.js +0 -216
- package/esm2022/stepper/lib/stepper/stepper.js.map +0 -1
- package/esm2022/stepper/lib/stepper/stepper.types.js +0 -1
- package/esm2022/stepper/lib/stepper/stepper.types.js.map +0 -1
- package/esm2022/stepper/malva-ui-core-stepper.js +0 -5
- package/esm2022/stepper/malva-ui-core-stepper.js.map +0 -1
- package/esm2022/switch/index.js +0 -3
- package/esm2022/switch/index.js.map +0 -1
- package/esm2022/switch/lib/switch/switch.js +0 -190
- package/esm2022/switch/lib/switch/switch.js.map +0 -1
- package/esm2022/switch/lib/switch-group/switch-group.js +0 -68
- package/esm2022/switch/lib/switch-group/switch-group.js.map +0 -1
- package/esm2022/switch/lib/switch-group-token.js +0 -3
- package/esm2022/switch/lib/switch-group-token.js.map +0 -1
- package/esm2022/switch/malva-ui-core-switch.js +0 -5
- package/esm2022/switch/malva-ui-core-switch.js.map +0 -1
- package/esm2022/tabs/index.js +0 -9
- package/esm2022/tabs/index.js.map +0 -1
- package/esm2022/tabs/lib/tab/tab.js +0 -72
- package/esm2022/tabs/lib/tab/tab.js.map +0 -1
- package/esm2022/tabs/lib/tab-content/tab-content.js +0 -19
- package/esm2022/tabs/lib/tab-content/tab-content.js.map +0 -1
- package/esm2022/tabs/lib/tab-content-def.js +0 -14
- package/esm2022/tabs/lib/tab-content-def.js.map +0 -1
- package/esm2022/tabs/lib/tab-def.js +0 -17
- package/esm2022/tabs/lib/tab-def.js.map +0 -1
- package/esm2022/tabs/lib/tab-group-token.js +0 -3
- package/esm2022/tabs/lib/tab-group-token.js.map +0 -1
- package/esm2022/tabs/lib/tab-item/tab-item.js +0 -44
- package/esm2022/tabs/lib/tab-item/tab-item.js.map +0 -1
- package/esm2022/tabs/lib/tabs/tabs.js +0 -542
- package/esm2022/tabs/lib/tabs/tabs.js.map +0 -1
- package/esm2022/tabs/lib/tabs.service.js +0 -83
- package/esm2022/tabs/lib/tabs.service.js.map +0 -1
- package/esm2022/tabs/malva-ui-core-tabs.js +0 -5
- package/esm2022/tabs/malva-ui-core-tabs.js.map +0 -1
- package/esm2022/textarea/index.js +0 -2
- package/esm2022/textarea/index.js.map +0 -1
- package/esm2022/textarea/lib/textarea/textarea.js +0 -194
- package/esm2022/textarea/lib/textarea/textarea.js.map +0 -1
- package/esm2022/textarea/malva-ui-core-textarea.js +0 -5
- package/esm2022/textarea/malva-ui-core-textarea.js.map +0 -1
- package/esm2022/tile/index.js +0 -3
- package/esm2022/tile/index.js.map +0 -1
- package/esm2022/tile/lib/tile/tile.js +0 -39
- package/esm2022/tile/lib/tile/tile.js.map +0 -1
- package/esm2022/tile/lib/tile-header.js +0 -14
- package/esm2022/tile/lib/tile-header.js.map +0 -1
- package/esm2022/tile/malva-ui-core-tile.js +0 -5
- package/esm2022/tile/malva-ui-core-tile.js.map +0 -1
- package/esm2022/time-picker/index.js +0 -2
- package/esm2022/time-picker/index.js.map +0 -1
- package/esm2022/time-picker/lib/time-picker/time-picker.js +0 -310
- package/esm2022/time-picker/lib/time-picker/time-picker.js.map +0 -1
- package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js +0 -216
- package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js.map +0 -1
- package/esm2022/time-picker/malva-ui-core-time-picker.js +0 -5
- package/esm2022/time-picker/malva-ui-core-time-picker.js.map +0 -1
- package/esm2022/timeline/index.js +0 -6
- package/esm2022/timeline/index.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline-item-icon.js +0 -31
- package/esm2022/timeline/lib/timeline/timeline-item-icon.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline-item-meta.js +0 -31
- package/esm2022/timeline/lib/timeline/timeline-item-meta.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline-item.js +0 -69
- package/esm2022/timeline/lib/timeline/timeline-item.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline.js +0 -36
- package/esm2022/timeline/lib/timeline/timeline.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline.types.js +0 -1
- package/esm2022/timeline/lib/timeline/timeline.types.js.map +0 -1
- package/esm2022/timeline/malva-ui-core-timeline.js +0 -5
- package/esm2022/timeline/malva-ui-core-timeline.js.map +0 -1
- package/esm2022/title/index.js +0 -2
- package/esm2022/title/index.js.map +0 -1
- package/esm2022/title/lib/title/title.js +0 -171
- package/esm2022/title/lib/title/title.js.map +0 -1
- package/esm2022/title/malva-ui-core-title.js +0 -5
- package/esm2022/title/malva-ui-core-title.js.map +0 -1
- package/esm2022/toast/index.js +0 -13
- package/esm2022/toast/index.js.map +0 -1
- package/esm2022/toast/lib/abstract-toast-container.js +0 -50
- package/esm2022/toast/lib/abstract-toast-container.js.map +0 -1
- package/esm2022/toast/lib/abstract-toast-item.js +0 -75
- package/esm2022/toast/lib/abstract-toast-item.js.map +0 -1
- package/esm2022/toast/lib/abstract-toast.service.js +0 -176
- package/esm2022/toast/lib/abstract-toast.service.js.map +0 -1
- package/esm2022/toast/lib/toast-container/toast-container.js +0 -61
- package/esm2022/toast/lib/toast-container/toast-container.js.map +0 -1
- package/esm2022/toast/lib/toast-item/toast-item.js +0 -62
- package/esm2022/toast/lib/toast-item/toast-item.js.map +0 -1
- package/esm2022/toast/lib/toast-ref.js +0 -54
- package/esm2022/toast/lib/toast-ref.js.map +0 -1
- package/esm2022/toast/lib/toast-timer.js +0 -37
- package/esm2022/toast/lib/toast-timer.js.map +0 -1
- package/esm2022/toast/lib/toast.directives.js +0 -76
- package/esm2022/toast/lib/toast.directives.js.map +0 -1
- package/esm2022/toast/lib/toast.service.js +0 -127
- package/esm2022/toast/lib/toast.service.js.map +0 -1
- package/esm2022/toast/lib/toast.types.js +0 -39
- package/esm2022/toast/lib/toast.types.js.map +0 -1
- package/esm2022/toast/malva-ui-core-toast.js +0 -5
- package/esm2022/toast/malva-ui-core-toast.js.map +0 -1
- package/esm2022/tokenizer/index.js +0 -4
- package/esm2022/tokenizer/index.js.map +0 -1
- package/esm2022/tokenizer/lib/token/token.js +0 -123
- package/esm2022/tokenizer/lib/token/token.js.map +0 -1
- package/esm2022/tokenizer/lib/token-template.js +0 -23
- package/esm2022/tokenizer/lib/token-template.js.map +0 -1
- package/esm2022/tokenizer/lib/tokenizer/tokenizer.js +0 -324
- package/esm2022/tokenizer/lib/tokenizer/tokenizer.js.map +0 -1
- package/esm2022/tokenizer/malva-ui-core-tokenizer.js +0 -5
- package/esm2022/tokenizer/malva-ui-core-tokenizer.js.map +0 -1
- package/esm2022/toolbar/index.js +0 -4
- package/esm2022/toolbar/index.js.map +0 -1
- package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js +0 -13
- package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js.map +0 -1
- package/esm2022/toolbar/lib/toolbar/toolbar-widget.js +0 -106
- package/esm2022/toolbar/lib/toolbar/toolbar-widget.js.map +0 -1
- package/esm2022/toolbar/lib/toolbar/toolbar.js +0 -19
- package/esm2022/toolbar/lib/toolbar/toolbar.js.map +0 -1
- package/esm2022/toolbar/malva-ui-core-toolbar.js +0 -5
- package/esm2022/toolbar/malva-ui-core-toolbar.js.map +0 -1
- package/esm2022/tooltip/index.js +0 -4
- package/esm2022/tooltip/index.js.map +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip-panel.js +0 -69
- package/esm2022/tooltip/lib/tooltip/tooltip-panel.js.map +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.js +0 -352
- package/esm2022/tooltip/lib/tooltip/tooltip.js.map +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.types.js +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.types.js.map +0 -1
- package/esm2022/tooltip/malva-ui-core-tooltip.js +0 -5
- package/esm2022/tooltip/malva-ui-core-tooltip.js.map +0 -1
- package/esm2022/tree/index.js +0 -5
- package/esm2022/tree/index.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-context.js +0 -7
- package/esm2022/tree/lib/tree/tree-context.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-node-def.js +0 -34
- package/esm2022/tree/lib/tree/tree-node-def.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-node.js +0 -1
- package/esm2022/tree/lib/tree/tree-node.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-subtree.js +0 -107
- package/esm2022/tree/lib/tree/tree-subtree.js.map +0 -1
- package/esm2022/tree/lib/tree/tree.js +0 -362
- package/esm2022/tree/lib/tree/tree.js.map +0 -1
- package/esm2022/tree/malva-ui-core-tree.js +0 -5
- package/esm2022/tree/malva-ui-core-tree.js.map +0 -1
- package/expand/index.d.ts +0 -2
- package/expand/lib/expand/expand-content.d.ts +0 -26
- package/expand/lib/expand/expand.d.ts +0 -74
- package/expand/malva-ui-core-expand.d.ts +0 -5
- package/file-upload/index.d.ts +0 -4
- package/file-upload/lib/file-upload/file-upload.d.ts +0 -138
- package/file-upload/lib/file-upload/file-upload.types.d.ts +0 -42
- package/file-upload/lib/file-upload-action.d.ts +0 -53
- package/file-upload/lib/file-upload-item/file-upload-item.d.ts +0 -30
- package/file-upload/malva-ui-core-file-upload.d.ts +0 -5
- package/filter/index.d.ts +0 -3
- package/filter/lib/filter/filter.d.ts +0 -156
- package/filter/lib/filter.types.d.ts +0 -75
- package/filter/lib/smart-filter-bar/smart-filter-bar.d.ts +0 -153
- package/filter/malva-ui-core-filter.d.ts +0 -5
- package/form/index.d.ts +0 -6
- package/form/lib/fieldset/fieldset.d.ts +0 -58
- package/form/lib/fieldset-span.d.ts +0 -28
- package/form/lib/form/form.d.ts +0 -37
- package/form/lib/form-actions.d.ts +0 -20
- package/form/lib/form-gap.d.ts +0 -5
- package/form/lib/form-header.d.ts +0 -18
- package/form/lib/form.types.d.ts +0 -13
- package/form/malva-ui-core-form.d.ts +0 -5
- package/form-utils/index.d.ts +0 -15
- package/form-utils/lib/aria-value-bridge.d.ts +0 -45
- package/form-utils/lib/description/description.d.ts +0 -16
- package/form-utils/lib/focusable-group-base.d.ts +0 -76
- package/form-utils/lib/form-control-base/signal-form-control-base.d.ts +0 -159
- package/form-utils/lib/form-control-sides.d.ts +0 -20
- package/form-utils/lib/form-control-wrapper/form-control-wrapper-control.d.ts +0 -6
- package/form-utils/lib/form-control-wrapper/form-control-wrapper.d.ts +0 -20
- package/form-utils/lib/form-field/form-field.d.ts +0 -68
- package/form-utils/lib/hint/hint.d.ts +0 -5
- package/form-utils/lib/label/label.d.ts +0 -22
- package/form-utils/lib/message/message.d.ts +0 -7
- package/form-utils/lib/models/error-display-strategy.d.ts +0 -1
- package/form-utils/lib/models/form-control-connector.d.ts +0 -41
- package/form-utils/lib/models/form-state.d.ts +0 -1
- package/form-utils/lib/selection.service.d.ts +0 -27
- package/form-utils/malva-ui-core-form-utils.d.ts +0 -5
- package/form-utils/testing/index.d.ts +0 -1
- package/form-utils/testing/lib/forms-binding-matrix.d.ts +0 -47
- package/form-utils/testing/malva-ui-core-form-utils-testing.d.ts +0 -5
- package/index.d.ts +0 -69
- package/input/index.d.ts +0 -3
- package/input/lib/input/input-native.d.ts +0 -36
- package/input/lib/input/input-value-accessor.d.ts +0 -11
- package/input/lib/input/input.d.ts +0 -189
- package/input/lib/input/password-strength.d.ts +0 -34
- package/input/malva-ui-core-input.d.ts +0 -5
- package/kbd/index.d.ts +0 -1
- package/kbd/lib/kbd/kbd.d.ts +0 -52
- package/kbd/malva-ui-core-kbd.d.ts +0 -5
- package/layout/index.d.ts +0 -4
- package/layout/lib/layout/directives/MlvLayoutSide.d.ts +0 -6
- package/layout/lib/layout/directives/MlvLayoutTop.d.ts +0 -6
- package/layout/lib/layout/layout.d.ts +0 -20
- package/layout/lib/layout/services/theme.service.d.ts +0 -33
- package/layout/malva-ui-core-layout.d.ts +0 -5
- package/link/index.d.ts +0 -2
- package/link/lib/link/link.d.ts +0 -15
- package/link/lib/link/link.directives.d.ts +0 -10
- package/link/malva-ui-core-link.d.ts +0 -5
- package/list/index.d.ts +0 -13
- package/list/lib/list/list.d.ts +0 -25
- package/list/lib/list-item/list-item.d.ts +0 -67
- package/list/lib/list-item-actions.d.ts +0 -12
- package/list/lib/list-item-byline.d.ts +0 -5
- package/list/lib/list-item-group/list-item-group.d.ts +0 -11
- package/list/lib/list-item-link/list-item-link.d.ts +0 -8
- package/list/lib/list-item-media.d.ts +0 -5
- package/list/lib/list-item-meta.d.ts +0 -5
- package/list/lib/list-item-prefix.d.ts +0 -5
- package/list/lib/list-item-suffix.d.ts +0 -5
- package/list/lib/list-item-template.d.ts +0 -10
- package/list/lib/list-item-title.d.ts +0 -5
- package/list/lib/list-selectable.d.ts +0 -73
- package/list/malva-ui-core-list.d.ts +0 -5
- package/loader/index.d.ts +0 -1
- package/loader/lib/loader/loader.d.ts +0 -84
- package/loader/malva-ui-core-loader.d.ts +0 -5
- package/malva-ui-core.d.ts +0 -5
- package/menu/index.d.ts +0 -9
- package/menu/lib/menu/menu-group-label.d.ts +0 -22
- package/menu/lib/menu/menu-group.d.ts +0 -27
- package/menu/lib/menu/menu-item.d.ts +0 -76
- package/menu/lib/menu/menu-separator.d.ts +0 -18
- package/menu/lib/menu/menu-trigger.d.ts +0 -255
- package/menu/lib/menu/menu.d.ts +0 -149
- package/menu/lib/menu/menu.types.d.ts +0 -13
- package/menu/lib/menu/menubar.d.ts +0 -131
- package/menu/lib/menu/menubar.types.d.ts +0 -82
- package/menu/lib/menu/submenu-aim.d.ts +0 -10
- package/menu/malva-ui-core-menu.d.ts +0 -5
- package/notification/index.d.ts +0 -4
- package/notification/lib/notification-item/notification-item.d.ts +0 -20
- package/notification/lib/notification-ref.d.ts +0 -12
- package/notification/lib/notification.service.d.ts +0 -43
- package/notification/lib/notification.types.d.ts +0 -52
- package/notification/malva-ui-core-notification.d.ts +0 -5
- package/number-input/index.d.ts +0 -1
- package/number-input/lib/number-input/number-input.d.ts +0 -162
- package/number-input/malva-ui-core-number-input.d.ts +0 -5
- package/page/index.d.ts +0 -14
- package/page/lib/page/page-scroll.token.d.ts +0 -19
- package/page/lib/page/page-snap-controller.d.ts +0 -87
- package/page/lib/page/page-snap.directive.d.ts +0 -40
- package/page/lib/page/page.d.ts +0 -74
- package/page/lib/page-content/page-aside.d.ts +0 -7
- package/page/lib/page-content/page-content.d.ts +0 -37
- package/page/lib/page-dock/page-dock.d.ts +0 -50
- package/page/lib/page-dock/page-dock.slots.d.ts +0 -16
- package/page/lib/page-header/page-header.d.ts +0 -77
- package/page/lib/page-header/page-header.directives.d.ts +0 -50
- package/page/lib/page-shell/page-shell-color.d.ts +0 -48
- package/page/lib/page-shell/page-shell-css-color.d.ts +0 -20
- package/page/lib/page-shell/page-shell.d.ts +0 -44
- package/page/lib/page-shell/page-shell.slots.d.ts +0 -16
- package/page/lib/page-summary/page-summary-item.d.ts +0 -11
- package/page/lib/page-summary/page-summary.d.ts +0 -36
- package/page/malva-ui-core-page.d.ts +0 -5
- package/pagination/index.d.ts +0 -4
- package/pagination/lib/pagination/pagination.d.ts +0 -182
- package/pagination/lib/pagination/pagination.directives.d.ts +0 -44
- package/pagination/lib/pagination/pagination.model.d.ts +0 -6
- package/pagination/lib/pagination/pagination.service.d.ts +0 -26
- package/pagination/malva-ui-core-pagination.d.ts +0 -5
- package/pin-input/index.d.ts +0 -2
- package/pin-input/lib/pin-input/pin-input-separator.d.ts +0 -24
- package/pin-input/lib/pin-input/pin-input.d.ts +0 -176
- package/pin-input/malva-ui-core-pin-input.d.ts +0 -5
- package/popup/index.d.ts +0 -9
- package/popup/lib/popup/popup.d.ts +0 -343
- package/popup/lib/popup-container/popup-container.d.ts +0 -61
- package/popup/lib/popup-container/popup-container.token.d.ts +0 -34
- package/popup/lib/popup-content.d.ts +0 -6
- package/popup/lib/popup-header-content.d.ts +0 -18
- package/popup/lib/popup-pinned-content.d.ts +0 -17
- package/popup/lib/popup-positions.d.ts +0 -105
- package/popup/lib/popup-trigger/popup-trigger.d.ts +0 -102
- package/popup/lib/popup.service.d.ts +0 -159
- package/popup/malva-ui-core-popup.d.ts +0 -5
- package/progress/index.d.ts +0 -1
- package/progress/lib/progress/progress.d.ts +0 -69
- package/progress/malva-ui-core-progress.d.ts +0 -5
- package/radio/index.d.ts +0 -2
- package/radio/lib/radio/radio.d.ts +0 -87
- package/radio/lib/radio-group/radio-group.d.ts +0 -35
- package/radio/lib/radio-group-token.d.ts +0 -7
- package/radio/malva-ui-core-radio.d.ts +0 -5
- package/rating/index.d.ts +0 -1
- package/rating/lib/rating/rating.d.ts +0 -100
- package/rating/malva-ui-core-rating.d.ts +0 -5
- package/scrollbar/index.d.ts +0 -1
- package/scrollbar/lib/scrollbar/scrollbar.d.ts +0 -166
- package/scrollbar/malva-ui-core-scrollbar.d.ts +0 -5
- package/search-field/index.d.ts +0 -2
- package/search-field/lib/search-field/search-field.d.ts +0 -347
- package/search-field/lib/search-field/search-overlay-content.d.ts +0 -59
- package/search-field/malva-ui-core-search-field.d.ts +0 -5
- package/segmented/index.d.ts +0 -4
- package/segmented/lib/segmented/segmented.d.ts +0 -80
- package/segmented/lib/segmented-item/segmented-item.d.ts +0 -89
- package/segmented/lib/segmented-token.d.ts +0 -22
- package/segmented/lib/segmented.types.d.ts +0 -9
- package/segmented/malva-ui-core-segmented.d.ts +0 -5
- package/select/index.d.ts +0 -3
- package/select/lib/select/select.d.ts +0 -379
- package/select/lib/select-option.d.ts +0 -1
- package/select/lib/select-template.directives.d.ts +0 -14
- package/select/malva-ui-core-select.d.ts +0 -5
- package/sidebar/index.d.ts +0 -15
- package/sidebar/lib/sidebar/sidebar.d.ts +0 -134
- package/sidebar/lib/sidebar-content.d.ts +0 -11
- package/sidebar/lib/sidebar-context.d.ts +0 -23
- package/sidebar/lib/sidebar-footer.d.ts +0 -9
- package/sidebar/lib/sidebar-group/sidebar-group.d.ts +0 -127
- package/sidebar/lib/sidebar-header.d.ts +0 -9
- package/sidebar/lib/sidebar-item/sidebar-item.d.ts +0 -104
- package/sidebar/lib/sidebar-item-host.d.ts +0 -18
- package/sidebar/lib/sidebar-item-icon.d.ts +0 -6
- package/sidebar/lib/sidebar-mode.d.ts +0 -2
- package/sidebar/lib/sidebar-rail/sidebar-rail.d.ts +0 -54
- package/sidebar/lib/sidebar-trigger/sidebar-trigger.d.ts +0 -67
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.d.ts +0 -54
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.d.ts +0 -19
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.types.d.ts +0 -20
- package/sidebar/malva-ui-core-sidebar.d.ts +0 -5
- package/skeleton/index.d.ts +0 -1
- package/skeleton/lib/skeleton/skeleton.d.ts +0 -60
- package/skeleton/malva-ui-core-skeleton.d.ts +0 -5
- package/slider/index.d.ts +0 -2
- package/slider/lib/slider/slider-tooltip-def.d.ts +0 -39
- package/slider/lib/slider/slider.d.ts +0 -171
- package/slider/malva-ui-core-slider.d.ts +0 -5
- package/split-pane/index.d.ts +0 -3
- package/split-pane/lib/split-pane/split-pane-panel.d.ts +0 -34
- package/split-pane/lib/split-pane/split-pane.d.ts +0 -98
- package/split-pane/lib/split-pane/split-pane.types.d.ts +0 -7
- package/split-pane/malva-ui-core-split-pane.d.ts +0 -5
- package/status-indicator/index.d.ts +0 -1
- package/status-indicator/lib/status-indicator/status-indicator.d.ts +0 -61
- package/status-indicator/malva-ui-core-status-indicator.d.ts +0 -5
- package/stepper/index.d.ts +0 -4
- package/stepper/lib/stepper/step-header.d.ts +0 -34
- package/stepper/lib/stepper/step.d.ts +0 -51
- package/stepper/lib/stepper/stepper-token.d.ts +0 -13
- package/stepper/lib/stepper/stepper.d.ts +0 -98
- package/stepper/lib/stepper/stepper.types.d.ts +0 -4
- package/stepper/malva-ui-core-stepper.d.ts +0 -5
- package/switch/index.d.ts +0 -2
- package/switch/lib/switch/switch.d.ts +0 -118
- package/switch/lib/switch-group/switch-group.d.ts +0 -24
- package/switch/lib/switch-group-token.d.ts +0 -6
- package/switch/malva-ui-core-switch.d.ts +0 -5
- package/tabs/index.d.ts +0 -8
- package/tabs/lib/tab/tab.d.ts +0 -46
- package/tabs/lib/tab-content/tab-content.d.ts +0 -11
- package/tabs/lib/tab-content-def.d.ts +0 -6
- package/tabs/lib/tab-def.d.ts +0 -11
- package/tabs/lib/tab-group-token.d.ts +0 -10
- package/tabs/lib/tab-item/tab-item.d.ts +0 -28
- package/tabs/lib/tabs/tabs.d.ts +0 -202
- package/tabs/lib/tabs.service.d.ts +0 -24
- package/tabs/malva-ui-core-tabs.d.ts +0 -5
- package/textarea/index.d.ts +0 -1
- package/textarea/lib/textarea/textarea.d.ts +0 -77
- package/textarea/malva-ui-core-textarea.d.ts +0 -5
- package/tile/index.d.ts +0 -2
- package/tile/lib/tile/tile.d.ts +0 -20
- package/tile/lib/tile-header.d.ts +0 -6
- package/tile/malva-ui-core-tile.d.ts +0 -5
- package/time-picker/index.d.ts +0 -1
- package/time-picker/lib/time-picker/time-picker.d.ts +0 -135
- package/time-picker/lib/time-picker-column/time-picker-column.d.ts +0 -111
- package/time-picker/malva-ui-core-time-picker.d.ts +0 -5
- package/timeline/index.d.ts +0 -5
- package/timeline/lib/timeline/timeline-item-icon.d.ts +0 -24
- package/timeline/lib/timeline/timeline-item-meta.d.ts +0 -24
- package/timeline/lib/timeline/timeline-item.d.ts +0 -52
- package/timeline/lib/timeline/timeline.d.ts +0 -27
- package/timeline/lib/timeline/timeline.types.d.ts +0 -18
- package/timeline/malva-ui-core-timeline.d.ts +0 -5
- package/title/index.d.ts +0 -1
- package/title/lib/title/title.d.ts +0 -63
- package/title/malva-ui-core-title.d.ts +0 -5
- package/toast/index.d.ts +0 -10
- package/toast/lib/abstract-toast-container.d.ts +0 -29
- package/toast/lib/abstract-toast-item.d.ts +0 -44
- package/toast/lib/abstract-toast.service.d.ts +0 -75
- package/toast/lib/toast-container/toast-container.d.ts +0 -23
- package/toast/lib/toast-item/toast-item.d.ts +0 -25
- package/toast/lib/toast-ref.d.ts +0 -33
- package/toast/lib/toast-timer.d.ts +0 -24
- package/toast/lib/toast.directives.d.ts +0 -13
- package/toast/lib/toast.service.d.ts +0 -41
- package/toast/lib/toast.types.d.ts +0 -139
- package/toast/malva-ui-core-toast.d.ts +0 -5
- package/tokenizer/index.d.ts +0 -3
- package/tokenizer/lib/token/token.d.ts +0 -60
- package/tokenizer/lib/token-template.d.ts +0 -29
- package/tokenizer/lib/tokenizer/tokenizer.d.ts +0 -109
- package/tokenizer/malva-ui-core-tokenizer.d.ts +0 -5
- package/toolbar/index.d.ts +0 -3
- package/toolbar/lib/toolbar/toolbar-spacer.d.ts +0 -5
- package/toolbar/lib/toolbar/toolbar-widget.d.ts +0 -75
- package/toolbar/lib/toolbar/toolbar.d.ts +0 -8
- package/toolbar/malva-ui-core-toolbar.d.ts +0 -5
- package/tooltip/index.d.ts +0 -3
- package/tooltip/lib/tooltip/tooltip-panel.d.ts +0 -26
- package/tooltip/lib/tooltip/tooltip.d.ts +0 -148
- package/tooltip/lib/tooltip/tooltip.types.d.ts +0 -17
- package/tooltip/malva-ui-core-tooltip.d.ts +0 -5
- package/tree/index.d.ts +0 -4
- package/tree/lib/tree/tree-context.d.ts +0 -62
- package/tree/lib/tree/tree-node-def.d.ts +0 -33
- package/tree/lib/tree/tree-node.d.ts +0 -45
- package/tree/lib/tree/tree-subtree.d.ts +0 -63
- package/tree/lib/tree/tree.d.ts +0 -156
- package/tree/malva-ui-core-tree.d.ts +0 -5
|
@@ -0,0 +1,994 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { signal, Pipe, input, output, computed, inject, viewChild, ElementRef, effect, afterNextRender, isDevMode, untracked, afterRenderEffect, ChangeDetectionStrategy, ViewEncapsulation, Component, DestroyRef } from '@angular/core';
|
|
3
|
+
import { DOCUMENT, NgTemplateOutlet } from '@angular/common';
|
|
4
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
5
|
+
import { MlvListSelectable, MlvList, MlvListItem, MlvListItemSelectable } from '@malva-ui/core/list';
|
|
6
|
+
import { LucideCheck } from '@lucide/angular';
|
|
7
|
+
import { MlvSelectionService } from '@malva-ui/core/form-utils';
|
|
8
|
+
import { MlvScrollbar } from '@malva-ui/core/scrollbar';
|
|
9
|
+
import { MlvInfiniteScroll } from '@malva-ui/cdk/infinite-scroll';
|
|
10
|
+
import { normalizeForMatch, mlvNextId } from '@malva-ui/cdk/utils';
|
|
11
|
+
export { normalizeForMatch } from '@malva-ui/cdk/utils';
|
|
12
|
+
import { fromEvent, startWith, of, from, isObservable } from 'rxjs';
|
|
13
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
14
|
+
import { MlvArrayDataSource, MlvDataSource } from '@malva-ui/cdk/data-source';
|
|
15
|
+
import { take } from 'rxjs/operators';
|
|
16
|
+
|
|
17
|
+
function defaultOptionTransform(item) {
|
|
18
|
+
return isSelectOption(item) ? item : { label: String(item), value: item };
|
|
19
|
+
}
|
|
20
|
+
function isSelectOption(value) {
|
|
21
|
+
if (!value || typeof value !== 'object')
|
|
22
|
+
return false;
|
|
23
|
+
const candidate = value;
|
|
24
|
+
return !!candidate.label && !!candidate.value;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Type-guard predicate: whether an array of resolved options is "grouped",
|
|
28
|
+
* i.e. at least one option carries a non-empty {@link MlvSelectOption.group} label.
|
|
29
|
+
*
|
|
30
|
+
* The dropdown panel uses this to decide whether to render sticky group headers.
|
|
31
|
+
* Returns `false` for empty arrays and for arrays where no option declares a
|
|
32
|
+
* group, so ungrouped `MlvSelectOption` arrays (and plain primitive arrays) render
|
|
33
|
+
* exactly as before.
|
|
34
|
+
*/
|
|
35
|
+
function hasOptionGroups(options) {
|
|
36
|
+
return options.some((option) => !!option.group);
|
|
37
|
+
}
|
|
38
|
+
function resolveOptions(items, transform) {
|
|
39
|
+
return items.map(transform);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Builds the deterministic DOM `id` for the option row at `index` within a
|
|
44
|
+
* listbox, matching the id `mlv-dropdown-panel` stamps on each option. An
|
|
45
|
+
* owning combobox / autocomplete computes the same id to point its input's
|
|
46
|
+
* `aria-activedescendant` at the active row.
|
|
47
|
+
*
|
|
48
|
+
* This is the single source of truth for the activedescendant option-id format
|
|
49
|
+
* (`<listboxId>-option-<index>`), shared by `mlv-dropdown-panel`,
|
|
50
|
+
* `mlv-combobox`, and `[mlvAutocomplete]` so the id the panel renders and the
|
|
51
|
+
* id the trigger references can never drift.
|
|
52
|
+
*
|
|
53
|
+
* @param listboxId - The id of the listbox that owns the option.
|
|
54
|
+
* @param index - The option's flat index within the listbox.
|
|
55
|
+
* @returns The option's DOM id, e.g. `"my-listbox-option-3"`.
|
|
56
|
+
*/
|
|
57
|
+
function optionId(listboxId, index) {
|
|
58
|
+
return `${listboxId}-option-${index}`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Signal-backed bookkeeping for the "active option" index of a WAI-ARIA
|
|
62
|
+
* activedescendant keyboard model — the shared engine behind `mlv-combobox`
|
|
63
|
+
* and `[mlvAutocomplete]`, where DOM focus stays on the text input and the
|
|
64
|
+
* highlighted option is tracked purely by index (mirrored into the input's
|
|
65
|
+
* `aria-activedescendant`).
|
|
66
|
+
*
|
|
67
|
+
* The active index is `-1` when no option is active. {@link move} advances it
|
|
68
|
+
* with wrap-around, treating a first move from `-1` as landing on the first
|
|
69
|
+
* (forward) or last (backward) option; {@link first} / {@link last} jump to the
|
|
70
|
+
* ends; {@link reset} clears it back to `-1`. The current option count is read
|
|
71
|
+
* lazily through the accessor supplied at construction, so the owner can back it
|
|
72
|
+
* with any signal / computed (e.g. a filtered-options length) without pushing
|
|
73
|
+
* the count on every keystroke.
|
|
74
|
+
*/
|
|
75
|
+
class MlvActiveDescendant {
|
|
76
|
+
_count;
|
|
77
|
+
/** @private The active option index; `-1` = no active option. */
|
|
78
|
+
_index = signal(-1, /* @ts-ignore */
|
|
79
|
+
...(ngDevMode ? [{ debugName: "_index" }] : /* istanbul ignore next */ []));
|
|
80
|
+
/**
|
|
81
|
+
* The active option index as a read-only signal; `-1` when no option is
|
|
82
|
+
* active. Read it reactively (template / effect) or imperatively (call it in
|
|
83
|
+
* an event handler) — both track the same underlying state.
|
|
84
|
+
*/
|
|
85
|
+
index = this._index.asReadonly();
|
|
86
|
+
/**
|
|
87
|
+
* @param _count Accessor returning the current number of navigable options.
|
|
88
|
+
* Read lazily on each {@link move} / {@link first} / {@link last} call, so it
|
|
89
|
+
* always reflects the live count (e.g. after the options are filtered).
|
|
90
|
+
*/
|
|
91
|
+
constructor(_count) {
|
|
92
|
+
this._count = _count;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Advances the active option by `delta` with wrap-around. With no option
|
|
96
|
+
* active (`-1`), a forward move (`delta > 0`) lands on the first option and a
|
|
97
|
+
* backward move (`delta < 0`) on the last; otherwise the index wraps modulo
|
|
98
|
+
* the option count. Resets to `-1` when there are no options.
|
|
99
|
+
*
|
|
100
|
+
* @param delta Step to move by (`+1` next, `-1` previous).
|
|
101
|
+
*/
|
|
102
|
+
move(delta) {
|
|
103
|
+
const count = this._count();
|
|
104
|
+
if (count === 0) {
|
|
105
|
+
this._index.set(-1);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const current = this._index();
|
|
109
|
+
const next = current < 0
|
|
110
|
+
? delta > 0
|
|
111
|
+
? 0
|
|
112
|
+
: count - 1
|
|
113
|
+
: (current + delta + count) % count;
|
|
114
|
+
this._index.set(next);
|
|
115
|
+
}
|
|
116
|
+
/** Activates the first option. No-op when there are no options. */
|
|
117
|
+
first() {
|
|
118
|
+
if (this._count() > 0)
|
|
119
|
+
this._index.set(0);
|
|
120
|
+
}
|
|
121
|
+
/** Activates the last option. No-op when there are no options. */
|
|
122
|
+
last() {
|
|
123
|
+
const count = this._count();
|
|
124
|
+
if (count > 0)
|
|
125
|
+
this._index.set(count - 1);
|
|
126
|
+
}
|
|
127
|
+
/** Clears the active option back to `-1` (nothing active). */
|
|
128
|
+
reset() {
|
|
129
|
+
this._index.set(-1);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* The default option matcher: a case- and diacritic-insensitive substring match
|
|
135
|
+
* on {@link MlvSelectOption.label}. An empty (or whitespace-only) query matches
|
|
136
|
+
* every option.
|
|
137
|
+
*
|
|
138
|
+
* @param option - The option to test.
|
|
139
|
+
* @param query - The current search query (already trimmed by callers).
|
|
140
|
+
* @returns Whether the option label contains the query.
|
|
141
|
+
*/
|
|
142
|
+
function defaultOptionMatcher(option, query) {
|
|
143
|
+
const q = normalizeForMatch(query.trim());
|
|
144
|
+
if (!q)
|
|
145
|
+
return true;
|
|
146
|
+
return normalizeForMatch(option.label).includes(q);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Filters a list of resolved options against a query using `matcher`
|
|
150
|
+
* ({@link defaultOptionMatcher} by default), then ranks **prefix matches
|
|
151
|
+
* first** ({@link rankPrefixMatchesFirst}) so the top suggestion is the one an
|
|
152
|
+
* inline completion can extend (`"Pe"` ranks `"Pear"` above `"Grape"`). A blank
|
|
153
|
+
* query returns a shallow copy of every option — the "show everything" state a
|
|
154
|
+
* combobox / autocomplete shows on focus. This is the single shared
|
|
155
|
+
* implementation of the substring filter that previously lived inline in
|
|
156
|
+
* `mlv-combobox`.
|
|
157
|
+
*
|
|
158
|
+
* @param options - The resolved options to filter.
|
|
159
|
+
* @param query - The raw search query (trimmed internally).
|
|
160
|
+
* @param matcher - Optional custom predicate; defaults to substring matching.
|
|
161
|
+
* @returns The matcher-satisfying options, prefix matches ranked first (all
|
|
162
|
+
* options, unranked, for a blank query).
|
|
163
|
+
*/
|
|
164
|
+
function filterOptions(options, query, matcher = defaultOptionMatcher) {
|
|
165
|
+
const q = query.trim();
|
|
166
|
+
if (!q)
|
|
167
|
+
return [...options];
|
|
168
|
+
return rankPrefixMatchesFirst(options.filter((option) => matcher(option, q)), q);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Stable-partitions filtered options so labels that **start with** the query
|
|
172
|
+
* (case- and diacritic-insensitive) come before the remaining matches, keeping
|
|
173
|
+
* the original relative order inside each partition.
|
|
174
|
+
*
|
|
175
|
+
* Grouped options ({@link MlvSelectOption.group}) are ranked **within each
|
|
176
|
+
* consecutive same-group run** only — runs themselves never move or merge, so
|
|
177
|
+
* the panel's consecutive-run group rendering (sticky headers, flat-index
|
|
178
|
+
* alignment) is preserved. An ungrouped list is a single run and gets the full
|
|
179
|
+
* prefix-first ordering.
|
|
180
|
+
*
|
|
181
|
+
* @param options - The already-filtered options.
|
|
182
|
+
* @param query - The trimmed, non-empty query.
|
|
183
|
+
* @returns The options with prefix matches ranked first per group run.
|
|
184
|
+
*/
|
|
185
|
+
function rankPrefixMatchesFirst(options, query) {
|
|
186
|
+
const q = normalizeForMatch(query);
|
|
187
|
+
const ranked = [];
|
|
188
|
+
let runStart = 0;
|
|
189
|
+
for (let i = 1; i <= options.length; i++) {
|
|
190
|
+
const runEnded = i === options.length ||
|
|
191
|
+
(options[i].group ?? '') !== (options[runStart].group ?? '');
|
|
192
|
+
if (!runEnded)
|
|
193
|
+
continue;
|
|
194
|
+
const run = options.slice(runStart, i);
|
|
195
|
+
const prefixed = [];
|
|
196
|
+
const rest = [];
|
|
197
|
+
for (const option of run) {
|
|
198
|
+
(normalizeForMatch(option.label).startsWith(q) ? prefixed : rest).push(option);
|
|
199
|
+
}
|
|
200
|
+
ranked.push(...prefixed, ...rest);
|
|
201
|
+
runStart = i;
|
|
202
|
+
}
|
|
203
|
+
return ranked;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Splits `label` into matched / unmatched {@link MlvMatchSegment}s for the first
|
|
207
|
+
* occurrence of `query`, so consumers can emphasise the matched substring in a
|
|
208
|
+
* suggestion (e.g. wrapping matched slices in `<mark>`).
|
|
209
|
+
*
|
|
210
|
+
* Matching is case- and diacritic-insensitive ({@link normalizeForMatch}); the
|
|
211
|
+
* returned segment `text` preserves the **original** label casing/diacritics.
|
|
212
|
+
* Because NFD folding can change string length (e.g. `"é"` → `"e"` + combining
|
|
213
|
+
* mark), the search runs over a per-code-point folded projection with an index
|
|
214
|
+
* map back to the original code points, keeping the highlighted slice aligned
|
|
215
|
+
* with the source label. Only the first match is highlighted.
|
|
216
|
+
*
|
|
217
|
+
* @param label - The option label to segment.
|
|
218
|
+
* @param query - The query to highlight within the label.
|
|
219
|
+
* @returns Ordered segments covering the whole label; a single unmatched
|
|
220
|
+
* segment when the query is empty or not found.
|
|
221
|
+
*/
|
|
222
|
+
function matchSegments(label, query) {
|
|
223
|
+
const q = normalizeForMatch(query.trim());
|
|
224
|
+
if (!q)
|
|
225
|
+
return [{ text: label, matched: false }];
|
|
226
|
+
// Work in code points so surrogate pairs (e.g. emoji) are not split.
|
|
227
|
+
const chars = [...label];
|
|
228
|
+
let folded = '';
|
|
229
|
+
// For each folded code-unit position, the index of the originating code point.
|
|
230
|
+
const originIndex = [];
|
|
231
|
+
chars.forEach((char, index) => {
|
|
232
|
+
const foldedChar = normalizeForMatch(char);
|
|
233
|
+
for (const unit of foldedChar) {
|
|
234
|
+
folded += unit;
|
|
235
|
+
originIndex.push(index);
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
const start = folded.indexOf(q);
|
|
239
|
+
if (start === -1)
|
|
240
|
+
return [{ text: label, matched: false }];
|
|
241
|
+
const originStart = originIndex[start];
|
|
242
|
+
const originEnd = originIndex[start + q.length - 1];
|
|
243
|
+
const before = chars.slice(0, originStart).join('');
|
|
244
|
+
const match = chars.slice(originStart, originEnd + 1).join('');
|
|
245
|
+
const after = chars.slice(originEnd + 1).join('');
|
|
246
|
+
const segments = [];
|
|
247
|
+
if (before)
|
|
248
|
+
segments.push({ text: before, matched: false });
|
|
249
|
+
segments.push({ text: match, matched: true });
|
|
250
|
+
if (after)
|
|
251
|
+
segments.push({ text: after, matched: false });
|
|
252
|
+
return segments;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Splits a label into matched / unmatched {@link MlvMatchSegment}s for the given
|
|
257
|
+
* query so a template can emphasise the matched substring (case- and
|
|
258
|
+
* diacritic-insensitive; see {@link matchSegments}). Used by
|
|
259
|
+
* `mlv-dropdown-panel` to highlight the query inside each suggestion.
|
|
260
|
+
*
|
|
261
|
+
* @example
|
|
262
|
+
* ```html
|
|
263
|
+
* @for (seg of option.label | mlvHighlightMatch:query; track $index) {
|
|
264
|
+
* @if (seg.matched) { <mark>{{ seg.text }}</mark> }
|
|
265
|
+
* @else { {{ seg.text }} }
|
|
266
|
+
* }
|
|
267
|
+
* ```
|
|
268
|
+
*/
|
|
269
|
+
class MlvHighlightMatchPipe {
|
|
270
|
+
/**
|
|
271
|
+
* @param label - The label to segment. Nullish input yields an empty result.
|
|
272
|
+
* @param query - The query to highlight; empty query returns one unmatched
|
|
273
|
+
* segment containing the whole label.
|
|
274
|
+
*/
|
|
275
|
+
transform(label, query) {
|
|
276
|
+
if (!label)
|
|
277
|
+
return [];
|
|
278
|
+
return matchSegments(label, query ?? '');
|
|
279
|
+
}
|
|
280
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvHighlightMatchPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
281
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.7", ngImport: i0, type: MlvHighlightMatchPipe, isStandalone: true, name: "mlvHighlightMatch" });
|
|
282
|
+
}
|
|
283
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvHighlightMatchPipe, decorators: [{
|
|
284
|
+
type: Pipe,
|
|
285
|
+
args: [{ name: 'mlvHighlightMatch' }]
|
|
286
|
+
}] });
|
|
287
|
+
|
|
288
|
+
class MlvDropdownPanel {
|
|
289
|
+
/**
|
|
290
|
+
* Chooses the single scroll owner for this panel.
|
|
291
|
+
*
|
|
292
|
+
* Standalone panels scroll themselves. Panels composed inside `mlv-popup`
|
|
293
|
+
* delegate to the popup so the DOM never contains nested scroll regions.
|
|
294
|
+
*/
|
|
295
|
+
scrollMode = input('self', /* @ts-ignore */
|
|
296
|
+
...(ngDevMode ? [{ debugName: "scrollMode" }] : /* istanbul ignore next */ []));
|
|
297
|
+
minHeight = input(0, /* @ts-ignore */
|
|
298
|
+
...(ngDevMode ? [{ debugName: "minHeight" }] : /* istanbul ignore next */ []));
|
|
299
|
+
maxHeight = input(0, /* @ts-ignore */
|
|
300
|
+
...(ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []));
|
|
301
|
+
options = input([], /* @ts-ignore */
|
|
302
|
+
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
303
|
+
/** Whether multiple options can be selected. */
|
|
304
|
+
multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
305
|
+
selectedValues = input([], /* @ts-ignore */
|
|
306
|
+
...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
|
|
307
|
+
itemTemplate = input(null, /* @ts-ignore */
|
|
308
|
+
...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
|
|
309
|
+
/**
|
|
310
|
+
* Focus strategy forwarded to the inner aria listbox.
|
|
311
|
+
*
|
|
312
|
+
* - `'roving'` (default) — DOM focus moves onto the active option (`tabindex`).
|
|
313
|
+
* Used by `mlv-select`.
|
|
314
|
+
* - `'activedescendant'` — DOM focus stays on the owning trigger/input; the
|
|
315
|
+
* active option is tracked via `aria-activedescendant`. Used by
|
|
316
|
+
* `mlv-combobox`, whose text input must retain focus so typing keeps
|
|
317
|
+
* working while navigating options.
|
|
318
|
+
*/
|
|
319
|
+
focusMode = input('roving', /* @ts-ignore */
|
|
320
|
+
...(ngDevMode ? [{ debugName: "focusMode" }] : /* istanbul ignore next */ []));
|
|
321
|
+
/**
|
|
322
|
+
* Index of the option that is visually "active" (highlighted) under the
|
|
323
|
+
* activedescendant model. `-1` (default) means no active option. The panel
|
|
324
|
+
* renders a deterministic `[id]` on each option (`<listboxId>-option-<index>`)
|
|
325
|
+
* so an owning combobox can point its input's `aria-activedescendant` at the
|
|
326
|
+
* active row and keep the highlight in sync.
|
|
327
|
+
*/
|
|
328
|
+
activeIndex = input(-1, /* @ts-ignore */
|
|
329
|
+
...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
|
|
330
|
+
/**
|
|
331
|
+
* Optional HTML `id` to assign to the inner `<mlv-list>` listbox element.
|
|
332
|
+
* Allows a parent combobox or select to reference this listbox via `aria-controls`.
|
|
333
|
+
*/
|
|
334
|
+
listboxId = input(null, /* @ts-ignore */
|
|
335
|
+
...(ngDevMode ? [{ debugName: "listboxId" }] : /* istanbul ignore next */ []));
|
|
336
|
+
/**
|
|
337
|
+
* Accessible name rendered as `aria-label` on the inner listbox. `role="listbox"`
|
|
338
|
+
* is an ARIA input field, so a panel that is not already named through an owning
|
|
339
|
+
* control (`mlv-filter`'s popover, for instance) needs one to satisfy WCAG 4.1.2.
|
|
340
|
+
* `null` (default) renders no attribute.
|
|
341
|
+
*/
|
|
342
|
+
ariaLabel = input(null, /* @ts-ignore */
|
|
343
|
+
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
344
|
+
/**
|
|
345
|
+
* When non-empty, the default option row emphasises the matched substring of
|
|
346
|
+
* this query inside each suggestion label (case- and diacritic-insensitive;
|
|
347
|
+
* see {@link MlvHighlightMatchPipe}). Ignored for rows rendered by a custom
|
|
348
|
+
* {@link itemTemplate}. Empty (default) renders the label as plain text —
|
|
349
|
+
* ungrouped, un-highlighted lists are byte-for-byte unchanged.
|
|
350
|
+
*/
|
|
351
|
+
highlightQuery = input('', /* @ts-ignore */
|
|
352
|
+
...(ngDevMode ? [{ debugName: "highlightQuery" }] : /* istanbul ignore next */ []));
|
|
353
|
+
/**
|
|
354
|
+
* When `true`, the panel renders a loading affordance instead of the option
|
|
355
|
+
* list / empty state — used by `[mlvAutocomplete]` while an async `search`
|
|
356
|
+
* resolves. The {@link loadingText} is announced politely.
|
|
357
|
+
*/
|
|
358
|
+
loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
359
|
+
/**
|
|
360
|
+
* Text shown (and announced) inside the loading affordance while
|
|
361
|
+
* {@link loading} is `true`. Localise by binding a translated string.
|
|
362
|
+
* @default 'Loading…'
|
|
363
|
+
*/
|
|
364
|
+
loadingText = input('Loading…', /* @ts-ignore */
|
|
365
|
+
...(ngDevMode ? [{ debugName: "loadingText" }] : /* istanbul ignore next */ []));
|
|
366
|
+
/**
|
|
367
|
+
* When `true`, a page beyond the first is being fetched: renders a polite
|
|
368
|
+
* bottom status row (`loadingText`) after the last option. The listbox and
|
|
369
|
+
* existing options stay interactive.
|
|
370
|
+
* @default false
|
|
371
|
+
*/
|
|
372
|
+
loadingMore = input(false, { ...(ngDevMode ? { debugName: "loadingMore" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
373
|
+
/**
|
|
374
|
+
* Whether more pages exist. When `true` the panel observes its scroll owner
|
|
375
|
+
* and emits {@link loadMore} as the user nears the end of the list.
|
|
376
|
+
* @default false
|
|
377
|
+
*/
|
|
378
|
+
hasMore = input(false, { ...(ngDevMode ? { debugName: "hasMore" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
379
|
+
/** Distance (px) from the end of the scroll owner at which {@link loadMore} fires. */
|
|
380
|
+
infiniteScrollThreshold = input(150, /* @ts-ignore */
|
|
381
|
+
...(ngDevMode ? [{ debugName: "infiniteScrollThreshold" }] : /* istanbul ignore next */ []));
|
|
382
|
+
/** Emits when the user scrolls within `infiniteScrollThreshold` of the end while `hasMore`. */
|
|
383
|
+
loadMore = output();
|
|
384
|
+
/**
|
|
385
|
+
* @protected Effective listbox id forwarded to the aria `Listbox.id` input on
|
|
386
|
+
* the inner `<mlv-list>`. Uses the consumer-provided {@link listboxId} when
|
|
387
|
+
* set, otherwise a stable generated fallback so the rendered listbox always
|
|
388
|
+
* carries a valid unique DOM id (aria would otherwise mint its own, breaking
|
|
389
|
+
* a parent trigger's `aria-controls` linkage).
|
|
390
|
+
*/
|
|
391
|
+
_resolvedListboxId = computed(() => this.listboxId() ?? this._fallbackListboxId, /* @ts-ignore */
|
|
392
|
+
...(ngDevMode ? [{ debugName: "_resolvedListboxId" }] : /* istanbul ignore next */ []));
|
|
393
|
+
/** @private Stable generated id used when no `listboxId` is supplied. */
|
|
394
|
+
_fallbackListboxId = mlvNextId('mlv-dropdown-listbox');
|
|
395
|
+
/**
|
|
396
|
+
* @protected Whether the current options declare groups (at least one option
|
|
397
|
+
* carries a non-empty `group`). When `false` the template renders the exact
|
|
398
|
+
* flat option list as before — plain / ungrouped arrays are unaffected.
|
|
399
|
+
*/
|
|
400
|
+
_isGrouped = computed(() => hasOptionGroups(this.options()), /* @ts-ignore */
|
|
401
|
+
...(ngDevMode ? [{ debugName: "_isGrouped" }] : /* istanbul ignore next */ []));
|
|
402
|
+
/**
|
|
403
|
+
* @protected The options clustered into consecutive same-group runs for
|
|
404
|
+
* rendering under sticky headers. Consecutive-run grouping (no reordering)
|
|
405
|
+
* keeps DOM order identical to the flat `options()` order, so option indices,
|
|
406
|
+
* `optionId`, `activeIndex`, and aria's DOM-order navigation all stay aligned.
|
|
407
|
+
* Each entry retains its flat index into `options()`. A run of options without
|
|
408
|
+
* a group (empty/undefined) becomes a headerless cluster (`label: null`).
|
|
409
|
+
*/
|
|
410
|
+
_groups = computed(() => {
|
|
411
|
+
const listboxId = this._resolvedListboxId();
|
|
412
|
+
const groups = [];
|
|
413
|
+
this.options().forEach((option, index) => {
|
|
414
|
+
const label = option.group ? option.group : null;
|
|
415
|
+
const current = groups[groups.length - 1];
|
|
416
|
+
if (current && current.label === label) {
|
|
417
|
+
current.entries.push({ option, index });
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
groups.push({
|
|
421
|
+
label,
|
|
422
|
+
headerId: label ? `${listboxId}-group-${groups.length}` : null,
|
|
423
|
+
entries: [{ option, index }],
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
return groups;
|
|
428
|
+
}, /* @ts-ignore */
|
|
429
|
+
...(ngDevMode ? [{ debugName: "_groups" }] : /* istanbul ignore next */ []));
|
|
430
|
+
/** @protected Effective max panel height in px — the `maxHeight` input when set, else the viewport-derived default. */
|
|
431
|
+
_calculatedMaxHeight = computed(() => {
|
|
432
|
+
const inputMaxHeight = this.maxHeight();
|
|
433
|
+
return inputMaxHeight > 0 ? inputMaxHeight : this._defaultMaxHeight();
|
|
434
|
+
}, /* @ts-ignore */
|
|
435
|
+
...(ngDevMode ? [{ debugName: "_calculatedMaxHeight" }] : /* istanbul ignore next */ []));
|
|
436
|
+
valueChange = output();
|
|
437
|
+
/** @private Selection service coordinating focus-first requests from a parent select/combobox. */
|
|
438
|
+
_selectionService = inject(MlvSelectionService);
|
|
439
|
+
/** @private Set of currently selected values for O(1) membership checks. */
|
|
440
|
+
_selectedSet = computed(() => new Set(this.selectedValues()), /* @ts-ignore */
|
|
441
|
+
...(ngDevMode ? [{ debugName: "_selectedSet" }] : /* istanbul ignore next */ []));
|
|
442
|
+
/** @private Default max panel height (px) derived from the viewport height. */
|
|
443
|
+
_defaultMaxHeight = signal(0, /* @ts-ignore */
|
|
444
|
+
...(ngDevMode ? [{ debugName: "_defaultMaxHeight" }] : /* istanbul ignore next */ []));
|
|
445
|
+
/** @private The inner selectable list directive, used to move focus to the first option. */
|
|
446
|
+
_listSelectable = viewChild(MlvListSelectable, /* @ts-ignore */
|
|
447
|
+
...(ngDevMode ? [{ debugName: "_listSelectable" }] : /* istanbul ignore next */ []));
|
|
448
|
+
/** @private The panel's own scrollbar (`scrollMode="self"` only). */
|
|
449
|
+
_scrollbar = viewChild(MlvScrollbar, /* @ts-ignore */
|
|
450
|
+
...(ngDevMode ? [{ debugName: "_scrollbar" }] : /* istanbul ignore next */ []));
|
|
451
|
+
/** @private The sentinel-hosted infinite-scroll directive, re-checked after each option append. */
|
|
452
|
+
_infiniteScroll = viewChild(MlvInfiniteScroll, /* @ts-ignore */
|
|
453
|
+
...(ngDevMode ? [{ debugName: "_infiniteScroll" }] : /* istanbul ignore next */ []));
|
|
454
|
+
/**
|
|
455
|
+
* @protected The element that actually scrolls: the panel's own scrollbar
|
|
456
|
+
* viewport (`scrollMode="self"`) or the nearest ancestor `mlv-scrollbar`
|
|
457
|
+
* viewport — the owning `mlv-popup`'s — in parent mode. Resolved after the
|
|
458
|
+
* first render; the sentinel directive stays disabled until then.
|
|
459
|
+
*/
|
|
460
|
+
_scrollContainer = signal(null, /* @ts-ignore */
|
|
461
|
+
...(ngDevMode ? [{ debugName: "_scrollContainer" }] : /* istanbul ignore next */ []));
|
|
462
|
+
/**
|
|
463
|
+
* @private Whether the scroll-owner lookup has already run. It needs the first
|
|
464
|
+
* render, so a `null` {@link _scrollContainer} before that means "not resolved
|
|
465
|
+
* yet", not "no owner" — the dev warning must not fire on it.
|
|
466
|
+
*/
|
|
467
|
+
_scrollOwnerResolved = signal(false, /* @ts-ignore */
|
|
468
|
+
...(ngDevMode ? [{ debugName: "_scrollOwnerResolved" }] : /* istanbul ignore next */ []));
|
|
469
|
+
/** @private Latches the dev-mode "no scroll owner" warning to once per panel. */
|
|
470
|
+
_warnedNoScrollOwner = false;
|
|
471
|
+
/** @private Host element, used to scroll the active option into view (activedescendant model). */
|
|
472
|
+
_host = inject(ElementRef);
|
|
473
|
+
/** @private Angular-provided document used to access the browser viewport safely. */
|
|
474
|
+
_document = inject(DOCUMENT);
|
|
475
|
+
constructor() {
|
|
476
|
+
const viewport = this._document.defaultView;
|
|
477
|
+
if (viewport) {
|
|
478
|
+
fromEvent(viewport, 'resize')
|
|
479
|
+
.pipe(startWith(null), takeUntilDestroyed())
|
|
480
|
+
.subscribe(() => {
|
|
481
|
+
this._defaultMaxHeight.set(viewport.innerHeight * 0.4);
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
this._selectionService.focusFirst$
|
|
485
|
+
.pipe(takeUntilDestroyed())
|
|
486
|
+
.subscribe(() => {
|
|
487
|
+
this._listSelectable()?.focusFirst();
|
|
488
|
+
});
|
|
489
|
+
// Keep the activedescendant-active option scrolled into view. DOM focus
|
|
490
|
+
// never lands on the option in this mode (it stays on the owning combobox
|
|
491
|
+
// input), so the native scroll-on-focus does not apply.
|
|
492
|
+
effect(() => {
|
|
493
|
+
const index = this.activeIndex();
|
|
494
|
+
if (this.focusMode() !== 'activedescendant' || index < 0)
|
|
495
|
+
return;
|
|
496
|
+
const el = this._host.nativeElement.querySelector(`[id="${this.optionId(index)}"]`);
|
|
497
|
+
// Optional call: `scrollIntoView` is absent in some environments (jsdom).
|
|
498
|
+
el?.scrollIntoView?.({ block: 'nearest' });
|
|
499
|
+
});
|
|
500
|
+
// Resolve the paging sentinel's scroll owner once the view exists: the
|
|
501
|
+
// panel's own scrollbar viewport, or the ancestor popup viewport it
|
|
502
|
+
// delegates scrolling to.
|
|
503
|
+
afterNextRender(() => {
|
|
504
|
+
const own = this._scrollbar()?.viewportElement ?? null;
|
|
505
|
+
const parent = this._host.nativeElement.closest('.mlv-scrollbar__viewport');
|
|
506
|
+
this._scrollContainer.set(this.scrollMode() === 'self' ? own : parent);
|
|
507
|
+
this._scrollOwnerResolved.set(true);
|
|
508
|
+
});
|
|
509
|
+
// Dev-mode diagnostic: an armed sentinel with no scroll owner is silent —
|
|
510
|
+
// `scrollMode="parent"` finds nothing unless the panel renders inside an
|
|
511
|
+
// `mlv-scrollbar` viewport. Re-checked reactively so a `hasMore` that flips
|
|
512
|
+
// true later is caught too; warned at most once per panel instance.
|
|
513
|
+
if (isDevMode()) {
|
|
514
|
+
effect(() => {
|
|
515
|
+
const missing = this.hasMore() &&
|
|
516
|
+
this._scrollOwnerResolved() &&
|
|
517
|
+
this._scrollContainer() === null;
|
|
518
|
+
if (!missing)
|
|
519
|
+
return;
|
|
520
|
+
untracked(() => {
|
|
521
|
+
if (this._warnedNoScrollOwner)
|
|
522
|
+
return;
|
|
523
|
+
this._warnedNoScrollOwner = true;
|
|
524
|
+
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.');
|
|
525
|
+
});
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
// Auto-fill: after any render where the option set changed, re-measure so a
|
|
529
|
+
// short page immediately requests the next one.
|
|
530
|
+
afterRenderEffect(() => {
|
|
531
|
+
this.options();
|
|
532
|
+
this._infiniteScroll()?.check();
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
isValueSelected(value) {
|
|
536
|
+
return this._selectedSet().has(value);
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Deterministic DOM `id` for the option at `index`, forwarded to aria's
|
|
540
|
+
* `ngOption` id. An owning combobox computes the same id (via the shared
|
|
541
|
+
* {@link optionId} helper) to wire its input's `aria-activedescendant`.
|
|
542
|
+
*/
|
|
543
|
+
optionId(index) {
|
|
544
|
+
return optionId(this._resolvedListboxId(), index);
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Re-emits the aria listbox selection. `@angular/aria`'s `ngListbox` emits the
|
|
548
|
+
* selected values array directly (unlike CdkListbox's `ListboxValueChangeEvent`).
|
|
549
|
+
*/
|
|
550
|
+
onValueChange(values) {
|
|
551
|
+
this.valueChange.emit(values);
|
|
552
|
+
}
|
|
553
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDropdownPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
554
|
+
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 }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", 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 appearance=\"menu\"\n selectable\n listRole=\"listbox\"\n selectionMode=\"explicit\"\n [softDisabled]=\"false\"\n [focusMode]=\"focusMode()\"\n [attr.aria-busy]=\"loading() || loadingMore() ? true : null\"\n [attr.aria-label]=\"ariaLabel()\"\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 [disabled]=\"option.disabled ?? false\"\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: ["@layer mlv.components{.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__item:focus-visible{outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.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", "appearance"] }, { 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 });
|
|
555
|
+
}
|
|
556
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDropdownPanel, decorators: [{
|
|
557
|
+
type: Component,
|
|
558
|
+
args: [{ selector: 'mlv-dropdown-panel', imports: [
|
|
559
|
+
NgTemplateOutlet,
|
|
560
|
+
MlvList,
|
|
561
|
+
MlvListItem,
|
|
562
|
+
MlvListItemSelectable,
|
|
563
|
+
MlvListSelectable,
|
|
564
|
+
LucideCheck,
|
|
565
|
+
MlvHighlightMatchPipe,
|
|
566
|
+
MlvScrollbar,
|
|
567
|
+
MlvInfiniteScroll,
|
|
568
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
569
|
+
class: 'mlv-dropdown-panel',
|
|
570
|
+
'[class.mlv-dropdown-panel--parent-scroll]': 'scrollMode() === "parent"',
|
|
571
|
+
'[class.mlv-dropdown-panel--loading]': 'loading()',
|
|
572
|
+
'[style.max-height.px]': '_calculatedMaxHeight()',
|
|
573
|
+
}, 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 appearance=\"menu\"\n selectable\n listRole=\"listbox\"\n selectionMode=\"explicit\"\n [softDisabled]=\"false\"\n [focusMode]=\"focusMode()\"\n [attr.aria-busy]=\"loading() || loadingMore() ? true : null\"\n [attr.aria-label]=\"ariaLabel()\"\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 [disabled]=\"option.disabled ?? false\"\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: ["@layer mlv.components{.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__item:focus-visible{outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.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"] }]
|
|
574
|
+
}], 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 }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", 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 }] }] } });
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* In-memory data source for option controls (`mlv-select`, `mlv-combobox`,
|
|
578
|
+
* `[mlvAutocomplete]`). Identical to `MlvArrayDataSource` except that it is
|
|
579
|
+
* **unpaged** (`perPage = Infinity`) so the whole list renders; the shared
|
|
580
|
+
* natural-field search (`setSearch({ query, keys: [] })`) and sorting are
|
|
581
|
+
* inherited. Reach for it when you want a data-source-shaped API over an
|
|
582
|
+
* in-memory array (e.g. to swap for a remote subclass later); a plain `T[]`
|
|
583
|
+
* remains the simplest input.
|
|
584
|
+
*/
|
|
585
|
+
class MlvSelectDataSource extends MlvArrayDataSource {
|
|
586
|
+
/**
|
|
587
|
+
* @param data A plain array (wrapped in a signal automatically) or a
|
|
588
|
+
* `Signal<T[]>` to track reactively.
|
|
589
|
+
*/
|
|
590
|
+
constructor(data) {
|
|
591
|
+
super(data);
|
|
592
|
+
this._perPage.set(Infinity);
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
/**
|
|
597
|
+
* Normalises every supported search result into a one-shot observable. Shared
|
|
598
|
+
* by `MlvOptionsAdapter` and `[mlvAutocomplete]`.
|
|
599
|
+
*/
|
|
600
|
+
function toOptionsResult(result) {
|
|
601
|
+
return Array.isArray(result)
|
|
602
|
+
? of(result)
|
|
603
|
+
: from(result);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
/**
|
|
607
|
+
* Normalises `T[] | Observable<T[]> | MlvDataSource<T>` (+ optional
|
|
608
|
+
* `searchFn`) into one reactive shape shared by `mlv-select`, `mlv-combobox`
|
|
609
|
+
* and `[mlvAutocomplete]`. Construct it inside an injection context (a
|
|
610
|
+
* component field initialiser or constructor) — it uses `effect()` and
|
|
611
|
+
* `DestroyRef`.
|
|
612
|
+
*
|
|
613
|
+
* Paging (`MlvDataSource` only): `connect()` emits the current page's slice and
|
|
614
|
+
* the adapter accumulates, tracking the **applied page** — the page whose slice
|
|
615
|
+
* is currently in `items` — alongside the items accumulated before it:
|
|
616
|
+
*
|
|
617
|
+
* - `page <= 1` → the slice replaces `items` and accumulation restarts.
|
|
618
|
+
* - `page === appliedPage` → the source re-emitted the page already shown (a
|
|
619
|
+
* backing array changed, a refetch landed): its **tail is replaced**, never
|
|
620
|
+
* appended, so rows are not duplicated.
|
|
621
|
+
* - `page > appliedPage` → the slice is appended.
|
|
622
|
+
* - A run where the slice reference has not changed (a `page` bump whose data
|
|
623
|
+
* has not arrived yet) applies nothing.
|
|
624
|
+
*
|
|
625
|
+
* `loadMore()` is therefore a no-op while a page is pending — a scroll sentinel
|
|
626
|
+
* firing repeatedly cannot skip a page.
|
|
627
|
+
*
|
|
628
|
+
* Swapping the `searchFn` **only re-arms the lazy gate** (the next
|
|
629
|
+
* `ensureLoaded()` calls the new function): the in-flight call is left running
|
|
630
|
+
* and `items` / `ready` / `loading` are untouched, so results stay on screen
|
|
631
|
+
* until the new function answers and a control bound to an inline arrow — a
|
|
632
|
+
* fresh reference on every change detection run — is not reset on every pass.
|
|
633
|
+
*/
|
|
634
|
+
class MlvOptionsAdapter {
|
|
635
|
+
_config;
|
|
636
|
+
/** @private Lifetime for the in-flight `searchFn` subscription / debounce timer. */
|
|
637
|
+
_destroyRef = inject(DestroyRef);
|
|
638
|
+
/** @private Which branch the current inputs select. `searchFn` wins over the source. */
|
|
639
|
+
_kind = computed(() => {
|
|
640
|
+
if (this._config.searchFn())
|
|
641
|
+
return 'fn';
|
|
642
|
+
const source = this._config.source();
|
|
643
|
+
if (source instanceof MlvDataSource)
|
|
644
|
+
return 'ds';
|
|
645
|
+
if (isObservable(source))
|
|
646
|
+
return 'observable';
|
|
647
|
+
return 'array';
|
|
648
|
+
}, /* @ts-ignore */
|
|
649
|
+
...(ngDevMode ? [{ debugName: "_kind" }] : /* istanbul ignore next */ []));
|
|
650
|
+
// ─── observable branch ────────────────────────────────────────────────────
|
|
651
|
+
/** @private Latest emission of the observable source. */
|
|
652
|
+
_obsItems = signal([], /* @ts-ignore */
|
|
653
|
+
...(ngDevMode ? [{ debugName: "_obsItems" }] : /* istanbul ignore next */ []));
|
|
654
|
+
/** @private Whether the observable source has emitted at least once. */
|
|
655
|
+
_obsReady = signal(false, /* @ts-ignore */
|
|
656
|
+
...(ngDevMode ? [{ debugName: "_obsReady" }] : /* istanbul ignore next */ []));
|
|
657
|
+
// ─── data-source branch ───────────────────────────────────────────────────
|
|
658
|
+
/** @private The connected source and its (memoised) `connect()` signal. */
|
|
659
|
+
_connected = signal(null, /* @ts-ignore */
|
|
660
|
+
...(ngDevMode ? [{ debugName: "_connected" }] : /* istanbul ignore next */ []));
|
|
661
|
+
/** @private Accumulated pages. */
|
|
662
|
+
_dsItems = signal([], /* @ts-ignore */
|
|
663
|
+
...(ngDevMode ? [{ debugName: "_dsItems" }] : /* istanbul ignore next */ []));
|
|
664
|
+
/** @private Whether the source has been observed not-loading at least once since connect. */
|
|
665
|
+
_dsReady = signal(false, /* @ts-ignore */
|
|
666
|
+
...(ngDevMode ? [{ debugName: "_dsReady" }] : /* istanbul ignore next */ []));
|
|
667
|
+
/** @private Last slice reference applied — a `page` bump whose slice has not arrived yet must not append. */
|
|
668
|
+
_dsLastSlice = null;
|
|
669
|
+
/** @private The page whose slice is currently applied (`0` = none yet). Distinguishes an append from a re-emit of the page already shown. */
|
|
670
|
+
_dsAppliedPage = 0;
|
|
671
|
+
/** @private Items accumulated *before* the applied page — the prefix a re-emit of that page is re-appended to. */
|
|
672
|
+
_dsBase = [];
|
|
673
|
+
// ─── searchFn branch ──────────────────────────────────────────────────────
|
|
674
|
+
/** @private Last `searchFn` result. */
|
|
675
|
+
_fnItems = signal([], /* @ts-ignore */
|
|
676
|
+
...(ngDevMode ? [{ debugName: "_fnItems" }] : /* istanbul ignore next */ []));
|
|
677
|
+
/** @private Whether a `searchFn` call is in flight. */
|
|
678
|
+
_fnLoading = signal(false, /* @ts-ignore */
|
|
679
|
+
...(ngDevMode ? [{ debugName: "_fnLoading" }] : /* istanbul ignore next */ []));
|
|
680
|
+
/** @private Whether `searchFn` has produced (or failed) at least once. */
|
|
681
|
+
_fnReady = signal(false, /* @ts-ignore */
|
|
682
|
+
...(ngDevMode ? [{ debugName: "_fnReady" }] : /* istanbul ignore next */ []));
|
|
683
|
+
/** @private Whether `searchFn` has been invoked at least once (lazy-load gate). */
|
|
684
|
+
_fnStarted = false;
|
|
685
|
+
/**
|
|
686
|
+
* @private The `searchFn` reference the swap effect last observed, normalised
|
|
687
|
+
* to `null` when unset. Stays `undefined` until that effect's first run, which
|
|
688
|
+
* is how `undefined → fn` at construction is told apart from a genuine swap.
|
|
689
|
+
*/
|
|
690
|
+
_fnSeen;
|
|
691
|
+
/** @private In-flight `searchFn` subscription (superseded by a newer query). */
|
|
692
|
+
_fnSub = null;
|
|
693
|
+
/** @private Monotonic token discarding stale `searchFn` results. */
|
|
694
|
+
_fnToken = 0;
|
|
695
|
+
/** @private Pending debounce timer for remote searches. */
|
|
696
|
+
_debounceTimer = null;
|
|
697
|
+
/** @private Last query handed to `search()`; replayed by `ensureLoaded()`. */
|
|
698
|
+
_lastQuery = '';
|
|
699
|
+
/** `'local'` for arrays / observables (consumer filters); `'remote'` for a data source or `searchFn`. */
|
|
700
|
+
mode = computed(() => {
|
|
701
|
+
const kind = this._kind();
|
|
702
|
+
return kind === 'array' || kind === 'observable' ? 'local' : 'remote';
|
|
703
|
+
}, /* @ts-ignore */
|
|
704
|
+
...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
705
|
+
/** The current raw items (accumulated pages for a data source). */
|
|
706
|
+
items = computed(() => {
|
|
707
|
+
switch (this._kind()) {
|
|
708
|
+
case 'fn':
|
|
709
|
+
return this._fnItems();
|
|
710
|
+
case 'ds':
|
|
711
|
+
return this._dsItems();
|
|
712
|
+
case 'observable':
|
|
713
|
+
return this._obsItems();
|
|
714
|
+
default:
|
|
715
|
+
return this._config.source() ?? [];
|
|
716
|
+
}
|
|
717
|
+
}, /* @ts-ignore */
|
|
718
|
+
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
719
|
+
/** Source-owned "first page / search in flight" flag (drives the top spinner row). */
|
|
720
|
+
loading = computed(() => {
|
|
721
|
+
switch (this._kind()) {
|
|
722
|
+
case 'fn':
|
|
723
|
+
return this._fnLoading();
|
|
724
|
+
case 'ds': {
|
|
725
|
+
const connected = this._connected();
|
|
726
|
+
return (!!connected && connected.ds.loading() && connected.ds.page() === 1);
|
|
727
|
+
}
|
|
728
|
+
case 'observable':
|
|
729
|
+
return !this._obsReady();
|
|
730
|
+
default:
|
|
731
|
+
return false;
|
|
732
|
+
}
|
|
733
|
+
}, /* @ts-ignore */
|
|
734
|
+
...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
735
|
+
/** A page beyond the first is in flight (drives the bottom spinner row). Data source only. */
|
|
736
|
+
loadingMore = computed(() => {
|
|
737
|
+
if (this._kind() !== 'ds')
|
|
738
|
+
return false;
|
|
739
|
+
const connected = this._connected();
|
|
740
|
+
return !!connected && connected.ds.loading() && connected.ds.page() > 1;
|
|
741
|
+
}, /* @ts-ignore */
|
|
742
|
+
...(ngDevMode ? [{ debugName: "loadingMore" }] : /* istanbul ignore next */ []));
|
|
743
|
+
/** The first payload has arrived — arrays immediately, observables on first emit, data sources once observed not-loading, `searchFn` after its first result. */
|
|
744
|
+
ready = computed(() => {
|
|
745
|
+
switch (this._kind()) {
|
|
746
|
+
case 'fn':
|
|
747
|
+
return this._fnReady();
|
|
748
|
+
case 'ds':
|
|
749
|
+
return this._dsReady();
|
|
750
|
+
case 'observable':
|
|
751
|
+
return this._obsReady();
|
|
752
|
+
default:
|
|
753
|
+
return true;
|
|
754
|
+
}
|
|
755
|
+
}, /* @ts-ignore */
|
|
756
|
+
...(ngDevMode ? [{ debugName: "ready" }] : /* istanbul ignore next */ []));
|
|
757
|
+
/** More pages exist (`items.length < totalItems`). Data source only. */
|
|
758
|
+
hasMore = computed(() => {
|
|
759
|
+
if (this._kind() !== 'ds')
|
|
760
|
+
return false;
|
|
761
|
+
const connected = this._connected();
|
|
762
|
+
return !!connected && this._dsItems().length < connected.ds.totalItems();
|
|
763
|
+
}, /* @ts-ignore */
|
|
764
|
+
...(ngDevMode ? [{ debugName: "hasMore" }] : /* istanbul ignore next */ []));
|
|
765
|
+
constructor(_config) {
|
|
766
|
+
this._config = _config;
|
|
767
|
+
// Observable source: (re)subscribe whenever the reference changes.
|
|
768
|
+
effect((onCleanup) => {
|
|
769
|
+
const source = this._config.source();
|
|
770
|
+
if (!isObservable(source))
|
|
771
|
+
return;
|
|
772
|
+
untracked(() => {
|
|
773
|
+
this._obsReady.set(false);
|
|
774
|
+
this._obsItems.set([]);
|
|
775
|
+
});
|
|
776
|
+
const sub = source.subscribe((items) => {
|
|
777
|
+
this._obsItems.set(items);
|
|
778
|
+
this._obsReady.set(true);
|
|
779
|
+
});
|
|
780
|
+
onCleanup(() => sub.unsubscribe());
|
|
781
|
+
});
|
|
782
|
+
// Data source: connect once per source — but only while the data source is
|
|
783
|
+
// the branch in use. A `searchFn` supersedes it, and connecting anyway would
|
|
784
|
+
// fire a fetch whose slice is never read.
|
|
785
|
+
effect(() => {
|
|
786
|
+
const kind = this._kind();
|
|
787
|
+
const source = this._config.source();
|
|
788
|
+
untracked(() => {
|
|
789
|
+
if (kind === 'ds' && source instanceof MlvDataSource) {
|
|
790
|
+
this._resetDataSource();
|
|
791
|
+
this._connected.set({ ds: source, items: source.connect() });
|
|
792
|
+
}
|
|
793
|
+
else if (this._connected()) {
|
|
794
|
+
this._resetDataSource();
|
|
795
|
+
this._connected.set(null);
|
|
796
|
+
}
|
|
797
|
+
});
|
|
798
|
+
});
|
|
799
|
+
// Data source: accumulate slices against the applied page.
|
|
800
|
+
effect(() => {
|
|
801
|
+
const connected = this._connected();
|
|
802
|
+
if (!connected)
|
|
803
|
+
return;
|
|
804
|
+
const slice = connected.items();
|
|
805
|
+
const page = connected.ds.page();
|
|
806
|
+
const loading = connected.ds.loading();
|
|
807
|
+
untracked(() => {
|
|
808
|
+
// A page bump whose slice has not arrived yet applies nothing.
|
|
809
|
+
if (slice === this._dsLastSlice) {
|
|
810
|
+
if (!loading)
|
|
811
|
+
this._dsReady.set(true);
|
|
812
|
+
return;
|
|
813
|
+
}
|
|
814
|
+
if (page <= 1) {
|
|
815
|
+
this._dsBase = [];
|
|
816
|
+
this._dsItems.set([...slice]);
|
|
817
|
+
}
|
|
818
|
+
else if (page === this._dsAppliedPage) {
|
|
819
|
+
// Same page re-emitted — replace its tail rather than duplicating it.
|
|
820
|
+
this._dsItems.set([...this._dsBase, ...slice]);
|
|
821
|
+
}
|
|
822
|
+
else {
|
|
823
|
+
this._dsBase = this._dsItems();
|
|
824
|
+
this._dsItems.set([...this._dsBase, ...slice]);
|
|
825
|
+
}
|
|
826
|
+
this._dsAppliedPage = page;
|
|
827
|
+
this._dsLastSlice = slice;
|
|
828
|
+
if (!loading)
|
|
829
|
+
this._dsReady.set(true);
|
|
830
|
+
});
|
|
831
|
+
});
|
|
832
|
+
// searchFn: a swapped function re-arms the lazy gate so the next
|
|
833
|
+
// `ensureLoaded()` calls it — and nothing else. Tearing down the in-flight
|
|
834
|
+
// call or clearing `items` would make the control sensitive to the
|
|
835
|
+
// *reference* identity of the bound function, and an inline arrow
|
|
836
|
+
// (`[search]="(q) => api.find(q)"`) is a fresh reference on every change
|
|
837
|
+
// detection run. Stale items therefore stay until the new function answers,
|
|
838
|
+
// matching the "results kept while loading" contract; once the new function
|
|
839
|
+
// starts, a late result from the old one is discarded by the monotonic
|
|
840
|
+
// token. The effect's first run is `undefined → fn` at construction, which
|
|
841
|
+
// is not a swap.
|
|
842
|
+
effect(() => {
|
|
843
|
+
const fn = this._config.searchFn() ?? null;
|
|
844
|
+
untracked(() => {
|
|
845
|
+
const previous = this._fnSeen;
|
|
846
|
+
this._fnSeen = fn;
|
|
847
|
+
if (previous === undefined || previous === fn)
|
|
848
|
+
return;
|
|
849
|
+
this._fnStarted = false;
|
|
850
|
+
if (this._kind() === 'fn' && this._config.eager())
|
|
851
|
+
this.ensureLoaded();
|
|
852
|
+
});
|
|
853
|
+
});
|
|
854
|
+
// searchFn: eager first load.
|
|
855
|
+
effect(() => {
|
|
856
|
+
if (this._kind() === 'fn' && this._config.eager()) {
|
|
857
|
+
untracked(() => this.ensureLoaded());
|
|
858
|
+
}
|
|
859
|
+
});
|
|
860
|
+
this._destroyRef.onDestroy(() => {
|
|
861
|
+
this._fnSub?.unsubscribe();
|
|
862
|
+
if (this._debounceTimer)
|
|
863
|
+
clearTimeout(this._debounceTimer);
|
|
864
|
+
});
|
|
865
|
+
}
|
|
866
|
+
/**
|
|
867
|
+
* Remote-mode search entry point (debounced). Data source → `setSearch({ query, keys: [] })`
|
|
868
|
+
* (or `null` for a blank query); `searchFn` → invoked with the query. No-op in local mode.
|
|
869
|
+
*/
|
|
870
|
+
search(query) {
|
|
871
|
+
this._lastQuery = query;
|
|
872
|
+
const kind = this._kind();
|
|
873
|
+
if (kind === 'ds')
|
|
874
|
+
this._debounced(() => this._searchDataSource(query));
|
|
875
|
+
else if (kind === 'fn')
|
|
876
|
+
this._debounced(() => this._runSearchFn(query));
|
|
877
|
+
}
|
|
878
|
+
/** Runs the initial `searchFn` load if it has not run yet (data sources connect eagerly; local modes need nothing). */
|
|
879
|
+
ensureLoaded() {
|
|
880
|
+
if (this._kind() === 'fn' && !this._fnStarted)
|
|
881
|
+
this._runSearchFn(this._lastQuery);
|
|
882
|
+
}
|
|
883
|
+
/**
|
|
884
|
+
* Requests the next data-source page. No-op unless `hasMore()`, nothing is in
|
|
885
|
+
* flight, and the source's current page is the one already applied — a page
|
|
886
|
+
* requested but not yet accumulated (or a search that reset the source to page
|
|
887
|
+
* one) blocks the next bump, so a scroll sentinel cannot skip a page.
|
|
888
|
+
*/
|
|
889
|
+
loadMore() {
|
|
890
|
+
const connected = this._connected();
|
|
891
|
+
if (!connected ||
|
|
892
|
+
!this.hasMore() ||
|
|
893
|
+
connected.ds.loading() ||
|
|
894
|
+
connected.ds.page() !== this._dsAppliedPage)
|
|
895
|
+
return;
|
|
896
|
+
connected.ds.setPage(connected.ds.page() + 1);
|
|
897
|
+
}
|
|
898
|
+
/** @private Clears every accumulation bookkeeping field — on connect, and when a source is disconnected. */
|
|
899
|
+
_resetDataSource() {
|
|
900
|
+
this._dsLastSlice = null;
|
|
901
|
+
this._dsAppliedPage = 0;
|
|
902
|
+
this._dsBase = [];
|
|
903
|
+
this._dsItems.set([]);
|
|
904
|
+
this._dsReady.set(false);
|
|
905
|
+
}
|
|
906
|
+
/** @private Schedules `run` after `debounce` ms (immediately when 0), cancelling a pending one. */
|
|
907
|
+
_debounced(run) {
|
|
908
|
+
if (this._debounceTimer)
|
|
909
|
+
clearTimeout(this._debounceTimer);
|
|
910
|
+
const ms = Math.max(0, this._config.debounce());
|
|
911
|
+
if (ms === 0) {
|
|
912
|
+
run();
|
|
913
|
+
return;
|
|
914
|
+
}
|
|
915
|
+
this._debounceTimer = setTimeout(() => {
|
|
916
|
+
this._debounceTimer = null;
|
|
917
|
+
run();
|
|
918
|
+
}, ms);
|
|
919
|
+
}
|
|
920
|
+
/** @private Forwards a query to the connected data source using the option-control contract (`keys: []`). */
|
|
921
|
+
_searchDataSource(query) {
|
|
922
|
+
const connected = this._connected();
|
|
923
|
+
if (!connected)
|
|
924
|
+
return;
|
|
925
|
+
connected.ds.setSearch(query.trim() ? { query, keys: [] } : null);
|
|
926
|
+
}
|
|
927
|
+
/** @private Invokes `searchFn`, superseding any in-flight call; keeps stale items until the result. */
|
|
928
|
+
_runSearchFn(query) {
|
|
929
|
+
const fn = this._config.searchFn();
|
|
930
|
+
if (!fn)
|
|
931
|
+
return;
|
|
932
|
+
this._fnStarted = true;
|
|
933
|
+
const token = ++this._fnToken;
|
|
934
|
+
this._fnSub?.unsubscribe();
|
|
935
|
+
this._fnLoading.set(true);
|
|
936
|
+
this._fnSub = toOptionsResult(fn(query))
|
|
937
|
+
.pipe(take(1))
|
|
938
|
+
.subscribe({
|
|
939
|
+
next: (items) => {
|
|
940
|
+
if (token !== this._fnToken)
|
|
941
|
+
return;
|
|
942
|
+
this._fnItems.set(items);
|
|
943
|
+
this._fnLoading.set(false);
|
|
944
|
+
this._fnReady.set(true);
|
|
945
|
+
},
|
|
946
|
+
error: () => {
|
|
947
|
+
if (token !== this._fnToken)
|
|
948
|
+
return;
|
|
949
|
+
this._fnItems.set([]);
|
|
950
|
+
this._fnLoading.set(false);
|
|
951
|
+
this._fnReady.set(true);
|
|
952
|
+
},
|
|
953
|
+
});
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
/**
|
|
958
|
+
* `@angular/aria`'s `ngListbox` reconciles its `value` model against the
|
|
959
|
+
* currently **rendered** options and re-emits `valueChange` whenever the
|
|
960
|
+
* rendered set changes — not only on user interaction. These helpers let an
|
|
961
|
+
* owning control tell that noise apart from a genuine selection.
|
|
962
|
+
*/
|
|
963
|
+
/**
|
|
964
|
+
* Whether an incoming listbox `valueChange` is pure aria reconciliation: it
|
|
965
|
+
* (a) adds no value that is not already committed and (b) only removes values
|
|
966
|
+
* whose option is currently not rendered (`visible`). An emit that exactly
|
|
967
|
+
* restates the committed selection is reconciliation too.
|
|
968
|
+
*/
|
|
969
|
+
function isReconciliationEmit(incoming, committed, visible, compare) {
|
|
970
|
+
const inArr = (arr, v) => arr.some((x) => compare(x, v));
|
|
971
|
+
// (a) No additions relative to the committed selection.
|
|
972
|
+
if (incoming.some((v) => !inArr(committed, v)))
|
|
973
|
+
return false;
|
|
974
|
+
// (b) Every removed value is currently filtered out of view.
|
|
975
|
+
return committed
|
|
976
|
+
.filter((v) => !inArr(incoming, v))
|
|
977
|
+
.every((v) => !inArr(visible, v));
|
|
978
|
+
}
|
|
979
|
+
/**
|
|
980
|
+
* Committed values that aria dropped only because their option is not
|
|
981
|
+
* rendered (not in `visible`) and that are not in `incoming`. Re-add them to
|
|
982
|
+
* a genuine multi-select pick so earlier selections survive filtering.
|
|
983
|
+
*/
|
|
984
|
+
function filteredOutCommitted(incoming, committed, visible, compare) {
|
|
985
|
+
return committed.filter((v) => !incoming.some((iv) => compare(iv, v)) &&
|
|
986
|
+
!visible.some((vv) => compare(vv, v)));
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
/**
|
|
990
|
+
* Generated bundle index. Do not edit.
|
|
991
|
+
*/
|
|
992
|
+
|
|
993
|
+
export { MlvActiveDescendant, MlvDropdownPanel, MlvHighlightMatchPipe, MlvOptionsAdapter, MlvSelectDataSource, defaultOptionMatcher, defaultOptionTransform, filterOptions, filteredOutCommitted, hasOptionGroups, isReconciliationEmit, isSelectOption, matchSegments, optionId, rankPrefixMatchesFirst, resolveOptions, toOptionsResult };
|
|
994
|
+
//# sourceMappingURL=malva-ui-core-dropdown.mjs.map
|