@malva-ui/core 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +92 -0
- package/README.md +61 -0
- package/accordion/index.d.ts +3 -0
- package/accordion/lib/accordion/accordion.d.ts +47 -0
- package/accordion/lib/accordion-item/accordion-header.d.ts +22 -0
- package/accordion/lib/accordion-item/accordion-item.d.ts +49 -0
- package/accordion/malva-ui-core-accordion.d.ts +5 -0
- package/action-bar/index.d.ts +4 -0
- package/action-bar/lib/action-bar/action-bar.d.ts +59 -0
- package/action-bar/lib/action-bar/components/action-bar-actions.d.ts +9 -0
- package/action-bar/lib/action-bar/components/action-bar-logo.d.ts +5 -0
- package/action-bar/lib/action-bar/components/action-bar-spacer.d.ts +5 -0
- package/action-bar/malva-ui-core-action-bar.d.ts +5 -0
- package/alert/index.d.ts +2 -0
- package/alert/lib/alert/alert.d.ts +84 -0
- package/alert/lib/alert/alert.directives.d.ts +44 -0
- package/alert/malva-ui-core-alert.d.ts +5 -0
- package/autocomplete/index.d.ts +1 -0
- package/autocomplete/lib/autocomplete/autocomplete.d.ts +296 -0
- package/autocomplete/malva-ui-core-autocomplete.d.ts +5 -0
- package/avatar/index.d.ts +2 -0
- package/avatar/lib/avatar/avatar.d.ts +125 -0
- package/avatar/lib/color-from-text.pipe.d.ts +21 -0
- package/avatar/malva-ui-core-avatar.d.ts +5 -0
- package/avatar-group/index.d.ts +1 -0
- package/avatar-group/lib/avatar-group/avatar-group.d.ts +115 -0
- package/avatar-group/malva-ui-core-avatar-group.d.ts +5 -0
- package/badge/index.d.ts +2 -0
- package/badge/lib/badge/badge.d.ts +59 -0
- package/badge/lib/badge-icon.d.ts +35 -0
- package/badge/malva-ui-core-badge.d.ts +5 -0
- package/bottom-nav/index.d.ts +1 -0
- package/bottom-nav/lib/bottom-nav/bottom-nav.d.ts +99 -0
- package/bottom-nav/malva-ui-core-bottom-nav.d.ts +5 -0
- package/breadcrumb/index.d.ts +5 -0
- package/breadcrumb/lib/breadcrumb/breadcrumb-item-host.d.ts +32 -0
- package/breadcrumb/lib/breadcrumb/breadcrumb-item.d.ts +41 -0
- package/breadcrumb/lib/breadcrumb/breadcrumb-separator.d.ts +31 -0
- package/breadcrumb/lib/breadcrumb/breadcrumb.d.ts +151 -0
- package/breadcrumb/lib/breadcrumb/breadcrumb.types.d.ts +26 -0
- package/breadcrumb/malva-ui-core-breadcrumb.d.ts +5 -0
- package/button/index.d.ts +7 -0
- package/button/lib/button/button.d.ts +61 -0
- package/button/lib/button-close/button-close.d.ts +24 -0
- package/button/lib/button-group/button-group.d.ts +21 -0
- package/button/lib/button-split/button-split.d.ts +21 -0
- package/button/lib/button-toggle/button-toggle.d.ts +33 -0
- package/button/lib/button-variant.token.d.ts +13 -0
- package/button/lib/button.directives.d.ts +14 -0
- package/button/lib/button.types.d.ts +8 -0
- package/button/malva-ui-core-button.d.ts +5 -0
- package/calendar/index.d.ts +3 -0
- package/calendar/lib/calendar/calendar.d.ts +182 -0
- package/calendar/lib/date-provider/date-adapter.d.ts +92 -0
- package/calendar/lib/date-provider/native-date-adapter.d.ts +60 -0
- package/calendar/malva-ui-core-calendar.d.ts +5 -0
- package/card/index.d.ts +5 -0
- package/card/lib/card/card.d.ts +43 -0
- package/card/lib/card-actions-def.d.ts +10 -0
- package/card/lib/card-footer-def.d.ts +13 -0
- package/card/lib/card-header-def.d.ts +10 -0
- package/card/lib/card-subheader-def.d.ts +16 -0
- package/card/malva-ui-core-card.d.ts +5 -0
- package/chat/index.d.ts +9 -0
- package/chat/lib/chat/chat.d.ts +133 -0
- package/chat/lib/chat-audio/chat-audio.d.ts +51 -0
- package/chat/lib/chat-audio/chat-audio.service.d.ts +21 -0
- package/chat/lib/chat-date/chat-date.d.ts +16 -0
- package/chat/lib/chat-format.d.ts +5 -0
- package/chat/lib/chat-media-grid/chat-media-grid.d.ts +32 -0
- package/chat/lib/chat-message/chat-message.d.ts +45 -0
- package/chat/lib/chat-render-list.d.ts +16 -0
- package/chat/lib/chat-tokens.d.ts +25 -0
- package/chat/lib/chat-typing/chat-typing.d.ts +16 -0
- package/chat/lib/chat.types.d.ts +80 -0
- package/chat/lib/defs/chat-author-def.d.ts +30 -0
- package/chat/lib/defs/chat-date-def.d.ts +22 -0
- package/chat/lib/defs/chat-message-def.d.ts +23 -0
- package/chat/malva-ui-core-chat.d.ts +5 -0
- package/checkbox/index.d.ts +3 -0
- package/checkbox/lib/checkbox/checkbox.d.ts +129 -0
- package/checkbox/lib/checkbox-group/checkbox-group.d.ts +24 -0
- package/checkbox/lib/checkbox-group-token.d.ts +6 -0
- package/checkbox/malva-ui-core-checkbox.d.ts +5 -0
- package/chip/index.d.ts +2 -0
- package/chip/lib/chip/chip.d.ts +107 -0
- package/chip/lib/chip/chip.directives.d.ts +18 -0
- package/chip/malva-ui-core-chip.d.ts +5 -0
- package/color-picker/index.d.ts +3 -0
- package/color-picker/lib/color-picker/color-picker.d.ts +188 -0
- package/color-picker/lib/color-picker-popup/color-picker-popup.d.ts +151 -0
- package/color-picker/lib/color-utils/color-utils.d.ts +102 -0
- package/color-picker/malva-ui-core-color-picker.d.ts +5 -0
- package/combobox/index.d.ts +2 -0
- package/combobox/lib/combobox/combobox.d.ts +400 -0
- package/combobox/lib/combobox-template.directives.d.ts +10 -0
- package/combobox/malva-ui-core-combobox.d.ts +5 -0
- package/copy-to-clipboard/index.d.ts +1 -0
- package/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.d.ts +130 -0
- package/copy-to-clipboard/malva-ui-core-copy-to-clipboard.d.ts +5 -0
- package/data-table/index.d.ts +8 -0
- package/data-table/lib/data-source.d.ts +5 -0
- package/data-table/lib/data-table/data-table-layout.d.ts +31 -0
- package/data-table/lib/data-table/data-table.d.ts +699 -0
- package/data-table/lib/data-table/services/data-table-column-visibility.service.d.ts +19 -0
- package/data-table/lib/data-table/services/data-table-editing.service.d.ts +37 -0
- package/data-table/lib/data-table/services/data-table-pinning.service.d.ts +37 -0
- package/data-table/lib/data-table-cell.d.ts +44 -0
- package/data-table/lib/data-table-edit-cell.d.ts +44 -0
- package/data-table/lib/data-table-error.d.ts +37 -0
- package/data-table/lib/data-table-footer.d.ts +26 -0
- package/data-table/lib/data-table-no-data.d.ts +19 -0
- package/data-table/lib/filter-dropdown/filter-dropdown.d.ts +54 -0
- package/data-table/lib/types.d.ts +134 -0
- package/data-table/malva-ui-core-data-table.d.ts +5 -0
- package/date-range-picker/index.d.ts +1 -0
- package/date-range-picker/lib/date-range-picker/date-range-picker.d.ts +145 -0
- package/date-range-picker/malva-ui-core-date-range-picker.d.ts +5 -0
- package/day-picker/index.d.ts +1 -0
- package/day-picker/lib/day-picker/day-picker.d.ts +51 -0
- package/day-picker/malva-ui-core-day-picker.d.ts +5 -0
- package/dialog/index.d.ts +11 -0
- package/dialog/lib/confirm-dialog-options.d.ts +41 -0
- package/dialog/lib/confirm-dialog.d.ts +52 -0
- package/dialog/lib/dialog/dialog.d.ts +22 -0
- package/dialog/lib/dialog-body.d.ts +9 -0
- package/dialog/lib/dialog-close.d.ts +27 -0
- package/dialog/lib/dialog-config.d.ts +112 -0
- package/dialog/lib/dialog-container.d.ts +40 -0
- package/dialog/lib/dialog-footer.d.ts +13 -0
- package/dialog/lib/dialog-header.d.ts +74 -0
- package/dialog/lib/dialog-ref.d.ts +95 -0
- package/dialog/lib/dialog-template.d.ts +65 -0
- package/dialog/lib/dialog-text-content.d.ts +24 -0
- package/dialog/lib/dialog.service.d.ts +63 -0
- package/dialog/lib/generate-routable-dialog-route.d.ts +49 -0
- package/dialog/lib/inject-dialog-ref.d.ts +8 -0
- package/dialog/lib/routable-dialog.d.ts +30 -0
- package/dialog/malva-ui-core-dialog.d.ts +5 -0
- package/divider/index.d.ts +1 -0
- package/divider/lib/divider/divider.d.ts +64 -0
- package/divider/malva-ui-core-divider.d.ts +5 -0
- package/docs/ai/accordion.md +102 -0
- package/docs/ai/action-bar.md +198 -0
- package/docs/ai/alert.md +190 -0
- package/docs/ai/autocomplete.md +111 -0
- package/docs/ai/avatar-group.md +184 -0
- package/docs/ai/avatar.md +150 -0
- package/docs/ai/badge.md +163 -0
- package/docs/ai/bottom-nav.md +267 -0
- package/docs/ai/breadcrumb.md +174 -0
- package/docs/ai/button.md +306 -0
- package/docs/ai/calendar.md +237 -0
- package/docs/ai/card.md +196 -0
- package/docs/ai/chat.md +145 -0
- package/docs/ai/checkbox.md +193 -0
- package/docs/ai/chip.md +139 -0
- package/docs/ai/color-picker.md +270 -0
- package/docs/ai/combobox.md +325 -0
- package/docs/ai/copy-to-clipboard.md +159 -0
- package/docs/ai/core.md +216 -0
- package/docs/ai/data-table.md +917 -0
- package/docs/ai/date-range-picker.md +101 -0
- package/docs/ai/day-picker.md +135 -0
- package/docs/ai/dialog.md +852 -0
- package/docs/ai/divider.md +159 -0
- package/docs/ai/drawer.md +607 -0
- package/docs/ai/dropdown.md +343 -0
- package/docs/ai/empty-state.md +167 -0
- package/docs/ai/expand.md +234 -0
- package/docs/ai/file-upload.md +402 -0
- package/docs/ai/filter.md +43 -0
- package/docs/ai/form-utils.md +319 -0
- package/docs/ai/form.md +129 -0
- package/docs/ai/input.md +175 -0
- package/docs/ai/kbd.md +70 -0
- package/docs/ai/layout.md +192 -0
- package/docs/ai/link.md +179 -0
- package/docs/ai/list.md +249 -0
- package/docs/ai/loader.md +122 -0
- package/docs/ai/menu.md +335 -0
- package/docs/ai/notification.md +281 -0
- package/docs/ai/number-input.md +123 -0
- package/docs/ai/page.md +422 -0
- package/docs/ai/pagination.md +237 -0
- package/docs/ai/pin-input.md +173 -0
- package/docs/ai/popup.md +347 -0
- package/docs/ai/progress.md +84 -0
- package/docs/ai/radio.md +201 -0
- package/docs/ai/rating.md +76 -0
- package/docs/ai/scrollbar.md +170 -0
- package/docs/ai/search-field.md +85 -0
- package/docs/ai/segmented.md +331 -0
- package/docs/ai/select.md +512 -0
- package/docs/ai/sidebar.md +992 -0
- package/docs/ai/skeleton.md +187 -0
- package/docs/ai/slider.md +180 -0
- package/docs/ai/split-pane.md +235 -0
- package/docs/ai/status-indicator.md +95 -0
- package/docs/ai/stepper.md +385 -0
- package/docs/ai/switch.md +216 -0
- package/docs/ai/tabs.md +564 -0
- package/docs/ai/textarea.md +249 -0
- package/docs/ai/tile.md +150 -0
- package/docs/ai/time-picker.md +214 -0
- package/docs/ai/timeline.md +320 -0
- package/docs/ai/title.md +105 -0
- package/docs/ai/toast.md +484 -0
- package/docs/ai/tokenizer.md +236 -0
- package/docs/ai/toolbar.md +155 -0
- package/docs/ai/tooltip.md +154 -0
- package/docs/ai/tree.md +177 -0
- package/drawer/index.d.ts +11 -0
- package/drawer/lib/drawer/drawer.d.ts +106 -0
- package/drawer/lib/drawer-body.d.ts +8 -0
- package/drawer/lib/drawer-content.d.ts +6 -0
- package/drawer/lib/drawer-footer.d.ts +5 -0
- package/drawer/lib/drawer-header.d.ts +5 -0
- package/drawer/lib/drawer-ref.d.ts +29 -0
- package/drawer/lib/drawer-resize.d.ts +65 -0
- package/drawer/lib/drawer-section/drawer-section.d.ts +15 -0
- package/drawer/lib/drawer-sections/drawer-sections.d.ts +22 -0
- package/drawer/lib/drawer-sections.service.d.ts +42 -0
- package/drawer/lib/drawer.service.d.ts +66 -0
- package/drawer/lib/generate-routable-drawer-route.d.ts +42 -0
- package/drawer/lib/routable-drawer.d.ts +30 -0
- package/drawer/malva-ui-core-drawer.d.ts +5 -0
- package/dropdown/index.d.ts +9 -0
- package/dropdown/lib/active-descendant.d.ts +64 -0
- package/dropdown/lib/dropdown-panel/dropdown-panel.d.ts +178 -0
- package/dropdown/lib/highlight-match.pipe.d.ts +27 -0
- package/dropdown/lib/option-matcher.d.ts +87 -0
- package/dropdown/lib/options-adapter.d.ts +142 -0
- package/dropdown/lib/options-result.d.ts +6 -0
- package/dropdown/lib/reconciliation.d.ts +19 -0
- package/dropdown/lib/select-data-source.d.ts +18 -0
- package/dropdown/lib/select-option.d.ts +37 -0
- package/dropdown/malva-ui-core-dropdown.d.ts +5 -0
- package/empty-state/index.d.ts +1 -0
- package/empty-state/lib/empty-state/empty-state.d.ts +34 -0
- package/empty-state/malva-ui-core-empty-state.d.ts +5 -0
- package/esm2022/accordion/index.js +4 -0
- package/esm2022/accordion/index.js.map +1 -0
- package/esm2022/accordion/lib/accordion/accordion.js +65 -0
- package/esm2022/accordion/lib/accordion/accordion.js.map +1 -0
- package/esm2022/accordion/lib/accordion-item/accordion-header.js +30 -0
- package/esm2022/accordion/lib/accordion-item/accordion-header.js.map +1 -0
- package/esm2022/accordion/lib/accordion-item/accordion-item.js +70 -0
- package/esm2022/accordion/lib/accordion-item/accordion-item.js.map +1 -0
- package/esm2022/accordion/malva-ui-core-accordion.js +5 -0
- package/esm2022/accordion/malva-ui-core-accordion.js.map +1 -0
- package/esm2022/action-bar/index.js +5 -0
- package/esm2022/action-bar/index.js.map +1 -0
- package/esm2022/action-bar/lib/action-bar/action-bar.js +64 -0
- package/esm2022/action-bar/lib/action-bar/action-bar.js.map +1 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js +20 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js.map +1 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js +13 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js.map +1 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js +13 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js.map +1 -0
- package/esm2022/action-bar/malva-ui-core-action-bar.js +5 -0
- package/esm2022/action-bar/malva-ui-core-action-bar.js.map +1 -0
- package/esm2022/alert/index.js +3 -0
- package/esm2022/alert/index.js.map +1 -0
- package/esm2022/alert/lib/alert/alert.directives.js +53 -0
- package/esm2022/alert/lib/alert/alert.directives.js.map +1 -0
- package/esm2022/alert/lib/alert/alert.js +118 -0
- package/esm2022/alert/lib/alert/alert.js.map +1 -0
- package/esm2022/alert/malva-ui-core-alert.js +5 -0
- package/esm2022/alert/malva-ui-core-alert.js.map +1 -0
- package/esm2022/autocomplete/index.js +2 -0
- package/esm2022/autocomplete/index.js.map +1 -0
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.js +765 -0
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.js.map +1 -0
- package/esm2022/autocomplete/malva-ui-core-autocomplete.js +5 -0
- package/esm2022/autocomplete/malva-ui-core-autocomplete.js.map +1 -0
- package/esm2022/avatar/index.js +3 -0
- package/esm2022/avatar/index.js.map +1 -0
- package/esm2022/avatar/lib/avatar/avatar.js +192 -0
- package/esm2022/avatar/lib/avatar/avatar.js.map +1 -0
- package/esm2022/avatar/lib/color-from-text.pipe.js +39 -0
- package/esm2022/avatar/lib/color-from-text.pipe.js.map +1 -0
- package/esm2022/avatar/malva-ui-core-avatar.js +5 -0
- package/esm2022/avatar/malva-ui-core-avatar.js.map +1 -0
- package/esm2022/avatar-group/index.js +2 -0
- package/esm2022/avatar-group/index.js.map +1 -0
- package/esm2022/avatar-group/lib/avatar-group/avatar-group.js +217 -0
- package/esm2022/avatar-group/lib/avatar-group/avatar-group.js.map +1 -0
- package/esm2022/avatar-group/malva-ui-core-avatar-group.js +5 -0
- package/esm2022/avatar-group/malva-ui-core-avatar-group.js.map +1 -0
- package/esm2022/badge/index.js +3 -0
- package/esm2022/badge/index.js.map +1 -0
- package/esm2022/badge/lib/badge/badge.js +71 -0
- package/esm2022/badge/lib/badge/badge.js.map +1 -0
- package/esm2022/badge/lib/badge-icon.js +47 -0
- package/esm2022/badge/lib/badge-icon.js.map +1 -0
- package/esm2022/badge/malva-ui-core-badge.js +5 -0
- package/esm2022/badge/malva-ui-core-badge.js.map +1 -0
- package/esm2022/bottom-nav/index.js +2 -0
- package/esm2022/bottom-nav/index.js.map +1 -0
- package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js +155 -0
- package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js.map +1 -0
- package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js +5 -0
- package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js.map +1 -0
- package/esm2022/breadcrumb/index.js +6 -0
- package/esm2022/breadcrumb/index.js.map +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js +43 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js.map +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js +110 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js.map +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js +38 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js.map +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js +284 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js.map +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js.map +1 -0
- package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js +5 -0
- package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js.map +1 -0
- package/esm2022/button/index.js +8 -0
- package/esm2022/button/index.js.map +1 -0
- package/esm2022/button/lib/button/button.js +137 -0
- package/esm2022/button/lib/button/button.js.map +1 -0
- package/esm2022/button/lib/button-close/button-close.js +52 -0
- package/esm2022/button/lib/button-close/button-close.js.map +1 -0
- package/esm2022/button/lib/button-group/button-group.js +44 -0
- package/esm2022/button/lib/button-group/button-group.js.map +1 -0
- package/esm2022/button/lib/button-split/button-split.js +44 -0
- package/esm2022/button/lib/button-split/button-split.js.map +1 -0
- package/esm2022/button/lib/button-toggle/button-toggle.js +94 -0
- package/esm2022/button/lib/button-toggle/button-toggle.js.map +1 -0
- package/esm2022/button/lib/button-variant.token.js +4 -0
- package/esm2022/button/lib/button-variant.token.js.map +1 -0
- package/esm2022/button/lib/button.directives.js +37 -0
- package/esm2022/button/lib/button.directives.js.map +1 -0
- package/esm2022/button/lib/button.types.js +1 -0
- package/esm2022/button/lib/button.types.js.map +1 -0
- package/esm2022/button/malva-ui-core-button.js +5 -0
- package/esm2022/button/malva-ui-core-button.js.map +1 -0
- package/esm2022/calendar/index.js +4 -0
- package/esm2022/calendar/index.js.map +1 -0
- package/esm2022/calendar/lib/calendar/calendar.js +672 -0
- package/esm2022/calendar/lib/calendar/calendar.js.map +1 -0
- package/esm2022/calendar/lib/date-provider/date-adapter.js +111 -0
- package/esm2022/calendar/lib/date-provider/date-adapter.js.map +1 -0
- package/esm2022/calendar/lib/date-provider/native-date-adapter.js +151 -0
- package/esm2022/calendar/lib/date-provider/native-date-adapter.js.map +1 -0
- package/esm2022/calendar/malva-ui-core-calendar.js +5 -0
- package/esm2022/calendar/malva-ui-core-calendar.js.map +1 -0
- package/esm2022/card/index.js +6 -0
- package/esm2022/card/index.js.map +1 -0
- package/esm2022/card/lib/card/card.js +54 -0
- package/esm2022/card/lib/card/card.js.map +1 -0
- package/esm2022/card/lib/card-actions-def.js +27 -0
- package/esm2022/card/lib/card-actions-def.js.map +1 -0
- package/esm2022/card/lib/card-footer-def.js +32 -0
- package/esm2022/card/lib/card-footer-def.js.map +1 -0
- package/esm2022/card/lib/card-header-def.js +27 -0
- package/esm2022/card/lib/card-header-def.js.map +1 -0
- package/esm2022/card/lib/card-subheader-def.js +33 -0
- package/esm2022/card/lib/card-subheader-def.js.map +1 -0
- package/esm2022/card/malva-ui-core-card.js +5 -0
- package/esm2022/card/malva-ui-core-card.js.map +1 -0
- package/esm2022/chat/index.js +10 -0
- package/esm2022/chat/index.js.map +1 -0
- package/esm2022/chat/lib/chat/chat.js +326 -0
- package/esm2022/chat/lib/chat/chat.js.map +1 -0
- package/esm2022/chat/lib/chat-audio/chat-audio.js +110 -0
- package/esm2022/chat/lib/chat-audio/chat-audio.js.map +1 -0
- package/esm2022/chat/lib/chat-audio/chat-audio.service.js +28 -0
- package/esm2022/chat/lib/chat-audio/chat-audio.service.js.map +1 -0
- package/esm2022/chat/lib/chat-date/chat-date.js +46 -0
- package/esm2022/chat/lib/chat-date/chat-date.js.map +1 -0
- package/esm2022/chat/lib/chat-format.js +11 -0
- package/esm2022/chat/lib/chat-format.js.map +1 -0
- package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js +53 -0
- package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js.map +1 -0
- package/esm2022/chat/lib/chat-message/chat-message.js +86 -0
- package/esm2022/chat/lib/chat-message/chat-message.js.map +1 -0
- package/esm2022/chat/lib/chat-render-list.js +55 -0
- package/esm2022/chat/lib/chat-render-list.js.map +1 -0
- package/esm2022/chat/lib/chat-tokens.js +9 -0
- package/esm2022/chat/lib/chat-tokens.js.map +1 -0
- package/esm2022/chat/lib/chat-typing/chat-typing.js +50 -0
- package/esm2022/chat/lib/chat-typing/chat-typing.js.map +1 -0
- package/esm2022/chat/lib/chat.types.js +1 -0
- package/esm2022/chat/lib/chat.types.js.map +1 -0
- package/esm2022/chat/lib/defs/chat-author-def.js +27 -0
- package/esm2022/chat/lib/defs/chat-author-def.js.map +1 -0
- package/esm2022/chat/lib/defs/chat-date-def.js +24 -0
- package/esm2022/chat/lib/defs/chat-date-def.js.map +1 -0
- package/esm2022/chat/lib/defs/chat-message-def.js +30 -0
- package/esm2022/chat/lib/defs/chat-message-def.js.map +1 -0
- package/esm2022/chat/malva-ui-core-chat.js +5 -0
- package/esm2022/chat/malva-ui-core-chat.js.map +1 -0
- package/esm2022/checkbox/index.js +4 -0
- package/esm2022/checkbox/index.js.map +1 -0
- package/esm2022/checkbox/lib/checkbox/checkbox.js +201 -0
- package/esm2022/checkbox/lib/checkbox/checkbox.js.map +1 -0
- package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js +68 -0
- package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js.map +1 -0
- package/esm2022/checkbox/lib/checkbox-group-token.js +3 -0
- package/esm2022/checkbox/lib/checkbox-group-token.js.map +1 -0
- package/esm2022/checkbox/malva-ui-core-checkbox.js +5 -0
- package/esm2022/checkbox/malva-ui-core-checkbox.js.map +1 -0
- package/esm2022/chip/index.js +3 -0
- package/esm2022/chip/index.js.map +1 -0
- package/esm2022/chip/lib/chip/chip.directives.js +32 -0
- package/esm2022/chip/lib/chip/chip.directives.js.map +1 -0
- package/esm2022/chip/lib/chip/chip.js +140 -0
- package/esm2022/chip/lib/chip/chip.js.map +1 -0
- package/esm2022/chip/malva-ui-core-chip.js +5 -0
- package/esm2022/chip/malva-ui-core-chip.js.map +1 -0
- package/esm2022/color-picker/index.js +4 -0
- package/esm2022/color-picker/index.js.map +1 -0
- package/esm2022/color-picker/lib/color-picker/color-picker.js +530 -0
- package/esm2022/color-picker/lib/color-picker/color-picker.js.map +1 -0
- package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js +419 -0
- package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js.map +1 -0
- package/esm2022/color-picker/lib/color-utils/color-utils.js +256 -0
- package/esm2022/color-picker/lib/color-utils/color-utils.js.map +1 -0
- package/esm2022/color-picker/malva-ui-core-color-picker.js +5 -0
- package/esm2022/color-picker/malva-ui-core-color-picker.js.map +1 -0
- package/esm2022/combobox/index.js +3 -0
- package/esm2022/combobox/index.js.map +1 -0
- package/esm2022/combobox/lib/combobox/combobox.js +911 -0
- package/esm2022/combobox/lib/combobox/combobox.js.map +1 -0
- package/esm2022/combobox/lib/combobox-template.directives.js +24 -0
- package/esm2022/combobox/lib/combobox-template.directives.js.map +1 -0
- package/esm2022/combobox/malva-ui-core-combobox.js +5 -0
- package/esm2022/combobox/malva-ui-core-combobox.js.map +1 -0
- package/esm2022/copy-to-clipboard/index.js +2 -0
- package/esm2022/copy-to-clipboard/index.js.map +1 -0
- package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js +201 -0
- package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js.map +1 -0
- package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js +5 -0
- package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js.map +1 -0
- package/esm2022/data-table/index.js +9 -0
- package/esm2022/data-table/index.js.map +1 -0
- package/esm2022/data-table/lib/data-source.js +6 -0
- package/esm2022/data-table/lib/data-source.js.map +1 -0
- package/esm2022/data-table/lib/data-table/data-table-layout.js +84 -0
- package/esm2022/data-table/lib/data-table/data-table-layout.js.map +1 -0
- package/esm2022/data-table/lib/data-table/data-table.js +1846 -0
- package/esm2022/data-table/lib/data-table/data-table.js.map +1 -0
- package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js +37 -0
- package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js.map +1 -0
- package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js +63 -0
- package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js.map +1 -0
- package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js +68 -0
- package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js.map +1 -0
- package/esm2022/data-table/lib/data-table-cell.js +46 -0
- package/esm2022/data-table/lib/data-table-cell.js.map +1 -0
- package/esm2022/data-table/lib/data-table-edit-cell.js +46 -0
- package/esm2022/data-table/lib/data-table-edit-cell.js.map +1 -0
- package/esm2022/data-table/lib/data-table-error.js +37 -0
- package/esm2022/data-table/lib/data-table-error.js.map +1 -0
- package/esm2022/data-table/lib/data-table-footer.js +33 -0
- package/esm2022/data-table/lib/data-table-footer.js.map +1 -0
- package/esm2022/data-table/lib/data-table-no-data.js +26 -0
- package/esm2022/data-table/lib/data-table-no-data.js.map +1 -0
- package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js +224 -0
- package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js.map +1 -0
- package/esm2022/data-table/lib/types.js +1 -0
- package/esm2022/data-table/lib/types.js.map +1 -0
- package/esm2022/data-table/malva-ui-core-data-table.js +5 -0
- package/esm2022/data-table/malva-ui-core-data-table.js.map +1 -0
- package/esm2022/date-range-picker/index.js +2 -0
- package/esm2022/date-range-picker/index.js.map +1 -0
- package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js +269 -0
- package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js.map +1 -0
- package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js +5 -0
- package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js.map +1 -0
- package/esm2022/day-picker/index.js +2 -0
- package/esm2022/day-picker/index.js.map +1 -0
- package/esm2022/day-picker/lib/day-picker/day-picker.js +124 -0
- package/esm2022/day-picker/lib/day-picker/day-picker.js.map +1 -0
- package/esm2022/day-picker/malva-ui-core-day-picker.js +5 -0
- package/esm2022/day-picker/malva-ui-core-day-picker.js.map +1 -0
- package/esm2022/dialog/index.js +12 -0
- package/esm2022/dialog/index.js.map +1 -0
- package/esm2022/dialog/lib/confirm-dialog-options.js +1 -0
- package/esm2022/dialog/lib/confirm-dialog-options.js.map +1 -0
- package/esm2022/dialog/lib/confirm-dialog.js +155 -0
- package/esm2022/dialog/lib/confirm-dialog.js.map +1 -0
- package/esm2022/dialog/lib/dialog/dialog.js +40 -0
- package/esm2022/dialog/lib/dialog/dialog.js.map +1 -0
- package/esm2022/dialog/lib/dialog-body.js +33 -0
- package/esm2022/dialog/lib/dialog-body.js.map +1 -0
- package/esm2022/dialog/lib/dialog-close.js +45 -0
- package/esm2022/dialog/lib/dialog-close.js.map +1 -0
- package/esm2022/dialog/lib/dialog-config.js +23 -0
- package/esm2022/dialog/lib/dialog-config.js.map +1 -0
- package/esm2022/dialog/lib/dialog-container.js +69 -0
- package/esm2022/dialog/lib/dialog-container.js.map +1 -0
- package/esm2022/dialog/lib/dialog-footer.js +29 -0
- package/esm2022/dialog/lib/dialog-footer.js.map +1 -0
- package/esm2022/dialog/lib/dialog-header.js +181 -0
- package/esm2022/dialog/lib/dialog-header.js.map +1 -0
- package/esm2022/dialog/lib/dialog-ref.js +167 -0
- package/esm2022/dialog/lib/dialog-ref.js.map +1 -0
- package/esm2022/dialog/lib/dialog-template.js +136 -0
- package/esm2022/dialog/lib/dialog-template.js.map +1 -0
- package/esm2022/dialog/lib/dialog-text-content.js +59 -0
- package/esm2022/dialog/lib/dialog-text-content.js.map +1 -0
- package/esm2022/dialog/lib/dialog.service.js +205 -0
- package/esm2022/dialog/lib/dialog.service.js.map +1 -0
- package/esm2022/dialog/lib/generate-routable-dialog-route.js +59 -0
- package/esm2022/dialog/lib/generate-routable-dialog-route.js.map +1 -0
- package/esm2022/dialog/lib/inject-dialog-ref.js +16 -0
- package/esm2022/dialog/lib/inject-dialog-ref.js.map +1 -0
- package/esm2022/dialog/lib/routable-dialog.js +91 -0
- package/esm2022/dialog/lib/routable-dialog.js.map +1 -0
- package/esm2022/dialog/malva-ui-core-dialog.js +5 -0
- package/esm2022/dialog/malva-ui-core-dialog.js.map +1 -0
- package/esm2022/divider/index.js +2 -0
- package/esm2022/divider/index.js.map +1 -0
- package/esm2022/divider/lib/divider/divider.js +73 -0
- package/esm2022/divider/lib/divider/divider.js.map +1 -0
- package/esm2022/divider/malva-ui-core-divider.js +5 -0
- package/esm2022/divider/malva-ui-core-divider.js.map +1 -0
- package/esm2022/drawer/index.js +12 -0
- package/esm2022/drawer/index.js.map +1 -0
- package/esm2022/drawer/lib/drawer/drawer.js +180 -0
- package/esm2022/drawer/lib/drawer/drawer.js.map +1 -0
- package/esm2022/drawer/lib/drawer-body.js +32 -0
- package/esm2022/drawer/lib/drawer-body.js.map +1 -0
- package/esm2022/drawer/lib/drawer-content.js +14 -0
- package/esm2022/drawer/lib/drawer-content.js.map +1 -0
- package/esm2022/drawer/lib/drawer-footer.js +14 -0
- package/esm2022/drawer/lib/drawer-footer.js.map +1 -0
- package/esm2022/drawer/lib/drawer-header.js +14 -0
- package/esm2022/drawer/lib/drawer-header.js.map +1 -0
- package/esm2022/drawer/lib/drawer-ref.js +31 -0
- package/esm2022/drawer/lib/drawer-ref.js.map +1 -0
- package/esm2022/drawer/lib/drawer-resize.js +243 -0
- package/esm2022/drawer/lib/drawer-resize.js.map +1 -0
- package/esm2022/drawer/lib/drawer-section/drawer-section.js +26 -0
- package/esm2022/drawer/lib/drawer-section/drawer-section.js.map +1 -0
- package/esm2022/drawer/lib/drawer-sections/drawer-sections.js +58 -0
- package/esm2022/drawer/lib/drawer-sections/drawer-sections.js.map +1 -0
- package/esm2022/drawer/lib/drawer-sections.service.js +83 -0
- package/esm2022/drawer/lib/drawer-sections.service.js.map +1 -0
- package/esm2022/drawer/lib/drawer.service.js +86 -0
- package/esm2022/drawer/lib/drawer.service.js.map +1 -0
- package/esm2022/drawer/lib/generate-routable-drawer-route.js +52 -0
- package/esm2022/drawer/lib/generate-routable-drawer-route.js.map +1 -0
- package/esm2022/drawer/lib/routable-drawer.js +91 -0
- package/esm2022/drawer/lib/routable-drawer.js.map +1 -0
- package/esm2022/drawer/malva-ui-core-drawer.js +5 -0
- package/esm2022/drawer/malva-ui-core-drawer.js.map +1 -0
- package/esm2022/dropdown/index.js +10 -0
- package/esm2022/dropdown/index.js.map +1 -0
- package/esm2022/dropdown/lib/active-descendant.js +92 -0
- package/esm2022/dropdown/lib/active-descendant.js.map +1 -0
- package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js +295 -0
- package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js.map +1 -0
- package/esm2022/dropdown/lib/highlight-match.pipe.js +36 -0
- package/esm2022/dropdown/lib/highlight-match.pipe.js.map +1 -0
- package/esm2022/dropdown/lib/option-matcher.js +124 -0
- package/esm2022/dropdown/lib/option-matcher.js.map +1 -0
- package/esm2022/dropdown/lib/options-adapter.js +356 -0
- package/esm2022/dropdown/lib/options-adapter.js.map +1 -0
- package/esm2022/dropdown/lib/options-result.js +11 -0
- package/esm2022/dropdown/lib/options-result.js.map +1 -0
- package/esm2022/dropdown/lib/reconciliation.js +32 -0
- package/esm2022/dropdown/lib/reconciliation.js.map +1 -0
- package/esm2022/dropdown/lib/select-data-source.js +21 -0
- package/esm2022/dropdown/lib/select-data-source.js.map +1 -0
- package/esm2022/dropdown/lib/select-option.js +25 -0
- package/esm2022/dropdown/lib/select-option.js.map +1 -0
- package/esm2022/dropdown/malva-ui-core-dropdown.js +5 -0
- package/esm2022/dropdown/malva-ui-core-dropdown.js.map +1 -0
- package/esm2022/empty-state/index.js +2 -0
- package/esm2022/empty-state/index.js.map +1 -0
- package/esm2022/empty-state/lib/empty-state/empty-state.js +43 -0
- package/esm2022/empty-state/lib/empty-state/empty-state.js.map +1 -0
- package/esm2022/empty-state/malva-ui-core-empty-state.js +5 -0
- package/esm2022/empty-state/malva-ui-core-empty-state.js.map +1 -0
- package/esm2022/expand/index.js +3 -0
- package/esm2022/expand/index.js.map +1 -0
- package/esm2022/expand/lib/expand/expand-content.js +33 -0
- package/esm2022/expand/lib/expand/expand-content.js.map +1 -0
- package/esm2022/expand/lib/expand/expand.js +93 -0
- package/esm2022/expand/lib/expand/expand.js.map +1 -0
- package/esm2022/expand/malva-ui-core-expand.js +5 -0
- package/esm2022/expand/malva-ui-core-expand.js.map +1 -0
- package/esm2022/file-upload/index.js +5 -0
- package/esm2022/file-upload/index.js.map +1 -0
- package/esm2022/file-upload/lib/file-upload/file-upload.js +324 -0
- package/esm2022/file-upload/lib/file-upload/file-upload.js.map +1 -0
- package/esm2022/file-upload/lib/file-upload/file-upload.types.js +1 -0
- package/esm2022/file-upload/lib/file-upload/file-upload.types.js.map +1 -0
- package/esm2022/file-upload/lib/file-upload-action.js +65 -0
- package/esm2022/file-upload/lib/file-upload-action.js.map +1 -0
- package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js +55 -0
- package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js.map +1 -0
- package/esm2022/file-upload/malva-ui-core-file-upload.js +5 -0
- package/esm2022/file-upload/malva-ui-core-file-upload.js.map +1 -0
- package/esm2022/filter/index.js +4 -0
- package/esm2022/filter/index.js.map +1 -0
- package/esm2022/filter/lib/filter/filter.js +552 -0
- package/esm2022/filter/lib/filter/filter.js.map +1 -0
- package/esm2022/filter/lib/filter.types.js +1 -0
- package/esm2022/filter/lib/filter.types.js.map +1 -0
- package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js +518 -0
- package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js.map +1 -0
- package/esm2022/filter/malva-ui-core-filter.js +5 -0
- package/esm2022/filter/malva-ui-core-filter.js.map +1 -0
- package/esm2022/form/index.js +7 -0
- package/esm2022/form/index.js.map +1 -0
- package/esm2022/form/lib/fieldset/fieldset.js +101 -0
- package/esm2022/form/lib/fieldset/fieldset.js.map +1 -0
- package/esm2022/form/lib/fieldset-span.js +49 -0
- package/esm2022/form/lib/fieldset-span.js.map +1 -0
- package/esm2022/form/lib/form/form.js +60 -0
- package/esm2022/form/lib/form/form.js.map +1 -0
- package/esm2022/form/lib/form-actions.js +34 -0
- package/esm2022/form/lib/form-actions.js.map +1 -0
- package/esm2022/form/lib/form-gap.js +15 -0
- package/esm2022/form/lib/form-gap.js.map +1 -0
- package/esm2022/form/lib/form-header.js +27 -0
- package/esm2022/form/lib/form-header.js.map +1 -0
- package/esm2022/form/lib/form.types.js +1 -0
- package/esm2022/form/lib/form.types.js.map +1 -0
- package/esm2022/form/malva-ui-core-form.js +5 -0
- package/esm2022/form/malva-ui-core-form.js.map +1 -0
- package/esm2022/form-utils/index.js +16 -0
- package/esm2022/form-utils/index.js.map +1 -0
- package/esm2022/form-utils/lib/aria-value-bridge.js +57 -0
- package/esm2022/form-utils/lib/aria-value-bridge.js.map +1 -0
- package/esm2022/form-utils/lib/description/description.js +24 -0
- package/esm2022/form-utils/lib/description/description.js.map +1 -0
- package/esm2022/form-utils/lib/focusable-group-base.js +87 -0
- package/esm2022/form-utils/lib/focusable-group-base.js.map +1 -0
- package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js +192 -0
- package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js.map +1 -0
- package/esm2022/form-utils/lib/form-control-sides.js +34 -0
- package/esm2022/form-utils/lib/form-control-sides.js.map +1 -0
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js +14 -0
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js.map +1 -0
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js +47 -0
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js.map +1 -0
- package/esm2022/form-utils/lib/form-field/form-field.js +245 -0
- package/esm2022/form-utils/lib/form-field/form-field.js.map +1 -0
- package/esm2022/form-utils/lib/hint/hint.js +11 -0
- package/esm2022/form-utils/lib/hint/hint.js.map +1 -0
- package/esm2022/form-utils/lib/label/label.js +55 -0
- package/esm2022/form-utils/lib/label/label.js.map +1 -0
- package/esm2022/form-utils/lib/message/message.js +20 -0
- package/esm2022/form-utils/lib/message/message.js.map +1 -0
- package/esm2022/form-utils/lib/models/error-display-strategy.js +1 -0
- package/esm2022/form-utils/lib/models/error-display-strategy.js.map +1 -0
- package/esm2022/form-utils/lib/models/form-control-connector.js +3 -0
- package/esm2022/form-utils/lib/models/form-control-connector.js.map +1 -0
- package/esm2022/form-utils/lib/models/form-state.js +1 -0
- package/esm2022/form-utils/lib/models/form-state.js.map +1 -0
- package/esm2022/form-utils/lib/selection.service.js +81 -0
- package/esm2022/form-utils/lib/selection.service.js.map +1 -0
- package/esm2022/form-utils/malva-ui-core-form-utils.js +5 -0
- package/esm2022/form-utils/malva-ui-core-form-utils.js.map +1 -0
- package/esm2022/form-utils/testing/index.js +2 -0
- package/esm2022/form-utils/testing/index.js.map +1 -0
- package/esm2022/form-utils/testing/lib/forms-binding-matrix.js +32 -0
- package/esm2022/form-utils/testing/lib/forms-binding-matrix.js.map +1 -0
- package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js +5 -0
- package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js.map +1 -0
- package/esm2022/index.js +70 -0
- package/esm2022/index.js.map +1 -0
- package/esm2022/input/index.js +4 -0
- package/esm2022/input/index.js.map +1 -0
- package/esm2022/input/lib/input/input-native.js +49 -0
- package/esm2022/input/lib/input/input-native.js.map +1 -0
- package/esm2022/input/lib/input/input-value-accessor.js +4 -0
- package/esm2022/input/lib/input/input-value-accessor.js.map +1 -0
- package/esm2022/input/lib/input/input.js +277 -0
- package/esm2022/input/lib/input/input.js.map +1 -0
- package/esm2022/input/lib/input/password-strength.js +46 -0
- package/esm2022/input/lib/input/password-strength.js.map +1 -0
- package/esm2022/input/malva-ui-core-input.js +5 -0
- package/esm2022/input/malva-ui-core-input.js.map +1 -0
- package/esm2022/kbd/index.js +2 -0
- package/esm2022/kbd/index.js.map +1 -0
- package/esm2022/kbd/lib/kbd/kbd.js +124 -0
- package/esm2022/kbd/lib/kbd/kbd.js.map +1 -0
- package/esm2022/kbd/malva-ui-core-kbd.js +5 -0
- package/esm2022/kbd/malva-ui-core-kbd.js.map +1 -0
- package/esm2022/layout/index.js +5 -0
- package/esm2022/layout/index.js.map +1 -0
- package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js +14 -0
- package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js.map +1 -0
- package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js +14 -0
- package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js.map +1 -0
- package/esm2022/layout/lib/layout/layout.js +43 -0
- package/esm2022/layout/lib/layout/layout.js.map +1 -0
- package/esm2022/layout/lib/layout/services/theme.service.js +121 -0
- package/esm2022/layout/lib/layout/services/theme.service.js.map +1 -0
- package/esm2022/layout/malva-ui-core-layout.js +5 -0
- package/esm2022/layout/malva-ui-core-layout.js.map +1 -0
- package/esm2022/link/index.js +3 -0
- package/esm2022/link/index.js.map +1 -0
- package/esm2022/link/lib/link/link.directives.js +24 -0
- package/esm2022/link/lib/link/link.directives.js.map +1 -0
- package/esm2022/link/lib/link/link.js +61 -0
- package/esm2022/link/lib/link/link.js.map +1 -0
- package/esm2022/link/malva-ui-core-link.js +5 -0
- package/esm2022/link/malva-ui-core-link.js.map +1 -0
- package/esm2022/list/index.js +14 -0
- package/esm2022/list/index.js.map +1 -0
- package/esm2022/list/lib/list/list.js +28 -0
- package/esm2022/list/lib/list/list.js.map +1 -0
- package/esm2022/list/lib/list-item/list-item.js +125 -0
- package/esm2022/list/lib/list-item/list-item.js.map +1 -0
- package/esm2022/list/lib/list-item-actions.js +23 -0
- package/esm2022/list/lib/list-item-actions.js.map +1 -0
- package/esm2022/list/lib/list-item-byline.js +13 -0
- package/esm2022/list/lib/list-item-byline.js.map +1 -0
- package/esm2022/list/lib/list-item-group/list-item-group.js +25 -0
- package/esm2022/list/lib/list-item-group/list-item-group.js.map +1 -0
- package/esm2022/list/lib/list-item-link/list-item-link.js +20 -0
- package/esm2022/list/lib/list-item-link/list-item-link.js.map +1 -0
- package/esm2022/list/lib/list-item-media.js +13 -0
- package/esm2022/list/lib/list-item-media.js.map +1 -0
- package/esm2022/list/lib/list-item-meta.js +13 -0
- package/esm2022/list/lib/list-item-meta.js.map +1 -0
- package/esm2022/list/lib/list-item-prefix.js +13 -0
- package/esm2022/list/lib/list-item-prefix.js.map +1 -0
- package/esm2022/list/lib/list-item-suffix.js +13 -0
- package/esm2022/list/lib/list-item-suffix.js.map +1 -0
- package/esm2022/list/lib/list-item-template.js +14 -0
- package/esm2022/list/lib/list-item-template.js.map +1 -0
- package/esm2022/list/lib/list-item-title.js +13 -0
- package/esm2022/list/lib/list-item-title.js.map +1 -0
- package/esm2022/list/lib/list-selectable.js +116 -0
- package/esm2022/list/lib/list-selectable.js.map +1 -0
- package/esm2022/list/malva-ui-core-list.js +5 -0
- package/esm2022/list/malva-ui-core-list.js.map +1 -0
- package/esm2022/loader/index.js +2 -0
- package/esm2022/loader/index.js.map +1 -0
- package/esm2022/loader/lib/loader/loader.js +134 -0
- package/esm2022/loader/lib/loader/loader.js.map +1 -0
- package/esm2022/loader/malva-ui-core-loader.js +5 -0
- package/esm2022/loader/malva-ui-core-loader.js.map +1 -0
- package/esm2022/malva-ui-core.js +5 -0
- package/esm2022/malva-ui-core.js.map +1 -0
- package/esm2022/menu/index.js +10 -0
- package/esm2022/menu/index.js.map +1 -0
- package/esm2022/menu/lib/menu/menu-group-label.js +35 -0
- package/esm2022/menu/lib/menu/menu-group-label.js.map +1 -0
- package/esm2022/menu/lib/menu/menu-group.js +44 -0
- package/esm2022/menu/lib/menu/menu-group.js.map +1 -0
- package/esm2022/menu/lib/menu/menu-item.js +117 -0
- package/esm2022/menu/lib/menu/menu-item.js.map +1 -0
- package/esm2022/menu/lib/menu/menu-separator.js +41 -0
- package/esm2022/menu/lib/menu/menu-separator.js.map +1 -0
- package/esm2022/menu/lib/menu/menu-trigger.js +653 -0
- package/esm2022/menu/lib/menu/menu-trigger.js.map +1 -0
- package/esm2022/menu/lib/menu/menu.js +308 -0
- package/esm2022/menu/lib/menu/menu.js.map +1 -0
- package/esm2022/menu/lib/menu/menu.types.js +4 -0
- package/esm2022/menu/lib/menu/menu.types.js.map +1 -0
- package/esm2022/menu/lib/menu/menubar.js +257 -0
- package/esm2022/menu/lib/menu/menubar.js.map +1 -0
- package/esm2022/menu/lib/menu/menubar.types.js +4 -0
- package/esm2022/menu/lib/menu/menubar.types.js.map +1 -0
- package/esm2022/menu/lib/menu/submenu-aim.js +30 -0
- package/esm2022/menu/lib/menu/submenu-aim.js.map +1 -0
- package/esm2022/menu/malva-ui-core-menu.js +5 -0
- package/esm2022/menu/malva-ui-core-menu.js.map +1 -0
- package/esm2022/notification/index.js +5 -0
- package/esm2022/notification/index.js.map +1 -0
- package/esm2022/notification/lib/notification-item/notification-item.js +65 -0
- package/esm2022/notification/lib/notification-item/notification-item.js.map +1 -0
- package/esm2022/notification/lib/notification-ref.js +13 -0
- package/esm2022/notification/lib/notification-ref.js.map +1 -0
- package/esm2022/notification/lib/notification.service.js +118 -0
- package/esm2022/notification/lib/notification.service.js.map +1 -0
- package/esm2022/notification/lib/notification.types.js +6 -0
- package/esm2022/notification/lib/notification.types.js.map +1 -0
- package/esm2022/notification/malva-ui-core-notification.js +5 -0
- package/esm2022/notification/malva-ui-core-notification.js.map +1 -0
- package/esm2022/number-input/index.js +2 -0
- package/esm2022/number-input/index.js.map +1 -0
- package/esm2022/number-input/lib/number-input/number-input.js +395 -0
- package/esm2022/number-input/lib/number-input/number-input.js.map +1 -0
- package/esm2022/number-input/malva-ui-core-number-input.js +5 -0
- package/esm2022/number-input/malva-ui-core-number-input.js.map +1 -0
- package/esm2022/page/index.js +15 -0
- package/esm2022/page/index.js.map +1 -0
- package/esm2022/page/lib/page/page-scroll.token.js +9 -0
- package/esm2022/page/lib/page/page-scroll.token.js.map +1 -0
- package/esm2022/page/lib/page/page-snap-controller.js +170 -0
- package/esm2022/page/lib/page/page-snap-controller.js.map +1 -0
- package/esm2022/page/lib/page/page-snap.directive.js +65 -0
- package/esm2022/page/lib/page/page-snap.directive.js.map +1 -0
- package/esm2022/page/lib/page/page.js +173 -0
- package/esm2022/page/lib/page/page.js.map +1 -0
- package/esm2022/page/lib/page-content/page-aside.js +13 -0
- package/esm2022/page/lib/page-content/page-aside.js.map +1 -0
- package/esm2022/page/lib/page-content/page-content.js +72 -0
- package/esm2022/page/lib/page-content/page-content.js.map +1 -0
- package/esm2022/page/lib/page-dock/page-dock.js +128 -0
- package/esm2022/page/lib/page-dock/page-dock.js.map +1 -0
- package/esm2022/page/lib/page-dock/page-dock.slots.js +39 -0
- package/esm2022/page/lib/page-dock/page-dock.slots.js.map +1 -0
- package/esm2022/page/lib/page-header/page-header.directives.js +88 -0
- package/esm2022/page/lib/page-header/page-header.directives.js.map +1 -0
- package/esm2022/page/lib/page-header/page-header.js +124 -0
- package/esm2022/page/lib/page-header/page-header.js.map +1 -0
- package/esm2022/page/lib/page-shell/page-shell-color.js +193 -0
- package/esm2022/page/lib/page-shell/page-shell-color.js.map +1 -0
- package/esm2022/page/lib/page-shell/page-shell-css-color.js +207 -0
- package/esm2022/page/lib/page-shell/page-shell-css-color.js.map +1 -0
- package/esm2022/page/lib/page-shell/page-shell.js +131 -0
- package/esm2022/page/lib/page-shell/page-shell.js.map +1 -0
- package/esm2022/page/lib/page-shell/page-shell.slots.js +41 -0
- package/esm2022/page/lib/page-shell/page-shell.slots.js.map +1 -0
- package/esm2022/page/lib/page-summary/page-summary-item.js +26 -0
- package/esm2022/page/lib/page-summary/page-summary-item.js.map +1 -0
- package/esm2022/page/lib/page-summary/page-summary.js +87 -0
- package/esm2022/page/lib/page-summary/page-summary.js.map +1 -0
- package/esm2022/page/malva-ui-core-page.js +5 -0
- package/esm2022/page/malva-ui-core-page.js.map +1 -0
- package/esm2022/pagination/index.js +5 -0
- package/esm2022/pagination/index.js.map +1 -0
- package/esm2022/pagination/lib/pagination/pagination.directives.js +58 -0
- package/esm2022/pagination/lib/pagination/pagination.directives.js.map +1 -0
- package/esm2022/pagination/lib/pagination/pagination.js +293 -0
- package/esm2022/pagination/lib/pagination/pagination.js.map +1 -0
- package/esm2022/pagination/lib/pagination/pagination.model.js +1 -0
- package/esm2022/pagination/lib/pagination/pagination.model.js.map +1 -0
- package/esm2022/pagination/lib/pagination/pagination.service.js +108 -0
- package/esm2022/pagination/lib/pagination/pagination.service.js.map +1 -0
- package/esm2022/pagination/malva-ui-core-pagination.js +5 -0
- package/esm2022/pagination/malva-ui-core-pagination.js.map +1 -0
- package/esm2022/pin-input/index.js +3 -0
- package/esm2022/pin-input/index.js.map +1 -0
- package/esm2022/pin-input/lib/pin-input/pin-input-separator.js +31 -0
- package/esm2022/pin-input/lib/pin-input/pin-input-separator.js.map +1 -0
- package/esm2022/pin-input/lib/pin-input/pin-input.js +365 -0
- package/esm2022/pin-input/lib/pin-input/pin-input.js.map +1 -0
- package/esm2022/pin-input/malva-ui-core-pin-input.js +5 -0
- package/esm2022/pin-input/malva-ui-core-pin-input.js.map +1 -0
- package/esm2022/popup/index.js +10 -0
- package/esm2022/popup/index.js.map +1 -0
- package/esm2022/popup/lib/popup/popup.js +500 -0
- package/esm2022/popup/lib/popup/popup.js.map +1 -0
- package/esm2022/popup/lib/popup-container/popup-container.js +169 -0
- package/esm2022/popup/lib/popup-container/popup-container.js.map +1 -0
- package/esm2022/popup/lib/popup-container/popup-container.token.js +9 -0
- package/esm2022/popup/lib/popup-container/popup-container.token.js.map +1 -0
- package/esm2022/popup/lib/popup-content.js +14 -0
- package/esm2022/popup/lib/popup-content.js.map +1 -0
- package/esm2022/popup/lib/popup-header-content.js +26 -0
- package/esm2022/popup/lib/popup-header-content.js.map +1 -0
- package/esm2022/popup/lib/popup-pinned-content.js +25 -0
- package/esm2022/popup/lib/popup-pinned-content.js.map +1 -0
- package/esm2022/popup/lib/popup-positions.js +252 -0
- package/esm2022/popup/lib/popup-positions.js.map +1 -0
- package/esm2022/popup/lib/popup-trigger/popup-trigger.js +308 -0
- package/esm2022/popup/lib/popup-trigger/popup-trigger.js.map +1 -0
- package/esm2022/popup/lib/popup.service.js +188 -0
- package/esm2022/popup/lib/popup.service.js.map +1 -0
- package/esm2022/popup/malva-ui-core-popup.js +5 -0
- package/esm2022/popup/malva-ui-core-popup.js.map +1 -0
- package/esm2022/progress/index.js +2 -0
- package/esm2022/progress/index.js.map +1 -0
- package/esm2022/progress/lib/progress/progress.js +102 -0
- package/esm2022/progress/lib/progress/progress.js.map +1 -0
- package/esm2022/progress/malva-ui-core-progress.js +5 -0
- package/esm2022/progress/malva-ui-core-progress.js.map +1 -0
- package/esm2022/radio/index.js +3 -0
- package/esm2022/radio/index.js.map +1 -0
- package/esm2022/radio/lib/radio/radio.js +134 -0
- package/esm2022/radio/lib/radio/radio.js.map +1 -0
- package/esm2022/radio/lib/radio-group/radio-group.js +176 -0
- package/esm2022/radio/lib/radio-group/radio-group.js.map +1 -0
- package/esm2022/radio/lib/radio-group-token.js +3 -0
- package/esm2022/radio/lib/radio-group-token.js.map +1 -0
- package/esm2022/radio/malva-ui-core-radio.js +5 -0
- package/esm2022/radio/malva-ui-core-radio.js.map +1 -0
- package/esm2022/rating/index.js +2 -0
- package/esm2022/rating/index.js.map +1 -0
- package/esm2022/rating/lib/rating/rating.js +208 -0
- package/esm2022/rating/lib/rating/rating.js.map +1 -0
- package/esm2022/rating/malva-ui-core-rating.js +5 -0
- package/esm2022/rating/malva-ui-core-rating.js.map +1 -0
- package/esm2022/scrollbar/index.js +2 -0
- package/esm2022/scrollbar/index.js.map +1 -0
- package/esm2022/scrollbar/lib/scrollbar/scrollbar.js +388 -0
- package/esm2022/scrollbar/lib/scrollbar/scrollbar.js.map +1 -0
- package/esm2022/scrollbar/malva-ui-core-scrollbar.js +5 -0
- package/esm2022/scrollbar/malva-ui-core-scrollbar.js.map +1 -0
- package/esm2022/search-field/index.js +3 -0
- package/esm2022/search-field/index.js.map +1 -0
- package/esm2022/search-field/lib/search-field/search-field.js +535 -0
- package/esm2022/search-field/lib/search-field/search-field.js.map +1 -0
- package/esm2022/search-field/lib/search-field/search-overlay-content.js +35 -0
- package/esm2022/search-field/lib/search-field/search-overlay-content.js.map +1 -0
- package/esm2022/search-field/malva-ui-core-search-field.js +5 -0
- package/esm2022/search-field/malva-ui-core-search-field.js.map +1 -0
- package/esm2022/segmented/index.js +5 -0
- package/esm2022/segmented/index.js.map +1 -0
- package/esm2022/segmented/lib/segmented/segmented.js +248 -0
- package/esm2022/segmented/lib/segmented/segmented.js.map +1 -0
- package/esm2022/segmented/lib/segmented-item/segmented-item.js +194 -0
- package/esm2022/segmented/lib/segmented-item/segmented-item.js.map +1 -0
- package/esm2022/segmented/lib/segmented-token.js +4 -0
- package/esm2022/segmented/lib/segmented-token.js.map +1 -0
- package/esm2022/segmented/lib/segmented.types.js +1 -0
- package/esm2022/segmented/lib/segmented.types.js.map +1 -0
- package/esm2022/segmented/malva-ui-core-segmented.js +5 -0
- package/esm2022/segmented/malva-ui-core-segmented.js.map +1 -0
- package/esm2022/select/index.js +4 -0
- package/esm2022/select/index.js.map +1 -0
- package/esm2022/select/lib/select/select.js +685 -0
- package/esm2022/select/lib/select/select.js.map +1 -0
- package/esm2022/select/lib/select-option.js +2 -0
- package/esm2022/select/lib/select-option.js.map +1 -0
- package/esm2022/select/lib/select-template.directives.js +34 -0
- package/esm2022/select/lib/select-template.directives.js.map +1 -0
- package/esm2022/select/malva-ui-core-select.js +5 -0
- package/esm2022/select/malva-ui-core-select.js.map +1 -0
- package/esm2022/sidebar/index.js +16 -0
- package/esm2022/sidebar/index.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar/sidebar.js +251 -0
- package/esm2022/sidebar/lib/sidebar/sidebar.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-content.js +37 -0
- package/esm2022/sidebar/lib/sidebar-content.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-context.js +3 -0
- package/esm2022/sidebar/lib/sidebar-context.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-footer.js +20 -0
- package/esm2022/sidebar/lib/sidebar-footer.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js +341 -0
- package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-header.js +20 -0
- package/esm2022/sidebar/lib/sidebar-header.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js +216 -0
- package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-item-host.js +39 -0
- package/esm2022/sidebar/lib/sidebar-item-host.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-item-icon.js +14 -0
- package/esm2022/sidebar/lib/sidebar-item-icon.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-mode.js +1 -0
- package/esm2022/sidebar/lib/sidebar-mode.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js +202 -0
- package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js +159 -0
- package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js +35 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js +107 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js +1 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js.map +1 -0
- package/esm2022/sidebar/malva-ui-core-sidebar.js +5 -0
- package/esm2022/sidebar/malva-ui-core-sidebar.js.map +1 -0
- package/esm2022/skeleton/index.js +2 -0
- package/esm2022/skeleton/index.js.map +1 -0
- package/esm2022/skeleton/lib/skeleton/skeleton.js +78 -0
- package/esm2022/skeleton/lib/skeleton/skeleton.js.map +1 -0
- package/esm2022/skeleton/malva-ui-core-skeleton.js +5 -0
- package/esm2022/skeleton/malva-ui-core-skeleton.js.map +1 -0
- package/esm2022/slider/index.js +3 -0
- package/esm2022/slider/index.js.map +1 -0
- package/esm2022/slider/lib/slider/slider-tooltip-def.js +31 -0
- package/esm2022/slider/lib/slider/slider-tooltip-def.js.map +1 -0
- package/esm2022/slider/lib/slider/slider.js +468 -0
- package/esm2022/slider/lib/slider/slider.js.map +1 -0
- package/esm2022/slider/malva-ui-core-slider.js +5 -0
- package/esm2022/slider/malva-ui-core-slider.js.map +1 -0
- package/esm2022/split-pane/index.js +4 -0
- package/esm2022/split-pane/index.js.map +1 -0
- package/esm2022/split-pane/lib/split-pane/split-pane-panel.js +49 -0
- package/esm2022/split-pane/lib/split-pane/split-pane-panel.js.map +1 -0
- package/esm2022/split-pane/lib/split-pane/split-pane.js +290 -0
- package/esm2022/split-pane/lib/split-pane/split-pane.js.map +1 -0
- package/esm2022/split-pane/lib/split-pane/split-pane.types.js +1 -0
- package/esm2022/split-pane/lib/split-pane/split-pane.types.js.map +1 -0
- package/esm2022/split-pane/malva-ui-core-split-pane.js +5 -0
- package/esm2022/split-pane/malva-ui-core-split-pane.js.map +1 -0
- package/esm2022/status-indicator/index.js +2 -0
- package/esm2022/status-indicator/index.js.map +1 -0
- package/esm2022/status-indicator/lib/status-indicator/status-indicator.js +71 -0
- package/esm2022/status-indicator/lib/status-indicator/status-indicator.js.map +1 -0
- package/esm2022/status-indicator/malva-ui-core-status-indicator.js +5 -0
- package/esm2022/status-indicator/malva-ui-core-status-indicator.js.map +1 -0
- package/esm2022/stepper/index.js +5 -0
- package/esm2022/stepper/index.js.map +1 -0
- package/esm2022/stepper/lib/stepper/step-header.js +46 -0
- package/esm2022/stepper/lib/stepper/step-header.js.map +1 -0
- package/esm2022/stepper/lib/stepper/step.js +65 -0
- package/esm2022/stepper/lib/stepper/step.js.map +1 -0
- package/esm2022/stepper/lib/stepper/stepper-token.js +4 -0
- package/esm2022/stepper/lib/stepper/stepper-token.js.map +1 -0
- package/esm2022/stepper/lib/stepper/stepper.js +216 -0
- package/esm2022/stepper/lib/stepper/stepper.js.map +1 -0
- package/esm2022/stepper/lib/stepper/stepper.types.js +1 -0
- package/esm2022/stepper/lib/stepper/stepper.types.js.map +1 -0
- package/esm2022/stepper/malva-ui-core-stepper.js +5 -0
- package/esm2022/stepper/malva-ui-core-stepper.js.map +1 -0
- package/esm2022/switch/index.js +3 -0
- package/esm2022/switch/index.js.map +1 -0
- package/esm2022/switch/lib/switch/switch.js +190 -0
- package/esm2022/switch/lib/switch/switch.js.map +1 -0
- package/esm2022/switch/lib/switch-group/switch-group.js +68 -0
- package/esm2022/switch/lib/switch-group/switch-group.js.map +1 -0
- package/esm2022/switch/lib/switch-group-token.js +3 -0
- package/esm2022/switch/lib/switch-group-token.js.map +1 -0
- package/esm2022/switch/malva-ui-core-switch.js +5 -0
- package/esm2022/switch/malva-ui-core-switch.js.map +1 -0
- package/esm2022/tabs/index.js +9 -0
- package/esm2022/tabs/index.js.map +1 -0
- package/esm2022/tabs/lib/tab/tab.js +72 -0
- package/esm2022/tabs/lib/tab/tab.js.map +1 -0
- package/esm2022/tabs/lib/tab-content/tab-content.js +19 -0
- package/esm2022/tabs/lib/tab-content/tab-content.js.map +1 -0
- package/esm2022/tabs/lib/tab-content-def.js +14 -0
- package/esm2022/tabs/lib/tab-content-def.js.map +1 -0
- package/esm2022/tabs/lib/tab-def.js +17 -0
- package/esm2022/tabs/lib/tab-def.js.map +1 -0
- package/esm2022/tabs/lib/tab-group-token.js +3 -0
- package/esm2022/tabs/lib/tab-group-token.js.map +1 -0
- package/esm2022/tabs/lib/tab-item/tab-item.js +44 -0
- package/esm2022/tabs/lib/tab-item/tab-item.js.map +1 -0
- package/esm2022/tabs/lib/tabs/tabs.js +542 -0
- package/esm2022/tabs/lib/tabs/tabs.js.map +1 -0
- package/esm2022/tabs/lib/tabs.service.js +83 -0
- package/esm2022/tabs/lib/tabs.service.js.map +1 -0
- package/esm2022/tabs/malva-ui-core-tabs.js +5 -0
- package/esm2022/tabs/malva-ui-core-tabs.js.map +1 -0
- package/esm2022/textarea/index.js +2 -0
- package/esm2022/textarea/index.js.map +1 -0
- package/esm2022/textarea/lib/textarea/textarea.js +194 -0
- package/esm2022/textarea/lib/textarea/textarea.js.map +1 -0
- package/esm2022/textarea/malva-ui-core-textarea.js +5 -0
- package/esm2022/textarea/malva-ui-core-textarea.js.map +1 -0
- package/esm2022/tile/index.js +3 -0
- package/esm2022/tile/index.js.map +1 -0
- package/esm2022/tile/lib/tile/tile.js +39 -0
- package/esm2022/tile/lib/tile/tile.js.map +1 -0
- package/esm2022/tile/lib/tile-header.js +14 -0
- package/esm2022/tile/lib/tile-header.js.map +1 -0
- package/esm2022/tile/malva-ui-core-tile.js +5 -0
- package/esm2022/tile/malva-ui-core-tile.js.map +1 -0
- package/esm2022/time-picker/index.js +2 -0
- package/esm2022/time-picker/index.js.map +1 -0
- package/esm2022/time-picker/lib/time-picker/time-picker.js +310 -0
- package/esm2022/time-picker/lib/time-picker/time-picker.js.map +1 -0
- package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js +216 -0
- package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js.map +1 -0
- package/esm2022/time-picker/malva-ui-core-time-picker.js +5 -0
- package/esm2022/time-picker/malva-ui-core-time-picker.js.map +1 -0
- package/esm2022/timeline/index.js +6 -0
- package/esm2022/timeline/index.js.map +1 -0
- package/esm2022/timeline/lib/timeline/timeline-item-icon.js +31 -0
- package/esm2022/timeline/lib/timeline/timeline-item-icon.js.map +1 -0
- package/esm2022/timeline/lib/timeline/timeline-item-meta.js +31 -0
- package/esm2022/timeline/lib/timeline/timeline-item-meta.js.map +1 -0
- package/esm2022/timeline/lib/timeline/timeline-item.js +69 -0
- package/esm2022/timeline/lib/timeline/timeline-item.js.map +1 -0
- package/esm2022/timeline/lib/timeline/timeline.js +36 -0
- package/esm2022/timeline/lib/timeline/timeline.js.map +1 -0
- package/esm2022/timeline/lib/timeline/timeline.types.js +1 -0
- package/esm2022/timeline/lib/timeline/timeline.types.js.map +1 -0
- package/esm2022/timeline/malva-ui-core-timeline.js +5 -0
- package/esm2022/timeline/malva-ui-core-timeline.js.map +1 -0
- package/esm2022/title/index.js +2 -0
- package/esm2022/title/index.js.map +1 -0
- package/esm2022/title/lib/title/title.js +171 -0
- package/esm2022/title/lib/title/title.js.map +1 -0
- package/esm2022/title/malva-ui-core-title.js +5 -0
- package/esm2022/title/malva-ui-core-title.js.map +1 -0
- package/esm2022/toast/index.js +13 -0
- package/esm2022/toast/index.js.map +1 -0
- package/esm2022/toast/lib/abstract-toast-container.js +50 -0
- package/esm2022/toast/lib/abstract-toast-container.js.map +1 -0
- package/esm2022/toast/lib/abstract-toast-item.js +75 -0
- package/esm2022/toast/lib/abstract-toast-item.js.map +1 -0
- package/esm2022/toast/lib/abstract-toast.service.js +176 -0
- package/esm2022/toast/lib/abstract-toast.service.js.map +1 -0
- package/esm2022/toast/lib/toast-container/toast-container.js +61 -0
- package/esm2022/toast/lib/toast-container/toast-container.js.map +1 -0
- package/esm2022/toast/lib/toast-item/toast-item.js +62 -0
- package/esm2022/toast/lib/toast-item/toast-item.js.map +1 -0
- package/esm2022/toast/lib/toast-ref.js +54 -0
- package/esm2022/toast/lib/toast-ref.js.map +1 -0
- package/esm2022/toast/lib/toast-timer.js +37 -0
- package/esm2022/toast/lib/toast-timer.js.map +1 -0
- package/esm2022/toast/lib/toast.directives.js +76 -0
- package/esm2022/toast/lib/toast.directives.js.map +1 -0
- package/esm2022/toast/lib/toast.service.js +127 -0
- package/esm2022/toast/lib/toast.service.js.map +1 -0
- package/esm2022/toast/lib/toast.types.js +39 -0
- package/esm2022/toast/lib/toast.types.js.map +1 -0
- package/esm2022/toast/malva-ui-core-toast.js +5 -0
- package/esm2022/toast/malva-ui-core-toast.js.map +1 -0
- package/esm2022/tokenizer/index.js +4 -0
- package/esm2022/tokenizer/index.js.map +1 -0
- package/esm2022/tokenizer/lib/token/token.js +123 -0
- package/esm2022/tokenizer/lib/token/token.js.map +1 -0
- package/esm2022/tokenizer/lib/token-template.js +23 -0
- package/esm2022/tokenizer/lib/token-template.js.map +1 -0
- package/esm2022/tokenizer/lib/tokenizer/tokenizer.js +324 -0
- package/esm2022/tokenizer/lib/tokenizer/tokenizer.js.map +1 -0
- package/esm2022/tokenizer/malva-ui-core-tokenizer.js +5 -0
- package/esm2022/tokenizer/malva-ui-core-tokenizer.js.map +1 -0
- package/esm2022/toolbar/index.js +4 -0
- package/esm2022/toolbar/index.js.map +1 -0
- package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js +13 -0
- package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js.map +1 -0
- package/esm2022/toolbar/lib/toolbar/toolbar-widget.js +106 -0
- package/esm2022/toolbar/lib/toolbar/toolbar-widget.js.map +1 -0
- package/esm2022/toolbar/lib/toolbar/toolbar.js +19 -0
- package/esm2022/toolbar/lib/toolbar/toolbar.js.map +1 -0
- package/esm2022/toolbar/malva-ui-core-toolbar.js +5 -0
- package/esm2022/toolbar/malva-ui-core-toolbar.js.map +1 -0
- package/esm2022/tooltip/index.js +4 -0
- package/esm2022/tooltip/index.js.map +1 -0
- package/esm2022/tooltip/lib/tooltip/tooltip-panel.js +69 -0
- package/esm2022/tooltip/lib/tooltip/tooltip-panel.js.map +1 -0
- package/esm2022/tooltip/lib/tooltip/tooltip.js +352 -0
- package/esm2022/tooltip/lib/tooltip/tooltip.js.map +1 -0
- package/esm2022/tooltip/lib/tooltip/tooltip.types.js +1 -0
- package/esm2022/tooltip/lib/tooltip/tooltip.types.js.map +1 -0
- package/esm2022/tooltip/malva-ui-core-tooltip.js +5 -0
- package/esm2022/tooltip/malva-ui-core-tooltip.js.map +1 -0
- package/esm2022/tree/index.js +5 -0
- package/esm2022/tree/index.js.map +1 -0
- package/esm2022/tree/lib/tree/tree-context.js +7 -0
- package/esm2022/tree/lib/tree/tree-context.js.map +1 -0
- package/esm2022/tree/lib/tree/tree-node-def.js +34 -0
- package/esm2022/tree/lib/tree/tree-node-def.js.map +1 -0
- package/esm2022/tree/lib/tree/tree-node.js +1 -0
- package/esm2022/tree/lib/tree/tree-node.js.map +1 -0
- package/esm2022/tree/lib/tree/tree-subtree.js +107 -0
- package/esm2022/tree/lib/tree/tree-subtree.js.map +1 -0
- package/esm2022/tree/lib/tree/tree.js +362 -0
- package/esm2022/tree/lib/tree/tree.js.map +1 -0
- package/esm2022/tree/malva-ui-core-tree.js +5 -0
- package/esm2022/tree/malva-ui-core-tree.js.map +1 -0
- package/expand/index.d.ts +2 -0
- package/expand/lib/expand/expand-content.d.ts +26 -0
- package/expand/lib/expand/expand.d.ts +74 -0
- package/expand/malva-ui-core-expand.d.ts +5 -0
- package/file-upload/README.md +7 -0
- package/file-upload/index.d.ts +4 -0
- package/file-upload/lib/file-upload/file-upload.d.ts +138 -0
- package/file-upload/lib/file-upload/file-upload.types.d.ts +42 -0
- package/file-upload/lib/file-upload-action.d.ts +53 -0
- package/file-upload/lib/file-upload-item/file-upload-item.d.ts +30 -0
- package/file-upload/malva-ui-core-file-upload.d.ts +5 -0
- package/filter/README.md +22 -0
- package/filter/index.d.ts +3 -0
- package/filter/lib/filter/filter.d.ts +156 -0
- package/filter/lib/filter.types.d.ts +75 -0
- package/filter/lib/smart-filter-bar/smart-filter-bar.d.ts +153 -0
- package/filter/malva-ui-core-filter.d.ts +5 -0
- package/form/index.d.ts +6 -0
- package/form/lib/fieldset/fieldset.d.ts +58 -0
- package/form/lib/fieldset-span.d.ts +28 -0
- package/form/lib/form/form.d.ts +37 -0
- package/form/lib/form-actions.d.ts +20 -0
- package/form/lib/form-gap.d.ts +5 -0
- package/form/lib/form-header.d.ts +18 -0
- package/form/lib/form.types.d.ts +13 -0
- package/form/malva-ui-core-form.d.ts +5 -0
- package/form-utils/index.d.ts +15 -0
- package/form-utils/lib/aria-value-bridge.d.ts +45 -0
- package/form-utils/lib/description/description.d.ts +16 -0
- package/form-utils/lib/focusable-group-base.d.ts +76 -0
- package/form-utils/lib/form-control-base/signal-form-control-base.d.ts +159 -0
- package/form-utils/lib/form-control-sides.d.ts +20 -0
- package/form-utils/lib/form-control-wrapper/form-control-wrapper-control.d.ts +6 -0
- package/form-utils/lib/form-control-wrapper/form-control-wrapper.d.ts +20 -0
- package/form-utils/lib/form-field/form-field.d.ts +68 -0
- package/form-utils/lib/hint/hint.d.ts +5 -0
- package/form-utils/lib/label/label.d.ts +22 -0
- package/form-utils/lib/message/message.d.ts +7 -0
- package/form-utils/lib/models/error-display-strategy.d.ts +1 -0
- package/form-utils/lib/models/form-control-connector.d.ts +41 -0
- package/form-utils/lib/models/form-state.d.ts +1 -0
- package/form-utils/lib/selection.service.d.ts +27 -0
- package/form-utils/malva-ui-core-form-utils.d.ts +5 -0
- package/form-utils/testing/index.d.ts +1 -0
- package/form-utils/testing/lib/forms-binding-matrix.d.ts +47 -0
- package/form-utils/testing/malva-ui-core-form-utils-testing.d.ts +5 -0
- package/index.d.ts +69 -0
- package/input/index.d.ts +3 -0
- package/input/lib/input/input-native.d.ts +36 -0
- package/input/lib/input/input-value-accessor.d.ts +11 -0
- package/input/lib/input/input.d.ts +189 -0
- package/input/lib/input/password-strength.d.ts +34 -0
- package/input/malva-ui-core-input.d.ts +5 -0
- package/kbd/index.d.ts +1 -0
- package/kbd/lib/kbd/kbd.d.ts +52 -0
- package/kbd/malva-ui-core-kbd.d.ts +5 -0
- package/layout/index.d.ts +4 -0
- package/layout/lib/layout/directives/MlvLayoutSide.d.ts +6 -0
- package/layout/lib/layout/directives/MlvLayoutTop.d.ts +6 -0
- package/layout/lib/layout/layout.d.ts +20 -0
- package/layout/lib/layout/services/theme.service.d.ts +33 -0
- package/layout/malva-ui-core-layout.d.ts +5 -0
- package/link/index.d.ts +2 -0
- package/link/lib/link/link.d.ts +15 -0
- package/link/lib/link/link.directives.d.ts +10 -0
- package/link/malva-ui-core-link.d.ts +5 -0
- package/list/index.d.ts +13 -0
- package/list/lib/list/list.d.ts +25 -0
- package/list/lib/list-item/list-item.d.ts +67 -0
- package/list/lib/list-item-actions.d.ts +12 -0
- package/list/lib/list-item-byline.d.ts +5 -0
- package/list/lib/list-item-group/list-item-group.d.ts +11 -0
- package/list/lib/list-item-link/list-item-link.d.ts +8 -0
- package/list/lib/list-item-media.d.ts +5 -0
- package/list/lib/list-item-meta.d.ts +5 -0
- package/list/lib/list-item-prefix.d.ts +5 -0
- package/list/lib/list-item-suffix.d.ts +5 -0
- package/list/lib/list-item-template.d.ts +10 -0
- package/list/lib/list-item-title.d.ts +5 -0
- package/list/lib/list-selectable.d.ts +73 -0
- package/list/malva-ui-core-list.d.ts +5 -0
- package/loader/index.d.ts +1 -0
- package/loader/lib/loader/loader.d.ts +84 -0
- package/loader/malva-ui-core-loader.d.ts +5 -0
- package/malva-ui-core.d.ts +5 -0
- package/menu/index.d.ts +9 -0
- package/menu/lib/menu/menu-group-label.d.ts +22 -0
- package/menu/lib/menu/menu-group.d.ts +27 -0
- package/menu/lib/menu/menu-item.d.ts +76 -0
- package/menu/lib/menu/menu-separator.d.ts +18 -0
- package/menu/lib/menu/menu-trigger.d.ts +255 -0
- package/menu/lib/menu/menu.d.ts +149 -0
- package/menu/lib/menu/menu.types.d.ts +13 -0
- package/menu/lib/menu/menubar.d.ts +131 -0
- package/menu/lib/menu/menubar.types.d.ts +82 -0
- package/menu/lib/menu/submenu-aim.d.ts +10 -0
- package/menu/malva-ui-core-menu.d.ts +5 -0
- package/notification/index.d.ts +4 -0
- package/notification/lib/notification-item/notification-item.d.ts +20 -0
- package/notification/lib/notification-ref.d.ts +12 -0
- package/notification/lib/notification.service.d.ts +43 -0
- package/notification/lib/notification.types.d.ts +52 -0
- package/notification/malva-ui-core-notification.d.ts +5 -0
- package/number-input/index.d.ts +1 -0
- package/number-input/lib/number-input/number-input.d.ts +162 -0
- package/number-input/malva-ui-core-number-input.d.ts +5 -0
- package/package.json +315 -0
- package/page/README.md +8 -0
- package/page/index.d.ts +14 -0
- package/page/lib/page/page-scroll.token.d.ts +19 -0
- package/page/lib/page/page-snap-controller.d.ts +87 -0
- package/page/lib/page/page-snap.directive.d.ts +40 -0
- package/page/lib/page/page.d.ts +74 -0
- package/page/lib/page-content/page-aside.d.ts +7 -0
- package/page/lib/page-content/page-content.d.ts +37 -0
- package/page/lib/page-dock/page-dock.d.ts +50 -0
- package/page/lib/page-dock/page-dock.slots.d.ts +16 -0
- package/page/lib/page-header/page-header.d.ts +77 -0
- package/page/lib/page-header/page-header.directives.d.ts +50 -0
- package/page/lib/page-shell/page-shell-color.d.ts +48 -0
- package/page/lib/page-shell/page-shell-css-color.d.ts +20 -0
- package/page/lib/page-shell/page-shell.d.ts +44 -0
- package/page/lib/page-shell/page-shell.slots.d.ts +16 -0
- package/page/lib/page-summary/page-summary-item.d.ts +11 -0
- package/page/lib/page-summary/page-summary.d.ts +36 -0
- package/page/malva-ui-core-page.d.ts +5 -0
- package/pagination/index.d.ts +4 -0
- package/pagination/lib/pagination/pagination.d.ts +182 -0
- package/pagination/lib/pagination/pagination.directives.d.ts +44 -0
- package/pagination/lib/pagination/pagination.model.d.ts +6 -0
- package/pagination/lib/pagination/pagination.service.d.ts +26 -0
- package/pagination/malva-ui-core-pagination.d.ts +5 -0
- package/pin-input/index.d.ts +2 -0
- package/pin-input/lib/pin-input/pin-input-separator.d.ts +24 -0
- package/pin-input/lib/pin-input/pin-input.d.ts +176 -0
- package/pin-input/malva-ui-core-pin-input.d.ts +5 -0
- package/popup/index.d.ts +9 -0
- package/popup/lib/popup/popup.d.ts +343 -0
- package/popup/lib/popup-container/popup-container.d.ts +61 -0
- package/popup/lib/popup-container/popup-container.token.d.ts +34 -0
- package/popup/lib/popup-content.d.ts +6 -0
- package/popup/lib/popup-header-content.d.ts +18 -0
- package/popup/lib/popup-pinned-content.d.ts +17 -0
- package/popup/lib/popup-positions.d.ts +105 -0
- package/popup/lib/popup-trigger/popup-trigger.d.ts +102 -0
- package/popup/lib/popup.service.d.ts +159 -0
- package/popup/malva-ui-core-popup.d.ts +5 -0
- package/progress/index.d.ts +1 -0
- package/progress/lib/progress/progress.d.ts +69 -0
- package/progress/malva-ui-core-progress.d.ts +5 -0
- package/radio/index.d.ts +2 -0
- package/radio/lib/radio/radio.d.ts +87 -0
- package/radio/lib/radio-group/radio-group.d.ts +35 -0
- package/radio/lib/radio-group-token.d.ts +7 -0
- package/radio/malva-ui-core-radio.d.ts +5 -0
- package/rating/index.d.ts +1 -0
- package/rating/lib/rating/rating.d.ts +100 -0
- package/rating/malva-ui-core-rating.d.ts +5 -0
- package/schematics/collection.json +12 -0
- package/schematics/ng-add/index.cjs +272 -0
- package/schematics/ng-add/schema.json +92 -0
- package/scrollbar/index.d.ts +1 -0
- package/scrollbar/lib/scrollbar/scrollbar.d.ts +166 -0
- package/scrollbar/malva-ui-core-scrollbar.d.ts +5 -0
- package/search-field/README.md +32 -0
- package/search-field/index.d.ts +2 -0
- package/search-field/lib/search-field/search-field.d.ts +347 -0
- package/search-field/lib/search-field/search-overlay-content.d.ts +59 -0
- package/search-field/malva-ui-core-search-field.d.ts +5 -0
- package/segmented/index.d.ts +4 -0
- package/segmented/lib/segmented/segmented.d.ts +80 -0
- package/segmented/lib/segmented-item/segmented-item.d.ts +89 -0
- package/segmented/lib/segmented-token.d.ts +22 -0
- package/segmented/lib/segmented.types.d.ts +9 -0
- package/segmented/malva-ui-core-segmented.d.ts +5 -0
- package/select/index.d.ts +3 -0
- package/select/lib/select/select.d.ts +379 -0
- package/select/lib/select-option.d.ts +1 -0
- package/select/lib/select-template.directives.d.ts +14 -0
- package/select/malva-ui-core-select.d.ts +5 -0
- package/sidebar/index.d.ts +15 -0
- package/sidebar/lib/sidebar/sidebar.d.ts +134 -0
- package/sidebar/lib/sidebar-content.d.ts +11 -0
- package/sidebar/lib/sidebar-context.d.ts +23 -0
- package/sidebar/lib/sidebar-footer.d.ts +9 -0
- package/sidebar/lib/sidebar-group/sidebar-group.d.ts +127 -0
- package/sidebar/lib/sidebar-header.d.ts +9 -0
- package/sidebar/lib/sidebar-item/sidebar-item.d.ts +104 -0
- package/sidebar/lib/sidebar-item-host.d.ts +18 -0
- package/sidebar/lib/sidebar-item-icon.d.ts +6 -0
- package/sidebar/lib/sidebar-mode.d.ts +2 -0
- package/sidebar/lib/sidebar-rail/sidebar-rail.d.ts +54 -0
- package/sidebar/lib/sidebar-trigger/sidebar-trigger.d.ts +67 -0
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.d.ts +54 -0
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.d.ts +19 -0
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.types.d.ts +20 -0
- package/sidebar/malva-ui-core-sidebar.d.ts +5 -0
- package/skeleton/index.d.ts +1 -0
- package/skeleton/lib/skeleton/skeleton.d.ts +60 -0
- package/skeleton/malva-ui-core-skeleton.d.ts +5 -0
- package/slider/index.d.ts +2 -0
- package/slider/lib/slider/slider-tooltip-def.d.ts +39 -0
- package/slider/lib/slider/slider.d.ts +171 -0
- package/slider/malva-ui-core-slider.d.ts +5 -0
- package/split-pane/index.d.ts +3 -0
- package/split-pane/lib/split-pane/split-pane-panel.d.ts +34 -0
- package/split-pane/lib/split-pane/split-pane.d.ts +98 -0
- package/split-pane/lib/split-pane/split-pane.types.d.ts +7 -0
- package/split-pane/malva-ui-core-split-pane.d.ts +5 -0
- package/status-indicator/index.d.ts +1 -0
- package/status-indicator/lib/status-indicator/status-indicator.d.ts +61 -0
- package/status-indicator/malva-ui-core-status-indicator.d.ts +5 -0
- package/stepper/index.d.ts +4 -0
- package/stepper/lib/stepper/step-header.d.ts +34 -0
- package/stepper/lib/stepper/step.d.ts +51 -0
- package/stepper/lib/stepper/stepper-token.d.ts +13 -0
- package/stepper/lib/stepper/stepper.d.ts +98 -0
- package/stepper/lib/stepper/stepper.types.d.ts +4 -0
- package/stepper/malva-ui-core-stepper.d.ts +5 -0
- package/styles/malva-ui.css +1706 -0
- package/styles/tokens.md +698 -0
- package/switch/index.d.ts +2 -0
- package/switch/lib/switch/switch.d.ts +118 -0
- package/switch/lib/switch-group/switch-group.d.ts +24 -0
- package/switch/lib/switch-group-token.d.ts +6 -0
- package/switch/malva-ui-core-switch.d.ts +5 -0
- package/tabs/index.d.ts +8 -0
- package/tabs/lib/tab/tab.d.ts +46 -0
- package/tabs/lib/tab-content/tab-content.d.ts +11 -0
- package/tabs/lib/tab-content-def.d.ts +6 -0
- package/tabs/lib/tab-def.d.ts +11 -0
- package/tabs/lib/tab-group-token.d.ts +10 -0
- package/tabs/lib/tab-item/tab-item.d.ts +28 -0
- package/tabs/lib/tabs/tabs.d.ts +202 -0
- package/tabs/lib/tabs.service.d.ts +24 -0
- package/tabs/malva-ui-core-tabs.d.ts +5 -0
- package/textarea/index.d.ts +1 -0
- package/textarea/lib/textarea/textarea.d.ts +77 -0
- package/textarea/malva-ui-core-textarea.d.ts +5 -0
- package/tile/index.d.ts +2 -0
- package/tile/lib/tile/tile.d.ts +20 -0
- package/tile/lib/tile-header.d.ts +6 -0
- package/tile/malva-ui-core-tile.d.ts +5 -0
- package/time-picker/README.md +7 -0
- package/time-picker/index.d.ts +1 -0
- package/time-picker/lib/time-picker/time-picker.d.ts +135 -0
- package/time-picker/lib/time-picker-column/time-picker-column.d.ts +111 -0
- package/time-picker/malva-ui-core-time-picker.d.ts +5 -0
- package/timeline/index.d.ts +5 -0
- package/timeline/lib/timeline/timeline-item-icon.d.ts +24 -0
- package/timeline/lib/timeline/timeline-item-meta.d.ts +24 -0
- package/timeline/lib/timeline/timeline-item.d.ts +52 -0
- package/timeline/lib/timeline/timeline.d.ts +27 -0
- package/timeline/lib/timeline/timeline.types.d.ts +18 -0
- package/timeline/malva-ui-core-timeline.d.ts +5 -0
- package/title/index.d.ts +1 -0
- package/title/lib/title/title.d.ts +63 -0
- package/title/malva-ui-core-title.d.ts +5 -0
- package/toast/index.d.ts +10 -0
- package/toast/lib/abstract-toast-container.d.ts +29 -0
- package/toast/lib/abstract-toast-item.d.ts +44 -0
- package/toast/lib/abstract-toast.service.d.ts +75 -0
- package/toast/lib/toast-container/toast-container.d.ts +23 -0
- package/toast/lib/toast-item/toast-item.d.ts +25 -0
- package/toast/lib/toast-ref.d.ts +33 -0
- package/toast/lib/toast-timer.d.ts +24 -0
- package/toast/lib/toast.directives.d.ts +13 -0
- package/toast/lib/toast.service.d.ts +41 -0
- package/toast/lib/toast.types.d.ts +139 -0
- package/toast/malva-ui-core-toast.d.ts +5 -0
- package/tokenizer/index.d.ts +3 -0
- package/tokenizer/lib/token/token.d.ts +60 -0
- package/tokenizer/lib/token-template.d.ts +29 -0
- package/tokenizer/lib/tokenizer/tokenizer.d.ts +109 -0
- package/tokenizer/malva-ui-core-tokenizer.d.ts +5 -0
- package/toolbar/index.d.ts +3 -0
- package/toolbar/lib/toolbar/toolbar-spacer.d.ts +5 -0
- package/toolbar/lib/toolbar/toolbar-widget.d.ts +75 -0
- package/toolbar/lib/toolbar/toolbar.d.ts +8 -0
- package/toolbar/malva-ui-core-toolbar.d.ts +5 -0
- package/tooltip/README.md +7 -0
- package/tooltip/index.d.ts +3 -0
- package/tooltip/lib/tooltip/tooltip-panel.d.ts +26 -0
- package/tooltip/lib/tooltip/tooltip.d.ts +148 -0
- package/tooltip/lib/tooltip/tooltip.types.d.ts +17 -0
- package/tooltip/malva-ui-core-tooltip.d.ts +5 -0
- package/tree/index.d.ts +4 -0
- package/tree/lib/tree/tree-context.d.ts +62 -0
- package/tree/lib/tree/tree-node-def.d.ts +33 -0
- package/tree/lib/tree/tree-node.d.ts +45 -0
- package/tree/lib/tree/tree-subtree.d.ts +63 -0
- package/tree/lib/tree/tree.d.ts +156 -0
- package/tree/malva-ui-core-tree.d.ts +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-field.js","sourceRoot":"","sources":["../../../../../../../libs/core/search-field/src/lib/search-field/search-field.ts","../../../../../../../libs/core/search-field/src/lib/search-field/search-field.html"],"names":[],"mappings":"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","sourcesContent":["import type { BooleanInput } from '@angular/cdk/coercion';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport type { PositionStrategy } from '@angular/cdk/overlay';\nimport type { OverlayConfig } from '@angular/cdk/overlay';\nimport type { TemplateRef } from '@angular/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n forwardRef,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n output,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { LucideSearch } from '@lucide/angular';\nimport { MlvClick } from '@malva-ui/cdk/accessibility';\nimport {\n MlvButton,\n MlvButtonIcon,\n MlvButtonClose,\n} from '@malva-ui/core/button';\nimport {\n MlvFormControlAppend,\n MlvFormControlPrepend,\n} from '@malva-ui/core/form-utils';\nimport { MlvInput } from '@malva-ui/core/input';\nimport { MlvLoader } from '@malva-ui/core/loader';\nimport { MlvOverlayHostBase } from '@malva-ui/cdk/overlay';\nimport { MLV_SEARCH_FIELD_I18N } from '@malva-ui/i18n';\nimport { MlvSearchOverlayContentDef } from './search-overlay-content';\nimport type { MlvSearchOverlayContentContext } from './search-overlay-content';\n\n/** Controls when a search field commits the current query. */\nexport type MlvSearchFieldTrigger = 'live' | 'submit';\n\n/**\n * How the field presents itself before an overlay search is opened.\n *\n * - `'field'` — the standard input. With `overlay`, clicking or focusing it\n * opens the overlay instead of typing inline.\n * - `'icon'` — a circular icon button only. Implies `overlay`, since an icon has\n * nowhere to type.\n */\nexport type MlvSearchFieldPresentation = 'field' | 'icon';\n\n/**\n * ARIA role applied to the field's underlying `<input>`.\n *\n * - `'searchbox'` (default) — leaves the native `<input type=\"search\">` role\n * implicit and emits no {@link MlvSearchField.navigate} events.\n * - `'combobox'` — the field drives a popup listbox owned by the consumer.\n * Stamps `role=\"combobox\"` on the input and turns on the arrow-key hooks.\n */\nexport type MlvSearchFieldRole = 'searchbox' | 'combobox';\n\n/** Values accepted by `aria-autocomplete` on a combobox input. */\nexport type MlvSearchFieldAriaAutocomplete = 'none' | 'list' | 'both';\n\n/** One of the option-navigation keys reported by {@link MlvSearchField.navigate}. */\nexport type MlvSearchFieldNavigateDirection =\n | 'up'\n | 'down'\n | 'home'\n | 'end'\n | 'pageUp'\n | 'pageDown';\n\n/**\n * Payload of {@link MlvSearchField.navigate} — an option-navigation key pressed\n * while the field is acting as a combobox.\n */\nexport interface MlvSearchFieldNavigateEvent {\n /** Which navigation key was pressed. */\n readonly direction: MlvSearchFieldNavigateDirection;\n /**\n * The originating key event. `up`/`down`/`pageUp`/`pageDown` arrive already\n * `preventDefault`ed; `home`/`end` do not — call `preventDefault()` on this\n * event to take the caret keys over as well.\n */\n readonly event: KeyboardEvent;\n}\n\n/**\n * Payload of {@link MlvSearchField.commit} — the user asked to act on the\n * current query, through Enter or the submit action.\n */\nexport interface MlvSearchFieldCommitEvent {\n /** The query at the moment of the commit. */\n readonly value: string;\n /**\n * The originating event. Call `preventDefault()` on it to take the commit\n * over: the field then skips its own `search` emission and leaves the key\n * consumed, so a combobox consumer can resolve the active option instead.\n */\n readonly event: KeyboardEvent | MouseEvent;\n}\n\n/**\n * Keys that move through a popup listbox, mapped to the direction reported by\n * {@link MlvSearchField.navigate}.\n */\nconst NAVIGATION_KEYS = new Map<string, MlvSearchFieldNavigateDirection>([\n ['ArrowUp', 'up'],\n ['ArrowDown', 'down'],\n ['Home', 'home'],\n ['End', 'end'],\n ['PageUp', 'pageUp'],\n ['PageDown', 'pageDown'],\n]);\n\n/**\n * Directions whose native effect inside a text input fights the listbox — the\n * arrows and page keys jump the caret to the ends of the query or scroll the\n * page. They are consumed on the field's behalf. `home`/`end` are not: in an\n * editable combobox they are the caret keys the WAI-ARIA pattern keeps.\n */\nconst CONSUMED_DIRECTIONS = new Set<MlvSearchFieldNavigateDirection>([\n 'up',\n 'down',\n 'pageUp',\n 'pageDown',\n]);\n\n/**\n * A search-specific text field with either debounced live updates or explicit\n * submission through Enter and a trailing action button.\n */\n@Component({\n selector: 'mlv-search-field',\n imports: [\n MlvInput,\n MlvButton,\n MlvButtonIcon,\n MlvLoader,\n LucideSearch,\n MlvFormControlPrepend,\n MlvFormControlAppend,\n MlvButtonClose,\n MlvClick,\n NgTemplateOutlet,\n // `cdkTrapFocus` on the overlay panel — `role=\"dialog\" aria-modal=\"true\"`\n // only holds if focus is actually trapped, as in `mlv-dialog`/`mlv-drawer`.\n A11yModule,\n // The overlay's default body is another `mlv-search-field` with overlay\n // behaviour off. Self-reference needs `forwardRef`: the class is not yet\n // defined while its own decorator is evaluated.\n forwardRef(() => MlvSearchField),\n ],\n templateUrl: './search-field.html',\n styleUrl: './search-field.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mlv-search-field',\n '[class.mlv-search-field--disabled]': 'disabled()',\n '[class.mlv-search-field--loading]': 'loading()',\n '[class.mlv-search-field--submit]': 'trigger() === \"submit\"',\n '[class.mlv-search-field--icon]': 'presentation() === \"icon\"',\n '[class.mlv-search-field--overlay-enabled]': '_overlayEnabled()',\n '[class.mlv-search-field--overlay-open]': 'opened()',\n '[attr.aria-busy]': 'loading() || null',\n },\n})\nexport class MlvSearchField extends MlvOverlayHostBase {\n /** Current query. Supports two-way binding with `[(value)]`. */\n readonly value = model<string>('');\n\n /**\n * Search commit strategy. Live mode emits after {@link debounce}; submit\n * mode emits only from Enter or the submit button.\n */\n readonly trigger = input<MlvSearchFieldTrigger>('live');\n\n /**\n * Trailing delay, in milliseconds, used by live mode. Negative values are\n * clamped to zero.\n * @default 200\n */\n readonly debounce = input<number, number | string>(200, {\n transform: (value) => Math.max(0, numberAttribute(value, 200)),\n });\n\n /** Placeholder override. Falls back to the active i18n language pack. */\n readonly placeholder = input<string | undefined>(undefined);\n\n /** Accessible input label override. Falls back to the active i18n pack. */\n readonly ariaLabel = input<string | undefined>(undefined);\n\n /** Whether the field and all its actions are unavailable. */\n readonly disabled = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Whether a pending-search indicator is shown. The input remains editable\n * so a newer live query can supersede an in-flight request; explicit submit\n * activation is blocked until loading completes.\n */\n readonly loading = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Whether the trailing submit action is rendered in `submit` mode.\n *\n * Set to `false` for a field that commits from Enter alone — the overlay's own\n * nested field does this, since the overlay already has a leading search icon\n * and a close action.\n * @default true\n */\n readonly showSubmit = input<boolean, BooleanInput>(true, {\n transform: coerceBooleanProperty,\n });\n\n /** Whether a clear action is shown while the field has a value. */\n readonly clearable = input<boolean, BooleanInput>(true, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Whether clearing also commits the empty query through {@link search}.\n * Composite controls can disable this while still receiving the cleared\n * {@link value} model update.\n * @default true\n */\n readonly commitOnClear = input<boolean, BooleanInput>(true, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Visual form of the trigger. `'icon'` renders a circular search button only\n * and implies {@link overlay}.\n * @default 'field'\n */\n readonly presentation = input<MlvSearchFieldPresentation>('field');\n\n /**\n * Opens a full-screen search overlay instead of accepting input inline.\n *\n * With `presentation=\"field\"` the visible input becomes a trigger: clicking it\n * or pressing Enter/Space on it opens the overlay, so the inline input is\n * rendered read-only to keep it from competing with the overlay's own input.\n * Focus alone never opens the overlay — see {@link _onTriggerClick}. With\n * `presentation=\"icon\"` this is always on.\n * @default false\n */\n readonly overlay = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * ARIA role of the underlying `<input>`, and the opt-in switch for the\n * combobox keyboard hooks.\n *\n * `'searchbox'` (the default) changes nothing: the native\n * `<input type=\"search\">` role stays implicit, no `role` attribute is\n * rendered, and {@link navigate} never emits. `'combobox'` stamps\n * `role=\"combobox\"` on the input and starts reporting the option-navigation\n * keys through {@link navigate}, so a consumer-owned popup listbox can be\n * driven from the field. Pair it with {@link ariaControls},\n * {@link ariaExpanded}, {@link ariaAutocomplete} and\n * {@link ariaActiveDescendant}.\n *\n * Only meaningful with `presentation=\"field\"` — `presentation=\"icon\"` renders\n * a dialog-trigger button, which has no input to carry the role. Likewise\n * mutually exclusive with {@link overlay}, whose inline trigger is a\n * read-only dialog opener rather than a text entry.\n * @default 'searchbox'\n */\n readonly role = input<MlvSearchFieldRole>('searchbox');\n\n /**\n * Forwarded to `aria-controls` on the input — the DOM id of the popup listbox\n * this field drives. Required by the combobox pattern; ignored while `null`.\n */\n readonly ariaControls = input<string | null>(null);\n\n /**\n * Forwarded to `aria-activedescendant` on the input — the DOM id of the\n * currently highlighted option inside the popup. Keep DOM focus on the input\n * and move this id instead, so typing keeps working while navigating options.\n */\n readonly ariaActiveDescendant = input<string | null>(null);\n\n /**\n * Forwarded to `aria-autocomplete` on the input. Use `'list'` when the popup\n * suggests options without changing the query, `'both'` when the field also\n * completes inline. Ignored while `null`.\n */\n readonly ariaAutocomplete = input<MlvSearchFieldAriaAutocomplete | null>(\n null,\n );\n\n /**\n * Forwarded to `aria-expanded` on the input — whether the consumer's popup is\n * currently open. Required by the combobox pattern.\n *\n * Ignored while {@link overlay} is enabled: the inline input is then a dialog\n * trigger and reports the overlay's own open state instead.\n */\n readonly ariaExpanded = input<boolean | null>(null);\n\n /** Emits a committed query according to the selected trigger strategy. */\n // `search` is the intentional public event vocabulary for this composite\n // control; it is emitted on commit, unlike the native input's `search` event.\n // eslint-disable-next-line @angular-eslint/no-output-native\n readonly search = output<string>();\n\n /**\n * Emits when an option-navigation key is pressed while `role=\"combobox\"`.\n *\n * Covers ArrowUp/ArrowDown, PageUp/PageDown and Home/End. The first four are\n * `preventDefault`ed before the event is handed over — inside a text input\n * they would otherwise jump the caret to the ends of the query or scroll the\n * page, which is never what a combobox wants. Home/End are reported without\n * being consumed, because an editable combobox keeps them as caret keys per\n * WAI-ARIA; a consumer that wants \"jump to first/last option\" calls\n * `preventDefault()` on the supplied event itself.\n *\n * Never emits while `role=\"searchbox\"`, so the default field is untouched.\n */\n readonly navigate = output<MlvSearchFieldNavigateEvent>();\n\n /**\n * Emits when the user asks to act on the current query — a non-composing\n * Enter on the inline input, or the trailing submit action.\n *\n * Always emitted *before* the field's own commit, in every `trigger` mode, so\n * a combobox consumer can resolve the highlighted option instead of running a\n * plain search: call `preventDefault()` on the supplied event and the field\n * skips its `search` emission and leaves the key consumed. Left alone, the\n * existing behaviour runs unchanged — `submit` mode emits `search`, `live`\n * mode has already emitted through the debounce and Enter still bubbles.\n *\n * Not emitted while {@link overlay} is enabled, where Enter opens the dialog\n * rather than committing, and not emitted while disabled or loading.\n */\n readonly commit = output<MlvSearchFieldCommitEvent>();\n\n /** @protected Reactive strings for the active language. */\n protected readonly _i18n = inject(MLV_SEARCH_FIELD_I18N);\n\n /** @protected Consumer template replacing the overlay body, when supplied. */\n protected readonly _overlayContentDef = contentChild(\n MlvSearchOverlayContentDef,\n );\n\n /** @protected The overlay panel template attached to the CDK overlay. */\n protected readonly _overlayTemplate =\n viewChild<TemplateRef<unknown>>('overlayTemplate');\n\n /**\n * @protected Whether overlay behaviour is active. `presentation=\"icon\"` forces\n * it on: an icon button has nowhere to accept text.\n */\n protected readonly _overlayEnabled = computed(\n () => this.overlay() || this.presentation() === 'icon',\n );\n\n /** @protected Context handed to a consumer-supplied overlay body. */\n protected readonly _overlayContext = computed<MlvSearchOverlayContentContext>(\n () => ({\n $implicit: this.value(),\n query: this.value(),\n loading: this.loading(),\n placeholder: this._resolvedPlaceholder(),\n ariaLabel: this._resolvedAriaLabel(),\n setQuery: (value: string) => this._onValueChange(value),\n submit: () => this._submitFromOverlay(),\n clear: () => this._clear(),\n close: () => this.close(),\n }),\n );\n\n /** @protected Effective placeholder after resolving an explicit override. */\n protected readonly _resolvedPlaceholder = computed(\n () => this.placeholder() ?? this._i18n().placeholder,\n );\n\n /** @protected Effective input label after resolving an explicit override. */\n protected readonly _resolvedAriaLabel = computed(\n () => this.ariaLabel() ?? this._i18n().search,\n );\n\n /**\n * @protected Explicit `role` attribute for the input, or `null` to leave it off.\n *\n * `searchbox` is the implicit role of `<input type=\"search\">`, so the default\n * renders no attribute at all and the DOM stays exactly as it was.\n */\n protected readonly _resolvedRole = computed(() =>\n this.role() === 'combobox' ? 'combobox' : null,\n );\n\n /**\n * @protected Effective `aria-expanded`.\n *\n * An overlay-enabled field is a dialog trigger and owns this attribute\n * itself; otherwise it mirrors the consumer's popup state.\n */\n protected readonly _resolvedAriaExpanded = computed(() =>\n this._overlayEnabled() ? this.opened() : this.ariaExpanded(),\n );\n\n /** @protected Whether the clear action should currently be rendered. */\n protected readonly _showClear = computed(\n () => this.clearable() && this.value().length > 0 && !this.disabled(),\n );\n\n /**\n * @protected Whether the trailing submit action should be rendered.\n *\n * An overlay-enabled field never shows it: the inline input is a trigger, so\n * there is nothing to submit from it — the query is typed in the overlay.\n */\n protected readonly _showSubmitAction = computed(\n () =>\n this.trigger() === 'submit' &&\n this.showSubmit() &&\n !this._overlayEnabled(),\n );\n\n /**\n * @protected Whether the leading search icon should be rendered.\n *\n * The field carries exactly one search glyph: trailing when there is a submit\n * action to hang it on, leading otherwise. Live mode has no submit action, and\n * neither does a submit-mode field with {@link showSubmit} turned off.\n */\n protected readonly _showLeadingIcon = computed(\n () => !this._showSubmitAction(),\n );\n\n /**\n * @protected Whether the trailing spinner is rendered as its own element.\n *\n * The submit action carries its own loading state, so a second spinner beside\n * it would be redundant. Without a submit action the field needs one of its own.\n */\n protected readonly _showStandaloneLoader = computed(\n () => this.loading() && !this._showSubmitAction(),\n );\n\n /** @private Last query emitted by live mode, used to suppress duplicates. */\n private _lastLiveQuery: string | null = null;\n\n /** @private Marks model writes originating from this control's own UI. */\n private _interactionValue: string | undefined;\n\n /** @private Pending live-search timer, when a debounce window is active. */\n private _pendingTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** @protected Backdrop class; the base appends `--leaving` on close. */\n protected override readonly _backdropClass = 'mlv-search-field__backdrop';\n\n /** @protected Attaches the overlay panel template. */\n protected override _getOverlayTemplate(): TemplateRef<unknown> | undefined {\n return this._overlayTemplate();\n }\n\n /** @protected Full-viewport overlay: a plain global strategy, sized by config. */\n protected override _buildPositionStrategy(): PositionStrategy {\n return this._overlay.position().global();\n }\n\n /** @protected Makes the pane cover the viewport so the body can centre within it. */\n protected override _buildExtraOverlayConfig(): OverlayConfig {\n return {\n width: '100%',\n height: '100%',\n panelClass: 'mlv-search-field__overlay-pane',\n };\n }\n\n /** Reconciles controlled values and registers timer cleanup. */\n constructor() {\n super();\n\n effect(() => {\n const value = this.value();\n if (this._interactionValue === value) {\n this._interactionValue = undefined;\n return;\n }\n\n // A parent-owned value supersedes both the captured debounce and the\n // duplicate baseline. The same query must be eligible to emit again\n // after a controlled reset.\n this._interactionValue = undefined;\n this._cancelPending();\n this._lastLiveQuery = null;\n });\n\n inject(DestroyRef).onDestroy(() => this._cancelPending());\n }\n\n /** @protected Opens the overlay if it is enabled and not already open. */\n protected _openOverlay(): void {\n if (this.disabled() || !this._overlayEnabled() || this.opened()) return;\n\n this.open();\n }\n\n /**\n * @protected Opens the overlay from a click on the inline trigger.\n *\n * The handler sits on the `mlv-input` host, so clicks on the field's own\n * actions — the clear button — bubble through here too. Only the input itself\n * is the trigger, so clearing a committed query does not force the overlay open.\n *\n * Deliberately not bound to focus. WAI-ARIA treats the control that opens a\n * dialog as a button, activated by click or Enter/Space; opening on focus traps\n * a keyboard user who is only tabbing past, and fights the focus the overlay\n * restores to this same input on close — which would reopen it immediately.\n */\n protected _onTriggerClick(event: Event): void {\n if (!(event.target instanceof HTMLInputElement)) return;\n\n this._openOverlay();\n }\n\n /**\n * @protected Opens the overlay from Space on the inline trigger.\n *\n * The trigger is `readonly` while the overlay is enabled, so Space types\n * nothing; `preventDefault` stops it from scrolling the page instead.\n */\n protected _onTriggerSpace(event: Event): void {\n if (!this._overlayEnabled() || this.disabled()) return;\n\n event.preventDefault();\n this._openOverlay();\n }\n\n /**\n * @protected Commits from inside the overlay.\n *\n * Submit mode has a commit action; live mode has already emitted through the\n * debounce, so Enter there only dismisses. Either way the overlay closes, which\n * restores focus to the trigger.\n */\n protected _submitFromOverlay(): void {\n if (this.trigger() === 'submit') {\n this._submit();\n }\n this.close();\n }\n\n /** @protected Commits and closes when Enter is pressed on the overlay input. */\n protected _onOverlayEnter(event: Event): void {\n if (!(event instanceof KeyboardEvent) || event.isComposing) return;\n\n // The field commonly sits inside a form; handle Enter here rather than\n // letting it submit the surrounding form.\n event.preventDefault();\n this._submitFromOverlay();\n }\n\n /** @protected Synchronises user input and schedules a live search if enabled. */\n protected _onValueChange(value: string): void {\n if (this.disabled()) return;\n\n this._setInteractionValue(value);\n if (this.trigger() === 'live') {\n this._scheduleLive(value);\n } else {\n this._cancelPending();\n }\n }\n\n /**\n * @protected Handles a non-composing Enter on the inline field.\n *\n * With the overlay enabled the field is a dialog trigger, so Enter opens it;\n * otherwise Enter commits a submit-mode search. Either way the key is consumed:\n * search fields commonly live inside forms, and neither action should also\n * submit the surrounding form.\n */\n protected _onEnter(event: Event): void {\n if (!(event instanceof KeyboardEvent) || event.isComposing) return;\n\n if (this._overlayEnabled()) {\n event.preventDefault();\n this._openOverlay();\n return;\n }\n\n if (this._consumerHandledCommit(event)) return;\n\n if (this.trigger() !== 'submit') return;\n\n event.preventDefault();\n this._submit();\n }\n\n /**\n * @protected Reports an option-navigation key while the field is a combobox.\n *\n * Silent for the default `role=\"searchbox\"`, so a plain search field keeps\n * every key it has today. See {@link navigate} for which keys are consumed.\n */\n protected _onNavigationKey(event: Event): void {\n if (!(event instanceof KeyboardEvent) || event.isComposing) return;\n if (this.role() !== 'combobox' || this.disabled()) return;\n\n const direction = NAVIGATION_KEYS.get(event.key);\n if (direction === undefined) return;\n\n if (CONSUMED_DIRECTIONS.has(direction)) {\n event.preventDefault();\n }\n this.navigate.emit({ direction, event });\n }\n\n /** @protected Commits from the trailing submit action, offering it up first. */\n protected _onSubmitClick(event: MouseEvent): void {\n if (this._consumerHandledCommit(event)) return;\n\n this._submit();\n }\n\n /**\n * @private Offers the commit to the consumer and reports whether they took it.\n *\n * Nothing is offered while the field cannot commit anyway — disabled or with\n * a request already in flight — so `commit` never fires for an interaction\n * the field itself would have ignored.\n */\n private _consumerHandledCommit(event: KeyboardEvent | MouseEvent): boolean {\n if (this.disabled() || this.loading()) return false;\n\n this.commit.emit({ value: this.value(), event });\n return event.defaultPrevented;\n }\n\n /** @protected Commits the current value from the submit action button. */\n protected _submit(): void {\n if (this.disabled() || this.loading() || this.trigger() !== 'submit') {\n return;\n }\n\n this._cancelPending();\n this.search.emit(this.value());\n }\n\n /** @protected Clears immediately and invalidates any pending live query. */\n protected _clear(): void {\n if (this.disabled()) return;\n\n this._cancelPending();\n this._setInteractionValue('');\n if (this.commitOnClear()) {\n this._lastLiveQuery = '';\n this.search.emit('');\n }\n }\n\n /** @private Starts or immediately resolves the trailing live-search window. */\n private _scheduleLive(value: string): void {\n this._cancelPending();\n\n const delay = this.debounce();\n if (delay === 0) {\n this._emitLive(value);\n return;\n }\n\n this._pendingTimer = setTimeout(() => {\n this._pendingTimer = null;\n if (this.trigger() === 'live' && !this.disabled()) {\n this._emitLive(value);\n }\n }, delay);\n }\n\n /** @private Emits a live query only when it differs from the prior one. */\n private _emitLive(value: string): void {\n if (value === this._lastLiveQuery) return;\n\n this._lastLiveQuery = value;\n this.search.emit(value);\n }\n\n /** @private Writes a user-originated value without treating it as controlled input. */\n private _setInteractionValue(value: string): void {\n this._interactionValue = value;\n this.value.set(value);\n }\n\n /** @private Cancels and forgets the current live-search timer. */\n private _cancelPending(): void {\n if (this._pendingTimer === null) return;\n\n clearTimeout(this._pendingTimer);\n this._pendingTimer = null;\n }\n}\n","@if (presentation() === 'icon') {\n<button\n mlvButton\n class=\"mlv-search-field__trigger-icon\"\n type=\"button\"\n shape=\"circle\"\n variant=\"transparent\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"_resolvedAriaLabel()\"\n [attr.aria-expanded]=\"opened()\"\n [attr.aria-haspopup]=\"'dialog'\"\n (click)=\"_openOverlay()\"\n>\n <svg mlvButtonIcon lucideSearch />\n</button>\n} @else {\n<!--\n The dialog-trigger and combobox semantics go through `mlv-input`'s own aria\n inputs rather than `[attr.*]` on this host, so they land on the focusable\n `<input>` where a screen reader reads them.\n-->\n<mlv-input\n class=\"mlv-search-field__input\"\n type=\"search\"\n inputMode=\"search\"\n autocomplete=\"off\"\n [placeholder]=\"_resolvedPlaceholder()\"\n [ariaLabel]=\"_resolvedAriaLabel()\"\n [disabled]=\"disabled()\"\n [loading]=\"loading()\"\n [value]=\"value()\"\n [readonly]=\"_overlayEnabled()\"\n [role]=\"_resolvedRole()\"\n [ariaExpanded]=\"_resolvedAriaExpanded()\"\n [ariaHasPopup]=\"_overlayEnabled() ? 'dialog' : null\"\n [ariaAutocomplete]=\"ariaAutocomplete()\"\n [ariaControls]=\"ariaControls()\"\n [ariaActiveDescendant]=\"ariaActiveDescendant()\"\n (valueChange)=\"_onValueChange($event)\"\n (keydown)=\"_onNavigationKey($event)\"\n (keydown.enter)=\"_onEnter($event)\"\n (keydown.space)=\"_onTriggerSpace($event)\"\n (click)=\"_onTriggerClick($event)\"\n>\n @if (_showLeadingIcon()) {\n <span class=\"mlv-search-field__leading\" *mlvFormControlPrepend>\n <svg\n class=\"mlv-search-field__leading-icon\"\n lucideSearch\n aria-hidden=\"true\"\n />\n </span>\n }\n\n <div class=\"mlv-search-field__actions\" *mlvFormControlAppend>\n @if (_showClear()) {\n <mlv-button-close\n mlvDensity=\"tight\"\n [ariaLabel]=\"_i18n().clear\"\n (mousedown)=\"$event.preventDefault()\"\n (mlvClick)=\"_clear()\"\n ></mlv-button-close>\n } @if (_showStandaloneLoader()) {\n <mlv-loader\n class=\"mlv-search-field__loader\"\n variant=\"circle\"\n indeterminate\n [size]=\"18\"\n [strokeWidth]=\"2\"\n />\n } @if (_showSubmitAction()) {\n <button\n mlvButton\n class=\"mlv-search-field__submit\"\n mlvDensity=\"tight\"\n type=\"button\"\n shape=\"circle\"\n variant=\"transparent\"\n [disabled]=\"disabled()\"\n [loading]=\"loading()\"\n [attr.aria-label]=\"_i18n().submit\"\n (click)=\"_onSubmitClick($event)\"\n >\n <svg mlvButtonIcon lucideSearch />\n </button>\n }\n </div>\n</mlv-input>\n}\n\n<ng-template #overlayTemplate>\n <div\n class=\"mlv-search-field__overlay\"\n [class.mlv-search-field__overlay--entering]=\"animationState() === 'enter'\"\n [class.mlv-search-field__overlay--leaving]=\"animationState() === 'leave'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"_resolvedAriaLabel()\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n (animationend)=\"onAnimationEnd()\"\n >\n <div class=\"mlv-search-field__overlay-panel\">\n @if (_overlayContentDef(); as contentDef) {\n <ng-container\n [ngTemplateOutlet]=\"contentDef.templateRef\"\n [ngTemplateOutletContext]=\"_overlayContext()\"\n />\n } @else {\n <!--\n The overlay's default body is another search field, so the overlay\n inherits every affordance of the inline control instead of re-declaring a\n near-copy of it. It is configured as a pure input surface: `submit` mode\n never emits while typing, `showSubmit` drops the redundant button, and\n `commitOnClear` is off — this host owns commit, through `valueChange` for\n live mode and `_onOverlayEnter` for Enter.\n -->\n <mlv-search-field\n class=\"mlv-search-field__overlay-input\"\n trigger=\"submit\"\n [showSubmit]=\"false\"\n [commitOnClear]=\"false\"\n [clearable]=\"clearable()\"\n [loading]=\"loading()\"\n [placeholder]=\"_resolvedPlaceholder()\"\n [ariaLabel]=\"_resolvedAriaLabel()\"\n [value]=\"value()\"\n (valueChange)=\"_onValueChange($event)\"\n (keydown.enter)=\"_onOverlayEnter($event)\"\n />\n }\n\n <button\n mlvButton\n class=\"mlv-search-field__overlay-close\"\n type=\"button\"\n variant=\"transparent\"\n mlvDensity=\"compact\"\n [attr.aria-label]=\"_i18n().closeOverlay\"\n (click)=\"close()\"\n >\n {{ _i18n().closeOverlay }}\n </button>\n </div>\n </div>\n</ng-template>\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Directive, TemplateRef, inject } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Replaces the default body of `mlv-search-field`'s overlay.
|
|
5
|
+
*
|
|
6
|
+
* Without it the overlay renders the field's own input, restyled for the
|
|
7
|
+
* overlay surface. With it the consumer owns the body completely — an
|
|
8
|
+
* autocomplete input, recent searches, grouped results — while the host keeps
|
|
9
|
+
* owning the overlay lifecycle, focus restore, and the `value`/`search` contract.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```html
|
|
13
|
+
* <mlv-search-field overlay>
|
|
14
|
+
* <ng-template mlvSearchOverlayContent let-query let-setQuery="setQuery" let-close="close">
|
|
15
|
+
* <mlv-input [value]="query" (valueChange)="setQuery($event)" [mlvAutocomplete]="options" />
|
|
16
|
+
* <button mlvButton (click)="close()">Cancel</button>
|
|
17
|
+
* </ng-template>
|
|
18
|
+
* </mlv-search-field>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export class MlvSearchOverlayContentDef {
|
|
22
|
+
/** The template reference for the overlay body. */
|
|
23
|
+
templateRef = inject((TemplateRef));
|
|
24
|
+
/** Type guard so `let-` variables infer from {@link MlvSearchOverlayContentContext}. */
|
|
25
|
+
static ngTemplateContextGuard(_directive, _context) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSearchOverlayContentDef, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
29
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvSearchOverlayContentDef, isStandalone: true, selector: "[mlvSearchOverlayContent]", ngImport: i0 });
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSearchOverlayContentDef, decorators: [{
|
|
32
|
+
type: Directive,
|
|
33
|
+
args: [{ selector: '[mlvSearchOverlayContent]' }]
|
|
34
|
+
}] });
|
|
35
|
+
//# sourceMappingURL=search-overlay-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-overlay-content.js","sourceRoot":"","sources":["../../../../../../../libs/core/search-field/src/lib/search-field/search-overlay-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;;AAkC/D;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,OAAO,0BAA0B;IACrC,mDAAmD;IAC1C,WAAW,GAAG,MAAM,CAAC,CAAA,WAA2C,CAAA,CAAC,CAAC;IAE3E,wFAAwF;IACxF,MAAM,CAAC,sBAAsB,CAC3B,UAAsC,EACtC,QAAiB;QAEjB,OAAO,IAAI,CAAC;IACd,CAAC;uGAVU,0BAA0B;2FAA1B,0BAA0B;;2FAA1B,0BAA0B;kBADtC,SAAS;mBAAC,EAAE,QAAQ,EAAE,2BAA2B,EAAE","sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Context handed to a `[mlvSearchOverlayContent]` template.\n *\n * The template replaces the overlay's default body entirely, so everything it\n * needs to drive the field is passed in rather than reached for: the current\n * query, the writers that keep the host's `value` model and live/submit\n * behaviour intact, and the close action.\n */\nexport interface MlvSearchOverlayContentContext {\n /** Current query. Available as the implicit template variable. */\n $implicit: string;\n /** Current query, for `let-query=\"query\"`. */\n query: string;\n /** Whether a search is in flight, mirroring the host's `loading` input. */\n loading: boolean;\n /** Placeholder resolved from the host input or the active language pack. */\n placeholder: string;\n /** Accessible input label resolved the same way. */\n ariaLabel: string;\n /**\n * Writes the query. Routes through the host's normal input path, so live mode\n * still debounces and deduplicates and submit mode still waits for a commit.\n */\n setQuery: (value: string) => void;\n /** Commits the current query immediately, bypassing any pending debounce. */\n submit: () => void;\n /** Clears the query, honouring the host's `commitOnClear`. */\n clear: () => void;\n /** Closes the overlay and returns focus to whatever opened it. */\n close: () => void;\n}\n\n/**\n * Replaces the default body of `mlv-search-field`'s overlay.\n *\n * Without it the overlay renders the field's own input, restyled for the\n * overlay surface. With it the consumer owns the body completely — an\n * autocomplete input, recent searches, grouped results — while the host keeps\n * owning the overlay lifecycle, focus restore, and the `value`/`search` contract.\n *\n * @example\n * ```html\n * <mlv-search-field overlay>\n * <ng-template mlvSearchOverlayContent let-query let-setQuery=\"setQuery\" let-close=\"close\">\n * <mlv-input [value]=\"query\" (valueChange)=\"setQuery($event)\" [mlvAutocomplete]=\"options\" />\n * <button mlvButton (click)=\"close()\">Cancel</button>\n * </ng-template>\n * </mlv-search-field>\n * ```\n */\n@Directive({ selector: '[mlvSearchOverlayContent]' })\nexport class MlvSearchOverlayContentDef {\n /** The template reference for the overlay body. */\n readonly templateRef = inject(TemplateRef<MlvSearchOverlayContentContext>);\n\n /** Type guard so `let-` variables infer from {@link MlvSearchOverlayContentContext}. */\n static ngTemplateContextGuard(\n _directive: MlvSearchOverlayContentDef,\n _context: unknown,\n ): _context is MlvSearchOverlayContentContext {\n return true;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"malva-ui-core-search-field.js","sourceRoot":"","sources":["../../../../../libs/core/search-field/src/malva-ui-core-search-field.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/core/segmented/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC","sourcesContent":["export * from './lib/segmented.types';\nexport * from './lib/segmented-token';\nexport * from './lib/segmented-item/segmented-item';\nexport * from './lib/segmented/segmented';\n"]}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { afterNextRender, afterRenderEffect, ChangeDetectionStrategy, Component, computed, contentChildren, DestroyRef, effect, forwardRef, inject, input, model, signal, untracked, viewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
4
|
+
import { FocusKeyManager } from '@angular/cdk/a11y';
|
|
5
|
+
import { MLV_FORM_CONTROL, MlvDescription, MlvLabel, MlvMessage, MlvSignalFormControlBase, } from '@malva-ui/core/form-utils';
|
|
6
|
+
import { MLV_DENSITY_ELEMENT, MlvDensityDirective, } from '@malva-ui/cdk/density';
|
|
7
|
+
import { MlvResizeObserverService } from '@malva-ui/cdk/utils';
|
|
8
|
+
import { MlvSegmentedItem } from '../segmented-item/segmented-item';
|
|
9
|
+
import { MLV_SEGMENTED } from '../segmented-token';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@malva-ui/cdk/density";
|
|
12
|
+
/**
|
|
13
|
+
* Segmented control: a grey track holding `mlvSegmentedItem` buttons or links,
|
|
14
|
+
* with a raised pill sliding behind the active one (the boxed-tabs look).
|
|
15
|
+
*
|
|
16
|
+
* - **Radio mode** (`<button mlvSegmentedItem value="…">`): a signal-form
|
|
17
|
+
* control (`[(value)]`, `[(ngModel)]`, `[formField]`) with `role="radiogroup"`
|
|
18
|
+
* semantics, arrow-key navigation and a roving tabindex.
|
|
19
|
+
* - **Link mode** (`<a mlvSegmentedItem routerLink="…">`): plain navigation
|
|
20
|
+
* links; the active one is derived from the router and marked
|
|
21
|
+
* `aria-current="page"`.
|
|
22
|
+
*/
|
|
23
|
+
export class MlvSegmented extends MlvSignalFormControlBase {
|
|
24
|
+
/** Two-way bindable selected value (radio mode). */
|
|
25
|
+
value = model(/* @ts-ignore */
|
|
26
|
+
...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
|
|
27
|
+
/** Colour of the active pill — `'neutral'` (boxed-tabs white) or a pale semantic tone. */
|
|
28
|
+
tone = input('neutral', /* @ts-ignore */
|
|
29
|
+
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
30
|
+
/** Layout axis of the track. */
|
|
31
|
+
orientation = input('horizontal', /* @ts-ignore */
|
|
32
|
+
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
33
|
+
/** Stretch the track to its container and give every item the same size. */
|
|
34
|
+
equalWidth = input(false, { ...(ngDevMode ? { debugName: "equalWidth" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
35
|
+
/** Projected items in DOM order. */
|
|
36
|
+
items = contentChildren(MlvSegmentedItem, { ...(ngDevMode ? { debugName: "items" } : /* istanbul ignore next */ {}), descendants: true });
|
|
37
|
+
/** Whether the control holds a value — a segment is selected. */
|
|
38
|
+
hasValue = computed(() => this.value() != null, /* @ts-ignore */
|
|
39
|
+
...(ngDevMode ? [{ debugName: "hasValue" }] : /* istanbul ignore next */ []));
|
|
40
|
+
/** @internal Track element hosting the pill and the projected items. */
|
|
41
|
+
_trackRef = viewChild.required('track', /* @ts-ignore */
|
|
42
|
+
...(ngDevMode ? [{ debugName: "_trackRef" }] : /* istanbul ignore next */ []));
|
|
43
|
+
/** @internal Link mode: any item is an `<a>`. */
|
|
44
|
+
_isLinkMode = computed(() => this.items().some((i) => i.isLink), /* @ts-ignore */
|
|
45
|
+
...(ngDevMode ? [{ debugName: "_isLinkMode" }] : /* istanbul ignore next */ []));
|
|
46
|
+
/** @internal The item currently rendered as active, if any. */
|
|
47
|
+
_activeItem = computed(() => this.items().find((i) => i.isActive()) ?? null, /* @ts-ignore */
|
|
48
|
+
...(ngDevMode ? [{ debugName: "_activeItem" }] : /* istanbul ignore next */ []));
|
|
49
|
+
/** @internal Set once the pill has been positioned; enables the slide transition. */
|
|
50
|
+
_measured = signal(false, /* @ts-ignore */
|
|
51
|
+
...(ngDevMode ? [{ debugName: "_measured" }] : /* istanbul ignore next */ []));
|
|
52
|
+
/** @internal Tone / orientation / state modifier classes. */
|
|
53
|
+
_hostModifiers = computed(() => `mlv-segmented--tone-${this.tone()} mlv-segmented--${this.orientation()} mlv-segmented--state-${this.resolvedState()}`, /* @ts-ignore */
|
|
54
|
+
...(ngDevMode ? [{ debugName: "_hostModifiers" }] : /* istanbul ignore next */ []));
|
|
55
|
+
/** @private Roving-focus manager over the items (radio mode only). */
|
|
56
|
+
_keyManager = null;
|
|
57
|
+
/** @private Guards the mixed `<a>` / `<button>` dev warning to one per group instance. */
|
|
58
|
+
_warnedMixed = false;
|
|
59
|
+
/** @private Guards the multiple-active dev warning to one per group instance. */
|
|
60
|
+
_warnedMultiActive = false;
|
|
61
|
+
/** @private Destroys the key manager with the component. */
|
|
62
|
+
_destroyRef = inject(DestroyRef);
|
|
63
|
+
/** @private Shared ResizeObserver — re-measures the pill when the track resizes (fonts, density, content). */
|
|
64
|
+
_resizeService = inject(MlvResizeObserverService);
|
|
65
|
+
/** @private Bumped on every track resize to re-run the measuring render effect. */
|
|
66
|
+
_layoutVersion = signal(0, /* @ts-ignore */
|
|
67
|
+
...(ngDevMode ? [{ debugName: "_layoutVersion" }] : /* istanbul ignore next */ []));
|
|
68
|
+
constructor() {
|
|
69
|
+
super();
|
|
70
|
+
this._destroyRef.onDestroy(() => this._keyManager?.destroy());
|
|
71
|
+
// Rebuild the manager whenever the projected set (or the mode) changes.
|
|
72
|
+
effect(() => {
|
|
73
|
+
const items = [...this.items()];
|
|
74
|
+
const linkMode = this._isLinkMode();
|
|
75
|
+
untracked(() => {
|
|
76
|
+
this._keyManager?.destroy();
|
|
77
|
+
this._keyManager = null;
|
|
78
|
+
if (linkMode || items.length === 0)
|
|
79
|
+
return;
|
|
80
|
+
this._keyManager = new FocusKeyManager(items)
|
|
81
|
+
.skipPredicate((item) => item.isDisabled())
|
|
82
|
+
.withWrap();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
// Roving tabindex (radio mode): the active item is the single tab stop, or
|
|
86
|
+
// the first enabled item when nothing is selected / the selection is disabled.
|
|
87
|
+
effect(() => {
|
|
88
|
+
const items = this.items();
|
|
89
|
+
if (this._isLinkMode())
|
|
90
|
+
return;
|
|
91
|
+
const active = this._activeItem();
|
|
92
|
+
const firstEnabled = items.find((i) => !i.isDisabled()) ?? null;
|
|
93
|
+
const stop = active && !active.isDisabled() ? active : firstEnabled;
|
|
94
|
+
items.forEach((i) => i.tabIndex.set(i === stop ? 0 : -1));
|
|
95
|
+
});
|
|
96
|
+
// Dev-only diagnostics for the two group shapes that break silently: a
|
|
97
|
+
// group mixing `<a>` and `<button>` hosts (link mode wins, so the buttons
|
|
98
|
+
// lose their radio keyboard model), and a radio group rendering more than
|
|
99
|
+
// one active item (two `aria-checked="true"` radios). Each warns once per
|
|
100
|
+
// group instance; in production the guard reads no signal, so the effect
|
|
101
|
+
// registers no dependency and never re-runs.
|
|
102
|
+
effect(() => {
|
|
103
|
+
if (typeof ngDevMode === 'undefined' || !ngDevMode)
|
|
104
|
+
return;
|
|
105
|
+
const items = this.items();
|
|
106
|
+
const linkMode = this._isLinkMode();
|
|
107
|
+
if (!this._warnedMixed) {
|
|
108
|
+
const links = items.filter((i) => i.isLink).length;
|
|
109
|
+
if (links > 0 && links < items.length) {
|
|
110
|
+
this._warnedMixed = true;
|
|
111
|
+
console.warn('[mlv-segmented] Mixing <a mlvSegmentedItem> and <button mlvSegmentedItem> in one group is unsupported: the group switches to link mode and the buttons lose their radio keyboard model.');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const activeCount = items.filter((i) => i.isActive()).length;
|
|
115
|
+
if (!linkMode && !this._warnedMultiActive && activeCount > 1) {
|
|
116
|
+
this._warnedMultiActive = true;
|
|
117
|
+
console.warn('[mlv-segmented] More than one item is active in a radio-mode group: [active] is an uncontrolled override and must not be combined with a value-driven selection of another item — two radios now report aria-checked="true".');
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
// Observe the track once it exists; every resize re-measures the pill.
|
|
121
|
+
afterNextRender(() => {
|
|
122
|
+
this._resizeService
|
|
123
|
+
.observe(this._trackRef().nativeElement)
|
|
124
|
+
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
125
|
+
.subscribe(() => this._layoutVersion.update((n) => n + 1));
|
|
126
|
+
});
|
|
127
|
+
// Position the pill after every render in which the active item, the item
|
|
128
|
+
// set, the layout inputs or the track size changed.
|
|
129
|
+
afterRenderEffect(() => {
|
|
130
|
+
const active = this._activeItem();
|
|
131
|
+
this.items();
|
|
132
|
+
this.orientation();
|
|
133
|
+
this.equalWidth();
|
|
134
|
+
this._layoutVersion();
|
|
135
|
+
untracked(() => this._measure(active));
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/** Selects `item` (radio mode). Ignored while the group is disabled or readonly. */
|
|
139
|
+
selectItem(item) {
|
|
140
|
+
if (this.computedDisabled() || this.readonly() || item.isDisabled())
|
|
141
|
+
return;
|
|
142
|
+
this.value.set(item.value());
|
|
143
|
+
item.focus();
|
|
144
|
+
this._markTouched();
|
|
145
|
+
}
|
|
146
|
+
/** Keeps the key manager's active item in sync with the item that received DOM focus. */
|
|
147
|
+
onItemFocus(item) {
|
|
148
|
+
const index = this.items().indexOf(item);
|
|
149
|
+
if (index >= 0)
|
|
150
|
+
this._keyManager?.setActiveItem(index);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* @internal Track keydown handler (radio mode). ArrowLeft/ArrowUp → previous,
|
|
154
|
+
* ArrowRight/ArrowDown → next (wrapping, skipping disabled), Home/End → first/last.
|
|
155
|
+
* Moving focus also selects (WAI-ARIA radio group), unless the group is readonly.
|
|
156
|
+
*/
|
|
157
|
+
_onKeydown(event) {
|
|
158
|
+
const manager = this._keyManager;
|
|
159
|
+
if (!manager)
|
|
160
|
+
return;
|
|
161
|
+
switch (event.key) {
|
|
162
|
+
case 'ArrowRight':
|
|
163
|
+
case 'ArrowDown':
|
|
164
|
+
if (manager.activeItem)
|
|
165
|
+
manager.setNextItemActive();
|
|
166
|
+
else
|
|
167
|
+
manager.setFirstItemActive();
|
|
168
|
+
break;
|
|
169
|
+
case 'ArrowLeft':
|
|
170
|
+
case 'ArrowUp':
|
|
171
|
+
if (manager.activeItem)
|
|
172
|
+
manager.setPreviousItemActive();
|
|
173
|
+
else
|
|
174
|
+
manager.setLastItemActive();
|
|
175
|
+
break;
|
|
176
|
+
case 'Home':
|
|
177
|
+
manager.setFirstItemActive();
|
|
178
|
+
break;
|
|
179
|
+
case 'End':
|
|
180
|
+
manager.setLastItemActive();
|
|
181
|
+
break;
|
|
182
|
+
default:
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
event.preventDefault();
|
|
186
|
+
const active = manager.activeItem;
|
|
187
|
+
if (active)
|
|
188
|
+
this.selectItem(active);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* @private Writes the active item's offset box (relative to the track — its
|
|
192
|
+
* `offsetParent`, so items must be direct children) into the four
|
|
193
|
+
* `--mlv-segmented-indicator-*` custom properties. Without an active item the
|
|
194
|
+
* pill collapses. On the first successful (non-zero) measurement `_measured`
|
|
195
|
+
* flips (one macrotask later, after a forced style flush) so the slide
|
|
196
|
+
* transition only ever animates *subsequent* moves — never a slide-in from
|
|
197
|
+
* `0` on load. A group first rendered without a box (inside `display: none`,
|
|
198
|
+
* a collapsed `mlv-expand`, a closed drawer) measures `0` and stays
|
|
199
|
+
* unmeasured until it is actually laid out.
|
|
200
|
+
*/
|
|
201
|
+
_measure(active) {
|
|
202
|
+
const track = this._trackRef().nativeElement;
|
|
203
|
+
const set = (name, px) => track.style.setProperty(`--mlv-segmented-indicator-${name}`, `${px}px`);
|
|
204
|
+
if (!active) {
|
|
205
|
+
set('width', 0);
|
|
206
|
+
set('height', 0);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const el = active.elementRef.nativeElement;
|
|
210
|
+
set('left', el.offsetLeft);
|
|
211
|
+
set('top', el.offsetTop);
|
|
212
|
+
set('width', el.offsetWidth);
|
|
213
|
+
set('height', el.offsetHeight);
|
|
214
|
+
if (!this._measured() && (el.offsetWidth > 0 || el.offsetHeight > 0)) {
|
|
215
|
+
// Force a style flush so the initial position is committed *before* the
|
|
216
|
+
// transition-enabling class lands; otherwise the first move animates from 0.
|
|
217
|
+
void track.offsetWidth;
|
|
218
|
+
const id = setTimeout(() => this._measured.set(true));
|
|
219
|
+
this._destroyRef.onDestroy(() => clearTimeout(id));
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSegmented, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
223
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvSegmented, isStandalone: true, selector: "mlv-segmented", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, equalWidth: { classPropertyName: "equalWidth", publicName: "equalWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class": "_hostModifiers()", "class.mlv-segmented--disabled": "computedDisabled()", "class.mlv-segmented--readonly": "readonly()", "class.mlv-segmented--equal-width": "equalWidth()", "class.mlv-segmented--link": "_isLinkMode()", "class.mlv-segmented--measured": "_measured()", "attr.id": "id()" }, classAttribute: "mlv-segmented" }, providers: [
|
|
224
|
+
{ provide: MLV_SEGMENTED, useExisting: forwardRef(() => MlvSegmented) },
|
|
225
|
+
{ provide: MLV_FORM_CONTROL, useExisting: forwardRef(() => MlvSegmented) },
|
|
226
|
+
{ provide: MLV_DENSITY_ELEMENT, useValue: 'segmented' },
|
|
227
|
+
], queries: [{ propertyName: "items", predicate: MlvSegmentedItem, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_trackRef", first: true, predicate: ["track"], descendants: true, isSignal: true }], usesInheritance: true, hostDirectives: [{ directive: i1.MlvDensityDirective, inputs: ["mlvDensity", "mlvDensity"] }], ngImport: i0, template: "@if (label()) {\n<mlv-label [required]=\"required()\">{{ label() }}</mlv-label>\n}\n<!--\n The track is the `role=\"radiogroup\"` container, not a focus target: focus\n lives on the projected items, which carry the roving tabindex. Its keydown\n listener only delegates arrow/Home/End to that roving model, so making the\n container focusable would add a second, spurious tab stop.\n-->\n<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n<div\n #track\n class=\"mlv-segmented__track\"\n [attr.role]=\"_isLinkMode() ? null : 'radiogroup'\"\n [attr.aria-label]=\"_isLinkMode() ? null : ariaLabel() || label() || null\"\n [attr.aria-orientation]=\"_isLinkMode() ? null : orientation()\"\n [attr.aria-required]=\"_isLinkMode() ? null : required() || null\"\n [attr.aria-disabled]=\"_isLinkMode() ? null : computedDisabled() || null\"\n [attr.aria-describedby]=\"_describedBy()\"\n (keydown)=\"_onKeydown($event)\"\n>\n <span class=\"mlv-segmented__indicator\" aria-hidden=\"true\"></span>\n <ng-content />\n</div>\n@if (description()) {\n<mlv-description [id]=\"_descriptionId()\">{{ description() }}</mlv-description>\n} @if (message()) {\n<mlv-message [id]=\"_messageId()\" [state]=\"resolvedState()\"\n >{{ message() }}</mlv-message\n>\n}\n", styles: [".mlv-segmented{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-m-size)}.mlv-segmented *{box-sizing:border-box}.mlv-segmented{--mlv-segmented-radius: var(--mlv-radius-xl);--mlv-segmented-track-padding: .1875rem;--mlv-segmented-track-bg: var(--mlv-background-sunken);--mlv-segmented-separator-color: var(--mlv-border-normal);--mlv-segmented-indicator-duration: .22s;--mlv-segmented-pill-bg: var(--mlv-background-raised);--mlv-segmented-active-color: var(--mlv-text-primary);--mlv-segmented-inner-radius: max( 0rem, calc(var(--mlv-segmented-radius) - var(--mlv-segmented-track-padding)) );display:inline-flex;flex-direction:column;gap:var(--mlv-spacing-1);max-width:100%;min-width:0}.mlv-segmented--tone-neutral{--mlv-segmented-pill-bg: var(--mlv-background-raised);--mlv-segmented-active-color: var(--mlv-text-primary)}.mlv-segmented--tone-accent{--mlv-segmented-pill-bg: var(--mlv-background-accent-1-pale);--mlv-segmented-active-color: var(--mlv-text-action)}.mlv-segmented--tone-info{--mlv-segmented-pill-bg: var(--mlv-background-info-1-pale);--mlv-segmented-active-color: var(--mlv-text-info)}.mlv-segmented--tone-success{--mlv-segmented-pill-bg: var(--mlv-background-success-1-pale);--mlv-segmented-active-color: var(--mlv-text-positive)}.mlv-segmented--tone-warning{--mlv-segmented-pill-bg: var(--mlv-background-warning-1-pale);--mlv-segmented-active-color: var(--mlv-text-warning)}.mlv-segmented--tone-danger{--mlv-segmented-pill-bg: var(--mlv-background-danger-1-pale);--mlv-segmented-active-color: var(--mlv-text-negative)}.mlv-segmented__track{position:relative;display:flex;flex-direction:row;align-items:stretch;gap:.125rem;width:fit-content;max-width:100%;padding:var(--mlv-segmented-track-padding);overflow:hidden;background:var(--mlv-segmented-track-bg);border-radius:var(--mlv-segmented-radius)}.mlv-segmented--vertical>.mlv-segmented__track{flex-direction:column;height:fit-content}.mlv-segmented__indicator{position:absolute;z-index:0;left:var(--mlv-segmented-indicator-left, 0);top:var(--mlv-segmented-indicator-top, 0);width:var(--mlv-segmented-indicator-width, 0);height:var(--mlv-segmented-indicator-height, 0);border-radius:var(--mlv-segmented-inner-radius);background:var(--mlv-segmented-pill-bg);box-shadow:var(--mlv-shadow-1);opacity:1;pointer-events:none}.mlv-segmented--measured>.mlv-segmented__track>.mlv-segmented__indicator{transition:left var(--mlv-segmented-indicator-duration) var(--mlv-ease-in-out-strong),top var(--mlv-segmented-indicator-duration) var(--mlv-ease-in-out-strong),width var(--mlv-segmented-indicator-duration) var(--mlv-ease-in-out-strong),height var(--mlv-segmented-indicator-duration) var(--mlv-ease-in-out-strong),background-color var(--mlv-duration-normal) var(--mlv-ease-default)}.mlv-segmented--equal-width{display:flex;width:100%}.mlv-segmented--equal-width>.mlv-segmented__track{width:100%}.mlv-segmented--equal-width>.mlv-segmented__track>.mlv-segmented-item{flex:1 1 0;justify-content:center}.mlv-segmented--disabled>.mlv-segmented__track{opacity:var(--mlv-disabled-opacity)}.mlv-segmented--state-error>.mlv-segmented__track{box-shadow:inset 0 0 0 var(--mlv-stroke-width) var(--mlv-border-error)}.mlv-segmented--state-warning>.mlv-segmented__track{box-shadow:inset 0 0 0 var(--mlv-stroke-width) var(--mlv-border-warning)}.mlv-segmented--state-success>.mlv-segmented__track{box-shadow:inset 0 0 0 var(--mlv-stroke-width) var(--mlv-border-success)}[mlvTheme=dark] .mlv-segmented{--mlv-segmented-track-bg: var(--mlv-background-neutral-1)}[mlvTheme=dark] .mlv-segmented--tone-neutral{--mlv-segmented-pill-bg: var(--mlv-palette-neutral-700)}@media(prefers-reduced-motion:reduce){.mlv-segmented,.mlv-segmented *,.mlv-segmented:before,.mlv-segmented:after,[class^=mlv-segmented__],[class*=\" mlv-segmented__\"],[class^=mlv-segmented--],[class*=\" mlv-segmented--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}\n"], dependencies: [{ kind: "component", type: MlvLabel, selector: "mlv-label", inputs: ["for", "required"] }, { kind: "component", type: MlvDescription, selector: "mlv-description" }, { kind: "component", type: MlvMessage, selector: "mlv-message", inputs: ["state"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
228
|
+
}
|
|
229
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSegmented, decorators: [{
|
|
230
|
+
type: Component,
|
|
231
|
+
args: [{ selector: 'mlv-segmented', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MlvLabel, MlvDescription, MlvMessage], hostDirectives: [
|
|
232
|
+
{ directive: MlvDensityDirective, inputs: ['mlvDensity: mlvDensity'] },
|
|
233
|
+
], providers: [
|
|
234
|
+
{ provide: MLV_SEGMENTED, useExisting: forwardRef(() => MlvSegmented) },
|
|
235
|
+
{ provide: MLV_FORM_CONTROL, useExisting: forwardRef(() => MlvSegmented) },
|
|
236
|
+
{ provide: MLV_DENSITY_ELEMENT, useValue: 'segmented' },
|
|
237
|
+
], host: {
|
|
238
|
+
class: 'mlv-segmented',
|
|
239
|
+
'[class]': '_hostModifiers()',
|
|
240
|
+
'[class.mlv-segmented--disabled]': 'computedDisabled()',
|
|
241
|
+
'[class.mlv-segmented--readonly]': 'readonly()',
|
|
242
|
+
'[class.mlv-segmented--equal-width]': 'equalWidth()',
|
|
243
|
+
'[class.mlv-segmented--link]': '_isLinkMode()',
|
|
244
|
+
'[class.mlv-segmented--measured]': '_measured()',
|
|
245
|
+
'[attr.id]': 'id()',
|
|
246
|
+
}, template: "@if (label()) {\n<mlv-label [required]=\"required()\">{{ label() }}</mlv-label>\n}\n<!--\n The track is the `role=\"radiogroup\"` container, not a focus target: focus\n lives on the projected items, which carry the roving tabindex. Its keydown\n listener only delegates arrow/Home/End to that roving model, so making the\n container focusable would add a second, spurious tab stop.\n-->\n<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n<div\n #track\n class=\"mlv-segmented__track\"\n [attr.role]=\"_isLinkMode() ? null : 'radiogroup'\"\n [attr.aria-label]=\"_isLinkMode() ? null : ariaLabel() || label() || null\"\n [attr.aria-orientation]=\"_isLinkMode() ? null : orientation()\"\n [attr.aria-required]=\"_isLinkMode() ? null : required() || null\"\n [attr.aria-disabled]=\"_isLinkMode() ? null : computedDisabled() || null\"\n [attr.aria-describedby]=\"_describedBy()\"\n (keydown)=\"_onKeydown($event)\"\n>\n <span class=\"mlv-segmented__indicator\" aria-hidden=\"true\"></span>\n <ng-content />\n</div>\n@if (description()) {\n<mlv-description [id]=\"_descriptionId()\">{{ description() }}</mlv-description>\n} @if (message()) {\n<mlv-message [id]=\"_messageId()\" [state]=\"resolvedState()\"\n >{{ message() }}</mlv-message\n>\n}\n", styles: [".mlv-segmented{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-m-size)}.mlv-segmented *{box-sizing:border-box}.mlv-segmented{--mlv-segmented-radius: var(--mlv-radius-xl);--mlv-segmented-track-padding: .1875rem;--mlv-segmented-track-bg: var(--mlv-background-sunken);--mlv-segmented-separator-color: var(--mlv-border-normal);--mlv-segmented-indicator-duration: .22s;--mlv-segmented-pill-bg: var(--mlv-background-raised);--mlv-segmented-active-color: var(--mlv-text-primary);--mlv-segmented-inner-radius: max( 0rem, calc(var(--mlv-segmented-radius) - var(--mlv-segmented-track-padding)) );display:inline-flex;flex-direction:column;gap:var(--mlv-spacing-1);max-width:100%;min-width:0}.mlv-segmented--tone-neutral{--mlv-segmented-pill-bg: var(--mlv-background-raised);--mlv-segmented-active-color: var(--mlv-text-primary)}.mlv-segmented--tone-accent{--mlv-segmented-pill-bg: var(--mlv-background-accent-1-pale);--mlv-segmented-active-color: var(--mlv-text-action)}.mlv-segmented--tone-info{--mlv-segmented-pill-bg: var(--mlv-background-info-1-pale);--mlv-segmented-active-color: var(--mlv-text-info)}.mlv-segmented--tone-success{--mlv-segmented-pill-bg: var(--mlv-background-success-1-pale);--mlv-segmented-active-color: var(--mlv-text-positive)}.mlv-segmented--tone-warning{--mlv-segmented-pill-bg: var(--mlv-background-warning-1-pale);--mlv-segmented-active-color: var(--mlv-text-warning)}.mlv-segmented--tone-danger{--mlv-segmented-pill-bg: var(--mlv-background-danger-1-pale);--mlv-segmented-active-color: var(--mlv-text-negative)}.mlv-segmented__track{position:relative;display:flex;flex-direction:row;align-items:stretch;gap:.125rem;width:fit-content;max-width:100%;padding:var(--mlv-segmented-track-padding);overflow:hidden;background:var(--mlv-segmented-track-bg);border-radius:var(--mlv-segmented-radius)}.mlv-segmented--vertical>.mlv-segmented__track{flex-direction:column;height:fit-content}.mlv-segmented__indicator{position:absolute;z-index:0;left:var(--mlv-segmented-indicator-left, 0);top:var(--mlv-segmented-indicator-top, 0);width:var(--mlv-segmented-indicator-width, 0);height:var(--mlv-segmented-indicator-height, 0);border-radius:var(--mlv-segmented-inner-radius);background:var(--mlv-segmented-pill-bg);box-shadow:var(--mlv-shadow-1);opacity:1;pointer-events:none}.mlv-segmented--measured>.mlv-segmented__track>.mlv-segmented__indicator{transition:left var(--mlv-segmented-indicator-duration) var(--mlv-ease-in-out-strong),top var(--mlv-segmented-indicator-duration) var(--mlv-ease-in-out-strong),width var(--mlv-segmented-indicator-duration) var(--mlv-ease-in-out-strong),height var(--mlv-segmented-indicator-duration) var(--mlv-ease-in-out-strong),background-color var(--mlv-duration-normal) var(--mlv-ease-default)}.mlv-segmented--equal-width{display:flex;width:100%}.mlv-segmented--equal-width>.mlv-segmented__track{width:100%}.mlv-segmented--equal-width>.mlv-segmented__track>.mlv-segmented-item{flex:1 1 0;justify-content:center}.mlv-segmented--disabled>.mlv-segmented__track{opacity:var(--mlv-disabled-opacity)}.mlv-segmented--state-error>.mlv-segmented__track{box-shadow:inset 0 0 0 var(--mlv-stroke-width) var(--mlv-border-error)}.mlv-segmented--state-warning>.mlv-segmented__track{box-shadow:inset 0 0 0 var(--mlv-stroke-width) var(--mlv-border-warning)}.mlv-segmented--state-success>.mlv-segmented__track{box-shadow:inset 0 0 0 var(--mlv-stroke-width) var(--mlv-border-success)}[mlvTheme=dark] .mlv-segmented{--mlv-segmented-track-bg: var(--mlv-background-neutral-1)}[mlvTheme=dark] .mlv-segmented--tone-neutral{--mlv-segmented-pill-bg: var(--mlv-palette-neutral-700)}@media(prefers-reduced-motion:reduce){.mlv-segmented,.mlv-segmented *,.mlv-segmented:before,.mlv-segmented:after,[class^=mlv-segmented__],[class*=\" mlv-segmented__\"],[class^=mlv-segmented--],[class*=\" mlv-segmented--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}\n"] }]
|
|
247
|
+
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], equalWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "equalWidth", required: false }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => MlvSegmentedItem), { ...{ descendants: true }, isSignal: true }] }], _trackRef: [{ type: i0.ViewChild, args: ['track', { isSignal: true }] }] } });
|
|
248
|
+
//# sourceMappingURL=segmented.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segmented.js","sourceRoot":"","sources":["../../../../../../../libs/core/segmented/src/lib/segmented/segmented.ts","../../../../../../../libs/core/segmented/src/lib/segmented/segmented.html"],"names":[],"mappings":"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","sourcesContent":["import {\n afterNextRender,\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n effect,\n forwardRef,\n inject,\n input,\n model,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ElementRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport type { FocusableOption } from '@angular/cdk/a11y';\nimport {\n MLV_FORM_CONTROL,\n MlvDescription,\n MlvLabel,\n MlvMessage,\n MlvSignalFormControlBase,\n} from '@malva-ui/core/form-utils';\nimport {\n MLV_DENSITY_ELEMENT,\n MlvDensityDirective,\n} from '@malva-ui/cdk/density';\nimport { MlvResizeObserverService } from '@malva-ui/cdk/utils';\nimport { MlvSegmentedItem } from '../segmented-item/segmented-item';\nimport type { MlvSegmentedAccessor } from '../segmented-token';\nimport { MLV_SEGMENTED } from '../segmented-token';\nimport type {\n MlvSegmentedOrientation,\n MlvSegmentedTone,\n} from '../segmented.types';\n\n/**\n * `FocusKeyManager` requires `FocusableOption` (`disabled?: boolean`), which is\n * incompatible with the item's coerced `disabled` input signal. Disabled\n * skipping goes through `skipPredicate`, so the intersection is only a typing\n * bridge (same approach as `mlv-radio-group`).\n */\ntype SegmentedFocusItem = MlvSegmentedItem & FocusableOption;\n\n/**\n * Segmented control: a grey track holding `mlvSegmentedItem` buttons or links,\n * with a raised pill sliding behind the active one (the boxed-tabs look).\n *\n * - **Radio mode** (`<button mlvSegmentedItem value=\"…\">`): a signal-form\n * control (`[(value)]`, `[(ngModel)]`, `[formField]`) with `role=\"radiogroup\"`\n * semantics, arrow-key navigation and a roving tabindex.\n * - **Link mode** (`<a mlvSegmentedItem routerLink=\"…\">`): plain navigation\n * links; the active one is derived from the router and marked\n * `aria-current=\"page\"`.\n */\n@Component({\n selector: 'mlv-segmented',\n templateUrl: './segmented.html',\n styleUrl: './segmented.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MlvLabel, MlvDescription, MlvMessage],\n hostDirectives: [\n { directive: MlvDensityDirective, inputs: ['mlvDensity: mlvDensity'] },\n ],\n providers: [\n { provide: MLV_SEGMENTED, useExisting: forwardRef(() => MlvSegmented) },\n { provide: MLV_FORM_CONTROL, useExisting: forwardRef(() => MlvSegmented) },\n { provide: MLV_DENSITY_ELEMENT, useValue: 'segmented' },\n ],\n host: {\n class: 'mlv-segmented',\n '[class]': '_hostModifiers()',\n '[class.mlv-segmented--disabled]': 'computedDisabled()',\n '[class.mlv-segmented--readonly]': 'readonly()',\n '[class.mlv-segmented--equal-width]': 'equalWidth()',\n '[class.mlv-segmented--link]': '_isLinkMode()',\n '[class.mlv-segmented--measured]': '_measured()',\n '[attr.id]': 'id()',\n },\n})\nexport class MlvSegmented\n extends MlvSignalFormControlBase<unknown>\n implements MlvSegmentedAccessor\n{\n /** Two-way bindable selected value (radio mode). */\n readonly value = model<unknown>();\n\n /** Colour of the active pill — `'neutral'` (boxed-tabs white) or a pale semantic tone. */\n readonly tone = input<MlvSegmentedTone>('neutral');\n\n /** Layout axis of the track. */\n readonly orientation = input<MlvSegmentedOrientation>('horizontal');\n\n /** Stretch the track to its container and give every item the same size. */\n readonly equalWidth = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /** Projected items in DOM order. */\n readonly items = contentChildren(MlvSegmentedItem, { descendants: true });\n\n /** Whether the control holds a value — a segment is selected. */\n readonly hasValue = computed(() => this.value() != null);\n\n /** @internal Track element hosting the pill and the projected items. */\n protected readonly _trackRef =\n viewChild.required<ElementRef<HTMLElement>>('track');\n\n /** @internal Link mode: any item is an `<a>`. */\n protected readonly _isLinkMode = computed(() =>\n this.items().some((i) => i.isLink),\n );\n\n /** @internal The item currently rendered as active, if any. */\n protected readonly _activeItem = computed(\n () => this.items().find((i) => i.isActive()) ?? null,\n );\n\n /** @internal Set once the pill has been positioned; enables the slide transition. */\n protected readonly _measured = signal(false);\n\n /** @internal Tone / orientation / state modifier classes. */\n protected readonly _hostModifiers = computed(\n () =>\n `mlv-segmented--tone-${this.tone()} mlv-segmented--${this.orientation()} mlv-segmented--state-${this.resolvedState()}`,\n );\n\n /** @private Roving-focus manager over the items (radio mode only). */\n private _keyManager: FocusKeyManager<MlvSegmentedItem> | null = null;\n\n /** @private Guards the mixed `<a>` / `<button>` dev warning to one per group instance. */\n private _warnedMixed = false;\n\n /** @private Guards the multiple-active dev warning to one per group instance. */\n private _warnedMultiActive = false;\n\n /** @private Destroys the key manager with the component. */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @private Shared ResizeObserver — re-measures the pill when the track resizes (fonts, density, content). */\n private readonly _resizeService = inject(MlvResizeObserverService);\n\n /** @private Bumped on every track resize to re-run the measuring render effect. */\n private readonly _layoutVersion = signal(0);\n\n constructor() {\n super();\n\n this._destroyRef.onDestroy(() => this._keyManager?.destroy());\n\n // Rebuild the manager whenever the projected set (or the mode) changes.\n effect(() => {\n const items = [...this.items()];\n const linkMode = this._isLinkMode();\n untracked(() => {\n this._keyManager?.destroy();\n this._keyManager = null;\n if (linkMode || items.length === 0) return;\n this._keyManager = new FocusKeyManager<MlvSegmentedItem>(\n items as SegmentedFocusItem[],\n )\n .skipPredicate((item) => item.isDisabled())\n .withWrap();\n });\n });\n\n // Roving tabindex (radio mode): the active item is the single tab stop, or\n // the first enabled item when nothing is selected / the selection is disabled.\n effect(() => {\n const items = this.items();\n if (this._isLinkMode()) return;\n const active = this._activeItem();\n const firstEnabled = items.find((i) => !i.isDisabled()) ?? null;\n const stop = active && !active.isDisabled() ? active : firstEnabled;\n items.forEach((i) => i.tabIndex.set(i === stop ? 0 : -1));\n });\n\n // Dev-only diagnostics for the two group shapes that break silently: a\n // group mixing `<a>` and `<button>` hosts (link mode wins, so the buttons\n // lose their radio keyboard model), and a radio group rendering more than\n // one active item (two `aria-checked=\"true\"` radios). Each warns once per\n // group instance; in production the guard reads no signal, so the effect\n // registers no dependency and never re-runs.\n effect(() => {\n if (typeof ngDevMode === 'undefined' || !ngDevMode) return;\n const items = this.items();\n const linkMode = this._isLinkMode();\n\n if (!this._warnedMixed) {\n const links = items.filter((i) => i.isLink).length;\n if (links > 0 && links < items.length) {\n this._warnedMixed = true;\n console.warn(\n '[mlv-segmented] Mixing <a mlvSegmentedItem> and <button mlvSegmentedItem> in one group is unsupported: the group switches to link mode and the buttons lose their radio keyboard model.',\n );\n }\n }\n\n const activeCount = items.filter((i) => i.isActive()).length;\n if (!linkMode && !this._warnedMultiActive && activeCount > 1) {\n this._warnedMultiActive = true;\n console.warn(\n '[mlv-segmented] More than one item is active in a radio-mode group: [active] is an uncontrolled override and must not be combined with a value-driven selection of another item — two radios now report aria-checked=\"true\".',\n );\n }\n });\n\n // Observe the track once it exists; every resize re-measures the pill.\n afterNextRender(() => {\n this._resizeService\n .observe(this._trackRef().nativeElement)\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => this._layoutVersion.update((n) => n + 1));\n });\n\n // Position the pill after every render in which the active item, the item\n // set, the layout inputs or the track size changed.\n afterRenderEffect(() => {\n const active = this._activeItem();\n this.items();\n this.orientation();\n this.equalWidth();\n this._layoutVersion();\n untracked(() => this._measure(active));\n });\n }\n\n /** Selects `item` (radio mode). Ignored while the group is disabled or readonly. */\n selectItem(item: MlvSegmentedItem): void {\n if (this.computedDisabled() || this.readonly() || item.isDisabled()) return;\n this.value.set(item.value());\n item.focus();\n this._markTouched();\n }\n\n /** Keeps the key manager's active item in sync with the item that received DOM focus. */\n onItemFocus(item: MlvSegmentedItem): void {\n const index = this.items().indexOf(item);\n if (index >= 0) this._keyManager?.setActiveItem(index);\n }\n\n /**\n * @internal Track keydown handler (radio mode). ArrowLeft/ArrowUp → previous,\n * ArrowRight/ArrowDown → next (wrapping, skipping disabled), Home/End → first/last.\n * Moving focus also selects (WAI-ARIA radio group), unless the group is readonly.\n */\n protected _onKeydown(event: KeyboardEvent): void {\n const manager = this._keyManager;\n if (!manager) return;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n if (manager.activeItem) manager.setNextItemActive();\n else manager.setFirstItemActive();\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n if (manager.activeItem) manager.setPreviousItemActive();\n else manager.setLastItemActive();\n break;\n case 'Home':\n manager.setFirstItemActive();\n break;\n case 'End':\n manager.setLastItemActive();\n break;\n default:\n return;\n }\n\n event.preventDefault();\n const active = manager.activeItem;\n if (active) this.selectItem(active);\n }\n\n /**\n * @private Writes the active item's offset box (relative to the track — its\n * `offsetParent`, so items must be direct children) into the four\n * `--mlv-segmented-indicator-*` custom properties. Without an active item the\n * pill collapses. On the first successful (non-zero) measurement `_measured`\n * flips (one macrotask later, after a forced style flush) so the slide\n * transition only ever animates *subsequent* moves — never a slide-in from\n * `0` on load. A group first rendered without a box (inside `display: none`,\n * a collapsed `mlv-expand`, a closed drawer) measures `0` and stays\n * unmeasured until it is actually laid out.\n */\n private _measure(active: MlvSegmentedItem | null): void {\n const track = this._trackRef().nativeElement;\n const set = (name: string, px: number): void =>\n track.style.setProperty(`--mlv-segmented-indicator-${name}`, `${px}px`);\n\n if (!active) {\n set('width', 0);\n set('height', 0);\n return;\n }\n\n const el = active.elementRef.nativeElement;\n set('left', el.offsetLeft);\n set('top', el.offsetTop);\n set('width', el.offsetWidth);\n set('height', el.offsetHeight);\n\n if (!this._measured() && (el.offsetWidth > 0 || el.offsetHeight > 0)) {\n // Force a style flush so the initial position is committed *before* the\n // transition-enabling class lands; otherwise the first move animates from 0.\n void track.offsetWidth;\n const id = setTimeout(() => this._measured.set(true));\n this._destroyRef.onDestroy(() => clearTimeout(id));\n }\n }\n}\n","@if (label()) {\n<mlv-label [required]=\"required()\">{{ label() }}</mlv-label>\n}\n<!--\n The track is the `role=\"radiogroup\"` container, not a focus target: focus\n lives on the projected items, which carry the roving tabindex. Its keydown\n listener only delegates arrow/Home/End to that roving model, so making the\n container focusable would add a second, spurious tab stop.\n-->\n<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n<div\n #track\n class=\"mlv-segmented__track\"\n [attr.role]=\"_isLinkMode() ? null : 'radiogroup'\"\n [attr.aria-label]=\"_isLinkMode() ? null : ariaLabel() || label() || null\"\n [attr.aria-orientation]=\"_isLinkMode() ? null : orientation()\"\n [attr.aria-required]=\"_isLinkMode() ? null : required() || null\"\n [attr.aria-disabled]=\"_isLinkMode() ? null : computedDisabled() || null\"\n [attr.aria-describedby]=\"_describedBy()\"\n (keydown)=\"_onKeydown($event)\"\n>\n <span class=\"mlv-segmented__indicator\" aria-hidden=\"true\"></span>\n <ng-content />\n</div>\n@if (description()) {\n<mlv-description [id]=\"_descriptionId()\">{{ description() }}</mlv-description>\n} @if (message()) {\n<mlv-message [id]=\"_messageId()\" [state]=\"resolvedState()\"\n >{{ message() }}</mlv-message\n>\n}\n"]}
|