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