@malva-ui/core 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -1
- package/README.md +15 -0
- package/docs/ai/avatar.md +2 -0
- package/docs/ai/breadcrumb.md +67 -7
- package/docs/ai/button.md +74 -19
- package/docs/ai/card.md +8 -6
- package/docs/ai/chat.md +59 -45
- package/docs/ai/checkbox.md +12 -0
- package/docs/ai/combobox.md +18 -2
- package/docs/ai/copy-to-clipboard.md +1 -1
- package/docs/ai/core.md +15 -0
- package/docs/ai/data-table.md +89 -54
- package/docs/ai/dialog.md +76 -67
- package/docs/ai/drawer.md +15 -12
- package/docs/ai/dropdown.md +24 -19
- package/docs/ai/empty-state.md +3 -3
- package/docs/ai/filter.md +24 -5
- package/docs/ai/form-utils.md +160 -5
- package/docs/ai/icon-toggle.md +160 -0
- package/docs/ai/input.md +30 -0
- package/docs/ai/layout.md +23 -0
- package/docs/ai/list.md +10 -6
- package/docs/ai/menu.md +75 -1
- package/docs/ai/page.md +220 -60
- package/docs/ai/radio.md +9 -0
- package/docs/ai/scrollbar.md +30 -8
- package/docs/ai/segmented.md +35 -35
- package/docs/ai/select.md +30 -5
- package/docs/ai/sidebar.md +45 -27
- package/docs/ai/switch.md +114 -19
- package/docs/ai/table.md +69 -0
- package/docs/ai/tabs.md +2 -1
- package/docs/ai/tile.md +311 -85
- package/docs/ai/timeline.md +63 -39
- package/docs/ai/tokenizer.md +21 -5
- package/docs/ai/tooltip.md +5 -5
- package/docs/ai/view-variant.md +75 -0
- package/fesm2022/malva-ui-core-accordion.mjs +167 -0
- package/fesm2022/malva-ui-core-accordion.mjs.map +1 -0
- package/fesm2022/malva-ui-core-action-bar.mjs +111 -0
- package/fesm2022/malva-ui-core-action-bar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-alert.mjs +173 -0
- package/fesm2022/malva-ui-core-alert.mjs.map +1 -0
- package/fesm2022/malva-ui-core-autocomplete.mjs +775 -0
- package/fesm2022/malva-ui-core-autocomplete.mjs.map +1 -0
- package/fesm2022/malva-ui-core-avatar-group.mjs +224 -0
- package/fesm2022/malva-ui-core-avatar-group.mjs.map +1 -0
- package/fesm2022/malva-ui-core-avatar.mjs +247 -0
- package/fesm2022/malva-ui-core-avatar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-badge.mjs +122 -0
- package/fesm2022/malva-ui-core-badge.mjs.map +1 -0
- package/fesm2022/malva-ui-core-bottom-nav.mjs +161 -0
- package/fesm2022/malva-ui-core-bottom-nav.mjs.map +1 -0
- package/fesm2022/malva-ui-core-breadcrumb.mjs +494 -0
- package/fesm2022/malva-ui-core-breadcrumb.mjs.map +1 -0
- package/fesm2022/malva-ui-core-button.mjs +406 -0
- package/fesm2022/malva-ui-core-button.mjs.map +1 -0
- package/fesm2022/malva-ui-core-calendar.mjs +938 -0
- package/fesm2022/malva-ui-core-calendar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-card.mjs +164 -0
- package/fesm2022/malva-ui-core-card.mjs.map +1 -0
- package/fesm2022/malva-ui-core-chat.mjs +825 -0
- package/fesm2022/malva-ui-core-chat.mjs.map +1 -0
- package/fesm2022/malva-ui-core-checkbox.mjs +272 -0
- package/fesm2022/malva-ui-core-checkbox.mjs.map +1 -0
- package/fesm2022/malva-ui-core-chip.mjs +176 -0
- package/fesm2022/malva-ui-core-chip.mjs.map +1 -0
- package/fesm2022/malva-ui-core-color-picker.mjs +1204 -0
- package/fesm2022/malva-ui-core-color-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-combobox.mjs +945 -0
- package/fesm2022/malva-ui-core-combobox.mjs.map +1 -0
- package/fesm2022/malva-ui-core-copy-to-clipboard.mjs +255 -0
- package/fesm2022/malva-ui-core-copy-to-clipboard.mjs.map +1 -0
- package/fesm2022/malva-ui-core-data-table.mjs +2696 -0
- package/fesm2022/malva-ui-core-data-table.mjs.map +1 -0
- package/fesm2022/malva-ui-core-date-range-picker.mjs +276 -0
- package/fesm2022/malva-ui-core-date-range-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-day-picker.mjs +131 -0
- package/fesm2022/malva-ui-core-day-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-dialog-routable-dialog-CvjXMtlD.mjs +94 -0
- package/fesm2022/malva-ui-core-dialog-routable-dialog-CvjXMtlD.mjs.map +1 -0
- package/fesm2022/malva-ui-core-dialog.mjs +1223 -0
- package/fesm2022/malva-ui-core-dialog.mjs.map +1 -0
- package/fesm2022/malva-ui-core-divider.mjs +80 -0
- package/fesm2022/malva-ui-core-divider.mjs.map +1 -0
- package/fesm2022/malva-ui-core-drawer-routable-drawer-qUk6Etnx.mjs +94 -0
- package/fesm2022/malva-ui-core-drawer-routable-drawer-qUk6Etnx.mjs.map +1 -0
- package/fesm2022/malva-ui-core-drawer.mjs +814 -0
- package/fesm2022/malva-ui-core-drawer.mjs.map +1 -0
- package/fesm2022/malva-ui-core-dropdown.mjs +994 -0
- package/fesm2022/malva-ui-core-dropdown.mjs.map +1 -0
- package/fesm2022/malva-ui-core-empty-state.mjs +50 -0
- package/fesm2022/malva-ui-core-empty-state.mjs.map +1 -0
- package/fesm2022/malva-ui-core-expand.mjs +130 -0
- package/fesm2022/malva-ui-core-expand.mjs.map +1 -0
- package/fesm2022/malva-ui-core-file-upload.mjs +451 -0
- package/fesm2022/malva-ui-core-file-upload.mjs.map +1 -0
- package/fesm2022/malva-ui-core-filter.mjs +1627 -0
- package/fesm2022/malva-ui-core-filter.mjs.map +1 -0
- package/fesm2022/malva-ui-core-form-utils-testing.mjs +39 -0
- package/fesm2022/malva-ui-core-form-utils-testing.mjs.map +1 -0
- package/fesm2022/malva-ui-core-form-utils.mjs +977 -0
- package/fesm2022/malva-ui-core-form-utils.mjs.map +1 -0
- package/fesm2022/malva-ui-core-form.mjs +283 -0
- package/fesm2022/malva-ui-core-form.mjs.map +1 -0
- package/fesm2022/malva-ui-core-icon-toggle.mjs +120 -0
- package/fesm2022/malva-ui-core-icon-toggle.mjs.map +1 -0
- package/fesm2022/malva-ui-core-input.mjs +375 -0
- package/fesm2022/malva-ui-core-input.mjs.map +1 -0
- package/fesm2022/malva-ui-core-kbd.mjs +131 -0
- package/fesm2022/malva-ui-core-kbd.mjs.map +1 -0
- package/fesm2022/malva-ui-core-layout.mjs +212 -0
- package/fesm2022/malva-ui-core-layout.mjs.map +1 -0
- package/fesm2022/malva-ui-core-link.mjs +89 -0
- package/fesm2022/malva-ui-core-link.mjs.map +1 -0
- package/fesm2022/malva-ui-core-list.mjs +413 -0
- package/fesm2022/malva-ui-core-list.mjs.map +1 -0
- package/fesm2022/malva-ui-core-loader.mjs +141 -0
- package/fesm2022/malva-ui-core-loader.mjs.map +1 -0
- package/fesm2022/malva-ui-core-menu.mjs +2540 -0
- package/fesm2022/malva-ui-core-menu.mjs.map +1 -0
- package/fesm2022/malva-ui-core-notification.mjs +201 -0
- package/fesm2022/malva-ui-core-notification.mjs.map +1 -0
- package/fesm2022/malva-ui-core-number-input.mjs +404 -0
- package/fesm2022/malva-ui-core-number-input.mjs.map +1 -0
- package/fesm2022/malva-ui-core-page.mjs +1898 -0
- package/fesm2022/malva-ui-core-page.mjs.map +1 -0
- package/fesm2022/malva-ui-core-pagination.mjs +458 -0
- package/fesm2022/malva-ui-core-pagination.mjs.map +1 -0
- package/fesm2022/malva-ui-core-pin-input.mjs +405 -0
- package/fesm2022/malva-ui-core-pin-input.mjs.map +1 -0
- package/fesm2022/malva-ui-core-popup.mjs +1488 -0
- package/fesm2022/malva-ui-core-popup.mjs.map +1 -0
- package/fesm2022/malva-ui-core-progress.mjs +109 -0
- package/fesm2022/malva-ui-core-progress.mjs.map +1 -0
- package/fesm2022/malva-ui-core-radio.mjs +317 -0
- package/fesm2022/malva-ui-core-radio.mjs.map +1 -0
- package/fesm2022/malva-ui-core-rating.mjs +236 -0
- package/fesm2022/malva-ui-core-rating.mjs.map +1 -0
- package/fesm2022/malva-ui-core-scrollbar.mjs +430 -0
- package/fesm2022/malva-ui-core-scrollbar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-search-field.mjs +578 -0
- package/fesm2022/malva-ui-core-search-field.mjs.map +1 -0
- package/fesm2022/malva-ui-core-segmented.mjs +458 -0
- package/fesm2022/malva-ui-core-segmented.mjs.map +1 -0
- package/fesm2022/malva-ui-core-select.mjs +855 -0
- package/fesm2022/malva-ui-core-select.mjs.map +1 -0
- package/fesm2022/malva-ui-core-sidebar.mjs +1504 -0
- package/fesm2022/malva-ui-core-sidebar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-skeleton.mjs +85 -0
- package/fesm2022/malva-ui-core-skeleton.mjs.map +1 -0
- package/fesm2022/malva-ui-core-slider.mjs +514 -0
- package/fesm2022/malva-ui-core-slider.mjs.map +1 -0
- package/fesm2022/malva-ui-core-split-pane.mjs +359 -0
- package/fesm2022/malva-ui-core-split-pane.mjs.map +1 -0
- package/fesm2022/malva-ui-core-status-indicator.mjs +78 -0
- package/fesm2022/malva-ui-core-status-indicator.mjs.map +1 -0
- package/fesm2022/malva-ui-core-stepper.mjs +332 -0
- package/fesm2022/malva-ui-core-stepper.mjs.map +1 -0
- package/fesm2022/malva-ui-core-switch.mjs +272 -0
- package/fesm2022/malva-ui-core-switch.mjs.map +1 -0
- package/fesm2022/malva-ui-core-table.mjs +79 -0
- package/fesm2022/malva-ui-core-table.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tabs.mjs +794 -0
- package/fesm2022/malva-ui-core-tabs.mjs.map +1 -0
- package/fesm2022/malva-ui-core-textarea.mjs +201 -0
- package/fesm2022/malva-ui-core-textarea.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tile.mjs +1404 -0
- package/fesm2022/malva-ui-core-tile.mjs.map +1 -0
- package/fesm2022/malva-ui-core-time-picker.mjs +533 -0
- package/fesm2022/malva-ui-core-time-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-timeline.mjs +216 -0
- package/fesm2022/malva-ui-core-timeline.mjs.map +1 -0
- package/fesm2022/malva-ui-core-title.mjs +178 -0
- package/fesm2022/malva-ui-core-title.mjs.map +1 -0
- package/fesm2022/malva-ui-core-toast.mjs +749 -0
- package/fesm2022/malva-ui-core-toast.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tokenizer.mjs +502 -0
- package/fesm2022/malva-ui-core-tokenizer.mjs.map +1 -0
- package/fesm2022/malva-ui-core-toolbar.mjs +141 -0
- package/fesm2022/malva-ui-core-toolbar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tooltip.mjs +432 -0
- package/fesm2022/malva-ui-core-tooltip.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tree.mjs +505 -0
- package/fesm2022/malva-ui-core-tree.mjs.map +1 -0
- package/fesm2022/malva-ui-core-view-variant.mjs +292 -0
- package/fesm2022/malva-ui-core-view-variant.mjs.map +1 -0
- package/fesm2022/malva-ui-core.mjs +77 -0
- package/fesm2022/malva-ui-core.mjs.map +1 -0
- package/package.json +179 -156
- package/styles/malva-ui.css +253 -220
- package/styles/tokens.md +174 -173
- package/table/README.md +46 -0
- package/types/malva-ui-core-accordion.d.ts +121 -0
- package/types/malva-ui-core-action-bar.d.ts +82 -0
- package/types/malva-ui-core-alert.d.ts +131 -0
- package/types/malva-ui-core-autocomplete.d.ts +301 -0
- package/types/malva-ui-core-avatar-group.d.ts +119 -0
- package/types/malva-ui-core-avatar.d.ts +156 -0
- package/types/malva-ui-core-badge.d.ts +97 -0
- package/types/malva-ui-core-bottom-nav.d.ts +104 -0
- package/types/malva-ui-core-breadcrumb.d.ts +308 -0
- package/types/malva-ui-core-button.d.ts +194 -0
- package/types/malva-ui-core-calendar.d.ts +339 -0
- package/types/malva-ui-core-card.d.ts +88 -0
- package/types/malva-ui-core-chat.d.ts +375 -0
- package/types/malva-ui-core-checkbox.d.ts +158 -0
- package/types/malva-ui-core-chip.d.ts +128 -0
- package/types/malva-ui-core-color-picker.d.ts +442 -0
- package/types/malva-ui-core-combobox.d.ts +419 -0
- package/types/malva-ui-core-copy-to-clipboard.d.ts +148 -0
- package/types/malva-ui-core-data-table.d.ts +1074 -0
- package/types/malva-ui-core-date-range-picker.d.ts +149 -0
- package/types/malva-ui-core-day-picker.d.ts +55 -0
- package/types/malva-ui-core-dialog.d.ts +597 -0
- package/types/malva-ui-core-divider.d.ts +68 -0
- package/types/malva-ui-core-drawer.d.ts +333 -0
- package/types/malva-ui-core-dropdown.d.ts +592 -0
- package/types/malva-ui-core-empty-state.d.ts +37 -0
- package/types/malva-ui-core-expand.d.ts +102 -0
- package/types/malva-ui-core-file-upload.d.ts +267 -0
- package/types/malva-ui-core-filter.d.ts +552 -0
- package/types/malva-ui-core-form-utils-testing.d.ts +50 -0
- package/types/malva-ui-core-form-utils.d.ts +579 -0
- package/types/malva-ui-core-form.d.ts +176 -0
- package/types/malva-ui-core-icon-toggle.d.ts +80 -0
- package/types/malva-ui-core-input.d.ts +262 -0
- package/types/malva-ui-core-kbd.d.ts +56 -0
- package/types/malva-ui-core-layout.d.ts +70 -0
- package/types/malva-ui-core-link.d.ts +28 -0
- package/types/malva-ui-core-list.d.ts +252 -0
- package/types/malva-ui-core-loader.d.ts +89 -0
- package/types/malva-ui-core-menu.d.ts +954 -0
- package/types/malva-ui-core-notification.d.ts +122 -0
- package/types/malva-ui-core-number-input.d.ts +167 -0
- package/types/malva-ui-core-page.d.ts +799 -0
- package/types/malva-ui-core-pagination.d.ts +261 -0
- package/types/malva-ui-core-pin-input.d.ts +203 -0
- package/types/malva-ui-core-popup.d.ts +834 -0
- package/types/malva-ui-core-progress.d.ts +73 -0
- package/types/malva-ui-core-radio.d.ts +130 -0
- package/types/malva-ui-core-rating.d.ts +115 -0
- package/types/malva-ui-core-scrollbar.d.ts +203 -0
- package/types/malva-ui-core-search-field.d.ts +408 -0
- package/types/malva-ui-core-segmented.d.ts +206 -0
- package/types/malva-ui-core-select.d.ts +456 -0
- package/types/malva-ui-core-sidebar.d.ts +698 -0
- package/types/malva-ui-core-skeleton.d.ts +64 -0
- package/types/malva-ui-core-slider.d.ts +219 -0
- package/types/malva-ui-core-split-pane.d.ts +149 -0
- package/types/malva-ui-core-status-indicator.d.ts +65 -0
- package/types/malva-ui-core-stepper.d.ts +168 -0
- package/types/malva-ui-core-switch.d.ts +146 -0
- package/types/malva-ui-core-table.d.ts +37 -0
- package/types/malva-ui-core-tabs.d.ts +339 -0
- package/types/malva-ui-core-textarea.d.ts +79 -0
- package/types/malva-ui-core-tile.d.ts +373 -0
- package/types/malva-ui-core-time-picker.d.ts +141 -0
- package/types/malva-ui-core-timeline.d.ts +188 -0
- package/types/malva-ui-core-title.d.ts +66 -0
- package/types/malva-ui-core-toast.d.ts +432 -0
- package/types/malva-ui-core-tokenizer.d.ts +217 -0
- package/types/malva-ui-core-toolbar.d.ts +91 -0
- package/types/malva-ui-core-tooltip.d.ts +200 -0
- package/types/malva-ui-core-tree.d.ts +289 -0
- package/types/malva-ui-core-view-variant.d.ts +207 -0
- package/types/malva-ui-core.d.ts +72 -0
- package/view-variant/README.md +3 -0
- package/accordion/index.d.ts +0 -3
- package/accordion/lib/accordion/accordion.d.ts +0 -47
- package/accordion/lib/accordion-item/accordion-header.d.ts +0 -22
- package/accordion/lib/accordion-item/accordion-item.d.ts +0 -49
- package/accordion/malva-ui-core-accordion.d.ts +0 -5
- package/action-bar/index.d.ts +0 -4
- package/action-bar/lib/action-bar/action-bar.d.ts +0 -59
- package/action-bar/lib/action-bar/components/action-bar-actions.d.ts +0 -9
- package/action-bar/lib/action-bar/components/action-bar-logo.d.ts +0 -5
- package/action-bar/lib/action-bar/components/action-bar-spacer.d.ts +0 -5
- package/action-bar/malva-ui-core-action-bar.d.ts +0 -5
- package/alert/index.d.ts +0 -2
- package/alert/lib/alert/alert.d.ts +0 -84
- package/alert/lib/alert/alert.directives.d.ts +0 -44
- package/alert/malva-ui-core-alert.d.ts +0 -5
- package/autocomplete/index.d.ts +0 -1
- package/autocomplete/lib/autocomplete/autocomplete.d.ts +0 -296
- package/autocomplete/malva-ui-core-autocomplete.d.ts +0 -5
- package/avatar/index.d.ts +0 -2
- package/avatar/lib/avatar/avatar.d.ts +0 -125
- package/avatar/lib/color-from-text.pipe.d.ts +0 -21
- package/avatar/malva-ui-core-avatar.d.ts +0 -5
- package/avatar-group/index.d.ts +0 -1
- package/avatar-group/lib/avatar-group/avatar-group.d.ts +0 -115
- package/avatar-group/malva-ui-core-avatar-group.d.ts +0 -5
- package/badge/index.d.ts +0 -2
- package/badge/lib/badge/badge.d.ts +0 -59
- package/badge/lib/badge-icon.d.ts +0 -35
- package/badge/malva-ui-core-badge.d.ts +0 -5
- package/bottom-nav/index.d.ts +0 -1
- package/bottom-nav/lib/bottom-nav/bottom-nav.d.ts +0 -99
- package/bottom-nav/malva-ui-core-bottom-nav.d.ts +0 -5
- package/breadcrumb/index.d.ts +0 -5
- package/breadcrumb/lib/breadcrumb/breadcrumb-item-host.d.ts +0 -32
- package/breadcrumb/lib/breadcrumb/breadcrumb-item.d.ts +0 -41
- package/breadcrumb/lib/breadcrumb/breadcrumb-separator.d.ts +0 -31
- package/breadcrumb/lib/breadcrumb/breadcrumb.d.ts +0 -151
- package/breadcrumb/lib/breadcrumb/breadcrumb.types.d.ts +0 -26
- package/breadcrumb/malva-ui-core-breadcrumb.d.ts +0 -5
- package/button/index.d.ts +0 -7
- package/button/lib/button/button.d.ts +0 -61
- package/button/lib/button-close/button-close.d.ts +0 -24
- package/button/lib/button-group/button-group.d.ts +0 -21
- package/button/lib/button-split/button-split.d.ts +0 -21
- package/button/lib/button-toggle/button-toggle.d.ts +0 -33
- package/button/lib/button-variant.token.d.ts +0 -13
- package/button/lib/button.directives.d.ts +0 -14
- package/button/lib/button.types.d.ts +0 -8
- package/button/malva-ui-core-button.d.ts +0 -5
- package/calendar/index.d.ts +0 -3
- package/calendar/lib/calendar/calendar.d.ts +0 -182
- package/calendar/lib/date-provider/date-adapter.d.ts +0 -92
- package/calendar/lib/date-provider/native-date-adapter.d.ts +0 -60
- package/calendar/malva-ui-core-calendar.d.ts +0 -5
- package/card/index.d.ts +0 -5
- package/card/lib/card/card.d.ts +0 -43
- package/card/lib/card-actions-def.d.ts +0 -10
- package/card/lib/card-footer-def.d.ts +0 -13
- package/card/lib/card-header-def.d.ts +0 -10
- package/card/lib/card-subheader-def.d.ts +0 -16
- package/card/malva-ui-core-card.d.ts +0 -5
- package/chat/index.d.ts +0 -9
- package/chat/lib/chat/chat.d.ts +0 -133
- package/chat/lib/chat-audio/chat-audio.d.ts +0 -51
- package/chat/lib/chat-audio/chat-audio.service.d.ts +0 -21
- package/chat/lib/chat-date/chat-date.d.ts +0 -16
- package/chat/lib/chat-format.d.ts +0 -5
- package/chat/lib/chat-media-grid/chat-media-grid.d.ts +0 -32
- package/chat/lib/chat-message/chat-message.d.ts +0 -45
- package/chat/lib/chat-render-list.d.ts +0 -16
- package/chat/lib/chat-tokens.d.ts +0 -25
- package/chat/lib/chat-typing/chat-typing.d.ts +0 -16
- package/chat/lib/chat.types.d.ts +0 -80
- package/chat/lib/defs/chat-author-def.d.ts +0 -30
- package/chat/lib/defs/chat-date-def.d.ts +0 -22
- package/chat/lib/defs/chat-message-def.d.ts +0 -23
- package/chat/malva-ui-core-chat.d.ts +0 -5
- package/checkbox/index.d.ts +0 -3
- package/checkbox/lib/checkbox/checkbox.d.ts +0 -129
- package/checkbox/lib/checkbox-group/checkbox-group.d.ts +0 -24
- package/checkbox/lib/checkbox-group-token.d.ts +0 -6
- package/checkbox/malva-ui-core-checkbox.d.ts +0 -5
- package/chip/index.d.ts +0 -2
- package/chip/lib/chip/chip.d.ts +0 -107
- package/chip/lib/chip/chip.directives.d.ts +0 -18
- package/chip/malva-ui-core-chip.d.ts +0 -5
- package/color-picker/index.d.ts +0 -3
- package/color-picker/lib/color-picker/color-picker.d.ts +0 -188
- package/color-picker/lib/color-picker-popup/color-picker-popup.d.ts +0 -151
- package/color-picker/lib/color-utils/color-utils.d.ts +0 -102
- package/color-picker/malva-ui-core-color-picker.d.ts +0 -5
- package/combobox/index.d.ts +0 -2
- package/combobox/lib/combobox/combobox.d.ts +0 -400
- package/combobox/lib/combobox-template.directives.d.ts +0 -10
- package/combobox/malva-ui-core-combobox.d.ts +0 -5
- package/copy-to-clipboard/index.d.ts +0 -1
- package/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.d.ts +0 -130
- package/copy-to-clipboard/malva-ui-core-copy-to-clipboard.d.ts +0 -5
- package/data-table/index.d.ts +0 -8
- package/data-table/lib/data-source.d.ts +0 -5
- package/data-table/lib/data-table/data-table-layout.d.ts +0 -31
- package/data-table/lib/data-table/data-table.d.ts +0 -699
- package/data-table/lib/data-table/services/data-table-column-visibility.service.d.ts +0 -19
- package/data-table/lib/data-table/services/data-table-editing.service.d.ts +0 -37
- package/data-table/lib/data-table/services/data-table-pinning.service.d.ts +0 -37
- package/data-table/lib/data-table-cell.d.ts +0 -44
- package/data-table/lib/data-table-edit-cell.d.ts +0 -44
- package/data-table/lib/data-table-error.d.ts +0 -37
- package/data-table/lib/data-table-footer.d.ts +0 -26
- package/data-table/lib/data-table-no-data.d.ts +0 -19
- package/data-table/lib/filter-dropdown/filter-dropdown.d.ts +0 -54
- package/data-table/lib/types.d.ts +0 -134
- package/data-table/malva-ui-core-data-table.d.ts +0 -5
- package/date-range-picker/index.d.ts +0 -1
- package/date-range-picker/lib/date-range-picker/date-range-picker.d.ts +0 -145
- package/date-range-picker/malva-ui-core-date-range-picker.d.ts +0 -5
- package/day-picker/index.d.ts +0 -1
- package/day-picker/lib/day-picker/day-picker.d.ts +0 -51
- package/day-picker/malva-ui-core-day-picker.d.ts +0 -5
- package/dialog/index.d.ts +0 -11
- package/dialog/lib/confirm-dialog-options.d.ts +0 -41
- package/dialog/lib/confirm-dialog.d.ts +0 -52
- package/dialog/lib/dialog/dialog.d.ts +0 -22
- package/dialog/lib/dialog-body.d.ts +0 -9
- package/dialog/lib/dialog-close.d.ts +0 -27
- package/dialog/lib/dialog-config.d.ts +0 -112
- package/dialog/lib/dialog-container.d.ts +0 -40
- package/dialog/lib/dialog-footer.d.ts +0 -13
- package/dialog/lib/dialog-header.d.ts +0 -74
- package/dialog/lib/dialog-ref.d.ts +0 -95
- package/dialog/lib/dialog-template.d.ts +0 -65
- package/dialog/lib/dialog-text-content.d.ts +0 -24
- package/dialog/lib/dialog.service.d.ts +0 -63
- package/dialog/lib/generate-routable-dialog-route.d.ts +0 -49
- package/dialog/lib/inject-dialog-ref.d.ts +0 -8
- package/dialog/lib/routable-dialog.d.ts +0 -30
- package/dialog/malva-ui-core-dialog.d.ts +0 -5
- package/divider/index.d.ts +0 -1
- package/divider/lib/divider/divider.d.ts +0 -64
- package/divider/malva-ui-core-divider.d.ts +0 -5
- package/drawer/index.d.ts +0 -11
- package/drawer/lib/drawer/drawer.d.ts +0 -106
- package/drawer/lib/drawer-body.d.ts +0 -8
- package/drawer/lib/drawer-content.d.ts +0 -6
- package/drawer/lib/drawer-footer.d.ts +0 -5
- package/drawer/lib/drawer-header.d.ts +0 -5
- package/drawer/lib/drawer-ref.d.ts +0 -29
- package/drawer/lib/drawer-resize.d.ts +0 -65
- package/drawer/lib/drawer-section/drawer-section.d.ts +0 -15
- package/drawer/lib/drawer-sections/drawer-sections.d.ts +0 -22
- package/drawer/lib/drawer-sections.service.d.ts +0 -42
- package/drawer/lib/drawer.service.d.ts +0 -66
- package/drawer/lib/generate-routable-drawer-route.d.ts +0 -42
- package/drawer/lib/routable-drawer.d.ts +0 -30
- package/drawer/malva-ui-core-drawer.d.ts +0 -5
- package/dropdown/index.d.ts +0 -9
- package/dropdown/lib/active-descendant.d.ts +0 -64
- package/dropdown/lib/dropdown-panel/dropdown-panel.d.ts +0 -178
- package/dropdown/lib/highlight-match.pipe.d.ts +0 -27
- package/dropdown/lib/option-matcher.d.ts +0 -87
- package/dropdown/lib/options-adapter.d.ts +0 -142
- package/dropdown/lib/options-result.d.ts +0 -6
- package/dropdown/lib/reconciliation.d.ts +0 -19
- package/dropdown/lib/select-data-source.d.ts +0 -18
- package/dropdown/lib/select-option.d.ts +0 -37
- package/dropdown/malva-ui-core-dropdown.d.ts +0 -5
- package/empty-state/index.d.ts +0 -1
- package/empty-state/lib/empty-state/empty-state.d.ts +0 -34
- package/empty-state/malva-ui-core-empty-state.d.ts +0 -5
- package/esm2022/accordion/index.js +0 -4
- package/esm2022/accordion/index.js.map +0 -1
- package/esm2022/accordion/lib/accordion/accordion.js +0 -65
- package/esm2022/accordion/lib/accordion/accordion.js.map +0 -1
- package/esm2022/accordion/lib/accordion-item/accordion-header.js +0 -30
- package/esm2022/accordion/lib/accordion-item/accordion-header.js.map +0 -1
- package/esm2022/accordion/lib/accordion-item/accordion-item.js +0 -70
- package/esm2022/accordion/lib/accordion-item/accordion-item.js.map +0 -1
- package/esm2022/accordion/malva-ui-core-accordion.js +0 -5
- package/esm2022/accordion/malva-ui-core-accordion.js.map +0 -1
- package/esm2022/action-bar/index.js +0 -5
- package/esm2022/action-bar/index.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/action-bar.js +0 -64
- package/esm2022/action-bar/lib/action-bar/action-bar.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js +0 -20
- package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js +0 -13
- package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js +0 -13
- package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js.map +0 -1
- package/esm2022/action-bar/malva-ui-core-action-bar.js +0 -5
- package/esm2022/action-bar/malva-ui-core-action-bar.js.map +0 -1
- package/esm2022/alert/index.js +0 -3
- package/esm2022/alert/index.js.map +0 -1
- package/esm2022/alert/lib/alert/alert.directives.js +0 -53
- package/esm2022/alert/lib/alert/alert.directives.js.map +0 -1
- package/esm2022/alert/lib/alert/alert.js +0 -118
- package/esm2022/alert/lib/alert/alert.js.map +0 -1
- package/esm2022/alert/malva-ui-core-alert.js +0 -5
- package/esm2022/alert/malva-ui-core-alert.js.map +0 -1
- package/esm2022/autocomplete/index.js +0 -2
- package/esm2022/autocomplete/index.js.map +0 -1
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.js +0 -765
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.js.map +0 -1
- package/esm2022/autocomplete/malva-ui-core-autocomplete.js +0 -5
- package/esm2022/autocomplete/malva-ui-core-autocomplete.js.map +0 -1
- package/esm2022/avatar/index.js +0 -3
- package/esm2022/avatar/index.js.map +0 -1
- package/esm2022/avatar/lib/avatar/avatar.js +0 -192
- package/esm2022/avatar/lib/avatar/avatar.js.map +0 -1
- package/esm2022/avatar/lib/color-from-text.pipe.js +0 -39
- package/esm2022/avatar/lib/color-from-text.pipe.js.map +0 -1
- package/esm2022/avatar/malva-ui-core-avatar.js +0 -5
- package/esm2022/avatar/malva-ui-core-avatar.js.map +0 -1
- package/esm2022/avatar-group/index.js +0 -2
- package/esm2022/avatar-group/index.js.map +0 -1
- package/esm2022/avatar-group/lib/avatar-group/avatar-group.js +0 -217
- package/esm2022/avatar-group/lib/avatar-group/avatar-group.js.map +0 -1
- package/esm2022/avatar-group/malva-ui-core-avatar-group.js +0 -5
- package/esm2022/avatar-group/malva-ui-core-avatar-group.js.map +0 -1
- package/esm2022/badge/index.js +0 -3
- package/esm2022/badge/index.js.map +0 -1
- package/esm2022/badge/lib/badge/badge.js +0 -71
- package/esm2022/badge/lib/badge/badge.js.map +0 -1
- package/esm2022/badge/lib/badge-icon.js +0 -47
- package/esm2022/badge/lib/badge-icon.js.map +0 -1
- package/esm2022/badge/malva-ui-core-badge.js +0 -5
- package/esm2022/badge/malva-ui-core-badge.js.map +0 -1
- package/esm2022/bottom-nav/index.js +0 -2
- package/esm2022/bottom-nav/index.js.map +0 -1
- package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js +0 -155
- package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js.map +0 -1
- package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js +0 -5
- package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js.map +0 -1
- package/esm2022/breadcrumb/index.js +0 -6
- package/esm2022/breadcrumb/index.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js +0 -43
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js +0 -110
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js +0 -38
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js +0 -284
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js.map +0 -1
- package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js +0 -5
- package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js.map +0 -1
- package/esm2022/button/index.js +0 -8
- package/esm2022/button/index.js.map +0 -1
- package/esm2022/button/lib/button/button.js +0 -137
- package/esm2022/button/lib/button/button.js.map +0 -1
- package/esm2022/button/lib/button-close/button-close.js +0 -52
- package/esm2022/button/lib/button-close/button-close.js.map +0 -1
- package/esm2022/button/lib/button-group/button-group.js +0 -44
- package/esm2022/button/lib/button-group/button-group.js.map +0 -1
- package/esm2022/button/lib/button-split/button-split.js +0 -44
- package/esm2022/button/lib/button-split/button-split.js.map +0 -1
- package/esm2022/button/lib/button-toggle/button-toggle.js +0 -94
- package/esm2022/button/lib/button-toggle/button-toggle.js.map +0 -1
- package/esm2022/button/lib/button-variant.token.js +0 -4
- package/esm2022/button/lib/button-variant.token.js.map +0 -1
- package/esm2022/button/lib/button.directives.js +0 -37
- package/esm2022/button/lib/button.directives.js.map +0 -1
- package/esm2022/button/lib/button.types.js +0 -1
- package/esm2022/button/lib/button.types.js.map +0 -1
- package/esm2022/button/malva-ui-core-button.js +0 -5
- package/esm2022/button/malva-ui-core-button.js.map +0 -1
- package/esm2022/calendar/index.js +0 -4
- package/esm2022/calendar/index.js.map +0 -1
- package/esm2022/calendar/lib/calendar/calendar.js +0 -672
- package/esm2022/calendar/lib/calendar/calendar.js.map +0 -1
- package/esm2022/calendar/lib/date-provider/date-adapter.js +0 -111
- package/esm2022/calendar/lib/date-provider/date-adapter.js.map +0 -1
- package/esm2022/calendar/lib/date-provider/native-date-adapter.js +0 -151
- package/esm2022/calendar/lib/date-provider/native-date-adapter.js.map +0 -1
- package/esm2022/calendar/malva-ui-core-calendar.js +0 -5
- package/esm2022/calendar/malva-ui-core-calendar.js.map +0 -1
- package/esm2022/card/index.js +0 -6
- package/esm2022/card/index.js.map +0 -1
- package/esm2022/card/lib/card/card.js +0 -54
- package/esm2022/card/lib/card/card.js.map +0 -1
- package/esm2022/card/lib/card-actions-def.js +0 -27
- package/esm2022/card/lib/card-actions-def.js.map +0 -1
- package/esm2022/card/lib/card-footer-def.js +0 -32
- package/esm2022/card/lib/card-footer-def.js.map +0 -1
- package/esm2022/card/lib/card-header-def.js +0 -27
- package/esm2022/card/lib/card-header-def.js.map +0 -1
- package/esm2022/card/lib/card-subheader-def.js +0 -33
- package/esm2022/card/lib/card-subheader-def.js.map +0 -1
- package/esm2022/card/malva-ui-core-card.js +0 -5
- package/esm2022/card/malva-ui-core-card.js.map +0 -1
- package/esm2022/chat/index.js +0 -10
- package/esm2022/chat/index.js.map +0 -1
- package/esm2022/chat/lib/chat/chat.js +0 -326
- package/esm2022/chat/lib/chat/chat.js.map +0 -1
- package/esm2022/chat/lib/chat-audio/chat-audio.js +0 -110
- package/esm2022/chat/lib/chat-audio/chat-audio.js.map +0 -1
- package/esm2022/chat/lib/chat-audio/chat-audio.service.js +0 -28
- package/esm2022/chat/lib/chat-audio/chat-audio.service.js.map +0 -1
- package/esm2022/chat/lib/chat-date/chat-date.js +0 -46
- package/esm2022/chat/lib/chat-date/chat-date.js.map +0 -1
- package/esm2022/chat/lib/chat-format.js +0 -11
- package/esm2022/chat/lib/chat-format.js.map +0 -1
- package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js +0 -53
- package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js.map +0 -1
- package/esm2022/chat/lib/chat-message/chat-message.js +0 -86
- package/esm2022/chat/lib/chat-message/chat-message.js.map +0 -1
- package/esm2022/chat/lib/chat-render-list.js +0 -55
- package/esm2022/chat/lib/chat-render-list.js.map +0 -1
- package/esm2022/chat/lib/chat-tokens.js +0 -9
- package/esm2022/chat/lib/chat-tokens.js.map +0 -1
- package/esm2022/chat/lib/chat-typing/chat-typing.js +0 -50
- package/esm2022/chat/lib/chat-typing/chat-typing.js.map +0 -1
- package/esm2022/chat/lib/chat.types.js +0 -1
- package/esm2022/chat/lib/chat.types.js.map +0 -1
- package/esm2022/chat/lib/defs/chat-author-def.js +0 -27
- package/esm2022/chat/lib/defs/chat-author-def.js.map +0 -1
- package/esm2022/chat/lib/defs/chat-date-def.js +0 -24
- package/esm2022/chat/lib/defs/chat-date-def.js.map +0 -1
- package/esm2022/chat/lib/defs/chat-message-def.js +0 -30
- package/esm2022/chat/lib/defs/chat-message-def.js.map +0 -1
- package/esm2022/chat/malva-ui-core-chat.js +0 -5
- package/esm2022/chat/malva-ui-core-chat.js.map +0 -1
- package/esm2022/checkbox/index.js +0 -4
- package/esm2022/checkbox/index.js.map +0 -1
- package/esm2022/checkbox/lib/checkbox/checkbox.js +0 -201
- package/esm2022/checkbox/lib/checkbox/checkbox.js.map +0 -1
- package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js +0 -68
- package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js.map +0 -1
- package/esm2022/checkbox/lib/checkbox-group-token.js +0 -3
- package/esm2022/checkbox/lib/checkbox-group-token.js.map +0 -1
- package/esm2022/checkbox/malva-ui-core-checkbox.js +0 -5
- package/esm2022/checkbox/malva-ui-core-checkbox.js.map +0 -1
- package/esm2022/chip/index.js +0 -3
- package/esm2022/chip/index.js.map +0 -1
- package/esm2022/chip/lib/chip/chip.directives.js +0 -32
- package/esm2022/chip/lib/chip/chip.directives.js.map +0 -1
- package/esm2022/chip/lib/chip/chip.js +0 -140
- package/esm2022/chip/lib/chip/chip.js.map +0 -1
- package/esm2022/chip/malva-ui-core-chip.js +0 -5
- package/esm2022/chip/malva-ui-core-chip.js.map +0 -1
- package/esm2022/color-picker/index.js +0 -4
- package/esm2022/color-picker/index.js.map +0 -1
- package/esm2022/color-picker/lib/color-picker/color-picker.js +0 -530
- package/esm2022/color-picker/lib/color-picker/color-picker.js.map +0 -1
- package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js +0 -419
- package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js.map +0 -1
- package/esm2022/color-picker/lib/color-utils/color-utils.js +0 -256
- package/esm2022/color-picker/lib/color-utils/color-utils.js.map +0 -1
- package/esm2022/color-picker/malva-ui-core-color-picker.js +0 -5
- package/esm2022/color-picker/malva-ui-core-color-picker.js.map +0 -1
- package/esm2022/combobox/index.js +0 -3
- package/esm2022/combobox/index.js.map +0 -1
- package/esm2022/combobox/lib/combobox/combobox.js +0 -911
- package/esm2022/combobox/lib/combobox/combobox.js.map +0 -1
- package/esm2022/combobox/lib/combobox-template.directives.js +0 -24
- package/esm2022/combobox/lib/combobox-template.directives.js.map +0 -1
- package/esm2022/combobox/malva-ui-core-combobox.js +0 -5
- package/esm2022/combobox/malva-ui-core-combobox.js.map +0 -1
- package/esm2022/copy-to-clipboard/index.js +0 -2
- package/esm2022/copy-to-clipboard/index.js.map +0 -1
- package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js +0 -201
- package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js.map +0 -1
- package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js +0 -5
- package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js.map +0 -1
- package/esm2022/data-table/index.js +0 -9
- package/esm2022/data-table/index.js.map +0 -1
- package/esm2022/data-table/lib/data-source.js +0 -6
- package/esm2022/data-table/lib/data-source.js.map +0 -1
- package/esm2022/data-table/lib/data-table/data-table-layout.js +0 -84
- package/esm2022/data-table/lib/data-table/data-table-layout.js.map +0 -1
- package/esm2022/data-table/lib/data-table/data-table.js +0 -1846
- package/esm2022/data-table/lib/data-table/data-table.js.map +0 -1
- package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js +0 -37
- package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js.map +0 -1
- package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js +0 -63
- package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js.map +0 -1
- package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js +0 -68
- package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js.map +0 -1
- package/esm2022/data-table/lib/data-table-cell.js +0 -46
- package/esm2022/data-table/lib/data-table-cell.js.map +0 -1
- package/esm2022/data-table/lib/data-table-edit-cell.js +0 -46
- package/esm2022/data-table/lib/data-table-edit-cell.js.map +0 -1
- package/esm2022/data-table/lib/data-table-error.js +0 -37
- package/esm2022/data-table/lib/data-table-error.js.map +0 -1
- package/esm2022/data-table/lib/data-table-footer.js +0 -33
- package/esm2022/data-table/lib/data-table-footer.js.map +0 -1
- package/esm2022/data-table/lib/data-table-no-data.js +0 -26
- package/esm2022/data-table/lib/data-table-no-data.js.map +0 -1
- package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js +0 -224
- package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js.map +0 -1
- package/esm2022/data-table/lib/types.js +0 -1
- package/esm2022/data-table/lib/types.js.map +0 -1
- package/esm2022/data-table/malva-ui-core-data-table.js +0 -5
- package/esm2022/data-table/malva-ui-core-data-table.js.map +0 -1
- package/esm2022/date-range-picker/index.js +0 -2
- package/esm2022/date-range-picker/index.js.map +0 -1
- package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js +0 -269
- package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js.map +0 -1
- package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js +0 -5
- package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js.map +0 -1
- package/esm2022/day-picker/index.js +0 -2
- package/esm2022/day-picker/index.js.map +0 -1
- package/esm2022/day-picker/lib/day-picker/day-picker.js +0 -124
- package/esm2022/day-picker/lib/day-picker/day-picker.js.map +0 -1
- package/esm2022/day-picker/malva-ui-core-day-picker.js +0 -5
- package/esm2022/day-picker/malva-ui-core-day-picker.js.map +0 -1
- package/esm2022/dialog/index.js +0 -12
- package/esm2022/dialog/index.js.map +0 -1
- package/esm2022/dialog/lib/confirm-dialog-options.js +0 -1
- package/esm2022/dialog/lib/confirm-dialog-options.js.map +0 -1
- package/esm2022/dialog/lib/confirm-dialog.js +0 -155
- package/esm2022/dialog/lib/confirm-dialog.js.map +0 -1
- package/esm2022/dialog/lib/dialog/dialog.js +0 -40
- package/esm2022/dialog/lib/dialog/dialog.js.map +0 -1
- package/esm2022/dialog/lib/dialog-body.js +0 -33
- package/esm2022/dialog/lib/dialog-body.js.map +0 -1
- package/esm2022/dialog/lib/dialog-close.js +0 -45
- package/esm2022/dialog/lib/dialog-close.js.map +0 -1
- package/esm2022/dialog/lib/dialog-config.js +0 -23
- package/esm2022/dialog/lib/dialog-config.js.map +0 -1
- package/esm2022/dialog/lib/dialog-container.js +0 -69
- package/esm2022/dialog/lib/dialog-container.js.map +0 -1
- package/esm2022/dialog/lib/dialog-footer.js +0 -29
- package/esm2022/dialog/lib/dialog-footer.js.map +0 -1
- package/esm2022/dialog/lib/dialog-header.js +0 -181
- package/esm2022/dialog/lib/dialog-header.js.map +0 -1
- package/esm2022/dialog/lib/dialog-ref.js +0 -167
- package/esm2022/dialog/lib/dialog-ref.js.map +0 -1
- package/esm2022/dialog/lib/dialog-template.js +0 -136
- package/esm2022/dialog/lib/dialog-template.js.map +0 -1
- package/esm2022/dialog/lib/dialog-text-content.js +0 -59
- package/esm2022/dialog/lib/dialog-text-content.js.map +0 -1
- package/esm2022/dialog/lib/dialog.service.js +0 -205
- package/esm2022/dialog/lib/dialog.service.js.map +0 -1
- package/esm2022/dialog/lib/generate-routable-dialog-route.js +0 -59
- package/esm2022/dialog/lib/generate-routable-dialog-route.js.map +0 -1
- package/esm2022/dialog/lib/inject-dialog-ref.js +0 -16
- package/esm2022/dialog/lib/inject-dialog-ref.js.map +0 -1
- package/esm2022/dialog/lib/routable-dialog.js +0 -91
- package/esm2022/dialog/lib/routable-dialog.js.map +0 -1
- package/esm2022/dialog/malva-ui-core-dialog.js +0 -5
- package/esm2022/dialog/malva-ui-core-dialog.js.map +0 -1
- package/esm2022/divider/index.js +0 -2
- package/esm2022/divider/index.js.map +0 -1
- package/esm2022/divider/lib/divider/divider.js +0 -73
- package/esm2022/divider/lib/divider/divider.js.map +0 -1
- package/esm2022/divider/malva-ui-core-divider.js +0 -5
- package/esm2022/divider/malva-ui-core-divider.js.map +0 -1
- package/esm2022/drawer/index.js +0 -12
- package/esm2022/drawer/index.js.map +0 -1
- package/esm2022/drawer/lib/drawer/drawer.js +0 -180
- package/esm2022/drawer/lib/drawer/drawer.js.map +0 -1
- package/esm2022/drawer/lib/drawer-body.js +0 -32
- package/esm2022/drawer/lib/drawer-body.js.map +0 -1
- package/esm2022/drawer/lib/drawer-content.js +0 -14
- package/esm2022/drawer/lib/drawer-content.js.map +0 -1
- package/esm2022/drawer/lib/drawer-footer.js +0 -14
- package/esm2022/drawer/lib/drawer-footer.js.map +0 -1
- package/esm2022/drawer/lib/drawer-header.js +0 -14
- package/esm2022/drawer/lib/drawer-header.js.map +0 -1
- package/esm2022/drawer/lib/drawer-ref.js +0 -31
- package/esm2022/drawer/lib/drawer-ref.js.map +0 -1
- package/esm2022/drawer/lib/drawer-resize.js +0 -243
- package/esm2022/drawer/lib/drawer-resize.js.map +0 -1
- package/esm2022/drawer/lib/drawer-section/drawer-section.js +0 -26
- package/esm2022/drawer/lib/drawer-section/drawer-section.js.map +0 -1
- package/esm2022/drawer/lib/drawer-sections/drawer-sections.js +0 -58
- package/esm2022/drawer/lib/drawer-sections/drawer-sections.js.map +0 -1
- package/esm2022/drawer/lib/drawer-sections.service.js +0 -83
- package/esm2022/drawer/lib/drawer-sections.service.js.map +0 -1
- package/esm2022/drawer/lib/drawer.service.js +0 -86
- package/esm2022/drawer/lib/drawer.service.js.map +0 -1
- package/esm2022/drawer/lib/generate-routable-drawer-route.js +0 -52
- package/esm2022/drawer/lib/generate-routable-drawer-route.js.map +0 -1
- package/esm2022/drawer/lib/routable-drawer.js +0 -91
- package/esm2022/drawer/lib/routable-drawer.js.map +0 -1
- package/esm2022/drawer/malva-ui-core-drawer.js +0 -5
- package/esm2022/drawer/malva-ui-core-drawer.js.map +0 -1
- package/esm2022/dropdown/index.js +0 -10
- package/esm2022/dropdown/index.js.map +0 -1
- package/esm2022/dropdown/lib/active-descendant.js +0 -92
- package/esm2022/dropdown/lib/active-descendant.js.map +0 -1
- package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js +0 -295
- package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js.map +0 -1
- package/esm2022/dropdown/lib/highlight-match.pipe.js +0 -36
- package/esm2022/dropdown/lib/highlight-match.pipe.js.map +0 -1
- package/esm2022/dropdown/lib/option-matcher.js +0 -124
- package/esm2022/dropdown/lib/option-matcher.js.map +0 -1
- package/esm2022/dropdown/lib/options-adapter.js +0 -356
- package/esm2022/dropdown/lib/options-adapter.js.map +0 -1
- package/esm2022/dropdown/lib/options-result.js +0 -11
- package/esm2022/dropdown/lib/options-result.js.map +0 -1
- package/esm2022/dropdown/lib/reconciliation.js +0 -32
- package/esm2022/dropdown/lib/reconciliation.js.map +0 -1
- package/esm2022/dropdown/lib/select-data-source.js +0 -21
- package/esm2022/dropdown/lib/select-data-source.js.map +0 -1
- package/esm2022/dropdown/lib/select-option.js +0 -25
- package/esm2022/dropdown/lib/select-option.js.map +0 -1
- package/esm2022/dropdown/malva-ui-core-dropdown.js +0 -5
- package/esm2022/dropdown/malva-ui-core-dropdown.js.map +0 -1
- package/esm2022/empty-state/index.js +0 -2
- package/esm2022/empty-state/index.js.map +0 -1
- package/esm2022/empty-state/lib/empty-state/empty-state.js +0 -43
- package/esm2022/empty-state/lib/empty-state/empty-state.js.map +0 -1
- package/esm2022/empty-state/malva-ui-core-empty-state.js +0 -5
- package/esm2022/empty-state/malva-ui-core-empty-state.js.map +0 -1
- package/esm2022/expand/index.js +0 -3
- package/esm2022/expand/index.js.map +0 -1
- package/esm2022/expand/lib/expand/expand-content.js +0 -33
- package/esm2022/expand/lib/expand/expand-content.js.map +0 -1
- package/esm2022/expand/lib/expand/expand.js +0 -93
- package/esm2022/expand/lib/expand/expand.js.map +0 -1
- package/esm2022/expand/malva-ui-core-expand.js +0 -5
- package/esm2022/expand/malva-ui-core-expand.js.map +0 -1
- package/esm2022/file-upload/index.js +0 -5
- package/esm2022/file-upload/index.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload/file-upload.js +0 -324
- package/esm2022/file-upload/lib/file-upload/file-upload.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload/file-upload.types.js +0 -1
- package/esm2022/file-upload/lib/file-upload/file-upload.types.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload-action.js +0 -65
- package/esm2022/file-upload/lib/file-upload-action.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js +0 -55
- package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js.map +0 -1
- package/esm2022/file-upload/malva-ui-core-file-upload.js +0 -5
- package/esm2022/file-upload/malva-ui-core-file-upload.js.map +0 -1
- package/esm2022/filter/index.js +0 -4
- package/esm2022/filter/index.js.map +0 -1
- package/esm2022/filter/lib/filter/filter.js +0 -552
- package/esm2022/filter/lib/filter/filter.js.map +0 -1
- package/esm2022/filter/lib/filter.types.js +0 -1
- package/esm2022/filter/lib/filter.types.js.map +0 -1
- package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js +0 -518
- package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js.map +0 -1
- package/esm2022/filter/malva-ui-core-filter.js +0 -5
- package/esm2022/filter/malva-ui-core-filter.js.map +0 -1
- package/esm2022/form/index.js +0 -7
- package/esm2022/form/index.js.map +0 -1
- package/esm2022/form/lib/fieldset/fieldset.js +0 -101
- package/esm2022/form/lib/fieldset/fieldset.js.map +0 -1
- package/esm2022/form/lib/fieldset-span.js +0 -49
- package/esm2022/form/lib/fieldset-span.js.map +0 -1
- package/esm2022/form/lib/form/form.js +0 -60
- package/esm2022/form/lib/form/form.js.map +0 -1
- package/esm2022/form/lib/form-actions.js +0 -34
- package/esm2022/form/lib/form-actions.js.map +0 -1
- package/esm2022/form/lib/form-gap.js +0 -15
- package/esm2022/form/lib/form-gap.js.map +0 -1
- package/esm2022/form/lib/form-header.js +0 -27
- package/esm2022/form/lib/form-header.js.map +0 -1
- package/esm2022/form/lib/form.types.js +0 -1
- package/esm2022/form/lib/form.types.js.map +0 -1
- package/esm2022/form/malva-ui-core-form.js +0 -5
- package/esm2022/form/malva-ui-core-form.js.map +0 -1
- package/esm2022/form-utils/index.js +0 -16
- package/esm2022/form-utils/index.js.map +0 -1
- package/esm2022/form-utils/lib/aria-value-bridge.js +0 -57
- package/esm2022/form-utils/lib/aria-value-bridge.js.map +0 -1
- package/esm2022/form-utils/lib/description/description.js +0 -24
- package/esm2022/form-utils/lib/description/description.js.map +0 -1
- package/esm2022/form-utils/lib/focusable-group-base.js +0 -87
- package/esm2022/form-utils/lib/focusable-group-base.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js +0 -192
- package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-sides.js +0 -34
- package/esm2022/form-utils/lib/form-control-sides.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js +0 -14
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js +0 -47
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js.map +0 -1
- package/esm2022/form-utils/lib/form-field/form-field.js +0 -245
- package/esm2022/form-utils/lib/form-field/form-field.js.map +0 -1
- package/esm2022/form-utils/lib/hint/hint.js +0 -11
- package/esm2022/form-utils/lib/hint/hint.js.map +0 -1
- package/esm2022/form-utils/lib/label/label.js +0 -55
- package/esm2022/form-utils/lib/label/label.js.map +0 -1
- package/esm2022/form-utils/lib/message/message.js +0 -20
- package/esm2022/form-utils/lib/message/message.js.map +0 -1
- package/esm2022/form-utils/lib/models/error-display-strategy.js +0 -1
- package/esm2022/form-utils/lib/models/error-display-strategy.js.map +0 -1
- package/esm2022/form-utils/lib/models/form-control-connector.js +0 -3
- package/esm2022/form-utils/lib/models/form-control-connector.js.map +0 -1
- package/esm2022/form-utils/lib/models/form-state.js +0 -1
- package/esm2022/form-utils/lib/models/form-state.js.map +0 -1
- package/esm2022/form-utils/lib/selection.service.js +0 -81
- package/esm2022/form-utils/lib/selection.service.js.map +0 -1
- package/esm2022/form-utils/malva-ui-core-form-utils.js +0 -5
- package/esm2022/form-utils/malva-ui-core-form-utils.js.map +0 -1
- package/esm2022/form-utils/testing/index.js +0 -2
- package/esm2022/form-utils/testing/index.js.map +0 -1
- package/esm2022/form-utils/testing/lib/forms-binding-matrix.js +0 -32
- package/esm2022/form-utils/testing/lib/forms-binding-matrix.js.map +0 -1
- package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js +0 -5
- package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js.map +0 -1
- package/esm2022/index.js +0 -70
- package/esm2022/index.js.map +0 -1
- package/esm2022/input/index.js +0 -4
- package/esm2022/input/index.js.map +0 -1
- package/esm2022/input/lib/input/input-native.js +0 -49
- package/esm2022/input/lib/input/input-native.js.map +0 -1
- package/esm2022/input/lib/input/input-value-accessor.js +0 -4
- package/esm2022/input/lib/input/input-value-accessor.js.map +0 -1
- package/esm2022/input/lib/input/input.js +0 -277
- package/esm2022/input/lib/input/input.js.map +0 -1
- package/esm2022/input/lib/input/password-strength.js +0 -46
- package/esm2022/input/lib/input/password-strength.js.map +0 -1
- package/esm2022/input/malva-ui-core-input.js +0 -5
- package/esm2022/input/malva-ui-core-input.js.map +0 -1
- package/esm2022/kbd/index.js +0 -2
- package/esm2022/kbd/index.js.map +0 -1
- package/esm2022/kbd/lib/kbd/kbd.js +0 -124
- package/esm2022/kbd/lib/kbd/kbd.js.map +0 -1
- package/esm2022/kbd/malva-ui-core-kbd.js +0 -5
- package/esm2022/kbd/malva-ui-core-kbd.js.map +0 -1
- package/esm2022/layout/index.js +0 -5
- package/esm2022/layout/index.js.map +0 -1
- package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js +0 -14
- package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js.map +0 -1
- package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js +0 -14
- package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js.map +0 -1
- package/esm2022/layout/lib/layout/layout.js +0 -43
- package/esm2022/layout/lib/layout/layout.js.map +0 -1
- package/esm2022/layout/lib/layout/services/theme.service.js +0 -121
- package/esm2022/layout/lib/layout/services/theme.service.js.map +0 -1
- package/esm2022/layout/malva-ui-core-layout.js +0 -5
- package/esm2022/layout/malva-ui-core-layout.js.map +0 -1
- package/esm2022/link/index.js +0 -3
- package/esm2022/link/index.js.map +0 -1
- package/esm2022/link/lib/link/link.directives.js +0 -24
- package/esm2022/link/lib/link/link.directives.js.map +0 -1
- package/esm2022/link/lib/link/link.js +0 -61
- package/esm2022/link/lib/link/link.js.map +0 -1
- package/esm2022/link/malva-ui-core-link.js +0 -5
- package/esm2022/link/malva-ui-core-link.js.map +0 -1
- package/esm2022/list/index.js +0 -14
- package/esm2022/list/index.js.map +0 -1
- package/esm2022/list/lib/list/list.js +0 -28
- package/esm2022/list/lib/list/list.js.map +0 -1
- package/esm2022/list/lib/list-item/list-item.js +0 -125
- package/esm2022/list/lib/list-item/list-item.js.map +0 -1
- package/esm2022/list/lib/list-item-actions.js +0 -23
- package/esm2022/list/lib/list-item-actions.js.map +0 -1
- package/esm2022/list/lib/list-item-byline.js +0 -13
- package/esm2022/list/lib/list-item-byline.js.map +0 -1
- package/esm2022/list/lib/list-item-group/list-item-group.js +0 -25
- package/esm2022/list/lib/list-item-group/list-item-group.js.map +0 -1
- package/esm2022/list/lib/list-item-link/list-item-link.js +0 -20
- package/esm2022/list/lib/list-item-link/list-item-link.js.map +0 -1
- package/esm2022/list/lib/list-item-media.js +0 -13
- package/esm2022/list/lib/list-item-media.js.map +0 -1
- package/esm2022/list/lib/list-item-meta.js +0 -13
- package/esm2022/list/lib/list-item-meta.js.map +0 -1
- package/esm2022/list/lib/list-item-prefix.js +0 -13
- package/esm2022/list/lib/list-item-prefix.js.map +0 -1
- package/esm2022/list/lib/list-item-suffix.js +0 -13
- package/esm2022/list/lib/list-item-suffix.js.map +0 -1
- package/esm2022/list/lib/list-item-template.js +0 -14
- package/esm2022/list/lib/list-item-template.js.map +0 -1
- package/esm2022/list/lib/list-item-title.js +0 -13
- package/esm2022/list/lib/list-item-title.js.map +0 -1
- package/esm2022/list/lib/list-selectable.js +0 -116
- package/esm2022/list/lib/list-selectable.js.map +0 -1
- package/esm2022/list/malva-ui-core-list.js +0 -5
- package/esm2022/list/malva-ui-core-list.js.map +0 -1
- package/esm2022/loader/index.js +0 -2
- package/esm2022/loader/index.js.map +0 -1
- package/esm2022/loader/lib/loader/loader.js +0 -134
- package/esm2022/loader/lib/loader/loader.js.map +0 -1
- package/esm2022/loader/malva-ui-core-loader.js +0 -5
- package/esm2022/loader/malva-ui-core-loader.js.map +0 -1
- package/esm2022/malva-ui-core.js +0 -5
- package/esm2022/malva-ui-core.js.map +0 -1
- package/esm2022/menu/index.js +0 -10
- package/esm2022/menu/index.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-group-label.js +0 -35
- package/esm2022/menu/lib/menu/menu-group-label.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-group.js +0 -44
- package/esm2022/menu/lib/menu/menu-group.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-item.js +0 -117
- package/esm2022/menu/lib/menu/menu-item.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-separator.js +0 -41
- package/esm2022/menu/lib/menu/menu-separator.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-trigger.js +0 -653
- package/esm2022/menu/lib/menu/menu-trigger.js.map +0 -1
- package/esm2022/menu/lib/menu/menu.js +0 -308
- package/esm2022/menu/lib/menu/menu.js.map +0 -1
- package/esm2022/menu/lib/menu/menu.types.js +0 -4
- package/esm2022/menu/lib/menu/menu.types.js.map +0 -1
- package/esm2022/menu/lib/menu/menubar.js +0 -257
- package/esm2022/menu/lib/menu/menubar.js.map +0 -1
- package/esm2022/menu/lib/menu/menubar.types.js +0 -4
- package/esm2022/menu/lib/menu/menubar.types.js.map +0 -1
- package/esm2022/menu/lib/menu/submenu-aim.js +0 -30
- package/esm2022/menu/lib/menu/submenu-aim.js.map +0 -1
- package/esm2022/menu/malva-ui-core-menu.js +0 -5
- package/esm2022/menu/malva-ui-core-menu.js.map +0 -1
- package/esm2022/notification/index.js +0 -5
- package/esm2022/notification/index.js.map +0 -1
- package/esm2022/notification/lib/notification-item/notification-item.js +0 -65
- package/esm2022/notification/lib/notification-item/notification-item.js.map +0 -1
- package/esm2022/notification/lib/notification-ref.js +0 -13
- package/esm2022/notification/lib/notification-ref.js.map +0 -1
- package/esm2022/notification/lib/notification.service.js +0 -118
- package/esm2022/notification/lib/notification.service.js.map +0 -1
- package/esm2022/notification/lib/notification.types.js +0 -6
- package/esm2022/notification/lib/notification.types.js.map +0 -1
- package/esm2022/notification/malva-ui-core-notification.js +0 -5
- package/esm2022/notification/malva-ui-core-notification.js.map +0 -1
- package/esm2022/number-input/index.js +0 -2
- package/esm2022/number-input/index.js.map +0 -1
- package/esm2022/number-input/lib/number-input/number-input.js +0 -395
- package/esm2022/number-input/lib/number-input/number-input.js.map +0 -1
- package/esm2022/number-input/malva-ui-core-number-input.js +0 -5
- package/esm2022/number-input/malva-ui-core-number-input.js.map +0 -1
- package/esm2022/page/index.js +0 -15
- package/esm2022/page/index.js.map +0 -1
- package/esm2022/page/lib/page/page-scroll.token.js +0 -9
- package/esm2022/page/lib/page/page-scroll.token.js.map +0 -1
- package/esm2022/page/lib/page/page-snap-controller.js +0 -170
- package/esm2022/page/lib/page/page-snap-controller.js.map +0 -1
- package/esm2022/page/lib/page/page-snap.directive.js +0 -65
- package/esm2022/page/lib/page/page-snap.directive.js.map +0 -1
- package/esm2022/page/lib/page/page.js +0 -173
- package/esm2022/page/lib/page/page.js.map +0 -1
- package/esm2022/page/lib/page-content/page-aside.js +0 -13
- package/esm2022/page/lib/page-content/page-aside.js.map +0 -1
- package/esm2022/page/lib/page-content/page-content.js +0 -72
- package/esm2022/page/lib/page-content/page-content.js.map +0 -1
- package/esm2022/page/lib/page-dock/page-dock.js +0 -128
- package/esm2022/page/lib/page-dock/page-dock.js.map +0 -1
- package/esm2022/page/lib/page-dock/page-dock.slots.js +0 -39
- package/esm2022/page/lib/page-dock/page-dock.slots.js.map +0 -1
- package/esm2022/page/lib/page-header/page-header.directives.js +0 -88
- package/esm2022/page/lib/page-header/page-header.directives.js.map +0 -1
- package/esm2022/page/lib/page-header/page-header.js +0 -124
- package/esm2022/page/lib/page-header/page-header.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell-color.js +0 -193
- package/esm2022/page/lib/page-shell/page-shell-color.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell-css-color.js +0 -207
- package/esm2022/page/lib/page-shell/page-shell-css-color.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell.js +0 -131
- package/esm2022/page/lib/page-shell/page-shell.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell.slots.js +0 -41
- package/esm2022/page/lib/page-shell/page-shell.slots.js.map +0 -1
- package/esm2022/page/lib/page-summary/page-summary-item.js +0 -26
- package/esm2022/page/lib/page-summary/page-summary-item.js.map +0 -1
- package/esm2022/page/lib/page-summary/page-summary.js +0 -87
- package/esm2022/page/lib/page-summary/page-summary.js.map +0 -1
- package/esm2022/page/malva-ui-core-page.js +0 -5
- package/esm2022/page/malva-ui-core-page.js.map +0 -1
- package/esm2022/pagination/index.js +0 -5
- package/esm2022/pagination/index.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.directives.js +0 -58
- package/esm2022/pagination/lib/pagination/pagination.directives.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.js +0 -293
- package/esm2022/pagination/lib/pagination/pagination.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.model.js +0 -1
- package/esm2022/pagination/lib/pagination/pagination.model.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.service.js +0 -108
- package/esm2022/pagination/lib/pagination/pagination.service.js.map +0 -1
- package/esm2022/pagination/malva-ui-core-pagination.js +0 -5
- package/esm2022/pagination/malva-ui-core-pagination.js.map +0 -1
- package/esm2022/pin-input/index.js +0 -3
- package/esm2022/pin-input/index.js.map +0 -1
- package/esm2022/pin-input/lib/pin-input/pin-input-separator.js +0 -31
- package/esm2022/pin-input/lib/pin-input/pin-input-separator.js.map +0 -1
- package/esm2022/pin-input/lib/pin-input/pin-input.js +0 -365
- package/esm2022/pin-input/lib/pin-input/pin-input.js.map +0 -1
- package/esm2022/pin-input/malva-ui-core-pin-input.js +0 -5
- package/esm2022/pin-input/malva-ui-core-pin-input.js.map +0 -1
- package/esm2022/popup/index.js +0 -10
- package/esm2022/popup/index.js.map +0 -1
- package/esm2022/popup/lib/popup/popup.js +0 -500
- package/esm2022/popup/lib/popup/popup.js.map +0 -1
- package/esm2022/popup/lib/popup-container/popup-container.js +0 -169
- package/esm2022/popup/lib/popup-container/popup-container.js.map +0 -1
- package/esm2022/popup/lib/popup-container/popup-container.token.js +0 -9
- package/esm2022/popup/lib/popup-container/popup-container.token.js.map +0 -1
- package/esm2022/popup/lib/popup-content.js +0 -14
- package/esm2022/popup/lib/popup-content.js.map +0 -1
- package/esm2022/popup/lib/popup-header-content.js +0 -26
- package/esm2022/popup/lib/popup-header-content.js.map +0 -1
- package/esm2022/popup/lib/popup-pinned-content.js +0 -25
- package/esm2022/popup/lib/popup-pinned-content.js.map +0 -1
- package/esm2022/popup/lib/popup-positions.js +0 -252
- package/esm2022/popup/lib/popup-positions.js.map +0 -1
- package/esm2022/popup/lib/popup-trigger/popup-trigger.js +0 -308
- package/esm2022/popup/lib/popup-trigger/popup-trigger.js.map +0 -1
- package/esm2022/popup/lib/popup.service.js +0 -188
- package/esm2022/popup/lib/popup.service.js.map +0 -1
- package/esm2022/popup/malva-ui-core-popup.js +0 -5
- package/esm2022/popup/malva-ui-core-popup.js.map +0 -1
- package/esm2022/progress/index.js +0 -2
- package/esm2022/progress/index.js.map +0 -1
- package/esm2022/progress/lib/progress/progress.js +0 -102
- package/esm2022/progress/lib/progress/progress.js.map +0 -1
- package/esm2022/progress/malva-ui-core-progress.js +0 -5
- package/esm2022/progress/malva-ui-core-progress.js.map +0 -1
- package/esm2022/radio/index.js +0 -3
- package/esm2022/radio/index.js.map +0 -1
- package/esm2022/radio/lib/radio/radio.js +0 -134
- package/esm2022/radio/lib/radio/radio.js.map +0 -1
- package/esm2022/radio/lib/radio-group/radio-group.js +0 -176
- package/esm2022/radio/lib/radio-group/radio-group.js.map +0 -1
- package/esm2022/radio/lib/radio-group-token.js +0 -3
- package/esm2022/radio/lib/radio-group-token.js.map +0 -1
- package/esm2022/radio/malva-ui-core-radio.js +0 -5
- package/esm2022/radio/malva-ui-core-radio.js.map +0 -1
- package/esm2022/rating/index.js +0 -2
- package/esm2022/rating/index.js.map +0 -1
- package/esm2022/rating/lib/rating/rating.js +0 -208
- package/esm2022/rating/lib/rating/rating.js.map +0 -1
- package/esm2022/rating/malva-ui-core-rating.js +0 -5
- package/esm2022/rating/malva-ui-core-rating.js.map +0 -1
- package/esm2022/scrollbar/index.js +0 -2
- package/esm2022/scrollbar/index.js.map +0 -1
- package/esm2022/scrollbar/lib/scrollbar/scrollbar.js +0 -388
- package/esm2022/scrollbar/lib/scrollbar/scrollbar.js.map +0 -1
- package/esm2022/scrollbar/malva-ui-core-scrollbar.js +0 -5
- package/esm2022/scrollbar/malva-ui-core-scrollbar.js.map +0 -1
- package/esm2022/search-field/index.js +0 -3
- package/esm2022/search-field/index.js.map +0 -1
- package/esm2022/search-field/lib/search-field/search-field.js +0 -535
- package/esm2022/search-field/lib/search-field/search-field.js.map +0 -1
- package/esm2022/search-field/lib/search-field/search-overlay-content.js +0 -35
- package/esm2022/search-field/lib/search-field/search-overlay-content.js.map +0 -1
- package/esm2022/search-field/malva-ui-core-search-field.js +0 -5
- package/esm2022/search-field/malva-ui-core-search-field.js.map +0 -1
- package/esm2022/segmented/index.js +0 -5
- package/esm2022/segmented/index.js.map +0 -1
- package/esm2022/segmented/lib/segmented/segmented.js +0 -248
- package/esm2022/segmented/lib/segmented/segmented.js.map +0 -1
- package/esm2022/segmented/lib/segmented-item/segmented-item.js +0 -194
- package/esm2022/segmented/lib/segmented-item/segmented-item.js.map +0 -1
- package/esm2022/segmented/lib/segmented-token.js +0 -4
- package/esm2022/segmented/lib/segmented-token.js.map +0 -1
- package/esm2022/segmented/lib/segmented.types.js +0 -1
- package/esm2022/segmented/lib/segmented.types.js.map +0 -1
- package/esm2022/segmented/malva-ui-core-segmented.js +0 -5
- package/esm2022/segmented/malva-ui-core-segmented.js.map +0 -1
- package/esm2022/select/index.js +0 -4
- package/esm2022/select/index.js.map +0 -1
- package/esm2022/select/lib/select/select.js +0 -685
- package/esm2022/select/lib/select/select.js.map +0 -1
- package/esm2022/select/lib/select-option.js +0 -2
- package/esm2022/select/lib/select-option.js.map +0 -1
- package/esm2022/select/lib/select-template.directives.js +0 -34
- package/esm2022/select/lib/select-template.directives.js.map +0 -1
- package/esm2022/select/malva-ui-core-select.js +0 -5
- package/esm2022/select/malva-ui-core-select.js.map +0 -1
- package/esm2022/sidebar/index.js +0 -16
- package/esm2022/sidebar/index.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar/sidebar.js +0 -251
- package/esm2022/sidebar/lib/sidebar/sidebar.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-content.js +0 -37
- package/esm2022/sidebar/lib/sidebar-content.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-context.js +0 -3
- package/esm2022/sidebar/lib/sidebar-context.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-footer.js +0 -20
- package/esm2022/sidebar/lib/sidebar-footer.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js +0 -341
- package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-header.js +0 -20
- package/esm2022/sidebar/lib/sidebar-header.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js +0 -216
- package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-item-host.js +0 -39
- package/esm2022/sidebar/lib/sidebar-item-host.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-item-icon.js +0 -14
- package/esm2022/sidebar/lib/sidebar-item-icon.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-mode.js +0 -1
- package/esm2022/sidebar/lib/sidebar-mode.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js +0 -202
- package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js +0 -159
- package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js +0 -35
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js +0 -107
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js.map +0 -1
- package/esm2022/sidebar/malva-ui-core-sidebar.js +0 -5
- package/esm2022/sidebar/malva-ui-core-sidebar.js.map +0 -1
- package/esm2022/skeleton/index.js +0 -2
- package/esm2022/skeleton/index.js.map +0 -1
- package/esm2022/skeleton/lib/skeleton/skeleton.js +0 -78
- package/esm2022/skeleton/lib/skeleton/skeleton.js.map +0 -1
- package/esm2022/skeleton/malva-ui-core-skeleton.js +0 -5
- package/esm2022/skeleton/malva-ui-core-skeleton.js.map +0 -1
- package/esm2022/slider/index.js +0 -3
- package/esm2022/slider/index.js.map +0 -1
- package/esm2022/slider/lib/slider/slider-tooltip-def.js +0 -31
- package/esm2022/slider/lib/slider/slider-tooltip-def.js.map +0 -1
- package/esm2022/slider/lib/slider/slider.js +0 -468
- package/esm2022/slider/lib/slider/slider.js.map +0 -1
- package/esm2022/slider/malva-ui-core-slider.js +0 -5
- package/esm2022/slider/malva-ui-core-slider.js.map +0 -1
- package/esm2022/split-pane/index.js +0 -4
- package/esm2022/split-pane/index.js.map +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane-panel.js +0 -49
- package/esm2022/split-pane/lib/split-pane/split-pane-panel.js.map +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane.js +0 -290
- package/esm2022/split-pane/lib/split-pane/split-pane.js.map +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane.types.js +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane.types.js.map +0 -1
- package/esm2022/split-pane/malva-ui-core-split-pane.js +0 -5
- package/esm2022/split-pane/malva-ui-core-split-pane.js.map +0 -1
- package/esm2022/status-indicator/index.js +0 -2
- package/esm2022/status-indicator/index.js.map +0 -1
- package/esm2022/status-indicator/lib/status-indicator/status-indicator.js +0 -71
- package/esm2022/status-indicator/lib/status-indicator/status-indicator.js.map +0 -1
- package/esm2022/status-indicator/malva-ui-core-status-indicator.js +0 -5
- package/esm2022/status-indicator/malva-ui-core-status-indicator.js.map +0 -1
- package/esm2022/stepper/index.js +0 -5
- package/esm2022/stepper/index.js.map +0 -1
- package/esm2022/stepper/lib/stepper/step-header.js +0 -46
- package/esm2022/stepper/lib/stepper/step-header.js.map +0 -1
- package/esm2022/stepper/lib/stepper/step.js +0 -65
- package/esm2022/stepper/lib/stepper/step.js.map +0 -1
- package/esm2022/stepper/lib/stepper/stepper-token.js +0 -4
- package/esm2022/stepper/lib/stepper/stepper-token.js.map +0 -1
- package/esm2022/stepper/lib/stepper/stepper.js +0 -216
- package/esm2022/stepper/lib/stepper/stepper.js.map +0 -1
- package/esm2022/stepper/lib/stepper/stepper.types.js +0 -1
- package/esm2022/stepper/lib/stepper/stepper.types.js.map +0 -1
- package/esm2022/stepper/malva-ui-core-stepper.js +0 -5
- package/esm2022/stepper/malva-ui-core-stepper.js.map +0 -1
- package/esm2022/switch/index.js +0 -3
- package/esm2022/switch/index.js.map +0 -1
- package/esm2022/switch/lib/switch/switch.js +0 -190
- package/esm2022/switch/lib/switch/switch.js.map +0 -1
- package/esm2022/switch/lib/switch-group/switch-group.js +0 -68
- package/esm2022/switch/lib/switch-group/switch-group.js.map +0 -1
- package/esm2022/switch/lib/switch-group-token.js +0 -3
- package/esm2022/switch/lib/switch-group-token.js.map +0 -1
- package/esm2022/switch/malva-ui-core-switch.js +0 -5
- package/esm2022/switch/malva-ui-core-switch.js.map +0 -1
- package/esm2022/tabs/index.js +0 -9
- package/esm2022/tabs/index.js.map +0 -1
- package/esm2022/tabs/lib/tab/tab.js +0 -72
- package/esm2022/tabs/lib/tab/tab.js.map +0 -1
- package/esm2022/tabs/lib/tab-content/tab-content.js +0 -19
- package/esm2022/tabs/lib/tab-content/tab-content.js.map +0 -1
- package/esm2022/tabs/lib/tab-content-def.js +0 -14
- package/esm2022/tabs/lib/tab-content-def.js.map +0 -1
- package/esm2022/tabs/lib/tab-def.js +0 -17
- package/esm2022/tabs/lib/tab-def.js.map +0 -1
- package/esm2022/tabs/lib/tab-group-token.js +0 -3
- package/esm2022/tabs/lib/tab-group-token.js.map +0 -1
- package/esm2022/tabs/lib/tab-item/tab-item.js +0 -44
- package/esm2022/tabs/lib/tab-item/tab-item.js.map +0 -1
- package/esm2022/tabs/lib/tabs/tabs.js +0 -542
- package/esm2022/tabs/lib/tabs/tabs.js.map +0 -1
- package/esm2022/tabs/lib/tabs.service.js +0 -83
- package/esm2022/tabs/lib/tabs.service.js.map +0 -1
- package/esm2022/tabs/malva-ui-core-tabs.js +0 -5
- package/esm2022/tabs/malva-ui-core-tabs.js.map +0 -1
- package/esm2022/textarea/index.js +0 -2
- package/esm2022/textarea/index.js.map +0 -1
- package/esm2022/textarea/lib/textarea/textarea.js +0 -194
- package/esm2022/textarea/lib/textarea/textarea.js.map +0 -1
- package/esm2022/textarea/malva-ui-core-textarea.js +0 -5
- package/esm2022/textarea/malva-ui-core-textarea.js.map +0 -1
- package/esm2022/tile/index.js +0 -3
- package/esm2022/tile/index.js.map +0 -1
- package/esm2022/tile/lib/tile/tile.js +0 -39
- package/esm2022/tile/lib/tile/tile.js.map +0 -1
- package/esm2022/tile/lib/tile-header.js +0 -14
- package/esm2022/tile/lib/tile-header.js.map +0 -1
- package/esm2022/tile/malva-ui-core-tile.js +0 -5
- package/esm2022/tile/malva-ui-core-tile.js.map +0 -1
- package/esm2022/time-picker/index.js +0 -2
- package/esm2022/time-picker/index.js.map +0 -1
- package/esm2022/time-picker/lib/time-picker/time-picker.js +0 -310
- package/esm2022/time-picker/lib/time-picker/time-picker.js.map +0 -1
- package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js +0 -216
- package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js.map +0 -1
- package/esm2022/time-picker/malva-ui-core-time-picker.js +0 -5
- package/esm2022/time-picker/malva-ui-core-time-picker.js.map +0 -1
- package/esm2022/timeline/index.js +0 -6
- package/esm2022/timeline/index.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline-item-icon.js +0 -31
- package/esm2022/timeline/lib/timeline/timeline-item-icon.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline-item-meta.js +0 -31
- package/esm2022/timeline/lib/timeline/timeline-item-meta.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline-item.js +0 -69
- package/esm2022/timeline/lib/timeline/timeline-item.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline.js +0 -36
- package/esm2022/timeline/lib/timeline/timeline.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline.types.js +0 -1
- package/esm2022/timeline/lib/timeline/timeline.types.js.map +0 -1
- package/esm2022/timeline/malva-ui-core-timeline.js +0 -5
- package/esm2022/timeline/malva-ui-core-timeline.js.map +0 -1
- package/esm2022/title/index.js +0 -2
- package/esm2022/title/index.js.map +0 -1
- package/esm2022/title/lib/title/title.js +0 -171
- package/esm2022/title/lib/title/title.js.map +0 -1
- package/esm2022/title/malva-ui-core-title.js +0 -5
- package/esm2022/title/malva-ui-core-title.js.map +0 -1
- package/esm2022/toast/index.js +0 -13
- package/esm2022/toast/index.js.map +0 -1
- package/esm2022/toast/lib/abstract-toast-container.js +0 -50
- package/esm2022/toast/lib/abstract-toast-container.js.map +0 -1
- package/esm2022/toast/lib/abstract-toast-item.js +0 -75
- package/esm2022/toast/lib/abstract-toast-item.js.map +0 -1
- package/esm2022/toast/lib/abstract-toast.service.js +0 -176
- package/esm2022/toast/lib/abstract-toast.service.js.map +0 -1
- package/esm2022/toast/lib/toast-container/toast-container.js +0 -61
- package/esm2022/toast/lib/toast-container/toast-container.js.map +0 -1
- package/esm2022/toast/lib/toast-item/toast-item.js +0 -62
- package/esm2022/toast/lib/toast-item/toast-item.js.map +0 -1
- package/esm2022/toast/lib/toast-ref.js +0 -54
- package/esm2022/toast/lib/toast-ref.js.map +0 -1
- package/esm2022/toast/lib/toast-timer.js +0 -37
- package/esm2022/toast/lib/toast-timer.js.map +0 -1
- package/esm2022/toast/lib/toast.directives.js +0 -76
- package/esm2022/toast/lib/toast.directives.js.map +0 -1
- package/esm2022/toast/lib/toast.service.js +0 -127
- package/esm2022/toast/lib/toast.service.js.map +0 -1
- package/esm2022/toast/lib/toast.types.js +0 -39
- package/esm2022/toast/lib/toast.types.js.map +0 -1
- package/esm2022/toast/malva-ui-core-toast.js +0 -5
- package/esm2022/toast/malva-ui-core-toast.js.map +0 -1
- package/esm2022/tokenizer/index.js +0 -4
- package/esm2022/tokenizer/index.js.map +0 -1
- package/esm2022/tokenizer/lib/token/token.js +0 -123
- package/esm2022/tokenizer/lib/token/token.js.map +0 -1
- package/esm2022/tokenizer/lib/token-template.js +0 -23
- package/esm2022/tokenizer/lib/token-template.js.map +0 -1
- package/esm2022/tokenizer/lib/tokenizer/tokenizer.js +0 -324
- package/esm2022/tokenizer/lib/tokenizer/tokenizer.js.map +0 -1
- package/esm2022/tokenizer/malva-ui-core-tokenizer.js +0 -5
- package/esm2022/tokenizer/malva-ui-core-tokenizer.js.map +0 -1
- package/esm2022/toolbar/index.js +0 -4
- package/esm2022/toolbar/index.js.map +0 -1
- package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js +0 -13
- package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js.map +0 -1
- package/esm2022/toolbar/lib/toolbar/toolbar-widget.js +0 -106
- package/esm2022/toolbar/lib/toolbar/toolbar-widget.js.map +0 -1
- package/esm2022/toolbar/lib/toolbar/toolbar.js +0 -19
- package/esm2022/toolbar/lib/toolbar/toolbar.js.map +0 -1
- package/esm2022/toolbar/malva-ui-core-toolbar.js +0 -5
- package/esm2022/toolbar/malva-ui-core-toolbar.js.map +0 -1
- package/esm2022/tooltip/index.js +0 -4
- package/esm2022/tooltip/index.js.map +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip-panel.js +0 -69
- package/esm2022/tooltip/lib/tooltip/tooltip-panel.js.map +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.js +0 -352
- package/esm2022/tooltip/lib/tooltip/tooltip.js.map +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.types.js +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.types.js.map +0 -1
- package/esm2022/tooltip/malva-ui-core-tooltip.js +0 -5
- package/esm2022/tooltip/malva-ui-core-tooltip.js.map +0 -1
- package/esm2022/tree/index.js +0 -5
- package/esm2022/tree/index.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-context.js +0 -7
- package/esm2022/tree/lib/tree/tree-context.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-node-def.js +0 -34
- package/esm2022/tree/lib/tree/tree-node-def.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-node.js +0 -1
- package/esm2022/tree/lib/tree/tree-node.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-subtree.js +0 -107
- package/esm2022/tree/lib/tree/tree-subtree.js.map +0 -1
- package/esm2022/tree/lib/tree/tree.js +0 -362
- package/esm2022/tree/lib/tree/tree.js.map +0 -1
- package/esm2022/tree/malva-ui-core-tree.js +0 -5
- package/esm2022/tree/malva-ui-core-tree.js.map +0 -1
- package/expand/index.d.ts +0 -2
- package/expand/lib/expand/expand-content.d.ts +0 -26
- package/expand/lib/expand/expand.d.ts +0 -74
- package/expand/malva-ui-core-expand.d.ts +0 -5
- package/file-upload/index.d.ts +0 -4
- package/file-upload/lib/file-upload/file-upload.d.ts +0 -138
- package/file-upload/lib/file-upload/file-upload.types.d.ts +0 -42
- package/file-upload/lib/file-upload-action.d.ts +0 -53
- package/file-upload/lib/file-upload-item/file-upload-item.d.ts +0 -30
- package/file-upload/malva-ui-core-file-upload.d.ts +0 -5
- package/filter/index.d.ts +0 -3
- package/filter/lib/filter/filter.d.ts +0 -156
- package/filter/lib/filter.types.d.ts +0 -75
- package/filter/lib/smart-filter-bar/smart-filter-bar.d.ts +0 -153
- package/filter/malva-ui-core-filter.d.ts +0 -5
- package/form/index.d.ts +0 -6
- package/form/lib/fieldset/fieldset.d.ts +0 -58
- package/form/lib/fieldset-span.d.ts +0 -28
- package/form/lib/form/form.d.ts +0 -37
- package/form/lib/form-actions.d.ts +0 -20
- package/form/lib/form-gap.d.ts +0 -5
- package/form/lib/form-header.d.ts +0 -18
- package/form/lib/form.types.d.ts +0 -13
- package/form/malva-ui-core-form.d.ts +0 -5
- package/form-utils/index.d.ts +0 -15
- package/form-utils/lib/aria-value-bridge.d.ts +0 -45
- package/form-utils/lib/description/description.d.ts +0 -16
- package/form-utils/lib/focusable-group-base.d.ts +0 -76
- package/form-utils/lib/form-control-base/signal-form-control-base.d.ts +0 -159
- package/form-utils/lib/form-control-sides.d.ts +0 -20
- package/form-utils/lib/form-control-wrapper/form-control-wrapper-control.d.ts +0 -6
- package/form-utils/lib/form-control-wrapper/form-control-wrapper.d.ts +0 -20
- package/form-utils/lib/form-field/form-field.d.ts +0 -68
- package/form-utils/lib/hint/hint.d.ts +0 -5
- package/form-utils/lib/label/label.d.ts +0 -22
- package/form-utils/lib/message/message.d.ts +0 -7
- package/form-utils/lib/models/error-display-strategy.d.ts +0 -1
- package/form-utils/lib/models/form-control-connector.d.ts +0 -41
- package/form-utils/lib/models/form-state.d.ts +0 -1
- package/form-utils/lib/selection.service.d.ts +0 -27
- package/form-utils/malva-ui-core-form-utils.d.ts +0 -5
- package/form-utils/testing/index.d.ts +0 -1
- package/form-utils/testing/lib/forms-binding-matrix.d.ts +0 -47
- package/form-utils/testing/malva-ui-core-form-utils-testing.d.ts +0 -5
- package/index.d.ts +0 -69
- package/input/index.d.ts +0 -3
- package/input/lib/input/input-native.d.ts +0 -36
- package/input/lib/input/input-value-accessor.d.ts +0 -11
- package/input/lib/input/input.d.ts +0 -189
- package/input/lib/input/password-strength.d.ts +0 -34
- package/input/malva-ui-core-input.d.ts +0 -5
- package/kbd/index.d.ts +0 -1
- package/kbd/lib/kbd/kbd.d.ts +0 -52
- package/kbd/malva-ui-core-kbd.d.ts +0 -5
- package/layout/index.d.ts +0 -4
- package/layout/lib/layout/directives/MlvLayoutSide.d.ts +0 -6
- package/layout/lib/layout/directives/MlvLayoutTop.d.ts +0 -6
- package/layout/lib/layout/layout.d.ts +0 -20
- package/layout/lib/layout/services/theme.service.d.ts +0 -33
- package/layout/malva-ui-core-layout.d.ts +0 -5
- package/link/index.d.ts +0 -2
- package/link/lib/link/link.d.ts +0 -15
- package/link/lib/link/link.directives.d.ts +0 -10
- package/link/malva-ui-core-link.d.ts +0 -5
- package/list/index.d.ts +0 -13
- package/list/lib/list/list.d.ts +0 -25
- package/list/lib/list-item/list-item.d.ts +0 -67
- package/list/lib/list-item-actions.d.ts +0 -12
- package/list/lib/list-item-byline.d.ts +0 -5
- package/list/lib/list-item-group/list-item-group.d.ts +0 -11
- package/list/lib/list-item-link/list-item-link.d.ts +0 -8
- package/list/lib/list-item-media.d.ts +0 -5
- package/list/lib/list-item-meta.d.ts +0 -5
- package/list/lib/list-item-prefix.d.ts +0 -5
- package/list/lib/list-item-suffix.d.ts +0 -5
- package/list/lib/list-item-template.d.ts +0 -10
- package/list/lib/list-item-title.d.ts +0 -5
- package/list/lib/list-selectable.d.ts +0 -73
- package/list/malva-ui-core-list.d.ts +0 -5
- package/loader/index.d.ts +0 -1
- package/loader/lib/loader/loader.d.ts +0 -84
- package/loader/malva-ui-core-loader.d.ts +0 -5
- package/malva-ui-core.d.ts +0 -5
- package/menu/index.d.ts +0 -9
- package/menu/lib/menu/menu-group-label.d.ts +0 -22
- package/menu/lib/menu/menu-group.d.ts +0 -27
- package/menu/lib/menu/menu-item.d.ts +0 -76
- package/menu/lib/menu/menu-separator.d.ts +0 -18
- package/menu/lib/menu/menu-trigger.d.ts +0 -255
- package/menu/lib/menu/menu.d.ts +0 -149
- package/menu/lib/menu/menu.types.d.ts +0 -13
- package/menu/lib/menu/menubar.d.ts +0 -131
- package/menu/lib/menu/menubar.types.d.ts +0 -82
- package/menu/lib/menu/submenu-aim.d.ts +0 -10
- package/menu/malva-ui-core-menu.d.ts +0 -5
- package/notification/index.d.ts +0 -4
- package/notification/lib/notification-item/notification-item.d.ts +0 -20
- package/notification/lib/notification-ref.d.ts +0 -12
- package/notification/lib/notification.service.d.ts +0 -43
- package/notification/lib/notification.types.d.ts +0 -52
- package/notification/malva-ui-core-notification.d.ts +0 -5
- package/number-input/index.d.ts +0 -1
- package/number-input/lib/number-input/number-input.d.ts +0 -162
- package/number-input/malva-ui-core-number-input.d.ts +0 -5
- package/page/index.d.ts +0 -14
- package/page/lib/page/page-scroll.token.d.ts +0 -19
- package/page/lib/page/page-snap-controller.d.ts +0 -87
- package/page/lib/page/page-snap.directive.d.ts +0 -40
- package/page/lib/page/page.d.ts +0 -74
- package/page/lib/page-content/page-aside.d.ts +0 -7
- package/page/lib/page-content/page-content.d.ts +0 -37
- package/page/lib/page-dock/page-dock.d.ts +0 -50
- package/page/lib/page-dock/page-dock.slots.d.ts +0 -16
- package/page/lib/page-header/page-header.d.ts +0 -77
- package/page/lib/page-header/page-header.directives.d.ts +0 -50
- package/page/lib/page-shell/page-shell-color.d.ts +0 -48
- package/page/lib/page-shell/page-shell-css-color.d.ts +0 -20
- package/page/lib/page-shell/page-shell.d.ts +0 -44
- package/page/lib/page-shell/page-shell.slots.d.ts +0 -16
- package/page/lib/page-summary/page-summary-item.d.ts +0 -11
- package/page/lib/page-summary/page-summary.d.ts +0 -36
- package/page/malva-ui-core-page.d.ts +0 -5
- package/pagination/index.d.ts +0 -4
- package/pagination/lib/pagination/pagination.d.ts +0 -182
- package/pagination/lib/pagination/pagination.directives.d.ts +0 -44
- package/pagination/lib/pagination/pagination.model.d.ts +0 -6
- package/pagination/lib/pagination/pagination.service.d.ts +0 -26
- package/pagination/malva-ui-core-pagination.d.ts +0 -5
- package/pin-input/index.d.ts +0 -2
- package/pin-input/lib/pin-input/pin-input-separator.d.ts +0 -24
- package/pin-input/lib/pin-input/pin-input.d.ts +0 -176
- package/pin-input/malva-ui-core-pin-input.d.ts +0 -5
- package/popup/index.d.ts +0 -9
- package/popup/lib/popup/popup.d.ts +0 -343
- package/popup/lib/popup-container/popup-container.d.ts +0 -61
- package/popup/lib/popup-container/popup-container.token.d.ts +0 -34
- package/popup/lib/popup-content.d.ts +0 -6
- package/popup/lib/popup-header-content.d.ts +0 -18
- package/popup/lib/popup-pinned-content.d.ts +0 -17
- package/popup/lib/popup-positions.d.ts +0 -105
- package/popup/lib/popup-trigger/popup-trigger.d.ts +0 -102
- package/popup/lib/popup.service.d.ts +0 -159
- package/popup/malva-ui-core-popup.d.ts +0 -5
- package/progress/index.d.ts +0 -1
- package/progress/lib/progress/progress.d.ts +0 -69
- package/progress/malva-ui-core-progress.d.ts +0 -5
- package/radio/index.d.ts +0 -2
- package/radio/lib/radio/radio.d.ts +0 -87
- package/radio/lib/radio-group/radio-group.d.ts +0 -35
- package/radio/lib/radio-group-token.d.ts +0 -7
- package/radio/malva-ui-core-radio.d.ts +0 -5
- package/rating/index.d.ts +0 -1
- package/rating/lib/rating/rating.d.ts +0 -100
- package/rating/malva-ui-core-rating.d.ts +0 -5
- package/scrollbar/index.d.ts +0 -1
- package/scrollbar/lib/scrollbar/scrollbar.d.ts +0 -166
- package/scrollbar/malva-ui-core-scrollbar.d.ts +0 -5
- package/search-field/index.d.ts +0 -2
- package/search-field/lib/search-field/search-field.d.ts +0 -347
- package/search-field/lib/search-field/search-overlay-content.d.ts +0 -59
- package/search-field/malva-ui-core-search-field.d.ts +0 -5
- package/segmented/index.d.ts +0 -4
- package/segmented/lib/segmented/segmented.d.ts +0 -80
- package/segmented/lib/segmented-item/segmented-item.d.ts +0 -89
- package/segmented/lib/segmented-token.d.ts +0 -22
- package/segmented/lib/segmented.types.d.ts +0 -9
- package/segmented/malva-ui-core-segmented.d.ts +0 -5
- package/select/index.d.ts +0 -3
- package/select/lib/select/select.d.ts +0 -379
- package/select/lib/select-option.d.ts +0 -1
- package/select/lib/select-template.directives.d.ts +0 -14
- package/select/malva-ui-core-select.d.ts +0 -5
- package/sidebar/index.d.ts +0 -15
- package/sidebar/lib/sidebar/sidebar.d.ts +0 -134
- package/sidebar/lib/sidebar-content.d.ts +0 -11
- package/sidebar/lib/sidebar-context.d.ts +0 -23
- package/sidebar/lib/sidebar-footer.d.ts +0 -9
- package/sidebar/lib/sidebar-group/sidebar-group.d.ts +0 -127
- package/sidebar/lib/sidebar-header.d.ts +0 -9
- package/sidebar/lib/sidebar-item/sidebar-item.d.ts +0 -104
- package/sidebar/lib/sidebar-item-host.d.ts +0 -18
- package/sidebar/lib/sidebar-item-icon.d.ts +0 -6
- package/sidebar/lib/sidebar-mode.d.ts +0 -2
- package/sidebar/lib/sidebar-rail/sidebar-rail.d.ts +0 -54
- package/sidebar/lib/sidebar-trigger/sidebar-trigger.d.ts +0 -67
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.d.ts +0 -54
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.d.ts +0 -19
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.types.d.ts +0 -20
- package/sidebar/malva-ui-core-sidebar.d.ts +0 -5
- package/skeleton/index.d.ts +0 -1
- package/skeleton/lib/skeleton/skeleton.d.ts +0 -60
- package/skeleton/malva-ui-core-skeleton.d.ts +0 -5
- package/slider/index.d.ts +0 -2
- package/slider/lib/slider/slider-tooltip-def.d.ts +0 -39
- package/slider/lib/slider/slider.d.ts +0 -171
- package/slider/malva-ui-core-slider.d.ts +0 -5
- package/split-pane/index.d.ts +0 -3
- package/split-pane/lib/split-pane/split-pane-panel.d.ts +0 -34
- package/split-pane/lib/split-pane/split-pane.d.ts +0 -98
- package/split-pane/lib/split-pane/split-pane.types.d.ts +0 -7
- package/split-pane/malva-ui-core-split-pane.d.ts +0 -5
- package/status-indicator/index.d.ts +0 -1
- package/status-indicator/lib/status-indicator/status-indicator.d.ts +0 -61
- package/status-indicator/malva-ui-core-status-indicator.d.ts +0 -5
- package/stepper/index.d.ts +0 -4
- package/stepper/lib/stepper/step-header.d.ts +0 -34
- package/stepper/lib/stepper/step.d.ts +0 -51
- package/stepper/lib/stepper/stepper-token.d.ts +0 -13
- package/stepper/lib/stepper/stepper.d.ts +0 -98
- package/stepper/lib/stepper/stepper.types.d.ts +0 -4
- package/stepper/malva-ui-core-stepper.d.ts +0 -5
- package/switch/index.d.ts +0 -2
- package/switch/lib/switch/switch.d.ts +0 -118
- package/switch/lib/switch-group/switch-group.d.ts +0 -24
- package/switch/lib/switch-group-token.d.ts +0 -6
- package/switch/malva-ui-core-switch.d.ts +0 -5
- package/tabs/index.d.ts +0 -8
- package/tabs/lib/tab/tab.d.ts +0 -46
- package/tabs/lib/tab-content/tab-content.d.ts +0 -11
- package/tabs/lib/tab-content-def.d.ts +0 -6
- package/tabs/lib/tab-def.d.ts +0 -11
- package/tabs/lib/tab-group-token.d.ts +0 -10
- package/tabs/lib/tab-item/tab-item.d.ts +0 -28
- package/tabs/lib/tabs/tabs.d.ts +0 -202
- package/tabs/lib/tabs.service.d.ts +0 -24
- package/tabs/malva-ui-core-tabs.d.ts +0 -5
- package/textarea/index.d.ts +0 -1
- package/textarea/lib/textarea/textarea.d.ts +0 -77
- package/textarea/malva-ui-core-textarea.d.ts +0 -5
- package/tile/index.d.ts +0 -2
- package/tile/lib/tile/tile.d.ts +0 -20
- package/tile/lib/tile-header.d.ts +0 -6
- package/tile/malva-ui-core-tile.d.ts +0 -5
- package/time-picker/index.d.ts +0 -1
- package/time-picker/lib/time-picker/time-picker.d.ts +0 -135
- package/time-picker/lib/time-picker-column/time-picker-column.d.ts +0 -111
- package/time-picker/malva-ui-core-time-picker.d.ts +0 -5
- package/timeline/index.d.ts +0 -5
- package/timeline/lib/timeline/timeline-item-icon.d.ts +0 -24
- package/timeline/lib/timeline/timeline-item-meta.d.ts +0 -24
- package/timeline/lib/timeline/timeline-item.d.ts +0 -52
- package/timeline/lib/timeline/timeline.d.ts +0 -27
- package/timeline/lib/timeline/timeline.types.d.ts +0 -18
- package/timeline/malva-ui-core-timeline.d.ts +0 -5
- package/title/index.d.ts +0 -1
- package/title/lib/title/title.d.ts +0 -63
- package/title/malva-ui-core-title.d.ts +0 -5
- package/toast/index.d.ts +0 -10
- package/toast/lib/abstract-toast-container.d.ts +0 -29
- package/toast/lib/abstract-toast-item.d.ts +0 -44
- package/toast/lib/abstract-toast.service.d.ts +0 -75
- package/toast/lib/toast-container/toast-container.d.ts +0 -23
- package/toast/lib/toast-item/toast-item.d.ts +0 -25
- package/toast/lib/toast-ref.d.ts +0 -33
- package/toast/lib/toast-timer.d.ts +0 -24
- package/toast/lib/toast.directives.d.ts +0 -13
- package/toast/lib/toast.service.d.ts +0 -41
- package/toast/lib/toast.types.d.ts +0 -139
- package/toast/malva-ui-core-toast.d.ts +0 -5
- package/tokenizer/index.d.ts +0 -3
- package/tokenizer/lib/token/token.d.ts +0 -60
- package/tokenizer/lib/token-template.d.ts +0 -29
- package/tokenizer/lib/tokenizer/tokenizer.d.ts +0 -109
- package/tokenizer/malva-ui-core-tokenizer.d.ts +0 -5
- package/toolbar/index.d.ts +0 -3
- package/toolbar/lib/toolbar/toolbar-spacer.d.ts +0 -5
- package/toolbar/lib/toolbar/toolbar-widget.d.ts +0 -75
- package/toolbar/lib/toolbar/toolbar.d.ts +0 -8
- package/toolbar/malva-ui-core-toolbar.d.ts +0 -5
- package/tooltip/index.d.ts +0 -3
- package/tooltip/lib/tooltip/tooltip-panel.d.ts +0 -26
- package/tooltip/lib/tooltip/tooltip.d.ts +0 -148
- package/tooltip/lib/tooltip/tooltip.types.d.ts +0 -17
- package/tooltip/malva-ui-core-tooltip.d.ts +0 -5
- package/tree/index.d.ts +0 -4
- package/tree/lib/tree/tree-context.d.ts +0 -62
- package/tree/lib/tree/tree-node-def.d.ts +0 -33
- package/tree/lib/tree/tree-node.d.ts +0 -45
- package/tree/lib/tree/tree-subtree.d.ts +0 -63
- package/tree/lib/tree/tree.d.ts +0 -156
- package/tree/malva-ui-core-tree.d.ts +0 -5
|
@@ -0,0 +1,1488 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Directive, InjectionToken, inject, input, computed, model, output, signal, contentChild, effect, DestroyRef, viewChild, ChangeDetectionStrategy, ViewEncapsulation, Component, NgZone, Injectable, ElementRef, ViewContainerRef } from '@angular/core';
|
|
3
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
6
|
+
import { OverlayModule, Overlay } from '@angular/cdk/overlay';
|
|
7
|
+
import * as i1 from '@angular/cdk/a11y';
|
|
8
|
+
import { A11yModule } from '@angular/cdk/a11y';
|
|
9
|
+
import { PortalModule, TemplatePortal } from '@angular/cdk/portal';
|
|
10
|
+
import { MlvScrollbar } from '@malva-ui/core/scrollbar';
|
|
11
|
+
import { MlvStructural, MlvBreakpointService, MlvRtlService } from '@malva-ui/cdk/utils';
|
|
12
|
+
import { MlvDensityService, MLV_DENSITY_CONTEXT } from '@malva-ui/cdk/density';
|
|
13
|
+
import { MLV_POPUP_I18N } from '@malva-ui/i18n';
|
|
14
|
+
import { MlvButtonClose } from '@malva-ui/core/button';
|
|
15
|
+
|
|
16
|
+
class MlvPopupContent extends MlvStructural {
|
|
17
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupContent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
18
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPopupContent, isStandalone: true, selector: "[mlvPopupContent]", usesInheritance: true, ngImport: i0 });
|
|
19
|
+
}
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupContent, decorators: [{
|
|
21
|
+
type: Directive,
|
|
22
|
+
args: [{
|
|
23
|
+
selector: '[mlvPopupContent]',
|
|
24
|
+
}]
|
|
25
|
+
}] });
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Marks an `<ng-template>` as extra chrome rendered inside the popup's
|
|
29
|
+
* full-screen mobile header, directly beneath the title/close row.
|
|
30
|
+
*
|
|
31
|
+
* Generic and reusable: the popup renders it only while
|
|
32
|
+
* {@link MlvPopup.isFullscreen} is `true`, and no-ops when the slot is
|
|
33
|
+
* absent or the popup is trigger-anchored. Consumers use it to move controls
|
|
34
|
+
* that must stay reachable inside the full-screen sheet — e.g. `mlv-combobox`
|
|
35
|
+
* projects an in-sheet search input here so type-to-filter keeps working when
|
|
36
|
+
* the solid backdrop and focus trap would otherwise occlude/block the outer
|
|
37
|
+
* trigger input.
|
|
38
|
+
*/
|
|
39
|
+
class MlvPopupHeaderContent extends MlvStructural {
|
|
40
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupHeaderContent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
41
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPopupHeaderContent, isStandalone: true, selector: "[mlvPopupHeaderContent]", usesInheritance: true, ngImport: i0 });
|
|
42
|
+
}
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupHeaderContent, decorators: [{
|
|
44
|
+
type: Directive,
|
|
45
|
+
args: [{
|
|
46
|
+
selector: '[mlvPopupHeaderContent]',
|
|
47
|
+
}]
|
|
48
|
+
}] });
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Marks an `<ng-template>` as extra chrome pinned above the popup's scroll
|
|
52
|
+
* region in every mode — never scrolls with the content.
|
|
53
|
+
*
|
|
54
|
+
* Generic and reusable: the popup stamps it directly above
|
|
55
|
+
* `.mlv-popup__scrollbar` whether the panel is trigger-anchored or a
|
|
56
|
+
* full-screen sheet (where it sits below the header), and no-ops when the slot
|
|
57
|
+
* is absent. Consumers use it for chrome that must stay visible no matter how
|
|
58
|
+
* far the content scrolls — e.g. `mlv-select` projects its in-dropdown search
|
|
59
|
+
* field here so a long option list cannot push it out of view.
|
|
60
|
+
*/
|
|
61
|
+
class MlvPopupPinnedContent extends MlvStructural {
|
|
62
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupPinnedContent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
63
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvPopupPinnedContent, isStandalone: true, selector: "[mlvPopupPinnedContent]", usesInheritance: true, ngImport: i0 });
|
|
64
|
+
}
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupPinnedContent, decorators: [{
|
|
66
|
+
type: Directive,
|
|
67
|
+
args: [{
|
|
68
|
+
selector: '[mlvPopupPinnedContent]',
|
|
69
|
+
}]
|
|
70
|
+
}] });
|
|
71
|
+
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// Default position map
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
/**
|
|
76
|
+
* The default named-position map used when no custom `POPUP_POSITIONS` provider
|
|
77
|
+
* is registered. Contains all twelve standard popup placements.
|
|
78
|
+
*
|
|
79
|
+
* Override globally with `providePopupPositions()`, or per-component via
|
|
80
|
+
* the `POPUP_POSITIONS` injection token.
|
|
81
|
+
*/
|
|
82
|
+
const POPUP_POSITION_MAP = new Map([
|
|
83
|
+
// ── Top ──────────────────────────────────────────────────────────────────
|
|
84
|
+
[
|
|
85
|
+
'top-start',
|
|
86
|
+
{
|
|
87
|
+
originX: 'start',
|
|
88
|
+
originY: 'top',
|
|
89
|
+
overlayX: 'start',
|
|
90
|
+
overlayY: 'bottom',
|
|
91
|
+
offsetY: -8,
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
[
|
|
95
|
+
'top',
|
|
96
|
+
{
|
|
97
|
+
originX: 'center',
|
|
98
|
+
originY: 'top',
|
|
99
|
+
overlayX: 'center',
|
|
100
|
+
overlayY: 'bottom',
|
|
101
|
+
offsetY: -8,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
[
|
|
105
|
+
'top-end',
|
|
106
|
+
{
|
|
107
|
+
originX: 'end',
|
|
108
|
+
originY: 'top',
|
|
109
|
+
overlayX: 'end',
|
|
110
|
+
overlayY: 'bottom',
|
|
111
|
+
offsetY: -8,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
// ── Bottom ───────────────────────────────────────────────────────────────
|
|
115
|
+
[
|
|
116
|
+
'bottom-start',
|
|
117
|
+
{
|
|
118
|
+
originX: 'start',
|
|
119
|
+
originY: 'bottom',
|
|
120
|
+
overlayX: 'start',
|
|
121
|
+
overlayY: 'top',
|
|
122
|
+
offsetY: 8,
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
[
|
|
126
|
+
'bottom',
|
|
127
|
+
{
|
|
128
|
+
originX: 'center',
|
|
129
|
+
originY: 'bottom',
|
|
130
|
+
overlayX: 'center',
|
|
131
|
+
overlayY: 'top',
|
|
132
|
+
offsetY: 8,
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
[
|
|
136
|
+
'bottom-end',
|
|
137
|
+
{
|
|
138
|
+
originX: 'end',
|
|
139
|
+
originY: 'bottom',
|
|
140
|
+
overlayX: 'end',
|
|
141
|
+
overlayY: 'top',
|
|
142
|
+
offsetY: 8,
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
// ── Left ─────────────────────────────────────────────────────────────────
|
|
146
|
+
[
|
|
147
|
+
'left-start',
|
|
148
|
+
{
|
|
149
|
+
originX: 'start',
|
|
150
|
+
originY: 'top',
|
|
151
|
+
overlayX: 'end',
|
|
152
|
+
overlayY: 'top',
|
|
153
|
+
offsetX: -8,
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
[
|
|
157
|
+
'left',
|
|
158
|
+
{
|
|
159
|
+
originX: 'start',
|
|
160
|
+
originY: 'center',
|
|
161
|
+
overlayX: 'end',
|
|
162
|
+
overlayY: 'center',
|
|
163
|
+
offsetX: -8,
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
[
|
|
167
|
+
'left-end',
|
|
168
|
+
{
|
|
169
|
+
originX: 'start',
|
|
170
|
+
originY: 'bottom',
|
|
171
|
+
overlayX: 'end',
|
|
172
|
+
overlayY: 'bottom',
|
|
173
|
+
offsetX: -8,
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
// ── Right ────────────────────────────────────────────────────────────────
|
|
177
|
+
[
|
|
178
|
+
'right-start',
|
|
179
|
+
{
|
|
180
|
+
originX: 'end',
|
|
181
|
+
originY: 'top',
|
|
182
|
+
overlayX: 'start',
|
|
183
|
+
overlayY: 'top',
|
|
184
|
+
offsetX: 8,
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
[
|
|
188
|
+
'right',
|
|
189
|
+
{
|
|
190
|
+
originX: 'end',
|
|
191
|
+
originY: 'center',
|
|
192
|
+
overlayX: 'start',
|
|
193
|
+
overlayY: 'center',
|
|
194
|
+
offsetX: 8,
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
[
|
|
198
|
+
'right-end',
|
|
199
|
+
{
|
|
200
|
+
originX: 'end',
|
|
201
|
+
originY: 'bottom',
|
|
202
|
+
overlayX: 'start',
|
|
203
|
+
overlayY: 'bottom',
|
|
204
|
+
offsetX: 8,
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
]);
|
|
208
|
+
// ---------------------------------------------------------------------------
|
|
209
|
+
// Injection token
|
|
210
|
+
// ---------------------------------------------------------------------------
|
|
211
|
+
/**
|
|
212
|
+
* Injection token that holds the active named-position map.
|
|
213
|
+
*
|
|
214
|
+
* Defaults to {@link POPUP_POSITION_MAP}. Override at the application or
|
|
215
|
+
* component level with {@link providePopupPositions} to add, remove, or
|
|
216
|
+
* replace named positions.
|
|
217
|
+
*
|
|
218
|
+
* @example Override globally in app providers
|
|
219
|
+
* ```ts
|
|
220
|
+
* providePopupPositions(new Map([
|
|
221
|
+
* ['bottom', { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 4 }],
|
|
222
|
+
* ]))
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
const POPUP_POSITIONS = new InjectionToken('POPUP_POSITIONS', {
|
|
226
|
+
providedIn: 'root',
|
|
227
|
+
factory: () => POPUP_POSITION_MAP,
|
|
228
|
+
});
|
|
229
|
+
// ---------------------------------------------------------------------------
|
|
230
|
+
// Provider factory
|
|
231
|
+
// ---------------------------------------------------------------------------
|
|
232
|
+
/**
|
|
233
|
+
* Registers a custom named-position map as the active `POPUP_POSITIONS`.
|
|
234
|
+
*
|
|
235
|
+
* Call in the root `providers` array (or a component's `providers`) to
|
|
236
|
+
* replace all default positions with a custom set.
|
|
237
|
+
*
|
|
238
|
+
* @param positions — A `Map` of {@link MlvPopupPositionName} → CDK `ConnectedPosition`.
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* ```ts
|
|
242
|
+
* // app.config.ts
|
|
243
|
+
* providers: [
|
|
244
|
+
* providePopupPositions(new Map([
|
|
245
|
+
* ...POPUP_POSITION_MAP,
|
|
246
|
+
* ['bottom', { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 4 }],
|
|
247
|
+
* ]))
|
|
248
|
+
* ]
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
function providePopupPositions(positions) {
|
|
252
|
+
return { provide: POPUP_POSITIONS, useValue: positions };
|
|
253
|
+
}
|
|
254
|
+
// ---------------------------------------------------------------------------
|
|
255
|
+
// Static helper — MlvPopupPositionResolver
|
|
256
|
+
// ---------------------------------------------------------------------------
|
|
257
|
+
/**
|
|
258
|
+
* Static utility class for resolving named popup positions.
|
|
259
|
+
*
|
|
260
|
+
* Centralises all lookup logic so that {@link MlvPopup} and
|
|
261
|
+
* {@link MlvPopupService} share one consistent resolution path.
|
|
262
|
+
*/
|
|
263
|
+
class MlvPopupPositionResolver {
|
|
264
|
+
/**
|
|
265
|
+
* Resolves one or more {@link MlvPopupPositionName} strings to CDK
|
|
266
|
+
* `ConnectedPosition` objects using the provided map.
|
|
267
|
+
*
|
|
268
|
+
* - Positions are returned in the same order as `names`.
|
|
269
|
+
* - If a name is not found in the map, it is skipped and a warning is
|
|
270
|
+
* emitted in dev mode via `console.warn`.
|
|
271
|
+
* - Returns an empty array if no names resolve successfully.
|
|
272
|
+
*
|
|
273
|
+
* @param names — A single name or ordered array of names (CDK uses
|
|
274
|
+
* the first one that fits in the viewport).
|
|
275
|
+
* @param positionMap — The active position map (from `POPUP_POSITIONS` token).
|
|
276
|
+
*/
|
|
277
|
+
static resolve(names, positionMap) {
|
|
278
|
+
const nameList = Array.isArray(names) ? names : [names];
|
|
279
|
+
const resolved = [];
|
|
280
|
+
for (const name of nameList) {
|
|
281
|
+
const pos = positionMap.get(name);
|
|
282
|
+
if (pos !== undefined) {
|
|
283
|
+
resolved.push(pos);
|
|
284
|
+
}
|
|
285
|
+
else if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
286
|
+
console.warn(`[MlvPopup] Position "${name}" was not found in the POPUP_POSITIONS map. ` +
|
|
287
|
+
`Available positions: [${Array.from(positionMap.keys()).join(', ')}].`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return resolved;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Returns all positions in the map as an ordered array.
|
|
294
|
+
* Used as the CDK fallback sequence when no explicit `position` is set.
|
|
295
|
+
*
|
|
296
|
+
* @param positionMap — The active position map (from `POPUP_POSITIONS` token).
|
|
297
|
+
*/
|
|
298
|
+
static allPositions(positionMap) {
|
|
299
|
+
return Array.from(positionMap.values());
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// ---------------------------------------------------------------------------
|
|
303
|
+
// Shared named-position sequences
|
|
304
|
+
// ---------------------------------------------------------------------------
|
|
305
|
+
/**
|
|
306
|
+
* Ordered CDK positions for a dropdown menu panel that opens below its trigger:
|
|
307
|
+
* `bottom-start` preferred, flipping vertically (`top-start`) then aligning to
|
|
308
|
+
* the trigger's end edge (`bottom-end`, `top-end`) when space is constrained.
|
|
309
|
+
*
|
|
310
|
+
* Derived from {@link POPUP_POSITION_MAP} so menu overlays stay consistent with
|
|
311
|
+
* the rest of the Malva UI overlay system. Consumed by `MlvMenuTrigger`.
|
|
312
|
+
*/
|
|
313
|
+
const MENU_POSITIONS = MlvPopupPositionResolver.resolve(['bottom-start', 'top-start', 'bottom-end', 'top-end'], POPUP_POSITION_MAP);
|
|
314
|
+
/**
|
|
315
|
+
* Ordered CDK positions for a submenu panel that opens to the right of its
|
|
316
|
+
* parent item (`right-start`), flipping to the left (`left-start`) when there
|
|
317
|
+
* is no room on the right.
|
|
318
|
+
*
|
|
319
|
+
* Derived from {@link POPUP_POSITION_MAP}. Consumed by `MlvMenuTrigger`.
|
|
320
|
+
*/
|
|
321
|
+
const SUBMENU_POSITIONS = MlvPopupPositionResolver.resolve(['right-start', 'left-start'], POPUP_POSITION_MAP);
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Fallback delay (ms) after which a pending leave is force-completed when the
|
|
325
|
+
* panel's `animationend` never fires — `prefers-reduced-motion` removes the
|
|
326
|
+
* leave animation entirely, and hidden/background tabs throttle CSS animations.
|
|
327
|
+
* Comfortably above the default leave duration (`--mlv-duration-fast`, 100ms);
|
|
328
|
+
* matches the dialog's `LEAVE_FALLBACK_MS` (250 ms).
|
|
329
|
+
*/
|
|
330
|
+
const POPUP_LEAVE_FALLBACK_MS = 250;
|
|
331
|
+
/**
|
|
332
|
+
* Delay (ms) after which an overlay owner force-detaches a popup whose leave
|
|
333
|
+
* animation never completed. Sits just past {@link POPUP_LEAVE_FALLBACK_MS} so
|
|
334
|
+
* the normal `animationend` / fallback path always wins when it works.
|
|
335
|
+
*/
|
|
336
|
+
const POPUP_DETACH_WATCHDOG_MS = POPUP_LEAVE_FALLBACK_MS + 100;
|
|
337
|
+
class MlvPopup {
|
|
338
|
+
/** @private Active named-position map (overridable via `POPUP_POSITIONS` token). */
|
|
339
|
+
_positionMap = inject(POPUP_POSITIONS);
|
|
340
|
+
/**
|
|
341
|
+
* Named position(s) controlling where the popup appears relative to its trigger.
|
|
342
|
+
*
|
|
343
|
+
* Accepts a single {@link MlvPopupPositionName} or an ordered array of names.
|
|
344
|
+
* CDK tries positions in array order and uses the first one that fits in the
|
|
345
|
+
* viewport — useful for automatic flip behaviour.
|
|
346
|
+
*
|
|
347
|
+
* When set, takes precedence over the raw {@link positions} input.
|
|
348
|
+
* When both are omitted, all twelve default positions are passed to CDK.
|
|
349
|
+
*
|
|
350
|
+
* An unrecognised name is skipped and a `console.warn` is emitted in dev mode.
|
|
351
|
+
*
|
|
352
|
+
* @example Single preferred position
|
|
353
|
+
* ```html
|
|
354
|
+
* <mlv-popup position="bottom-end" />
|
|
355
|
+
* ```
|
|
356
|
+
*
|
|
357
|
+
* @example Preferred + fallback
|
|
358
|
+
* ```html
|
|
359
|
+
* <mlv-popup [position]="['bottom-end', 'top-end']" />
|
|
360
|
+
* ```
|
|
361
|
+
*/
|
|
362
|
+
position = input(undefined, /* @ts-ignore */
|
|
363
|
+
...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
364
|
+
/**
|
|
365
|
+
* Raw CDK `ConnectedPosition` array for advanced use cases where named
|
|
366
|
+
* positions are insufficient.
|
|
367
|
+
*
|
|
368
|
+
* When set and `position` is not set, these positions are passed directly
|
|
369
|
+
* to the CDK overlay. Prefer `position` for standard placements.
|
|
370
|
+
*/
|
|
371
|
+
positions = input(undefined, /* @ts-ignore */
|
|
372
|
+
...(ngDevMode ? [{ debugName: "positions" }] : /* istanbul ignore next */ []));
|
|
373
|
+
/** Explicit CSS width of the popup panel. */
|
|
374
|
+
width = input(undefined, /* @ts-ignore */
|
|
375
|
+
...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
|
|
376
|
+
/** Explicit CSS height of the popup panel. */
|
|
377
|
+
height = input(undefined, /* @ts-ignore */
|
|
378
|
+
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
379
|
+
/** Minimum CSS width of the popup panel. */
|
|
380
|
+
minWidth = input(undefined, /* @ts-ignore */
|
|
381
|
+
...(ngDevMode ? [{ debugName: "minWidth" }] : /* istanbul ignore next */ []));
|
|
382
|
+
/** Minimum CSS height of the popup panel. */
|
|
383
|
+
minHeight = input(undefined, /* @ts-ignore */
|
|
384
|
+
...(ngDevMode ? [{ debugName: "minHeight" }] : /* istanbul ignore next */ []));
|
|
385
|
+
/** Maximum CSS width of the popup panel. */
|
|
386
|
+
maxWidth = input(undefined, /* @ts-ignore */
|
|
387
|
+
...(ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []));
|
|
388
|
+
/** Maximum CSS height of the popup panel. */
|
|
389
|
+
maxHeight = input(undefined, /* @ts-ignore */
|
|
390
|
+
...(ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []));
|
|
391
|
+
/** When `true`, a directional arrow is rendered pointing toward the trigger. */
|
|
392
|
+
hasArrow = input(false, { ...(ngDevMode ? { debugName: "hasArrow" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
393
|
+
/** When `true` (default), a drop-shadow is applied to the popup panel. */
|
|
394
|
+
hasShadow = input(true, { ...(ngDevMode ? { debugName: "hasShadow" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
395
|
+
/** Additional CSS classes forwarded to the popup panel host. */
|
|
396
|
+
class = input(/* @ts-ignore */
|
|
397
|
+
...(ngDevMode ? [undefined, { debugName: "class" }] : /* istanbul ignore next */ []));
|
|
398
|
+
/**
|
|
399
|
+
* Density applied to the popup's content.
|
|
400
|
+
*
|
|
401
|
+
* The popup panel is portaled to the CDK overlay container on `<body>`, so it
|
|
402
|
+
* sits outside any `mlvDensityRoot` / ancestor density cascade in the page.
|
|
403
|
+
* This input restores the cascade on the detached panel: the resolved density
|
|
404
|
+
* is stamped as a `mlv--{density}` class on the panel element, and every
|
|
405
|
+
* density-aware descendant (e.g. `mlv-list-item` rows in a dropdown panel)
|
|
406
|
+
* responds through the standard CSS cascade.
|
|
407
|
+
*
|
|
408
|
+
* When omitted, the nearest ancestor `MLV_DENSITY_CONTEXT` (e.g. a
|
|
409
|
+
* `form[mlvForm]`) is used, then the global `MlvDensityService`, so popovers
|
|
410
|
+
* follow the surrounding / app-wide density without extra wiring. Components
|
|
411
|
+
* that embed a popup (select, combobox, pagination, menu, …) forward their
|
|
412
|
+
* own `mlvDensity` input here.
|
|
413
|
+
*/
|
|
414
|
+
mlvDensity = input(undefined, /* @ts-ignore */
|
|
415
|
+
...(ngDevMode ? [{ debugName: "mlvDensity" }] : /* istanbul ignore next */ []));
|
|
416
|
+
/**
|
|
417
|
+
* @private Global density service — fallback when no explicit
|
|
418
|
+
* {@link mlvDensity} is supplied.
|
|
419
|
+
*/
|
|
420
|
+
_densityService = inject(MlvDensityService);
|
|
421
|
+
/**
|
|
422
|
+
* @private Density projected by an ancestor container (e.g. `form[mlvForm]`).
|
|
423
|
+
* Consulted after the explicit {@link mlvDensity} input, before the service.
|
|
424
|
+
*/
|
|
425
|
+
_densityContext = inject(MLV_DENSITY_CONTEXT, {
|
|
426
|
+
optional: true,
|
|
427
|
+
});
|
|
428
|
+
/**
|
|
429
|
+
* @protected Class list for the detached panel element: consumer classes from
|
|
430
|
+
* {@link class} plus the resolved `mlv--{density}` cascade class.
|
|
431
|
+
*/
|
|
432
|
+
_panelClasses = computed(() => {
|
|
433
|
+
const density = this.mlvDensity() ??
|
|
434
|
+
this._densityContext?.() ??
|
|
435
|
+
this._densityService.density();
|
|
436
|
+
const extra = this.class();
|
|
437
|
+
return extra ? `${extra} mlv--${density}` : `mlv--${density}`;
|
|
438
|
+
}, /* @ts-ignore */
|
|
439
|
+
...(ngDevMode ? [{ debugName: "_panelClasses" }] : /* istanbul ignore next */ []));
|
|
440
|
+
/** Allow the overlay panel to grow to fill available viewport space. */
|
|
441
|
+
flexibleDimensions = input(false, { ...(ngDevMode ? { debugName: "flexibleDimensions" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
442
|
+
/**
|
|
443
|
+
* Controls overlay behaviour when the page is scrolled.
|
|
444
|
+
*
|
|
445
|
+
* - `'reposition'` (default) — overlay follows the trigger.
|
|
446
|
+
* - `'close'` — overlay closes on scroll.
|
|
447
|
+
* - `'block'` — page scroll is blocked while the overlay is open.
|
|
448
|
+
* - `'noop'` — overlay stays fixed.
|
|
449
|
+
*/
|
|
450
|
+
scrollStrategy = input('reposition', /* @ts-ignore */
|
|
451
|
+
...(ngDevMode ? [{ debugName: "scrollStrategy" }] : /* istanbul ignore next */ []));
|
|
452
|
+
/**
|
|
453
|
+
* Whether to render a transparent backdrop behind the popup.
|
|
454
|
+
*
|
|
455
|
+
* When `undefined` (default), the trigger decides — click/keyboard triggers
|
|
456
|
+
* use a backdrop; hover triggers do not.
|
|
457
|
+
*
|
|
458
|
+
* Set to `false` to suppress the backdrop while keeping click-outside and
|
|
459
|
+
* Escape detection active.
|
|
460
|
+
*/
|
|
461
|
+
hasBackdrop = input(undefined, { ...(ngDevMode ? { debugName: "hasBackdrop" } : /* istanbul ignore next */ {}), transform: (v) => v == null ? undefined : coerceBooleanProperty(v) });
|
|
462
|
+
/**
|
|
463
|
+
* When `true` (default), only the explicitly provided position(s) are passed to CDK.
|
|
464
|
+
* CDK will push the popup into the viewport if none of them fit, but won't try other
|
|
465
|
+
* named positions automatically.
|
|
466
|
+
*
|
|
467
|
+
* When `false`, the provided position(s) are used first and all remaining positions
|
|
468
|
+
* from the active `POPUP_POSITIONS` map are appended as ordered fallbacks. CDK will
|
|
469
|
+
* try them in sequence and use the first one that fits — useful for popups near edges
|
|
470
|
+
* that should freely reposition rather than be pushed.
|
|
471
|
+
*
|
|
472
|
+
* @example Prefer bottom-start, fall back to any position that fits
|
|
473
|
+
* ```html
|
|
474
|
+
* <mlv-popup position="bottom-start" [restrictPosition]="false" />
|
|
475
|
+
* ```
|
|
476
|
+
*/
|
|
477
|
+
restrictPosition = input(true, { ...(ngDevMode ? { debugName: "restrictPosition" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
478
|
+
/**
|
|
479
|
+
* ARIA role applied to the popup panel element.
|
|
480
|
+
*
|
|
481
|
+
* Defaults to `null` — the panel is a neutral positioning/chrome container and
|
|
482
|
+
* the semantic role is expected to come from the projected content
|
|
483
|
+
* (e.g. a `role="menu"` list, a `role="listbox"`, or a `role="tooltip"`).
|
|
484
|
+
*
|
|
485
|
+
* Set to `'dialog'` (together with {@link modal}`= true`) for genuine modal
|
|
486
|
+
* dialog surfaces such as a date-picker calendar. When `panelRole === 'dialog'`
|
|
487
|
+
* and {@link modal} is `true`, an accessible name via {@link ariaLabel} (or a
|
|
488
|
+
* projected labelling element) is required.
|
|
489
|
+
*/
|
|
490
|
+
panelRole = input(null, /* @ts-ignore */
|
|
491
|
+
...(ngDevMode ? [{ debugName: "panelRole" }] : /* istanbul ignore next */ []));
|
|
492
|
+
/**
|
|
493
|
+
* Whether the popup panel behaves as a modal surface.
|
|
494
|
+
*
|
|
495
|
+
* When `true`, the panel renders `aria-modal="true"` and enables the CDK focus
|
|
496
|
+
* trap (Tab / Shift+Tab cycle within the panel). When `false` (default), no
|
|
497
|
+
* `aria-modal` is emitted and focus is free to leave the panel — the correct
|
|
498
|
+
* behaviour for menus, listboxes, and tooltips whose focus is managed by their
|
|
499
|
+
* own trigger / roving-tabindex logic.
|
|
500
|
+
*/
|
|
501
|
+
modal = input(false, { ...(ngDevMode ? { debugName: "modal" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
502
|
+
/**
|
|
503
|
+
* Optional accessible name for the popup panel.
|
|
504
|
+
* Applied as `aria-label` on the popup element.
|
|
505
|
+
*/
|
|
506
|
+
ariaLabel = input(undefined, /* @ts-ignore */
|
|
507
|
+
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
508
|
+
/**
|
|
509
|
+
* Extra elements that count as "inside" the popup for click-outside dismissal.
|
|
510
|
+
*
|
|
511
|
+
* When the popup is opened without a backdrop (`[hasBackdrop]="false"`),
|
|
512
|
+
* dismissal is detected by a document-level click listener that closes the
|
|
513
|
+
* popup on any click outside the overlay panel. The trigger/anchor lives in
|
|
514
|
+
* the normal document flow — outside the floating panel — so a click on it
|
|
515
|
+
* (or on any control it owns) would otherwise be treated as "outside" and
|
|
516
|
+
* dismiss the popup. List these elements (typically the trigger) so clicks
|
|
517
|
+
* within them do not close the popup; e.g. `mlv-combobox` passes its input
|
|
518
|
+
* row so caret repositioning while the list is open keeps the list open.
|
|
519
|
+
*
|
|
520
|
+
* Has no effect when a backdrop is used.
|
|
521
|
+
*/
|
|
522
|
+
dismissExcludeElements = input([], /* @ts-ignore */
|
|
523
|
+
...(ngDevMode ? [{ debugName: "dismissExcludeElements" }] : /* istanbul ignore next */ []));
|
|
524
|
+
// ─── Mobile fullscreen mode ──────────────────────────────────────────────
|
|
525
|
+
/** @private Signal-based viewport breakpoint service (SSR-safe via CDK). */
|
|
526
|
+
_breakpoint = inject(MlvBreakpointService);
|
|
527
|
+
/**
|
|
528
|
+
* @private Optional popup i18n slice — provides the fullscreen close-button
|
|
529
|
+
* label. Injected optionally so the popup keeps working when no i18n provider
|
|
530
|
+
* is configured (falls back to the English default).
|
|
531
|
+
*/
|
|
532
|
+
_i18n = inject(MLV_POPUP_I18N, { optional: true });
|
|
533
|
+
/**
|
|
534
|
+
* Controls whether the popup renders as a full-screen mobile sheet with a
|
|
535
|
+
* header bar and close button instead of a trigger-anchored panel.
|
|
536
|
+
*
|
|
537
|
+
* Defaults to `'off'` so existing consumers are unaffected — the pickers
|
|
538
|
+
* (day/date-range/time) opt into `'auto'`.
|
|
539
|
+
*/
|
|
540
|
+
mobileMode = input('off', /* @ts-ignore */
|
|
541
|
+
...(ngDevMode ? [{ debugName: "mobileMode" }] : /* istanbul ignore next */ []));
|
|
542
|
+
/**
|
|
543
|
+
* Breakpoint below which `mobileMode="auto"` switches the popup to full-screen.
|
|
544
|
+
* Defaults to `'md'` (viewport narrower than 768px, per `MLV_BREAKPOINT_CONFIG`).
|
|
545
|
+
*/
|
|
546
|
+
mobileBreakpoint = input('md', /* @ts-ignore */
|
|
547
|
+
...(ngDevMode ? [{ debugName: "mobileBreakpoint" }] : /* istanbul ignore next */ []));
|
|
548
|
+
/**
|
|
549
|
+
* Optional visible title rendered in the full-screen header bar. When omitted,
|
|
550
|
+
* the header shows only the close button.
|
|
551
|
+
*/
|
|
552
|
+
mobileTitle = input(undefined, /* @ts-ignore */
|
|
553
|
+
...(ngDevMode ? [{ debugName: "mobileTitle" }] : /* istanbul ignore next */ []));
|
|
554
|
+
/**
|
|
555
|
+
* Optional override for the full-screen close-button accessible name.
|
|
556
|
+
* Falls back to the `MLV_POPUP_I18N` `close` string, then to `'Close'`.
|
|
557
|
+
*/
|
|
558
|
+
mobileCloseLabel = input(undefined, /* @ts-ignore */
|
|
559
|
+
...(ngDevMode ? [{ debugName: "mobileCloseLabel" }] : /* istanbul ignore next */ []));
|
|
560
|
+
/**
|
|
561
|
+
* Whether the popup is currently rendering as a full-screen mobile sheet.
|
|
562
|
+
*
|
|
563
|
+
* `'off'` → always `false`; `'fullscreen'` → always `true`; `'auto'` → `true`
|
|
564
|
+
* when the viewport is below {@link mobileBreakpoint}. Public so consumers with
|
|
565
|
+
* their own inner focus trap (e.g. `mlv-date-range-picker`) can disable it to
|
|
566
|
+
* avoid nesting two traps inside the full-screen panel.
|
|
567
|
+
*/
|
|
568
|
+
isFullscreen = computed(() => {
|
|
569
|
+
const mode = this.mobileMode();
|
|
570
|
+
if (mode === 'off')
|
|
571
|
+
return false;
|
|
572
|
+
if (mode === 'fullscreen')
|
|
573
|
+
return true;
|
|
574
|
+
return this._breakpoint.isDown(this.mobileBreakpoint())();
|
|
575
|
+
}, /* @ts-ignore */
|
|
576
|
+
...(ngDevMode ? [{ debugName: "isFullscreen" }] : /* istanbul ignore next */ []));
|
|
577
|
+
/** @protected Resolved accessible name for the full-screen close button. */
|
|
578
|
+
_closeLabel = computed(() => this.mobileCloseLabel() ?? this._i18n?.().close ?? 'Close', /* @ts-ignore */
|
|
579
|
+
...(ngDevMode ? [{ debugName: "_closeLabel" }] : /* istanbul ignore next */ []));
|
|
580
|
+
/** Two-way binding for the open/closed state. */
|
|
581
|
+
opened = model(false, /* @ts-ignore */
|
|
582
|
+
...(ngDevMode ? [{ debugName: "opened" }] : /* istanbul ignore next */ []));
|
|
583
|
+
/** Emitted after the popup enters the view and the enter animation completes. */
|
|
584
|
+
afterOpened = output();
|
|
585
|
+
/** Emitted after the popup leaves the view and the leave animation completes. */
|
|
586
|
+
afterClosed = output();
|
|
587
|
+
animationState = signal('idle', /* @ts-ignore */
|
|
588
|
+
...(ngDevMode ? [{ debugName: "animationState" }] : /* istanbul ignore next */ []));
|
|
589
|
+
arrowEdge = signal('top', /* @ts-ignore */
|
|
590
|
+
...(ngDevMode ? [{ debugName: "arrowEdge" }] : /* istanbul ignore next */ []));
|
|
591
|
+
arrowAlign = signal('start', /* @ts-ignore */
|
|
592
|
+
...(ngDevMode ? [{ debugName: "arrowAlign" }] : /* istanbul ignore next */ []));
|
|
593
|
+
/**
|
|
594
|
+
* CSS transform value for the popup's hidden/offscreen position.
|
|
595
|
+
* Used as `--mlv-popup-hidden-transform` so the enter/leave keyframes
|
|
596
|
+
* slide in from the correct edge depending on where the popup is placed.
|
|
597
|
+
*/
|
|
598
|
+
popupHiddenTransform = computed(() => {
|
|
599
|
+
switch (this.arrowEdge()) {
|
|
600
|
+
case 'top':
|
|
601
|
+
return 'translateY(-4px)';
|
|
602
|
+
case 'bottom':
|
|
603
|
+
return 'translateY(4px)';
|
|
604
|
+
case 'left':
|
|
605
|
+
return 'translateX(-4px)';
|
|
606
|
+
case 'right':
|
|
607
|
+
return 'translateX(4px)';
|
|
608
|
+
}
|
|
609
|
+
}, /* @ts-ignore */
|
|
610
|
+
...(ngDevMode ? [{ debugName: "popupHiddenTransform" }] : /* istanbul ignore next */ []));
|
|
611
|
+
/** @protected Projected popup content template, rendered into the overlay panel. */
|
|
612
|
+
contentRef = contentChild(MlvPopupContent, /* @ts-ignore */
|
|
613
|
+
...(ngDevMode ? [{ debugName: "contentRef" }] : /* istanbul ignore next */ []));
|
|
614
|
+
/**
|
|
615
|
+
* @protected Optional header-extension template projected via
|
|
616
|
+
* `[mlvPopupHeaderContent]`. Rendered inside the full-screen header, directly
|
|
617
|
+
* beneath the title/close row. Ignored while the popup is trigger-anchored
|
|
618
|
+
* (only stamped when {@link isFullscreen} is `true`), so anchored popups are
|
|
619
|
+
* byte-identical whether or not the slot is supplied.
|
|
620
|
+
*/
|
|
621
|
+
headerContentRef = contentChild(MlvPopupHeaderContent, /* @ts-ignore */
|
|
622
|
+
...(ngDevMode ? [{ debugName: "headerContentRef" }] : /* istanbul ignore next */ []));
|
|
623
|
+
/**
|
|
624
|
+
* @protected Optional pinned-chrome template projected via
|
|
625
|
+
* `[mlvPopupPinnedContent]`. Rendered in **every** mode, directly above
|
|
626
|
+
* `.mlv-popup__scrollbar`, so it never scrolls with the content (in
|
|
627
|
+
* full-screen it sits below the header). An absent slot stamps nothing —
|
|
628
|
+
* byte-identical markup to a popup that never declared one.
|
|
629
|
+
*/
|
|
630
|
+
pinnedContentRef = contentChild(MlvPopupPinnedContent, /* @ts-ignore */
|
|
631
|
+
...(ngDevMode ? [{ debugName: "pinnedContentRef" }] : /* istanbul ignore next */ []));
|
|
632
|
+
/** @internal Emits when the leave animation finishes so the container can dispose the overlay. */
|
|
633
|
+
leaveAnimationDone$ = new Subject();
|
|
634
|
+
/**
|
|
635
|
+
* @private Fallback timer guaranteeing `leaveAnimationDone$` fires even when
|
|
636
|
+
* the panel's `animationend` never arrives — `prefers-reduced-motion` strips
|
|
637
|
+
* the leave animation entirely, and hidden/background tabs throttle CSS
|
|
638
|
+
* animations indefinitely. Without it the overlay would never dispose.
|
|
639
|
+
* Mirrors `MlvOverlayRef`'s `_leaveFallbackMs` used by the drawer, and the
|
|
640
|
+
* dialog's `LEAVE_FALLBACK_MS`.
|
|
641
|
+
*/
|
|
642
|
+
_leaveFallbackTimer = null;
|
|
643
|
+
constructor() {
|
|
644
|
+
// Arm the fallback whenever a leave starts; disarm on any state change
|
|
645
|
+
// (the real `animationend` path resets the state to 'idle' on dispose).
|
|
646
|
+
effect(() => {
|
|
647
|
+
const state = this.animationState();
|
|
648
|
+
if (this._leaveFallbackTimer !== null) {
|
|
649
|
+
clearTimeout(this._leaveFallbackTimer);
|
|
650
|
+
this._leaveFallbackTimer = null;
|
|
651
|
+
}
|
|
652
|
+
if (state === 'leave') {
|
|
653
|
+
this._leaveFallbackTimer = setTimeout(() => {
|
|
654
|
+
this._leaveFallbackTimer = null;
|
|
655
|
+
this.onAnimationEnd();
|
|
656
|
+
}, POPUP_LEAVE_FALLBACK_MS);
|
|
657
|
+
}
|
|
658
|
+
});
|
|
659
|
+
inject(DestroyRef).onDestroy(() => {
|
|
660
|
+
if (this._leaveFallbackTimer !== null) {
|
|
661
|
+
clearTimeout(this._leaveFallbackTimer);
|
|
662
|
+
this._leaveFallbackTimer = null;
|
|
663
|
+
}
|
|
664
|
+
});
|
|
665
|
+
}
|
|
666
|
+
popupTemplate = viewChild.required('popupTemplate', /* @ts-ignore */
|
|
667
|
+
...(ngDevMode ? [{ debugName: "popupTemplate" }] : /* istanbul ignore next */ []));
|
|
668
|
+
// ─── Position resolution ─────────────────────────────────────────────────
|
|
669
|
+
/**
|
|
670
|
+
* Resolves the active CDK `ConnectedPosition[]` to pass to the overlay.
|
|
671
|
+
*
|
|
672
|
+
* **Position source** (first match wins):
|
|
673
|
+
* 1. `position` input — named position(s) looked up in `POPUP_POSITIONS` map.
|
|
674
|
+
* 2. `positions` input — raw CDK positions for advanced use.
|
|
675
|
+
* 3. All defaults — every position in the active `POPUP_POSITIONS` map.
|
|
676
|
+
*
|
|
677
|
+
* **`restrictPosition` modifier:**
|
|
678
|
+
* - `true` (default) — return the resolved positions as-is; CDK pushes the popup
|
|
679
|
+
* if none fit.
|
|
680
|
+
* - `false` — append all remaining map positions (deduped by reference) after the
|
|
681
|
+
* resolved ones so CDK can freely choose a fitting position.
|
|
682
|
+
*/
|
|
683
|
+
resolvedPositions() {
|
|
684
|
+
const named = this.position();
|
|
685
|
+
let preferred;
|
|
686
|
+
if (named !== undefined) {
|
|
687
|
+
preferred = MlvPopupPositionResolver.resolve(named, this._positionMap);
|
|
688
|
+
}
|
|
689
|
+
else {
|
|
690
|
+
preferred = this.positions();
|
|
691
|
+
}
|
|
692
|
+
const base = preferred ?? MlvPopupPositionResolver.allPositions(this._positionMap);
|
|
693
|
+
if (this.restrictPosition()) {
|
|
694
|
+
return base;
|
|
695
|
+
}
|
|
696
|
+
// Append every map position not already present as a fallback.
|
|
697
|
+
// Position objects from the map share the same reference, so Set dedup works.
|
|
698
|
+
const all = MlvPopupPositionResolver.allPositions(this._positionMap);
|
|
699
|
+
const seen = new Set(base);
|
|
700
|
+
return [...base, ...all.filter((p) => !seen.has(p))];
|
|
701
|
+
}
|
|
702
|
+
buildSizeConfig() {
|
|
703
|
+
const size = {};
|
|
704
|
+
const width = this.width();
|
|
705
|
+
const height = this.height();
|
|
706
|
+
const minWidth = this.minWidth();
|
|
707
|
+
const minHeight = this.minHeight();
|
|
708
|
+
const maxWidth = this.maxWidth();
|
|
709
|
+
const maxHeight = this.maxHeight();
|
|
710
|
+
if (width !== undefined)
|
|
711
|
+
size.width = width;
|
|
712
|
+
if (height !== undefined)
|
|
713
|
+
size.height = height;
|
|
714
|
+
if (minWidth !== undefined)
|
|
715
|
+
size.minWidth = minWidth;
|
|
716
|
+
if (minHeight !== undefined)
|
|
717
|
+
size.minHeight = minHeight;
|
|
718
|
+
if (maxWidth !== undefined)
|
|
719
|
+
size.maxWidth = maxWidth;
|
|
720
|
+
if (maxHeight !== undefined)
|
|
721
|
+
size.maxHeight = maxHeight;
|
|
722
|
+
return size;
|
|
723
|
+
}
|
|
724
|
+
onAnimationEnd() {
|
|
725
|
+
if (this.animationState() === 'leave') {
|
|
726
|
+
this.leaveAnimationDone$.next();
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
/**
|
|
730
|
+
* @internal Promotes a freshly attached panel from `'idle'` to `'enter'`.
|
|
731
|
+
*
|
|
732
|
+
* Overlay owners (`MlvPopupContainer`, `MlvPopupTrigger`, `MlvMenuTrigger`)
|
|
733
|
+
* call this from a microtask so the panel is in the DOM before the enter
|
|
734
|
+
* keyframes start. A close requested in the same tick as the attach already
|
|
735
|
+
* moved the state to `'leave'` by then, and overwriting it would strand the
|
|
736
|
+
* overlay: the leave keyframes never play, so no `animationend` arrives, and
|
|
737
|
+
* the write itself cancels the leave fallback timer — leaving no path back to
|
|
738
|
+
* a detach. Promote only from the exact state the attach left behind.
|
|
739
|
+
*/
|
|
740
|
+
beginEnterAnimation() {
|
|
741
|
+
if (this.animationState() === 'idle') {
|
|
742
|
+
this.animationState.set('enter');
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
/**
|
|
746
|
+
* @protected Handles the full-screen header close button. Requests closure via
|
|
747
|
+
* the two-way `opened` model so the consumer's `afterClosed` (focus restore)
|
|
748
|
+
* and the container/trigger leave-animation machinery run — identical to the
|
|
749
|
+
* Escape / backdrop close path.
|
|
750
|
+
*/
|
|
751
|
+
_onCloseClick() {
|
|
752
|
+
this.opened.set(false);
|
|
753
|
+
}
|
|
754
|
+
/**
|
|
755
|
+
* Derives `arrowEdge` and `arrowAlign` from a resolved CDK `ConnectedPosition`.
|
|
756
|
+
*
|
|
757
|
+
* Detection logic:
|
|
758
|
+
* - `overlayX='end'` + `originX='start'` → popup is to the **left** of the trigger → arrow on right edge
|
|
759
|
+
* - `overlayX='start'` + `originX='end'` → popup is to the **right** of the trigger → arrow on left edge
|
|
760
|
+
* - `overlayY='top'` (all other cases) → popup is **below** the trigger → arrow on top edge
|
|
761
|
+
* - `overlayY='bottom'` (all other cases) → popup is **above** the trigger → arrow on bottom edge
|
|
762
|
+
*
|
|
763
|
+
* For left/right arrows the vertical alignment is read from `overlayY`
|
|
764
|
+
* (`'top'` → `'start'`, `'center'` → `'center'`, `'bottom'` → `'end'`).
|
|
765
|
+
* For top/bottom arrows the horizontal alignment comes directly from `overlayX`.
|
|
766
|
+
*/
|
|
767
|
+
updateArrowFromPosition(pair) {
|
|
768
|
+
const { originX, overlayX, overlayY } = pair;
|
|
769
|
+
if (overlayX === 'end' && originX === 'start') {
|
|
770
|
+
// Popup is to the LEFT of the trigger — arrow on the right edge
|
|
771
|
+
this.arrowEdge.set('right');
|
|
772
|
+
this.arrowAlign.set(overlayY === 'top' ? 'start' : overlayY === 'bottom' ? 'end' : 'center');
|
|
773
|
+
}
|
|
774
|
+
else if (overlayX === 'start' && originX === 'end') {
|
|
775
|
+
// Popup is to the RIGHT of the trigger — arrow on the left edge
|
|
776
|
+
this.arrowEdge.set('left');
|
|
777
|
+
this.arrowAlign.set(overlayY === 'top' ? 'start' : overlayY === 'bottom' ? 'end' : 'center');
|
|
778
|
+
}
|
|
779
|
+
else if (overlayY === 'top') {
|
|
780
|
+
// Popup is BELOW the trigger — arrow on the top edge
|
|
781
|
+
this.arrowEdge.set('top');
|
|
782
|
+
this.arrowAlign.set(overlayX);
|
|
783
|
+
}
|
|
784
|
+
else {
|
|
785
|
+
// Popup is ABOVE the trigger — arrow on the bottom edge
|
|
786
|
+
this.arrowEdge.set('bottom');
|
|
787
|
+
this.arrowAlign.set(overlayX);
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopup, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
791
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvPopup, isStandalone: true, selector: "mlv-popup", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, positions: { classPropertyName: "positions", publicName: "positions", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, hasArrow: { classPropertyName: "hasArrow", publicName: "hasArrow", isSignal: true, isRequired: false, transformFunction: null }, hasShadow: { classPropertyName: "hasShadow", publicName: "hasShadow", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, mlvDensity: { classPropertyName: "mlvDensity", publicName: "mlvDensity", isSignal: true, isRequired: false, transformFunction: null }, flexibleDimensions: { classPropertyName: "flexibleDimensions", publicName: "flexibleDimensions", isSignal: true, isRequired: false, transformFunction: null }, scrollStrategy: { classPropertyName: "scrollStrategy", publicName: "scrollStrategy", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, restrictPosition: { classPropertyName: "restrictPosition", publicName: "restrictPosition", isSignal: true, isRequired: false, transformFunction: null }, panelRole: { classPropertyName: "panelRole", publicName: "panelRole", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, dismissExcludeElements: { classPropertyName: "dismissExcludeElements", publicName: "dismissExcludeElements", isSignal: true, isRequired: false, transformFunction: null }, mobileMode: { classPropertyName: "mobileMode", publicName: "mobileMode", isSignal: true, isRequired: false, transformFunction: null }, mobileBreakpoint: { classPropertyName: "mobileBreakpoint", publicName: "mobileBreakpoint", isSignal: true, isRequired: false, transformFunction: null }, mobileTitle: { classPropertyName: "mobileTitle", publicName: "mobileTitle", isSignal: true, isRequired: false, transformFunction: null }, mobileCloseLabel: { classPropertyName: "mobileCloseLabel", publicName: "mobileCloseLabel", isSignal: true, isRequired: false, transformFunction: null }, opened: { classPropertyName: "opened", publicName: "opened", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "openedChange", afterOpened: "afterOpened", afterClosed: "afterClosed" }, queries: [{ propertyName: "contentRef", first: true, predicate: MlvPopupContent, descendants: true, isSignal: true }, { propertyName: "headerContentRef", first: true, predicate: MlvPopupHeaderContent, descendants: true, isSignal: true }, { propertyName: "pinnedContentRef", first: true, predicate: MlvPopupPinnedContent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #popupTemplate>\n <div\n class=\"mlv-popup\"\n [style.--mlv-popup-hidden-transform]=\"popupHiddenTransform()\"\n [class]=\"_panelClasses()\"\n [class.mlv-popup--fullscreen]=\"isFullscreen()\"\n [class.mlv-popup--arrow]=\"hasArrow() && !isFullscreen()\"\n [class.mlv-popup--shadow]=\"hasShadow() && !isFullscreen()\"\n [class.mlv-popup--arrow-top]=\"hasArrow() && !isFullscreen() && arrowEdge() === 'top'\"\n [class.mlv-popup--arrow-bottom]=\"hasArrow() && !isFullscreen() && arrowEdge() === 'bottom'\"\n [class.mlv-popup--arrow-left]=\"hasArrow() && !isFullscreen() && arrowEdge() === 'left'\"\n [class.mlv-popup--arrow-right]=\"hasArrow() && !isFullscreen() && arrowEdge() === 'right'\"\n [class.mlv-popup--arrow-start]=\"hasArrow() && !isFullscreen() && arrowAlign() === 'start'\"\n [class.mlv-popup--arrow-center]=\"hasArrow() && !isFullscreen() && arrowAlign() === 'center'\"\n [class.mlv-popup--arrow-end]=\"hasArrow() && !isFullscreen() && arrowAlign() === 'end'\"\n [class.mlv-popup--enter]=\"animationState() === 'enter'\"\n [class.mlv-popup--leave]=\"animationState() === 'leave'\"\n (animationend)=\"onAnimationEnd()\"\n [attr.role]=\"panelRole()\"\n [attr.aria-modal]=\"modal() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [cdkTrapFocus]=\"modal() || isFullscreen()\"\n >\n @if (isFullscreen()) {\n <div class=\"mlv-popup__header\">\n <div class=\"mlv-popup__header-row\">\n @if (mobileTitle(); as title) {\n <span class=\"mlv-popup__title\">{{ title }}</span>\n }\n <mlv-button-close\n class=\"mlv-popup__close\"\n [ariaLabel]=\"_closeLabel()\"\n (click)=\"_onCloseClick()\"\n variant=\"secondary\"\n ></mlv-button-close>\n </div>\n @if (headerContentRef(); as headerTpl) {\n <div class=\"mlv-popup__header-content\">\n <ng-template [ngTemplateOutlet]=\"headerTpl.templateRef\" />\n </div>\n }\n </div>\n } @if (pinnedContentRef(); as pinnedTpl) {\n <div class=\"mlv-popup__pinned\">\n <ng-template [ngTemplateOutlet]=\"pinnedTpl.templateRef\" />\n </div>\n }\n <mlv-scrollbar class=\"mlv-popup__scrollbar\">\n <div class=\"mlv-popup__inner\">\n @if (contentRef(); as contentTpl) {\n <ng-template [ngTemplateOutlet]=\"contentTpl.templateRef\" />\n }\n </div>\n </mlv-scrollbar>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";@layer mlv.components{.mlv-popup{--mlv-popup-bg: var(--mlv-elevation-bg-3);--mlv-popup-border: .0625rem solid var(--mlv-border-subtle);background-color:var(--mlv-popup-bg);color:var(--mlv-text-primary);border:var(--mlv-popup-border);border-radius:var(--mlv-popover-surface-radius);max-height:inherit;display:flex;flex-direction:column;position:relative;width:100%}.mlv-popup__scrollbar{position:relative;z-index:2;flex:1 1 auto;width:100%;min-height:0}.mlv-popup__pinned{flex:0 0 auto;position:relative;z-index:3}.mlv-popup__inner{display:flex;flex-direction:column;min-height:100%}.mlv-popup__scrollbar>.mlv-scrollbar__viewport{overflow-x:hidden}.mlv-popup:after{content:\"\";position:absolute;inset:-.5rem;background:transparent;z-index:1}.mlv-popup--shadow{filter:drop-shadow(0 .75rem 1.75rem rgba(0,0,0,.12));box-shadow:var(--mlv-shadow-floating)}.mlv-popup--fullscreen{--mlv-popup-enter-from-translate-y: 100%;--mlv-popup-enter-from-scale: 1;--mlv-popup-enter-from-opacity: 1;--mlv-popup-leave-to-translate-y: 100%;--mlv-popup-leave-to-scale: 1;--mlv-popup-leave-to-opacity: 1;--mlv-popup-transform-origin: bottom center;width:100%;height:100%;max-height:none;border:none;border-radius:0;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}.mlv-popup--fullscreen .mlv-popup__scrollbar>.mlv-scrollbar__viewport{-webkit-overflow-scrolling:touch}.mlv-popup--fullscreen .mlv-popup__inner{padding:var(--mlv-spacing-4)}.mlv-popup__header{display:flex;flex-direction:column;gap:var(--mlv-spacing-3);flex:0 0 auto;padding:var(--mlv-spacing-3) var(--mlv-spacing-4);border-bottom:var(--mlv-popup-border);position:relative;z-index:2}.mlv-popup__header-row{display:flex;align-items:center;gap:var(--mlv-spacing-3)}.mlv-popup__header-content{display:flex;flex-direction:column}.mlv-popup__title{font-family:var(--mlv-typography-family-heading);font-size:var(--mlv-font-size-l);font-weight:var(--mlv-font-weight-semibold);color:var(--mlv-text-primary);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mlv-popup__close{margin-inline-start:auto;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:var(--mlv-height-s);height:var(--mlv-height-s);border:none;background:transparent;color:var(--mlv-text-secondary);border-radius:var(--mlv-radius-full);cursor:pointer;transition:background-color var(--mlv-duration-fast) var(--mlv-ease-default),color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-popup__close:hover{background-color:var(--mlv-background-neutral-1-hover);color:var(--mlv-text-primary)}.mlv-popup__close:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:var(--mlv-focus-ring-offset)}.mlv-popup--arrow:before{content:\"\";position:absolute;width:.75rem;height:.75rem;background-color:var(--mlv-popup-bg);border:var(--mlv-popup-border);z-index:1}.mlv-popup--arrow-top:before{top:-.4375rem;border-inline-end:none;border-bottom:none;transform:rotate(45deg)}.mlv-popup--arrow-bottom:before{bottom:-.4375rem;border-inline-start:none;border-top:none;transform:rotate(45deg)}.mlv-popup--arrow-left:before{left:-.4375rem;border-inline-end:none;border-top:none;transform:rotate(45deg)}.mlv-popup--arrow-right:before{right:-.4375rem;border-inline-start:none;border-bottom:none;transform:rotate(45deg)}.mlv-popup--arrow-start.mlv-popup--arrow-top:before,.mlv-popup--arrow-start.mlv-popup--arrow-bottom:before{left:1rem}.mlv-popup--arrow-start.mlv-popup--arrow-left:before,.mlv-popup--arrow-start.mlv-popup--arrow-right:before{top:1rem}.mlv-popup--arrow-center.mlv-popup--arrow-top:before,.mlv-popup--arrow-center.mlv-popup--arrow-bottom:before{left:50%;margin-inline-start:-.375rem}.mlv-popup--arrow-center.mlv-popup--arrow-left:before,.mlv-popup--arrow-center.mlv-popup--arrow-right:before{top:50%;margin-top:-.375rem}.mlv-popup--arrow-end.mlv-popup--arrow-top:before,.mlv-popup--arrow-end.mlv-popup--arrow-bottom:before{right:1rem}.mlv-popup--arrow-end.mlv-popup--arrow-left:before,.mlv-popup--arrow-end.mlv-popup--arrow-right:before{bottom:1rem}.cdk-overlay-connected-position-bounding-box .cdk-overlay-pane{max-height:inherit}.mlv-popup-fullscreen-pane{width:100vw;height:100vh;height:100dvh;max-width:100vw;max-height:100vh;max-height:100dvh}.mlv-popup-fullscreen-backdrop{background-color:var(--mlv-background-overlay)}}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MlvScrollbar, selector: "mlv-scrollbar", inputs: ["orientation", "scrollbarSize", "disabled", "ariaLabel", "viewportTabIndex"] }, { kind: "component", type: MlvButtonClose, selector: "mlv-button-close", inputs: ["variant", "shape", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
792
|
+
}
|
|
793
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopup, decorators: [{
|
|
794
|
+
type: Component,
|
|
795
|
+
args: [{ selector: 'mlv-popup', imports: [
|
|
796
|
+
OverlayModule,
|
|
797
|
+
A11yModule,
|
|
798
|
+
PortalModule,
|
|
799
|
+
NgTemplateOutlet,
|
|
800
|
+
MlvScrollbar,
|
|
801
|
+
MlvButtonClose,
|
|
802
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #popupTemplate>\n <div\n class=\"mlv-popup\"\n [style.--mlv-popup-hidden-transform]=\"popupHiddenTransform()\"\n [class]=\"_panelClasses()\"\n [class.mlv-popup--fullscreen]=\"isFullscreen()\"\n [class.mlv-popup--arrow]=\"hasArrow() && !isFullscreen()\"\n [class.mlv-popup--shadow]=\"hasShadow() && !isFullscreen()\"\n [class.mlv-popup--arrow-top]=\"hasArrow() && !isFullscreen() && arrowEdge() === 'top'\"\n [class.mlv-popup--arrow-bottom]=\"hasArrow() && !isFullscreen() && arrowEdge() === 'bottom'\"\n [class.mlv-popup--arrow-left]=\"hasArrow() && !isFullscreen() && arrowEdge() === 'left'\"\n [class.mlv-popup--arrow-right]=\"hasArrow() && !isFullscreen() && arrowEdge() === 'right'\"\n [class.mlv-popup--arrow-start]=\"hasArrow() && !isFullscreen() && arrowAlign() === 'start'\"\n [class.mlv-popup--arrow-center]=\"hasArrow() && !isFullscreen() && arrowAlign() === 'center'\"\n [class.mlv-popup--arrow-end]=\"hasArrow() && !isFullscreen() && arrowAlign() === 'end'\"\n [class.mlv-popup--enter]=\"animationState() === 'enter'\"\n [class.mlv-popup--leave]=\"animationState() === 'leave'\"\n (animationend)=\"onAnimationEnd()\"\n [attr.role]=\"panelRole()\"\n [attr.aria-modal]=\"modal() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [cdkTrapFocus]=\"modal() || isFullscreen()\"\n >\n @if (isFullscreen()) {\n <div class=\"mlv-popup__header\">\n <div class=\"mlv-popup__header-row\">\n @if (mobileTitle(); as title) {\n <span class=\"mlv-popup__title\">{{ title }}</span>\n }\n <mlv-button-close\n class=\"mlv-popup__close\"\n [ariaLabel]=\"_closeLabel()\"\n (click)=\"_onCloseClick()\"\n variant=\"secondary\"\n ></mlv-button-close>\n </div>\n @if (headerContentRef(); as headerTpl) {\n <div class=\"mlv-popup__header-content\">\n <ng-template [ngTemplateOutlet]=\"headerTpl.templateRef\" />\n </div>\n }\n </div>\n } @if (pinnedContentRef(); as pinnedTpl) {\n <div class=\"mlv-popup__pinned\">\n <ng-template [ngTemplateOutlet]=\"pinnedTpl.templateRef\" />\n </div>\n }\n <mlv-scrollbar class=\"mlv-popup__scrollbar\">\n <div class=\"mlv-popup__inner\">\n @if (contentRef(); as contentTpl) {\n <ng-template [ngTemplateOutlet]=\"contentTpl.templateRef\" />\n }\n </div>\n </mlv-scrollbar>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";@layer mlv.components{.mlv-popup{--mlv-popup-bg: var(--mlv-elevation-bg-3);--mlv-popup-border: .0625rem solid var(--mlv-border-subtle);background-color:var(--mlv-popup-bg);color:var(--mlv-text-primary);border:var(--mlv-popup-border);border-radius:var(--mlv-popover-surface-radius);max-height:inherit;display:flex;flex-direction:column;position:relative;width:100%}.mlv-popup__scrollbar{position:relative;z-index:2;flex:1 1 auto;width:100%;min-height:0}.mlv-popup__pinned{flex:0 0 auto;position:relative;z-index:3}.mlv-popup__inner{display:flex;flex-direction:column;min-height:100%}.mlv-popup__scrollbar>.mlv-scrollbar__viewport{overflow-x:hidden}.mlv-popup:after{content:\"\";position:absolute;inset:-.5rem;background:transparent;z-index:1}.mlv-popup--shadow{filter:drop-shadow(0 .75rem 1.75rem rgba(0,0,0,.12));box-shadow:var(--mlv-shadow-floating)}.mlv-popup--fullscreen{--mlv-popup-enter-from-translate-y: 100%;--mlv-popup-enter-from-scale: 1;--mlv-popup-enter-from-opacity: 1;--mlv-popup-leave-to-translate-y: 100%;--mlv-popup-leave-to-scale: 1;--mlv-popup-leave-to-opacity: 1;--mlv-popup-transform-origin: bottom center;width:100%;height:100%;max-height:none;border:none;border-radius:0;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}.mlv-popup--fullscreen .mlv-popup__scrollbar>.mlv-scrollbar__viewport{-webkit-overflow-scrolling:touch}.mlv-popup--fullscreen .mlv-popup__inner{padding:var(--mlv-spacing-4)}.mlv-popup__header{display:flex;flex-direction:column;gap:var(--mlv-spacing-3);flex:0 0 auto;padding:var(--mlv-spacing-3) var(--mlv-spacing-4);border-bottom:var(--mlv-popup-border);position:relative;z-index:2}.mlv-popup__header-row{display:flex;align-items:center;gap:var(--mlv-spacing-3)}.mlv-popup__header-content{display:flex;flex-direction:column}.mlv-popup__title{font-family:var(--mlv-typography-family-heading);font-size:var(--mlv-font-size-l);font-weight:var(--mlv-font-weight-semibold);color:var(--mlv-text-primary);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mlv-popup__close{margin-inline-start:auto;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:var(--mlv-height-s);height:var(--mlv-height-s);border:none;background:transparent;color:var(--mlv-text-secondary);border-radius:var(--mlv-radius-full);cursor:pointer;transition:background-color var(--mlv-duration-fast) var(--mlv-ease-default),color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-popup__close:hover{background-color:var(--mlv-background-neutral-1-hover);color:var(--mlv-text-primary)}.mlv-popup__close:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:var(--mlv-focus-ring-offset)}.mlv-popup--arrow:before{content:\"\";position:absolute;width:.75rem;height:.75rem;background-color:var(--mlv-popup-bg);border:var(--mlv-popup-border);z-index:1}.mlv-popup--arrow-top:before{top:-.4375rem;border-inline-end:none;border-bottom:none;transform:rotate(45deg)}.mlv-popup--arrow-bottom:before{bottom:-.4375rem;border-inline-start:none;border-top:none;transform:rotate(45deg)}.mlv-popup--arrow-left:before{left:-.4375rem;border-inline-end:none;border-top:none;transform:rotate(45deg)}.mlv-popup--arrow-right:before{right:-.4375rem;border-inline-start:none;border-bottom:none;transform:rotate(45deg)}.mlv-popup--arrow-start.mlv-popup--arrow-top:before,.mlv-popup--arrow-start.mlv-popup--arrow-bottom:before{left:1rem}.mlv-popup--arrow-start.mlv-popup--arrow-left:before,.mlv-popup--arrow-start.mlv-popup--arrow-right:before{top:1rem}.mlv-popup--arrow-center.mlv-popup--arrow-top:before,.mlv-popup--arrow-center.mlv-popup--arrow-bottom:before{left:50%;margin-inline-start:-.375rem}.mlv-popup--arrow-center.mlv-popup--arrow-left:before,.mlv-popup--arrow-center.mlv-popup--arrow-right:before{top:50%;margin-top:-.375rem}.mlv-popup--arrow-end.mlv-popup--arrow-top:before,.mlv-popup--arrow-end.mlv-popup--arrow-bottom:before{right:1rem}.mlv-popup--arrow-end.mlv-popup--arrow-left:before,.mlv-popup--arrow-end.mlv-popup--arrow-right:before{bottom:1rem}.cdk-overlay-connected-position-bounding-box .cdk-overlay-pane{max-height:inherit}.mlv-popup-fullscreen-pane{width:100vw;height:100vh;height:100dvh;max-width:100vw;max-height:100vh;max-height:100dvh}.mlv-popup-fullscreen-backdrop{background-color:var(--mlv-background-overlay)}}\n"] }]
|
|
803
|
+
}], ctorParameters: () => [], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], positions: [{ type: i0.Input, args: [{ isSignal: true, alias: "positions", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], minHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "minHeight", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], hasArrow: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasArrow", required: false }] }], hasShadow: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasShadow", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], mlvDensity: [{ type: i0.Input, args: [{ isSignal: true, alias: "mlvDensity", required: false }] }], flexibleDimensions: [{ type: i0.Input, args: [{ isSignal: true, alias: "flexibleDimensions", required: false }] }], scrollStrategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollStrategy", required: false }] }], hasBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackdrop", required: false }] }], restrictPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "restrictPosition", required: false }] }], panelRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelRole", required: false }] }], modal: [{ type: i0.Input, args: [{ isSignal: true, alias: "modal", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], dismissExcludeElements: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissExcludeElements", required: false }] }], mobileMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileMode", required: false }] }], mobileBreakpoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileBreakpoint", required: false }] }], mobileTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileTitle", required: false }] }], mobileCloseLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileCloseLabel", required: false }] }], opened: [{ type: i0.Input, args: [{ isSignal: true, alias: "opened", required: false }] }, { type: i0.Output, args: ["openedChange"] }], afterOpened: [{ type: i0.Output, args: ["afterOpened"] }], afterClosed: [{ type: i0.Output, args: ["afterClosed"] }], contentRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPopupContent), { isSignal: true }] }], headerContentRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPopupHeaderContent), { isSignal: true }] }], pinnedContentRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPopupPinnedContent), { isSignal: true }] }], popupTemplate: [{ type: i0.ViewChild, args: ['popupTemplate', { isSignal: true }] }] } });
|
|
804
|
+
|
|
805
|
+
// ---------------------------------------------------------------------------
|
|
806
|
+
// Service
|
|
807
|
+
// ---------------------------------------------------------------------------
|
|
808
|
+
/**
|
|
809
|
+
* Low-level CDK overlay service for Malva UI popup components.
|
|
810
|
+
*
|
|
811
|
+
* Handles overlay creation, portal attachment, position strategy,
|
|
812
|
+
* backdrop clicks, and Escape-key closure.
|
|
813
|
+
*
|
|
814
|
+
* For template-driven usage prefer `[mlvPopupTrigger]` or
|
|
815
|
+
* `<mlv-popup-container>`. Use this service directly only when you need
|
|
816
|
+
* full programmatic control.
|
|
817
|
+
*
|
|
818
|
+
* @example Programmatic usage
|
|
819
|
+
* ```ts
|
|
820
|
+
* const handle = this.popupService.open({
|
|
821
|
+
* origin: this.triggerRef,
|
|
822
|
+
* template: this.tpl,
|
|
823
|
+
* vcr: this.vcr,
|
|
824
|
+
* positions: this.popupService.resolvePositions(['bottom', 'top']),
|
|
825
|
+
* onClose: () => this.isOpen.set(false),
|
|
826
|
+
* });
|
|
827
|
+
* // Later:
|
|
828
|
+
* handle.close();
|
|
829
|
+
* ```
|
|
830
|
+
*/
|
|
831
|
+
class MlvPopupService {
|
|
832
|
+
/** @private CDK overlay service. */
|
|
833
|
+
_overlay = inject(Overlay);
|
|
834
|
+
/**
|
|
835
|
+
* @private Resolves the direction scoped to each popup's origin so portaled
|
|
836
|
+
* panes mirror with their trigger rather than with the document.
|
|
837
|
+
*/
|
|
838
|
+
_rtl = inject(MlvRtlService);
|
|
839
|
+
/** @private Active named-position map (overridable via `POPUP_POSITIONS` token). */
|
|
840
|
+
_positionMap = inject(POPUP_POSITIONS);
|
|
841
|
+
/** @private Angular zone for running document-level event handlers inside change detection. */
|
|
842
|
+
_ngZone = inject(NgZone);
|
|
843
|
+
// ─── Public API ────────────────────────────────────────────────────────────
|
|
844
|
+
/**
|
|
845
|
+
* Resolves one or more {@link MlvPopupPositionName} strings to CDK
|
|
846
|
+
* `ConnectedPosition` objects.
|
|
847
|
+
*
|
|
848
|
+
* Positions are resolved from the active `POPUP_POSITIONS` map. If a name
|
|
849
|
+
* is not found, it is skipped and a `console.warn` is emitted in dev mode.
|
|
850
|
+
* CDK uses the first position in the returned array that fits in the viewport.
|
|
851
|
+
*
|
|
852
|
+
* @param names — A single name or ordered array of fallback names.
|
|
853
|
+
*
|
|
854
|
+
* @example
|
|
855
|
+
* ```ts
|
|
856
|
+
* positions: this.popupService.resolvePositions('bottom-end')
|
|
857
|
+
* positions: this.popupService.resolvePositions(['bottom-end', 'top-end'])
|
|
858
|
+
* ```
|
|
859
|
+
*/
|
|
860
|
+
resolvePositions(names) {
|
|
861
|
+
return MlvPopupPositionResolver.resolve(names, this._positionMap);
|
|
862
|
+
}
|
|
863
|
+
/**
|
|
864
|
+
* Creates a CDK overlay, attaches the given template portal, and wires up
|
|
865
|
+
* backdrop and Escape-key closure.
|
|
866
|
+
*
|
|
867
|
+
* @param config — Full overlay configuration.
|
|
868
|
+
* @returns A {@link MlvPopupHandle} with the `overlayRef` and a `close()` method.
|
|
869
|
+
*/
|
|
870
|
+
open(config) {
|
|
871
|
+
const fullscreen = config.fullscreen ?? false;
|
|
872
|
+
const flexible = config.flexibleDimensions ?? false;
|
|
873
|
+
// Full-screen mode uses a global (viewport-centred) strategy that the pane
|
|
874
|
+
// stretches to fill; the connected positions are irrelevant. Otherwise use
|
|
875
|
+
// the trigger-anchored flexible-connected strategy (unchanged behaviour).
|
|
876
|
+
// withPush(false) for 'reposition': the overlay moves with the trigger and
|
|
877
|
+
// naturally disappears when the trigger scrolls out of the viewport.
|
|
878
|
+
// withPush(true) for all other strategies: CDK keeps the overlay inside the
|
|
879
|
+
// viewport until the strategy itself decides what to do (close, block, noop).
|
|
880
|
+
const push = (config.scrollStrategy ?? 'reposition') !== 'reposition';
|
|
881
|
+
const positionStrategy = fullscreen
|
|
882
|
+
? this._overlay.position().global()
|
|
883
|
+
: this._overlay
|
|
884
|
+
.position()
|
|
885
|
+
.flexibleConnectedTo(config.origin)
|
|
886
|
+
.withPositions(config.positions)
|
|
887
|
+
.withPush(push)
|
|
888
|
+
.withFlexibleDimensions(flexible)
|
|
889
|
+
.withGrowAfterOpen(flexible);
|
|
890
|
+
// The backdrop is always shown in full-screen mode regardless of the
|
|
891
|
+
// trigger's preference (it doubles as the scrim behind the sheet).
|
|
892
|
+
const hasBackdrop = fullscreen ? true : (config.hasBackdrop ?? true);
|
|
893
|
+
const overlayRef = this._overlay.create({
|
|
894
|
+
positionStrategy,
|
|
895
|
+
// The pane is portaled to the overlay container on <body>, outside any
|
|
896
|
+
// `[dir]` scope the origin sits in, so the origin's direction has to be
|
|
897
|
+
// passed explicitly. It also drives `start`/`end` position mirroring in
|
|
898
|
+
// `FlexibleConnectedPositionStrategy`.
|
|
899
|
+
direction: this._rtl.resolveDirection(config.origin),
|
|
900
|
+
hasBackdrop,
|
|
901
|
+
...(hasBackdrop
|
|
902
|
+
? {
|
|
903
|
+
backdropClass: fullscreen
|
|
904
|
+
? 'mlv-popup-fullscreen-backdrop'
|
|
905
|
+
: (config.backdropClass ?? 'cdk-overlay-transparent-backdrop'),
|
|
906
|
+
}
|
|
907
|
+
: {}),
|
|
908
|
+
// Full-screen locks the page behind the sheet (no layout shift — the block
|
|
909
|
+
// strategy compensates for the removed scrollbar width).
|
|
910
|
+
scrollStrategy: fullscreen
|
|
911
|
+
? this._overlay.scrollStrategies.block()
|
|
912
|
+
: this._resolveScrollStrategy(config.scrollStrategy),
|
|
913
|
+
...(fullscreen
|
|
914
|
+
? { panelClass: 'mlv-popup-fullscreen-pane' }
|
|
915
|
+
: config.size),
|
|
916
|
+
});
|
|
917
|
+
const portal = new TemplatePortal(config.template, config.vcr);
|
|
918
|
+
overlayRef.attach(portal);
|
|
919
|
+
// Position changes only occur for the connected strategy; the global
|
|
920
|
+
// (full-screen) strategy exposes no positionChanges stream.
|
|
921
|
+
if (config.onPositionChange && !fullscreen) {
|
|
922
|
+
positionStrategy.positionChanges.subscribe(config.onPositionChange);
|
|
923
|
+
}
|
|
924
|
+
// Collect cleanup callbacks so they all run on close regardless of how it was triggered.
|
|
925
|
+
const cleanups = [];
|
|
926
|
+
// The direction is resolved once above, but the pane now lives outside the
|
|
927
|
+
// origin's `[dir]` scope: nothing re-mirrors it if the direction flips while
|
|
928
|
+
// the popup is open. Without this the pane keeps its stale `dir` (its content
|
|
929
|
+
// stays LTR under an RTL page) and the connected strategy keeps resolving
|
|
930
|
+
// `start`/`end` against the old direction, so the panel stays put while the
|
|
931
|
+
// trigger moves to the other edge.
|
|
932
|
+
cleanups.push(this._rtl.watchDirection(config.origin, (direction) => {
|
|
933
|
+
overlayRef.setDirection(direction);
|
|
934
|
+
overlayRef.updatePosition();
|
|
935
|
+
}));
|
|
936
|
+
let disposed = false;
|
|
937
|
+
const close = () => {
|
|
938
|
+
if (disposed)
|
|
939
|
+
return;
|
|
940
|
+
disposed = true;
|
|
941
|
+
for (const fn of cleanups)
|
|
942
|
+
fn();
|
|
943
|
+
overlayRef.dispose();
|
|
944
|
+
config.onClose();
|
|
945
|
+
};
|
|
946
|
+
// Detect when CDK closes the overlay externally (e.g. CloseScrollStrategy calls
|
|
947
|
+
// overlayRef.detach() — bypassing our close() — leaving handle/opened out of sync).
|
|
948
|
+
const detachSub = overlayRef.detachments().subscribe(() => close());
|
|
949
|
+
cleanups.push(() => detachSub.unsubscribe());
|
|
950
|
+
const requestClose = config.onRequestClose ?? close;
|
|
951
|
+
if (hasBackdrop) {
|
|
952
|
+
const sub = overlayRef.backdropClick().subscribe(() => requestClose());
|
|
953
|
+
cleanups.push(() => sub.unsubscribe());
|
|
954
|
+
}
|
|
955
|
+
else {
|
|
956
|
+
// Defer the document listener to avoid catching the same click that opened the popup.
|
|
957
|
+
const excludeElements = config.dismissExcludeElements ?? [];
|
|
958
|
+
const timerId = setTimeout(() => {
|
|
959
|
+
const handler = (event) => {
|
|
960
|
+
const target = event.target;
|
|
961
|
+
const insidePanel = overlayRef.hasAttached() &&
|
|
962
|
+
overlayRef.overlayElement.contains(target);
|
|
963
|
+
// Clicks on the trigger/anchor (outside the floating panel) are not
|
|
964
|
+
// "outside" — e.g. repositioning the caret in a combobox's input
|
|
965
|
+
// must not dismiss its open list.
|
|
966
|
+
const insideExcluded = excludeElements.some((el) => el.contains(target));
|
|
967
|
+
if (overlayRef.hasAttached() && !insidePanel && !insideExcluded) {
|
|
968
|
+
this._ngZone.run(() => requestClose());
|
|
969
|
+
}
|
|
970
|
+
};
|
|
971
|
+
document.addEventListener('click', handler, true);
|
|
972
|
+
cleanups.push(() => document.removeEventListener('click', handler, true));
|
|
973
|
+
}, 0);
|
|
974
|
+
cleanups.push(() => clearTimeout(timerId));
|
|
975
|
+
}
|
|
976
|
+
const keySub = overlayRef.keydownEvents().subscribe((event) => {
|
|
977
|
+
if (event.key === 'Escape') {
|
|
978
|
+
requestClose();
|
|
979
|
+
event.preventDefault();
|
|
980
|
+
}
|
|
981
|
+
});
|
|
982
|
+
cleanups.push(() => keySub.unsubscribe());
|
|
983
|
+
return { overlayRef, close };
|
|
984
|
+
}
|
|
985
|
+
/**
|
|
986
|
+
* @private Maps a {@link MlvPopupScrollStrategy} name to a CDK scroll-strategy instance.
|
|
987
|
+
*/
|
|
988
|
+
_resolveScrollStrategy(strategy = 'reposition') {
|
|
989
|
+
switch (strategy) {
|
|
990
|
+
case 'close':
|
|
991
|
+
return this._overlay.scrollStrategies.close();
|
|
992
|
+
case 'block':
|
|
993
|
+
return this._overlay.scrollStrategies.block();
|
|
994
|
+
case 'noop':
|
|
995
|
+
return this._overlay.scrollStrategies.noop();
|
|
996
|
+
default:
|
|
997
|
+
return this._overlay.scrollStrategies.reposition();
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1001
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupService, providedIn: 'root' });
|
|
1002
|
+
}
|
|
1003
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupService, decorators: [{
|
|
1004
|
+
type: Injectable,
|
|
1005
|
+
args: [{ providedIn: 'root' }]
|
|
1006
|
+
}] });
|
|
1007
|
+
|
|
1008
|
+
/**
|
|
1009
|
+
* Injection token for the nearest `MlvPopupContainer`.
|
|
1010
|
+
*
|
|
1011
|
+
* Used by `MlvPopupTrigger` to detect container mode and delegate
|
|
1012
|
+
* open/close/toggle calls without creating a conflicting overlay.
|
|
1013
|
+
*/
|
|
1014
|
+
const POPUP_CONTAINER = new InjectionToken('POPUP_CONTAINER');
|
|
1015
|
+
|
|
1016
|
+
const HOVER_CLOSE_DELAY = 20;
|
|
1017
|
+
class MlvPopupTrigger {
|
|
1018
|
+
/** @private Low-level overlay API used in standalone mode. */
|
|
1019
|
+
_popupService = inject(MlvPopupService);
|
|
1020
|
+
/** @private Host element ref used as the overlay anchor. */
|
|
1021
|
+
_elementRef = inject(ElementRef);
|
|
1022
|
+
/** @private View container used to instantiate the popup template portal. */
|
|
1023
|
+
_vcr = inject(ViewContainerRef);
|
|
1024
|
+
/** @private Zone used to re-enter Angular after out-of-zone hover timers. */
|
|
1025
|
+
_ngZone = inject(NgZone);
|
|
1026
|
+
/**
|
|
1027
|
+
* Optional injection of a parent {@link MlvPopupContainer}.
|
|
1028
|
+
*
|
|
1029
|
+
* When present the trigger operates in **container mode**: it delegates
|
|
1030
|
+
* open/close/toggle to the container instead of creating its own overlay,
|
|
1031
|
+
* and registers its host element as the visual anchor.
|
|
1032
|
+
*
|
|
1033
|
+
* When absent the trigger operates in **standalone mode** and manages the
|
|
1034
|
+
* overlay lifecycle itself (legacy behaviour).
|
|
1035
|
+
*/
|
|
1036
|
+
_container = inject(POPUP_CONTAINER, { optional: true });
|
|
1037
|
+
/** @private The active overlay handle in standalone mode, or `null` when closed. */
|
|
1038
|
+
_handle = null;
|
|
1039
|
+
/** @private Guards against re-triggering the leave animation while already closing. */
|
|
1040
|
+
_closing = false;
|
|
1041
|
+
/** @private Subscription to the popup's leave-animation-done stream. */
|
|
1042
|
+
_leaveSubscription = null;
|
|
1043
|
+
/** @private Pending hover-close timer handle, or `null` when none is scheduled. */
|
|
1044
|
+
_hoverCloseTimer = null;
|
|
1045
|
+
/**
|
|
1046
|
+
* @private Last-resort timer that force-detaches an overlay whose leave never
|
|
1047
|
+
* completed — without it a lost `animationState` write latches `_closing`
|
|
1048
|
+
* with no path back to a detach.
|
|
1049
|
+
*/
|
|
1050
|
+
_detachWatchdog = null;
|
|
1051
|
+
/** @private Teardown callbacks for the overlay hover mouse listeners. */
|
|
1052
|
+
_overlayMouseListeners = [];
|
|
1053
|
+
/**
|
|
1054
|
+
* The `MlvPopup` to control.
|
|
1055
|
+
*
|
|
1056
|
+
* **Standalone mode** (no parent `mlv-popup-container`): must be bound to the
|
|
1057
|
+
* target `<mlv-popup>` element: `[mlvPopupTrigger]="myPopup"`.
|
|
1058
|
+
*
|
|
1059
|
+
* **Container mode** (inside `mlv-popup-container`): can be used as a bare
|
|
1060
|
+
* attribute (`mlvPopupTrigger`) without a value — the container already holds
|
|
1061
|
+
* the popup reference and orchestrates the overlay. The empty-string value from
|
|
1062
|
+
* the bare attribute is coerced to `undefined` by the transform.
|
|
1063
|
+
*/
|
|
1064
|
+
mlvPopupTrigger = input(undefined, { ...(ngDevMode ? { debugName: "mlvPopupTrigger" } : /* istanbul ignore next */ {}), transform: (v) => typeof v === 'string' ? undefined : v });
|
|
1065
|
+
/** One or more event types that open the popup. Defaults to `'click'`. */
|
|
1066
|
+
triggerOn = input('click', /* @ts-ignore */
|
|
1067
|
+
...(ngDevMode ? [{ debugName: "triggerOn" }] : /* istanbul ignore next */ []));
|
|
1068
|
+
/**
|
|
1069
|
+
* Value applied to the trigger's `aria-haspopup` attribute. Should match the
|
|
1070
|
+
* semantic role of the popup panel's content — e.g. `'menu'` for a menu
|
|
1071
|
+
* flyout, `'listbox'` for a select, `'dialog'` for a modal surface. Defaults
|
|
1072
|
+
* to `'dialog'` for backwards compatibility. Set to `null` to omit the
|
|
1073
|
+
* attribute entirely (e.g. for a tooltip-only popup).
|
|
1074
|
+
*/
|
|
1075
|
+
ariaHasPopup = input('dialog', /* @ts-ignore */
|
|
1076
|
+
...(ngDevMode ? [{ debugName: "ariaHasPopup" }] : /* istanbul ignore next */ []));
|
|
1077
|
+
/** @protected Whether the associated popup is currently open. */
|
|
1078
|
+
_isOpen = computed(() => {
|
|
1079
|
+
const popup = this.mlvPopupTrigger();
|
|
1080
|
+
if (popup)
|
|
1081
|
+
return popup.opened();
|
|
1082
|
+
if (this._container)
|
|
1083
|
+
return this._container.isOpen?.() ?? false;
|
|
1084
|
+
return false;
|
|
1085
|
+
}, /* @ts-ignore */
|
|
1086
|
+
...(ngDevMode ? [{ debugName: "_isOpen" }] : /* istanbul ignore next */ []));
|
|
1087
|
+
constructor() {
|
|
1088
|
+
if (this._container) {
|
|
1089
|
+
// ── Container mode ──────────────────────────────────────────────────
|
|
1090
|
+
// Register this element as the overlay anchor. Re-runs if triggerOn changes
|
|
1091
|
+
// so the container can update its backdrop preference accordingly.
|
|
1092
|
+
const container = this._container;
|
|
1093
|
+
effect(() => {
|
|
1094
|
+
container.registerTrigger(this._elementRef, !this.hasTrigger('hover'));
|
|
1095
|
+
});
|
|
1096
|
+
}
|
|
1097
|
+
else {
|
|
1098
|
+
// ── Standalone mode ─────────────────────────────────────────────────
|
|
1099
|
+
// Watch the popup's opened signal and manage the CDK overlay ourselves.
|
|
1100
|
+
effect(() => {
|
|
1101
|
+
const popup = this.mlvPopupTrigger();
|
|
1102
|
+
if (!popup)
|
|
1103
|
+
return;
|
|
1104
|
+
const isOpen = popup.opened();
|
|
1105
|
+
if (isOpen && !this._handle) {
|
|
1106
|
+
this._attachOverlay();
|
|
1107
|
+
}
|
|
1108
|
+
else if (!isOpen && this._handle && !this._closing) {
|
|
1109
|
+
this._startLeaveAnimation();
|
|
1110
|
+
}
|
|
1111
|
+
});
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
open() {
|
|
1115
|
+
if (this._container) {
|
|
1116
|
+
this._container.open();
|
|
1117
|
+
}
|
|
1118
|
+
else {
|
|
1119
|
+
this.mlvPopupTrigger()?.opened.set(true);
|
|
1120
|
+
}
|
|
1121
|
+
}
|
|
1122
|
+
close() {
|
|
1123
|
+
if (this._container) {
|
|
1124
|
+
this._container.close();
|
|
1125
|
+
}
|
|
1126
|
+
else {
|
|
1127
|
+
this.mlvPopupTrigger()?.opened.set(false);
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
toggle() {
|
|
1131
|
+
if (this._container) {
|
|
1132
|
+
this._container.toggle();
|
|
1133
|
+
}
|
|
1134
|
+
else if (this._handle) {
|
|
1135
|
+
this.close();
|
|
1136
|
+
}
|
|
1137
|
+
else {
|
|
1138
|
+
this.open();
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1141
|
+
ngOnDestroy() {
|
|
1142
|
+
this._clearHoverTimer();
|
|
1143
|
+
this._clearDetachWatchdog();
|
|
1144
|
+
this._removeOverlayMouseListeners();
|
|
1145
|
+
this._cleanupSubscription();
|
|
1146
|
+
this._detachOverlay();
|
|
1147
|
+
}
|
|
1148
|
+
onClick() {
|
|
1149
|
+
if (this.hasTrigger('click')) {
|
|
1150
|
+
this.toggle();
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
onMouseEnter() {
|
|
1154
|
+
if (this.hasTrigger('hover')) {
|
|
1155
|
+
this._clearHoverTimer();
|
|
1156
|
+
this.open();
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
onMouseLeave() {
|
|
1160
|
+
if (this.hasTrigger('hover')) {
|
|
1161
|
+
this._scheduleHoverClose();
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
onFocus() {
|
|
1165
|
+
if (this.hasTrigger('focus')) {
|
|
1166
|
+
this.open();
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
onBlur() {
|
|
1170
|
+
if (this.hasTrigger('focus')) {
|
|
1171
|
+
this.close();
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1174
|
+
hasTrigger(type) {
|
|
1175
|
+
const trigger = this.triggerOn();
|
|
1176
|
+
return Array.isArray(trigger) ? trigger.includes(type) : trigger === type;
|
|
1177
|
+
}
|
|
1178
|
+
/** @private Schedules a delayed close after the pointer leaves the trigger. */
|
|
1179
|
+
_scheduleHoverClose() {
|
|
1180
|
+
this._clearHoverTimer();
|
|
1181
|
+
this._hoverCloseTimer = setTimeout(() => {
|
|
1182
|
+
this._hoverCloseTimer = null;
|
|
1183
|
+
this._ngZone.run(() => this.close());
|
|
1184
|
+
}, HOVER_CLOSE_DELAY);
|
|
1185
|
+
}
|
|
1186
|
+
/** @private Cancels any pending hover-close timer. */
|
|
1187
|
+
_clearHoverTimer() {
|
|
1188
|
+
if (this._hoverCloseTimer !== null) {
|
|
1189
|
+
clearTimeout(this._hoverCloseTimer);
|
|
1190
|
+
this._hoverCloseTimer = null;
|
|
1191
|
+
}
|
|
1192
|
+
}
|
|
1193
|
+
/** @private Creates the CDK overlay and plays the enter animation (standalone mode). */
|
|
1194
|
+
_attachOverlay() {
|
|
1195
|
+
if (this._handle)
|
|
1196
|
+
return;
|
|
1197
|
+
const popup = this.mlvPopupTrigger();
|
|
1198
|
+
if (!popup)
|
|
1199
|
+
return;
|
|
1200
|
+
popup.animationState.set('idle');
|
|
1201
|
+
const isHover = this.hasTrigger('hover');
|
|
1202
|
+
this._handle = this._popupService.open({
|
|
1203
|
+
origin: this._elementRef,
|
|
1204
|
+
template: popup.popupTemplate(),
|
|
1205
|
+
vcr: this._vcr,
|
|
1206
|
+
positions: popup.resolvedPositions(),
|
|
1207
|
+
size: popup.buildSizeConfig(),
|
|
1208
|
+
fullscreen: popup.isFullscreen(),
|
|
1209
|
+
hasBackdrop: popup.hasBackdrop() ?? !isHover,
|
|
1210
|
+
scrollStrategy: popup.scrollStrategy(),
|
|
1211
|
+
onPositionChange: (change) => popup.updateArrowFromPosition(change.connectionPair),
|
|
1212
|
+
onClose: () => {
|
|
1213
|
+
this._removeOverlayMouseListeners();
|
|
1214
|
+
this._clearHoverTimer();
|
|
1215
|
+
this._clearDetachWatchdog();
|
|
1216
|
+
this._handle = null;
|
|
1217
|
+
this._closing = false;
|
|
1218
|
+
popup.animationState.set('idle');
|
|
1219
|
+
popup.opened.set(false);
|
|
1220
|
+
popup.afterClosed.emit();
|
|
1221
|
+
},
|
|
1222
|
+
onRequestClose: () => this.close(),
|
|
1223
|
+
});
|
|
1224
|
+
if (isHover) {
|
|
1225
|
+
this._addOverlayMouseListeners();
|
|
1226
|
+
}
|
|
1227
|
+
this._cleanupSubscription();
|
|
1228
|
+
this._leaveSubscription = popup.leaveAnimationDone$.subscribe(() => {
|
|
1229
|
+
this._detachOverlay();
|
|
1230
|
+
});
|
|
1231
|
+
// Deferred so the panel is in the DOM before the enter keyframes start;
|
|
1232
|
+
// `beginEnterAnimation()` refuses to overwrite a close that beat it here.
|
|
1233
|
+
queueMicrotask(() => popup.beginEnterAnimation());
|
|
1234
|
+
popup.afterOpened.emit();
|
|
1235
|
+
}
|
|
1236
|
+
/** @private Wires hover enter/leave listeners on the overlay panel to keep it open on hover. */
|
|
1237
|
+
_addOverlayMouseListeners() {
|
|
1238
|
+
if (!this._handle)
|
|
1239
|
+
return;
|
|
1240
|
+
const overlayEl = this._handle.overlayRef.overlayElement;
|
|
1241
|
+
const onEnter = () => this._clearHoverTimer();
|
|
1242
|
+
const onLeave = () => this._scheduleHoverClose();
|
|
1243
|
+
overlayEl.addEventListener('mouseenter', onEnter);
|
|
1244
|
+
overlayEl.addEventListener('mouseleave', onLeave);
|
|
1245
|
+
this._overlayMouseListeners = [
|
|
1246
|
+
() => overlayEl.removeEventListener('mouseenter', onEnter),
|
|
1247
|
+
() => overlayEl.removeEventListener('mouseleave', onLeave),
|
|
1248
|
+
];
|
|
1249
|
+
}
|
|
1250
|
+
/** @private Removes the overlay hover listeners. */
|
|
1251
|
+
_removeOverlayMouseListeners() {
|
|
1252
|
+
for (const cleanup of this._overlayMouseListeners) {
|
|
1253
|
+
cleanup();
|
|
1254
|
+
}
|
|
1255
|
+
this._overlayMouseListeners = [];
|
|
1256
|
+
}
|
|
1257
|
+
/** @private Triggers the popup leave animation before detaching the overlay. */
|
|
1258
|
+
_startLeaveAnimation() {
|
|
1259
|
+
if (!this._handle)
|
|
1260
|
+
return;
|
|
1261
|
+
this._closing = true;
|
|
1262
|
+
this.mlvPopupTrigger()?.animationState.set('leave');
|
|
1263
|
+
this._armDetachWatchdog();
|
|
1264
|
+
}
|
|
1265
|
+
/** @private Tears down the overlay, its subscriptions, and pending timers. */
|
|
1266
|
+
_detachOverlay() {
|
|
1267
|
+
this._cleanupSubscription();
|
|
1268
|
+
this._clearDetachWatchdog();
|
|
1269
|
+
if (this._handle) {
|
|
1270
|
+
this._handle.close();
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
/**
|
|
1274
|
+
* @private Arms the force-detach timer for the pending leave. Detaching is
|
|
1275
|
+
* what resets `_closing` and `_handle`, so a leave that never completes must
|
|
1276
|
+
* still end in a detach or the trigger latches permanently.
|
|
1277
|
+
*/
|
|
1278
|
+
_armDetachWatchdog() {
|
|
1279
|
+
this._clearDetachWatchdog();
|
|
1280
|
+
this._detachWatchdog = setTimeout(() => {
|
|
1281
|
+
this._detachWatchdog = null;
|
|
1282
|
+
if (this._closing && this._handle) {
|
|
1283
|
+
this._detachOverlay();
|
|
1284
|
+
}
|
|
1285
|
+
}, POPUP_DETACH_WATCHDOG_MS);
|
|
1286
|
+
}
|
|
1287
|
+
/** @private Cancels a pending force-detach timer. */
|
|
1288
|
+
_clearDetachWatchdog() {
|
|
1289
|
+
if (this._detachWatchdog !== null) {
|
|
1290
|
+
clearTimeout(this._detachWatchdog);
|
|
1291
|
+
this._detachWatchdog = null;
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1294
|
+
/** @private Unsubscribes from the leave-animation-done stream. */
|
|
1295
|
+
_cleanupSubscription() {
|
|
1296
|
+
this._leaveSubscription?.unsubscribe();
|
|
1297
|
+
this._leaveSubscription = null;
|
|
1298
|
+
}
|
|
1299
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1300
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: MlvPopupTrigger, isStandalone: true, selector: "[mlvPopupTrigger]", inputs: { mlvPopupTrigger: { classPropertyName: "mlvPopupTrigger", publicName: "mlvPopupTrigger", isSignal: true, isRequired: false, transformFunction: null }, triggerOn: { classPropertyName: "triggerOn", publicName: "triggerOn", isSignal: true, isRequired: false, transformFunction: null }, ariaHasPopup: { classPropertyName: "ariaHasPopup", publicName: "ariaHasPopup", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick()", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "focus": "onFocus()", "blur": "onBlur()" }, properties: { "attr.aria-expanded": "_isOpen()", "attr.aria-haspopup": "ariaHasPopup()" } }, exportAs: ["mlvPopupTrigger"], ngImport: i0 });
|
|
1301
|
+
}
|
|
1302
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupTrigger, decorators: [{
|
|
1303
|
+
type: Directive,
|
|
1304
|
+
args: [{
|
|
1305
|
+
selector: '[mlvPopupTrigger]',
|
|
1306
|
+
host: {
|
|
1307
|
+
'[attr.aria-expanded]': '_isOpen()',
|
|
1308
|
+
'[attr.aria-haspopup]': 'ariaHasPopup()',
|
|
1309
|
+
'(click)': 'onClick()',
|
|
1310
|
+
'(mouseenter)': 'onMouseEnter()',
|
|
1311
|
+
'(mouseleave)': 'onMouseLeave()',
|
|
1312
|
+
'(focus)': 'onFocus()',
|
|
1313
|
+
'(blur)': 'onBlur()',
|
|
1314
|
+
},
|
|
1315
|
+
exportAs: 'mlvPopupTrigger',
|
|
1316
|
+
}]
|
|
1317
|
+
}], ctorParameters: () => [], propDecorators: { mlvPopupTrigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "mlvPopupTrigger", required: false }] }], triggerOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerOn", required: false }] }], ariaHasPopup: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaHasPopup", required: false }] }] } });
|
|
1318
|
+
|
|
1319
|
+
class MlvPopupContainer {
|
|
1320
|
+
/** @private Low-level popup overlay service used to open/close the CDK overlay. */
|
|
1321
|
+
_popupService = inject(MlvPopupService);
|
|
1322
|
+
/** @private View container used as the anchor for the popup's template portal. */
|
|
1323
|
+
_vcr = inject(ViewContainerRef);
|
|
1324
|
+
/** @private Host element reference, used as the overlay origin when no trigger is registered. */
|
|
1325
|
+
_elementRef = inject(ElementRef);
|
|
1326
|
+
/** @private Handle to the currently-open overlay, or `null` when closed. */
|
|
1327
|
+
_handle = null;
|
|
1328
|
+
/** @private True while the leave animation is playing, before the overlay detaches. */
|
|
1329
|
+
_closing = false;
|
|
1330
|
+
/** @private Subscription to the popup's leave-animation-done stream. */
|
|
1331
|
+
_leaveSubscription = null;
|
|
1332
|
+
/**
|
|
1333
|
+
* @private Last-resort timer that force-detaches an overlay whose leave never
|
|
1334
|
+
* completed. The popup's own animation fallback normally gets there first;
|
|
1335
|
+
* this one also covers a lost `animationState` write, which would otherwise
|
|
1336
|
+
* latch `_closing` with no path back to a detach.
|
|
1337
|
+
*/
|
|
1338
|
+
_detachWatchdog = null;
|
|
1339
|
+
/** @private Origin registered by a child `MlvPopupTrigger`, if any. */
|
|
1340
|
+
_triggerOrigin = null;
|
|
1341
|
+
/** @private Backdrop preference registered by a child `MlvPopupTrigger`. */
|
|
1342
|
+
_hasBackdrop = true;
|
|
1343
|
+
popup = contentChild.required(MlvPopup, /* @ts-ignore */
|
|
1344
|
+
...(ngDevMode ? [{ debugName: "popup" }] : /* istanbul ignore next */ []));
|
|
1345
|
+
/**
|
|
1346
|
+
* Called by a child {@link MlvPopupTrigger} to register its host element
|
|
1347
|
+
* as the visual anchor for the CDK overlay.
|
|
1348
|
+
*/
|
|
1349
|
+
registerTrigger(origin, hasBackdrop) {
|
|
1350
|
+
this._triggerOrigin = origin;
|
|
1351
|
+
this._hasBackdrop = hasBackdrop;
|
|
1352
|
+
}
|
|
1353
|
+
constructor() {
|
|
1354
|
+
effect(() => {
|
|
1355
|
+
const popup = this.popup();
|
|
1356
|
+
const isOpen = popup.opened();
|
|
1357
|
+
if (isOpen && !this._handle) {
|
|
1358
|
+
this._attachOverlay();
|
|
1359
|
+
}
|
|
1360
|
+
else if (!isOpen && this._handle && !this._closing) {
|
|
1361
|
+
this._startLeaveAnimation();
|
|
1362
|
+
}
|
|
1363
|
+
});
|
|
1364
|
+
}
|
|
1365
|
+
open() {
|
|
1366
|
+
if (this._handle)
|
|
1367
|
+
return;
|
|
1368
|
+
this.popup().opened.set(true);
|
|
1369
|
+
}
|
|
1370
|
+
close() {
|
|
1371
|
+
this.popup().opened.set(false);
|
|
1372
|
+
}
|
|
1373
|
+
toggle() {
|
|
1374
|
+
if (this._handle) {
|
|
1375
|
+
this.close();
|
|
1376
|
+
}
|
|
1377
|
+
else {
|
|
1378
|
+
this.open();
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
1381
|
+
/** Returns whether the popup is currently open. */
|
|
1382
|
+
isOpen() {
|
|
1383
|
+
return this.popup().opened();
|
|
1384
|
+
}
|
|
1385
|
+
ngOnDestroy() {
|
|
1386
|
+
this._cleanupSubscription();
|
|
1387
|
+
this._clearDetachWatchdog();
|
|
1388
|
+
this._detachOverlay();
|
|
1389
|
+
}
|
|
1390
|
+
/** @private Opens the CDK overlay for the popup and subscribes to its leave-animation completion. */
|
|
1391
|
+
_attachOverlay() {
|
|
1392
|
+
if (this._handle)
|
|
1393
|
+
return;
|
|
1394
|
+
const popup = this.popup();
|
|
1395
|
+
popup.animationState.set('idle');
|
|
1396
|
+
this._handle = this._popupService.open({
|
|
1397
|
+
origin: this._triggerOrigin ?? this._elementRef,
|
|
1398
|
+
template: popup.popupTemplate(),
|
|
1399
|
+
vcr: this._vcr,
|
|
1400
|
+
positions: popup.resolvedPositions(),
|
|
1401
|
+
size: popup.buildSizeConfig(),
|
|
1402
|
+
fullscreen: popup.isFullscreen(),
|
|
1403
|
+
hasBackdrop: popup.hasBackdrop() ?? this._hasBackdrop,
|
|
1404
|
+
scrollStrategy: popup.scrollStrategy(),
|
|
1405
|
+
flexibleDimensions: popup.flexibleDimensions(),
|
|
1406
|
+
dismissExcludeElements: popup.dismissExcludeElements(),
|
|
1407
|
+
onPositionChange: (change) => popup.updateArrowFromPosition(change.connectionPair),
|
|
1408
|
+
onClose: () => {
|
|
1409
|
+
this._clearDetachWatchdog();
|
|
1410
|
+
this._handle = null;
|
|
1411
|
+
this._closing = false;
|
|
1412
|
+
popup.animationState.set('idle');
|
|
1413
|
+
popup.opened.set(false);
|
|
1414
|
+
popup.afterClosed.emit();
|
|
1415
|
+
},
|
|
1416
|
+
onRequestClose: () => this.close(),
|
|
1417
|
+
});
|
|
1418
|
+
this._cleanupSubscription();
|
|
1419
|
+
this._leaveSubscription = popup.leaveAnimationDone$.subscribe(() => {
|
|
1420
|
+
this._detachOverlay();
|
|
1421
|
+
});
|
|
1422
|
+
// Deferred so the panel is in the DOM before the enter keyframes start;
|
|
1423
|
+
// `beginEnterAnimation()` refuses to overwrite a close that beat it here.
|
|
1424
|
+
queueMicrotask(() => popup.beginEnterAnimation());
|
|
1425
|
+
popup.afterOpened.emit();
|
|
1426
|
+
}
|
|
1427
|
+
/** @private Marks the container as closing and triggers the popup's leave animation. */
|
|
1428
|
+
_startLeaveAnimation() {
|
|
1429
|
+
if (!this._handle)
|
|
1430
|
+
return;
|
|
1431
|
+
this._closing = true;
|
|
1432
|
+
this.popup().animationState.set('leave');
|
|
1433
|
+
this._armDetachWatchdog();
|
|
1434
|
+
}
|
|
1435
|
+
/** @private Cleans up subscriptions, timers, and closes the overlay handle. */
|
|
1436
|
+
_detachOverlay() {
|
|
1437
|
+
this._cleanupSubscription();
|
|
1438
|
+
this._clearDetachWatchdog();
|
|
1439
|
+
if (this._handle) {
|
|
1440
|
+
this._handle.close();
|
|
1441
|
+
}
|
|
1442
|
+
}
|
|
1443
|
+
/**
|
|
1444
|
+
* @private Arms the force-detach timer for the pending leave. Detaching is
|
|
1445
|
+
* what resets `_closing` and `_handle`, so a leave that never completes must
|
|
1446
|
+
* still end in a detach or the container latches permanently.
|
|
1447
|
+
*/
|
|
1448
|
+
_armDetachWatchdog() {
|
|
1449
|
+
this._clearDetachWatchdog();
|
|
1450
|
+
this._detachWatchdog = setTimeout(() => {
|
|
1451
|
+
this._detachWatchdog = null;
|
|
1452
|
+
if (this._closing && this._handle) {
|
|
1453
|
+
this._detachOverlay();
|
|
1454
|
+
}
|
|
1455
|
+
}, POPUP_DETACH_WATCHDOG_MS);
|
|
1456
|
+
}
|
|
1457
|
+
/** @private Cancels a pending force-detach timer. */
|
|
1458
|
+
_clearDetachWatchdog() {
|
|
1459
|
+
if (this._detachWatchdog !== null) {
|
|
1460
|
+
clearTimeout(this._detachWatchdog);
|
|
1461
|
+
this._detachWatchdog = null;
|
|
1462
|
+
}
|
|
1463
|
+
}
|
|
1464
|
+
/** @private Unsubscribes from and clears the leave-animation subscription. */
|
|
1465
|
+
_cleanupSubscription() {
|
|
1466
|
+
this._leaveSubscription?.unsubscribe();
|
|
1467
|
+
this._leaveSubscription = null;
|
|
1468
|
+
}
|
|
1469
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1470
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: MlvPopupContainer, isStandalone: true, selector: "mlv-popup-container", providers: [{ provide: POPUP_CONTAINER, useExisting: MlvPopupContainer }], queries: [{ propertyName: "popup", first: true, predicate: MlvPopup, descendants: true, isSignal: true }], ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1471
|
+
}
|
|
1472
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvPopupContainer, decorators: [{
|
|
1473
|
+
type: Component,
|
|
1474
|
+
args: [{
|
|
1475
|
+
selector: 'mlv-popup-container',
|
|
1476
|
+
template: `<ng-content />`,
|
|
1477
|
+
encapsulation: ViewEncapsulation.None,
|
|
1478
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1479
|
+
providers: [{ provide: POPUP_CONTAINER, useExisting: MlvPopupContainer }],
|
|
1480
|
+
}]
|
|
1481
|
+
}], ctorParameters: () => [], propDecorators: { popup: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvPopup), { isSignal: true }] }] } });
|
|
1482
|
+
|
|
1483
|
+
/**
|
|
1484
|
+
* Generated bundle index. Do not edit.
|
|
1485
|
+
*/
|
|
1486
|
+
|
|
1487
|
+
export { MENU_POSITIONS, MlvPopup, MlvPopupContainer, MlvPopupContent, MlvPopupHeaderContent, MlvPopupPinnedContent, MlvPopupPositionResolver, MlvPopupService, MlvPopupTrigger, POPUP_CONTAINER, POPUP_DETACH_WATCHDOG_MS, POPUP_LEAVE_FALLBACK_MS, POPUP_POSITIONS, POPUP_POSITION_MAP, SUBMENU_POSITIONS, providePopupPositions };
|
|
1488
|
+
//# sourceMappingURL=malva-ui-core-popup.mjs.map
|