@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,325 @@
|
|
|
1
|
+
# Library: combobox
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Combobox library (`@malva-ui/core/combobox`) provides a searchable dropdown supporting both single and multiple selection. It supports signal, reactive, and template-driven forms alongside custom templates, value creation, clearing, and an activedescendant keyboard model.
|
|
6
|
+
|
|
7
|
+
## Public API
|
|
8
|
+
|
|
9
|
+
Exported from `@malva-ui/core/combobox`:
|
|
10
|
+
|
|
11
|
+
| Export | Kind | Description |
|
|
12
|
+
|--------|------|-------------|
|
|
13
|
+
| `MlvCombobox<T>` | Component | Main combobox — `mlv-combobox` |
|
|
14
|
+
| `MlvComboboxItemDef` | Directive | Custom option template — `[mlvComboboxItemDef]` |
|
|
15
|
+
| `MlvComboboxSelectedItemDef` | Directive | Custom selected-value template — `[mlvComboboxSelectedItemDef]` |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Components
|
|
20
|
+
|
|
21
|
+
### `MlvCombobox<T>`
|
|
22
|
+
|
|
23
|
+
- **Selector:** `mlv-combobox`
|
|
24
|
+
- **Change Detection:** `OnPush`
|
|
25
|
+
- **Extends:** `MlvSignalFormControlBase<T | T[] | null>`
|
|
26
|
+
|
|
27
|
+
#### Inputs (own)
|
|
28
|
+
|
|
29
|
+
| Name | Type | Default | Description |
|
|
30
|
+
| ---------------- | ---------------------------------------------------------------------------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
31
|
+
| `options` | `MlvOptionsInput<T>` (`readonly T[] \| Observable<readonly T[]> \| MlvDataSource<T> \| null \| undefined`) | `[]` | Selectable options. Arrays / observables are **local** (this component filters); an `MlvDataSource` is **remote** (source-side search + lazy paging). See _Async sources & remote search_. |
|
|
32
|
+
| `searchFn` | `MlvOptionsSearchFn<T> \| null` | `null` | Remote search `(query) => T[] \| Promise<T[]> \| Observable<T[]>`. **Supersedes `options`** as the item source and disables local filtering. Lazy: first invoked on the first open (or immediately when a committed value still needs its label). |
|
|
33
|
+
| `searchDebounce` | `number` | `200` | Debounce (ms) applied to remote searches (`MlvDataSource` / `searchFn`) only. Local filtering stays instant. |
|
|
34
|
+
| `multiple` | `boolean` | `false` | Multi-select mode (renders chips) |
|
|
35
|
+
| `placeholder` | `string \| undefined` | `undefined` → i18n `'Search...'` | Input placeholder. Falls back to `MLV_COMBOBOX_I18N.searchPlaceholder` |
|
|
36
|
+
| `allowCreate` | `boolean` | `false` | Allow creating new values via Enter |
|
|
37
|
+
| `toOption` | `MlvSelectOptionTransform<T>` | `defaultOptionTransform` | Transform `T` → `MlvSelectOption` |
|
|
38
|
+
| `compareWith` | `(a: T, b: T) => boolean` | reference equality | Equality used to match option values against the selection and externally written values. Threaded into `MlvSelectionService.compareWith`. |
|
|
39
|
+
| `matcher` | `MlvOptionMatcher<T> \| undefined` | shared substring matcher | Custom suggestion-filter predicate (fuzzy / secondary-field). Threaded into the shared `filterOptions`; results are always ranked prefix-matches-first. Mirrors `[mlvAutocompleteMatcher]`. |
|
|
40
|
+
| `mobileMode` | `MlvPopupMobileMode` (`'auto' \| 'fullscreen' \| 'off'`) | `'auto'` | Passthrough to the dropdown `mlv-popup`. `'auto'` = full-screen sheet below the `md` breakpoint (< 768px), anchored above; `'off'` = always anchored; `'fullscreen'` = always sheet. In full-screen mode the combobox projects an in-sheet search input into the popup header (see _Mobile fullscreen_ below). |
|
|
41
|
+
| `mobileTitle` | `string \| undefined` | `undefined` | Explicit full-screen sheet heading. When omitted, falls back to `label` (or, when unset, the resolved placeholder) via `_resolvedMobileTitle`. Only shown while full-screen. |
|
|
42
|
+
| `mlvDensity` | `MlvDensity \| undefined` | `undefined` | Density for the dropdown option list. Forwarded to the dropdown `mlv-popup`, which stamps `mlv--{density}` on the detached overlay panel (outside the page's density cascade); rows respond via the `mlv-list-item` density ladder. Omitted → global `MlvDensityService`. |
|
|
43
|
+
|
|
44
|
+
#### Inputs (from MlvSignalFormControlBase)
|
|
45
|
+
|
|
46
|
+
`state`, `readonly`, `disabled`, `clearable`, `id`, `label`, `hint`, `message`, `loading`
|
|
47
|
+
|
|
48
|
+
`loading` is now **rendered**: it ORs into the dropdown's spinner row (`_panelLoading`) and suppresses `_ready`, so a consumer-driven load also holds the field's loading variant while a committed value's label is pending. Bind it to a flag that is genuinely about **option loading** — because it feeds `_ready`, an unrelated flag (a save in flight, a page-level spinner) will put the field into the loading variant whenever the committed value is not among the current results.
|
|
49
|
+
|
|
50
|
+
#### Outputs
|
|
51
|
+
|
|
52
|
+
| Name | Type | Description |
|
|
53
|
+
| -------------- | ----------- | ----------------------------------------------------------------------------------------------------------- |
|
|
54
|
+
| `valueCreated` | `output<T>` | Emitted **only** when the user actually creates a brand-new value via Enter (ADD-only; never on duplicates) |
|
|
55
|
+
|
|
56
|
+
#### Computed / State Signals
|
|
57
|
+
|
|
58
|
+
| Signal | Description |
|
|
59
|
+
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
60
|
+
| `isOpen` | Popup open state (two-way bound to `mlv-popup`) |
|
|
61
|
+
| `searchQuery` | The input's text. For single-select this doubles as the committed label when not actively searching |
|
|
62
|
+
| `resolvedOptions` | `_adapter.items()` passed through `toOption()` |
|
|
63
|
+
| `filteredOptions` | Options filtered by the live search text — **local mode only**; remote sources render `resolvedOptions` as-is |
|
|
64
|
+
| `selectedOptions` (protected) | Selected values resolved to `MlvSelectOption` for chip / template rendering |
|
|
65
|
+
| `_chipOptions` (protected) | The chips actually rendered (both the trigger row and the full-screen sheet): `selectedOptions`, minus the values whose option has not resolved yet while `_awaitingValueLabel` |
|
|
66
|
+
| `_adapter` (protected) | The shared `MlvOptionsAdapter<T>`; template-facing for the paging bindings (`hasMore` / `loadingMore` / `loadMore()`) |
|
|
67
|
+
| `_allValuesMatched` (protected) | Whether every committed value has a matching option (by `compareWith`) |
|
|
68
|
+
| `_ready` (protected) | `_adapter.ready() && !loading()` — the first payload arrived and no consumer-driven load is running |
|
|
69
|
+
| `_awaitingValueLabel` (protected) | The loading variant: `hasValue() && !_ready() && !_allValuesMatched()` |
|
|
70
|
+
| `_panelLoading` (protected) | `_adapter.loading() \|\| loading()` — the dropdown's top spinner row |
|
|
71
|
+
| `_pressEnterToAdd` (protected) | `MLV_COMBOBOX_I18N.pressEnterToAdd` resolved with `{ query }` |
|
|
72
|
+
| `_eagerDone` (private) | Latches `true` on the first `ready()` of a **remote** source; gates the adapter's `eager` flag off so an inline-arrow `searchFn` cannot loop (see _Async sources_) |
|
|
73
|
+
| `dropdownIcon` | `LucideChevronDown` or `LucideChevronUp` |
|
|
74
|
+
| `focused` | `true` while focused **or** open (keeps the focus ring while the dropdown shows) |
|
|
75
|
+
|
|
76
|
+
#### Host Bindings
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
host: {
|
|
80
|
+
'class': 'mlv-combobox',
|
|
81
|
+
'[class]': '"mlv-combobox--" + state()',
|
|
82
|
+
'[class.mlv-combobox--disabled]': 'computedDisabled()',
|
|
83
|
+
'[class.mlv-combobox--open]': 'isOpen()',
|
|
84
|
+
'[class.mlv-combobox--multiple]': 'multiple()',
|
|
85
|
+
'[class.mlv-combobox--loading]': '_awaitingValueLabel()',
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### Content Children
|
|
90
|
+
|
|
91
|
+
| Name | Directive | Description |
|
|
92
|
+
| ------------------ | ---------------------------- | ----------------------------------------------------------------------------------------- |
|
|
93
|
+
| `itemTemplate` | `MlvComboboxItemDef` | Custom option rendering in the dropdown |
|
|
94
|
+
| `selectedTemplate` | `MlvComboboxSelectedItemDef` | Custom rendering of the selected value(s) — **now actually rendered** (see Display below) |
|
|
95
|
+
|
|
96
|
+
#### Key Methods
|
|
97
|
+
|
|
98
|
+
- `onSearchInput(event)` — Updates the search text, opens the popup, resets the active option
|
|
99
|
+
- `onInputFocus()` / `onInputBlur()` — Open on focus / close-revert-and-mark-touched on blur (wired to `mlv-input`'s new `inputFocus` / `inputBlur` outputs)
|
|
100
|
+
- `onArrowDown` / `onArrowUp` / `onHome` / `onEnd` — Move the active option (activedescendant model, DOM focus stays in the input)
|
|
101
|
+
- `onEnterKey(event?)` — Select the active option, else an exact text match, else create (allowCreate)
|
|
102
|
+
- `onEscape(event)` — First press closes + reverts text; second press (already closed) clears the selection
|
|
103
|
+
- `onChevronMousedown(event)` — Chevron toggle (uses `mousedown` + `preventDefault` so the input keeps focus)
|
|
104
|
+
- `selectValues(values)` — Panel (pointer) selection path. Guards against aria **reconciliation emits** (see below) so a filter change never mutates the committed selection or runs commit side-effects
|
|
105
|
+
- `removeSelected(value)` — Deselect one value (multi-select chip close / keyboard remove)
|
|
106
|
+
- `onClear()` — Clear the selection + query, emit `null`, refocus the input (wired to the wrapper's `(clear)`)
|
|
107
|
+
- `setInitialFocus()` — Focuses the inner `mlv-input` (**not** the trigger `<div>`)
|
|
108
|
+
- `updateTriggerWidth(entries)` — Sync popup width to trigger via `MlvResizeObserver`
|
|
109
|
+
|
|
110
|
+
#### Display model (single vs multi)
|
|
111
|
+
|
|
112
|
+
- **Single-select:** the selected option's label is the **real input value** (`searchQuery` mirrors the committed label when not searching) — full contrast, exposed to AT. Typing replaces it; closing without a new selection reverts to the committed label. The placeholder stays the generic search hint (it is never used to show the value). When a `selectedTemplate` is provided, it renders as an overlay over the (transparented) input while the field is unfocused; the input keeps the label as its accessible value.
|
|
113
|
+
- **Multi-select:** selected values render as closable `mlv-chip`s before the search field. Chip close (mouse click or Backspace/Delete when focused) deselects that value. When a `selectedTemplate` is provided, it renders inside each chip.
|
|
114
|
+
|
|
115
|
+
#### Trigger-row height & vertical centring
|
|
116
|
+
|
|
117
|
+
The trigger row (`.mlv-combobox__trigger`, a `flex-wrap: wrap` row of chips + the `mlv-input` field + chevron) drives the control height:
|
|
118
|
+
|
|
119
|
+
- The form-control container is overridden to `height: auto; min-height: var(--form-ctrl-height)` so the **empty / single-select** field matches a plain `mlv-input`'s height and text centring at the current density, while **multi-select grows** vertically to fit chips that wrap onto additional lines.
|
|
120
|
+
- `align-content: center` centres the wrapped flex line(s) so the field/chips stay vertically centred per line (with `flex-wrap: wrap`, `align-items` alone leaves a single line top-packed).
|
|
121
|
+
- `.mlv-combobox__input` (the inner `mlv-input` host) is **layout-only** (`flex: 1; min-width: 0`). It must NOT re-declare the native input's padding/font/background — the `mlv-input` component (`bare` mode) owns those. A stale `padding: 0.5625rem 0` here previously stacked on top of the native input's own padding + the trigger's control-padding, inflating the empty field past the control height and pushing the placeholder off-centre.
|
|
122
|
+
- Small densities (`tight`) render marginally taller than a bare `mlv-input` because the `bare` native input's intrinsic height plus the trigger's chip-breathing padding exceeds the tightest control height; text stays centred.
|
|
123
|
+
|
|
124
|
+
#### Chevron
|
|
125
|
+
|
|
126
|
+
The dropdown chevron is a real `<button type="button" tabindex="-1">` with an i18n `aria-label` (`MLV_COMBOBOX_I18N.toggleOptions`). It is out of the tab order (the input is the single tab stop), `[disabled]` when the control is disabled, and no-ops when disabled/readonly. While `_awaitingValueLabel()` the chevron is **replaced** by an `mlv-loader` (`.mlv-combobox__loader`, `variant="circle" indeterminate`) — the field is inert then, so a toggle button would be a dead control.
|
|
127
|
+
|
|
128
|
+
#### Async sources & remote search
|
|
129
|
+
|
|
130
|
+
`options` and `searchFn` are normalised by the shared **`MlvOptionsAdapter<T>`** (`@malva-ui/core/dropdown`, `_adapter`) — the same engine behind `[mlvAutocomplete]` and `mlv-select`. It exposes `mode()`, `items()`, `loading()`, `loadingMore()`, `ready()`, `hasMore()`, `search()`, `ensureLoaded()`, `loadMore()`; see `libs-dropdown.md` → _Options adapter_ for the per-source contract.
|
|
131
|
+
|
|
132
|
+
- **Local mode** (`readonly T[]`, `Observable<readonly T[]>`) — `filteredOptions` runs the shared `filterOptions` over the typed query exactly as before. Behaviour for a plain array is unchanged.
|
|
133
|
+
- **Remote mode** (`MlvDataSource<T>`, or any `searchFn`) — the source owns filtering. `filteredOptions` returns `resolvedOptions` untouched, and `onSearchInput` forwards the query through `_adapter.search(value)` (`MlvDataSource` → `setSearch({ query, keys: [] })`; `searchFn` → invoked). Filtering locally as well would hide server results the local matcher does not like, and would empty the list while a newer query is still in flight.
|
|
134
|
+
- **Debounce.** `searchDebounce` (default `200`ms) applies to remote searches only.
|
|
135
|
+
- **Lazy first load.** A `searchFn` is not called until it is needed: a constructor effect calls `_adapter.ensureLoaded()` on the first `isOpen()`. The exception is the adapter's `eager` gate — `hasValue() && !_allValuesMatched() && !_eagerDone()` — which fires the initial load immediately when a committed value still has no resolvable label, so the loading variant resolves without the user opening the list. `_eagerDone` latches `true` the first time a **remote** source reports `ready()` and never flips back: an inline-arrow `searchFn` (`[searchFn]="(q) => api.find(q)"`) is a fresh reference on every change detection run, which re-arms the adapter's lazy gate on every pass, and without the latch a still-unmatched committed value would make each pass fire another request whose result triggers the next pass. The mode check in the latch matters — an array source is `ready()` from the first tick, so latching on readiness alone would disarm the gate before a late-bound `searchFn` ever became the active branch.
|
|
136
|
+
- **Remote reset whenever the query is dropped.** `_remoteQuery` tracks the last non-blank query sent to a remote source, and `_resetRemoteSearch()` re-searches `''` once so a blank input never sits above a list still filtered by the previous query. It is called from `_revertAndClose()` (blur / Escape), **both** branches of `_afterCommit()` (single-select reverts to the committed label; multi-select clears the query to type the next one), and `onClear()`. Local mode restores the full list implicitly — `filteredOptions` re-runs with a blank query — so these calls are what give remote mode the same behaviour.
|
|
137
|
+
- **The typed query survives every response.** `_applyPendingValues()` runs inside the forms-value effect, which tracks `resolvedOptions()` — so it re-runs on every remote response and every observable emission. It still re-normalises the committed values (that is what resolves a late label), but it calls `_syncDisplayText()` only when `_searching()` is `false`, read untracked. Without that guard each landing response reset the input to the committed label (or `''`), making remote search unusable. Every exit from a search — commit, revert, clear — calls `_syncDisplayText()` itself, so the label still returns when the search ends.
|
|
138
|
+
- **The list stays open while loading.** `_panelLoading` (`_adapter.loading() || loading()`) drives the panel's top spinner row and its `--loading` modifier; the panel keeps previous options mounted, readable and interactive (it recedes the default rows' colour rather than dimming them), so a re-search never blanks the dropdown.
|
|
139
|
+
- **Paging.** `[hasMore]`, `[loadingMore]` and `(loadMore)` are bound straight off the adapter, so an `MlvDataSource` with a finite `perPage` grows the list through the panel's infinite-scroll sentinel. The unpaged `MlvSelectDataSource` simply reports `hasMore: false`.
|
|
140
|
+
|
|
141
|
+
#### Loading variant (`--loading`)
|
|
142
|
+
|
|
143
|
+
`_awaitingValueLabel()` = `hasValue() && !_ready() && !_allValuesMatched()` — a value is committed but no option resolves its label yet (the classic "deserialized id, options still in flight" case). While it holds:
|
|
144
|
+
|
|
145
|
+
- the host carries `mlv-combobox--loading` (`cursor: progress`),
|
|
146
|
+
- the trigger row sets `aria-busy`,
|
|
147
|
+
- the inner `mlv-input` is `readonly`, renders an empty value, and shows `MLV_COMBOBOX_I18N.loading` as its placeholder,
|
|
148
|
+
- the chevron is replaced by the `mlv-loader` spinner,
|
|
149
|
+
- `_isInert()` returns `true`, so focus, click, typing and the arrow/Enter keys never open the list or select anything,
|
|
150
|
+
- `_chipOptions()` hides multi-select chips whose option has not resolved (no `[object Object]`-style placeholder labels).
|
|
151
|
+
|
|
152
|
+
**The clear affordance is the deliberate escape hatch.** `onClear()` and `onEscape()` are _not_ gated on `_isInert()`, so the inline X (and Escape while the list is closed) still discards the value even while its label is resolving. That is intentional: a value whose source never answers would otherwise be unremovable. Everything else — opening, typing, navigating, committing — is blocked.
|
|
153
|
+
|
|
154
|
+
The variant clears as soon as the source is `ready()` **or** every committed value matches an option — the `_applyPendingValues` effect tracks `resolvedOptions()`, so late-arriving options re-normalise the selection onto the real option instances and the committed label appears. Arrays are `ready()` immediately, so a synchronous `options` binding never shows the variant.
|
|
155
|
+
|
|
156
|
+
#### i18n keys used
|
|
157
|
+
|
|
158
|
+
`searchPlaceholder` (placeholder), `toggleOptions` (chevron `aria-label`), `noResults` (empty state + announcement), `pressEnterToAdd` (ICU `{query}` — the `allowCreate` empty state + announcement, resolved via `_pressEnterToAdd`), `loading` (panel `loadingText`, loading-variant placeholder, spinner `ariaLabel`), `resultsAvailable` (ICU `{count, plural, …}` — the polite result-count announcement). The two ICU strings are resolved with `MlvI18nResolverService`.
|
|
159
|
+
|
|
160
|
+
#### Template Summary
|
|
161
|
+
|
|
162
|
+
Form control wrapper (`(clear)="onClear()"`) → label/hint → popup container with a trigger row (`_chipOptions()` chips for multi + `mlv-input` + chevron button, or the `mlv-loader` while awaiting) → `MlvPopup` (`[hasBackdrop]="false"`, `[mobileMode]`, `[mobileTitle]`, `(afterOpened)`/`(afterClosed)`) with a `[mlvPopupHeaderContent]` template (the full-screen in-sheet chips + search input) and a `mlvPopupContent` template containing `MlvDropdownPanel scrollMode="parent"` with the filtered options plus the loading / paging bindings (`[loading]="_panelLoading()"`, `[loadingText]`, `[hasMore]`, `[loadingMore]`, `(loadMore)`). Parent mode delegates to the popup's themed scrollbar, ensuring the overlay has one scroll region. A `(mousedown)="$event.preventDefault()"` wrapper around the panel keeps DOM focus in the input while pointing at options (activedescendant + open state survive option/scrollbar clicks).
|
|
163
|
+
|
|
164
|
+
Dropdown popup chrome removes the default popup padding, and the shared dropdown listbox sets the option inset through `--mlv-list-padding-block` / `--mlv-list-padding-inline`.
|
|
165
|
+
|
|
166
|
+
#### Dropdown Positions
|
|
167
|
+
|
|
168
|
+
- Primary: below trigger (`bottom`, `offsetY: 8`)
|
|
169
|
+
- Fallback: above trigger (`top`, `offsetY: -8`)
|
|
170
|
+
|
|
171
|
+
#### Mobile fullscreen (in-sheet search input)
|
|
172
|
+
|
|
173
|
+
`mlv-combobox` opts its dropdown `mlv-popup` into `mobileMode="auto"` (overridable via the `mobileMode` / `mobileTitle` inputs). Below the `md` breakpoint (< 768px) the dropdown opens as a full-screen sheet with a header bar, scroll-locked page, and slide-up animation; above it the dropdown stays trigger-anchored (byte-identical to before). See `libs-popup.md` → _Mobile fullscreen inputs_.
|
|
174
|
+
|
|
175
|
+
**The occlusion/focus-trap problem — and how it is solved.** `mlv-popup`'s full-screen sheet renders a **solid backdrop** (`.mlv-popup-fullscreen-backdrop`) and a **focus trap** (`[cdkTrapFocus]="modal() || isFullscreen()"`). The combobox's outer search field is a `mlv-input` in the **trigger row** (`.mlv-combobox__trigger`), in normal document flow **outside** the overlay panel — so in full-screen mode the backdrop would hide it and the trap would block `Tab` back to it, making type-to-filter impossible.
|
|
176
|
+
|
|
177
|
+
The fix is the popup's generic **`[mlvPopupHeaderContent]` slot** (see `libs-popup.md`): the combobox projects an **in-sheet search input** (a `mlv-input`, `.mlv-combobox__sheet-input`) — and, for multi-select, the selected chips (`.mlv-combobox__sheet-chips`) — into the popup's full-screen header, directly beneath the title/close row. The in-sheet input is bound to the **same** `searchQuery` signal and the **same** keyboard handlers (`onSearchInput` / `onArrowDown` / `onArrowUp` / `onHome` / `onEnd` / `onEnterKey` / `onEscape` / `onInputFocus` / `onInputBlur`) as the outer input — no logic is duplicated. It lives **inside** `mlvPopupContent`'s panel (the header is part of the trapped panel), so the focus trap composes cleanly.
|
|
178
|
+
|
|
179
|
+
Key behaviours (all gated on the popup's `isFullscreen()`, read via a `viewChild(MlvPopup)` → `_isFullscreen` computed):
|
|
180
|
+
|
|
181
|
+
- **Single `role="combobox"`.** `_outerIsCombobox = !(isFullscreen && isOpen)` drives the outer input's combobox ARIA (`role`, `aria-expanded/haspopup/autocomplete/controls/activedescendant`): the outer input keeps the role while anchored **or** full-screen-but-closed (it is the visible trigger then), and relinquishes it only while the sheet is open, when the in-sheet input carries the combobox ARIA (plus `aria-activedescendant` for keyboard nav and an `ariaLabel` from `_resolvedMobileTitle`). Exactly one combobox is exposed at a time.
|
|
182
|
+
- **Focus handoff.** On `(afterOpened)`, `_onPopupOpened()` focuses the in-sheet input by its deterministic id (`_sheetInputId = "<id>-sheet-input"`, located with `document.getElementById` because the sheet is a detached overlay embedded view outside this component's view queries — the same pattern `mlv-day-picker` uses). On `(afterClosed)`, `_onPopupClosed()` reverts stale search text (`_syncDisplayText`) and restores focus to the outer trigger input. Both are no-ops while anchored, so desktop is unchanged.
|
|
183
|
+
- **Blur does not dismiss the sheet.** `onInputBlur` returns early while `isFullscreen()` — the outer input blurs the moment focus is handed to the in-sheet input, and the trap keeps focus moving between the in-sheet input, chips, and options. The sheet is dismissed only via the X button, `Escape`, or a committed selection (all routed through `_onPopupClosed`). While anchored, blur still closes/reverts as before.
|
|
184
|
+
- **Chip removal** refocuses the in-sheet input while full-screen (`_focusActiveInput`), the outer input otherwise.
|
|
185
|
+
- **Loading variant parity.** The in-sheet input carries the same `_awaitingValueLabel()` bindings as the outer one (`[readonly]`, the `loading` placeholder, the emptied `[value]`), so a sheet opened over a still-resolving value is inert there too. The in-sheet chips already come from `_chipOptions()`.
|
|
186
|
+
|
|
187
|
+
`mlv-select` composes full-screen more simply (its trigger is a plain button and the dropdown panel is the whole interaction surface, so it needs no in-sheet input) — but both now support `mobileMode` end-to-end.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Directives
|
|
192
|
+
|
|
193
|
+
### `MlvComboboxItemDef`
|
|
194
|
+
|
|
195
|
+
**Selector:** `[mlvComboboxItemDef]` |
|
|
196
|
+
|
|
197
|
+
Provides `templateRef` for custom option rendering (`{ $implicit: MlvSelectOption<T> }`).
|
|
198
|
+
|
|
199
|
+
### `MlvComboboxSelectedItemDef`
|
|
200
|
+
|
|
201
|
+
**Selector:** `[mlvComboboxSelectedItemDef]` |
|
|
202
|
+
|
|
203
|
+
Provides `templateRef` for custom selected-value rendering (`{ $implicit: MlvSelectOption<T> }`) — rendered inside chips (multi) or as the single-select display overlay.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Usage Examples
|
|
208
|
+
|
|
209
|
+
```html
|
|
210
|
+
<!-- Basic single select -->
|
|
211
|
+
<mlv-combobox [options]="fruits" label="Fruit" />
|
|
212
|
+
|
|
213
|
+
<!-- Multi-select (chips) -->
|
|
214
|
+
<mlv-combobox [options]="items" [multiple]="true" label="Items" />
|
|
215
|
+
|
|
216
|
+
<!-- Allow creating new values -->
|
|
217
|
+
<mlv-combobox [options]="tags" [allowCreate]="true" (valueCreated)="addTag($event)" />
|
|
218
|
+
|
|
219
|
+
<!-- Object values with compareWith (survives serialize/deserialize) -->
|
|
220
|
+
<mlv-combobox [options]="users" [toOption]="userToOption" [compareWith]="(a, b) => a.id === b.id" [formControl]="ctrl" />
|
|
221
|
+
|
|
222
|
+
<!-- Grouped options (sticky, non-selectable headers via toOption `group`) -->
|
|
223
|
+
<mlv-combobox [options]="cities" [toOption]="cityToOption" />
|
|
224
|
+
<!-- cityToOption = (c) => ({ label: c.name, value: c, group: c.country }) -->
|
|
225
|
+
|
|
226
|
+
<!-- Custom option template -->
|
|
227
|
+
<mlv-combobox [options]="users">
|
|
228
|
+
<ng-template mlvComboboxItemDef let-item> {{ item.label }} — {{ item.value.email }} </ng-template>
|
|
229
|
+
</mlv-combobox>
|
|
230
|
+
|
|
231
|
+
<!-- Clearable + disabled/readonly -->
|
|
232
|
+
<mlv-combobox [options]="opts" clearable [disabled]="isDisabled()" [readonly]="isReadonly()" />
|
|
233
|
+
|
|
234
|
+
<!-- Reactive forms -->
|
|
235
|
+
<mlv-combobox [formControl]="ctrl" [options]="opts" />
|
|
236
|
+
|
|
237
|
+
<!-- Observable source (loading variant holds until the first emission) -->
|
|
238
|
+
<mlv-combobox [options]="users$" [toOption]="userToOption" [formControl]="ctrl" />
|
|
239
|
+
|
|
240
|
+
<!-- Data source: source-side search + lazy paging -->
|
|
241
|
+
<mlv-combobox [options]="userDataSource" [toOption]="userToOption" [searchDebounce]="300" />
|
|
242
|
+
|
|
243
|
+
<!-- Remote search fn (supersedes [options]; no local filtering) -->
|
|
244
|
+
<mlv-combobox [searchFn]="searchUsers" [toOption]="userToOption" [loading]="resolvingInitialUser()" />
|
|
245
|
+
<!-- searchUsers = (query: string) => this.api.findUsers(query)
|
|
246
|
+
Bind [loading] only to flags about *option* loading. It feeds `_ready`, so
|
|
247
|
+
an unrelated flag (a save in flight, say) puts the field into the loading
|
|
248
|
+
variant whenever the committed value is not in the current results. -->
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Dependencies
|
|
254
|
+
|
|
255
|
+
- `@angular/forms/signals` — signal-control contract with reactive/ngModel compatibility
|
|
256
|
+
- `@angular/cdk/overlay` — popup positioning
|
|
257
|
+
- `@angular/common` — `NgTemplateOutlet` (chip / selected-template rendering)
|
|
258
|
+
- `@malva-ui/core/popup` — `MlvPopup`, `MlvPopupContent`, `MlvPopupContainer`
|
|
259
|
+
- `@malva-ui/core/form-utils` — `MlvSignalFormControlBase`, `MlvSelectionService`, `toAriaValues`, `fromAriaValues`
|
|
260
|
+
- `@malva-ui/core/dropdown` — `MlvDropdownPanel`, `MlvSelectOption`, `MlvSelectOptionTransform`, `defaultOptionTransform`, `filterOptions`, `MlvActiveDescendant`, `optionId` (shared activedescendant bookkeeping + option-id format), `isReconciliationEmit`, `filteredOutCommitted` (shared aria reconciliation guard), `MlvOptionsAdapter` + `MlvOptionsInput` / `MlvOptionsSearchFn` (the shared source adapter behind `options` / `searchFn`)
|
|
261
|
+
- `@malva-ui/core/input` — `MlvInput` (the trigger is a `mlv-input` carrying `role="combobox"`; exposes `inputFocus`/`inputBlur` outputs and `focus()`/`select()`)
|
|
262
|
+
- `@malva-ui/core/chip` — `MlvChip` (multi-select selected chips)
|
|
263
|
+
- `@malva-ui/core/loader` — `MlvLoader` (the loading variant's circular spinner in place of the chevron)
|
|
264
|
+
- `@malva-ui/i18n` — `MLV_COMBOBOX_I18N`, `MLV_FORM_UTILS_I18N`, `MlvI18nResolverService` (ICU `pressEnterToAdd` / `resultsAvailable`)
|
|
265
|
+
- `@malva-ui/cdk/utils` — `MlvResizeObserver`
|
|
266
|
+
- `@lucide/angular` — chevron icons
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Accessibility notes
|
|
271
|
+
|
|
272
|
+
- Exactly **one** `role="combobox"` — on the native `<input>` (forwarded via the `mlv-input` `role` input as a property binding, so no duplicate role leaks onto the `mlv-input` host). Alongside it: `aria-autocomplete="list"`, `aria-haspopup="listbox"`, `aria-expanded`, `aria-controls` (the rendered listbox id), and `aria-activedescendant` (the active option id). While the full-screen sheet is open the combobox ARIA moves from the outer trigger input to the in-sheet input (`_outerIsCombobox = !(isFullscreen && isOpen)`), so still exactly one combobox is exposed — see _Mobile fullscreen_ above.
|
|
273
|
+
- The dropdown chevron is a real labelled `<button type="button" tabindex="-1">` (kept out of the tab order), not a decorative `aria-hidden` span.
|
|
274
|
+
- **Activedescendant keyboard model:** DOM focus stays in the input; ArrowUp/ArrowDown/Home/End move the active option and update `aria-activedescendant`; typing keeps working mid-navigation (focus never leaves the input); Enter selects the active option; Escape closes (reverting text) then, when already closed, clears.
|
|
275
|
+
- Tab from the open list closes the popup (via blur) and lets focus proceed naturally — no focus trap.
|
|
276
|
+
- A polite `aria-live` status region (`.mlv-combobox__sr-status`) announces the filtered result count / "No results" — both resolved from `MLV_COMBOBOX_I18N` (`resultsAvailable` is an ICU plural).
|
|
277
|
+
- The loading variant sets `aria-busy` on the trigger row and gives the `mlv-loader` an `ariaLabel` from `MLV_COMBOBOX_I18N.loading`; the field is `readonly` (not `disabled`) so it stays reachable and readable to AT while its value resolves.
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## `@angular/aria` integration
|
|
282
|
+
|
|
283
|
+
The dropdown popup is the **migrated `@angular/aria` listbox** — `mlv-combobox` renders `mlv-dropdown-panel`, which host-applies `@angular/aria`'s `ngListbox`/`ngOption` (via `MlvListSelectable`/`MlvListItemSelectable`). No aria selectors are bound in `mlv-combobox` itself; the panel is consumed as-is.
|
|
284
|
+
|
|
285
|
+
**Trigger strategy — manual `role="combobox"` `mlv-input` trigger kept (not `ngCombobox`).** A full `ngCombobox` restructure was rejected (aria's `Combobox` renders its popup through `ngComboboxPopup`/`DeferredContent`, conflicting with the mandated CDK-overlay positioning). The manual trigger satisfies the full a11y contract with zero template restructure. Filtering stays consumer-side (`filteredOptions` computed).
|
|
286
|
+
|
|
287
|
+
**Activedescendant model (combobox-owned).** The combobox owns the active-option index and passes it to the shared panel through the in-context popup-content template:
|
|
288
|
+
|
|
289
|
+
- `mlv-dropdown-panel` exposes `focusMode` (`'roving' | 'activedescendant'`, default `'roving'`) and `activeIndex` inputs; the combobox pins `focusMode="activedescendant"` and binds `[activeIndex]`.
|
|
290
|
+
- **Shared bookkeeping (DRY).** The active-index state + wrap-around navigation is the shared `MlvActiveDescendant` class from `@malva-ui/core/dropdown` (`private _activeDescendant = new MlvActiveDescendant(() => this.filteredOptions().length)`); `onArrowDown/Up` → `move(±1)`, `onHome/End` → `first()/last()`, resets → `reset()`, and the template `activeIndex()` is `_activeDescendant.index`. `[mlvAutocomplete]` uses the same class (previously both carried a byte-identical private `_moveActive`).
|
|
291
|
+
- `MlvListSelectable` re-exposes aria's `focusMode` passthrough; `MlvListItemSelectable` re-exposes aria's `ngOption` `id` as `optionId`. The panel renders deterministic option ids (`<listboxId>-option-<index>`) via the shared `optionId()` helper — the combobox computes `_activeOptionId` with the **same** `optionId(this.listboxId(), index)` call, so the input's `aria-activedescendant` always matches the active row, and mirrors the highlight (`.mlv-dropdown-panel__item--active`).
|
|
292
|
+
- A service-bridge was intentionally avoided (out of scope for `MlvSelectionService`, which is limited to `compareWith`), and the input's DOM-focus retention makes typing-mid-navigation work — the reason the roving-focus `requestFocusFirst()` cross-component race no longer exists (the active index is combobox-owned state, not a `Subject` timing).
|
|
293
|
+
|
|
294
|
+
**Forms value ↔ aria bridge.** External `value` changes flow through `toAriaValues`, match current options via `compareWith`, and normalize onto option instances. `_emitValue()` uses `fromAriaValues` to collapse the aria array back to the public value shape. Both panel selection and Enter/create route through `_emitValue`.
|
|
295
|
+
|
|
296
|
+
The `aria-controls` linkage relies on `MlvListSelectable`'s `listboxId` forwarding — the trigger's `aria-controls` (`"<id>-listbox"`) resolves to the rendered listbox's real DOM id.
|
|
297
|
+
|
|
298
|
+
**Reconciliation-emit guard (data-loss regression fix).** The combobox binds `[options]="filteredOptions()"` into the aria listbox panel. `@angular/aria`'s `Listbox` runs an `afterRenderEffect` that reconciles its `value` model against only the currently-**rendered** options — whenever the rendered set changes it filters out values whose option is no longer present and re-emits `valueChange`. This is _not_ a user action, yet it reaches `selectValues`. Left unguarded it wiped the committed selection whenever typing filtered the selected option out of view (single-select lost its value on any re-search; multi/allowCreate dropped earlier picks while typing to add another), and a spurious re-emit could close a single-select popup mid-search. `selectValues` now detects a reconciliation emit — one that (a) adds no value not already committed and (b) only removes values whose option is currently filtered out of view (`_isReconciliationEmit`) — and **ignores it entirely** (no mutation, no `_afterCommit`). Genuine pointer selections still apply: an emit that adds a value or removes a still-visible one is a real interaction; in multi-select, committed values aria dropped only because they are filtered out of view are re-added (`_filteredOutCommitted`) so "type to add another" preserves earlier picks. `mlv-select` shares the panel but is unaffected — it has its own `valueChange` handler and its options do not change while open. The guard uses `compareWith` for all membership checks.
|
|
299
|
+
|
|
300
|
+
**Shared matcher + suggestion highlighting.** In **local mode** `filteredOptions` delegates to `filterOptions()` from `@malva-ui/core/dropdown` (the shared case- and diacritic-insensitive substring filter, blank query returns all) — the same utility that powers `[mlvAutocomplete]`; behaviour is unchanged for ASCII queries. In **remote mode** it returns `resolvedOptions` untouched (the source filters), so the reconciliation guard's "visible set" is the whole rendered list. The combobox also passes `[highlightQuery]="_highlightQuery()"` to the panel so the matched substring is emphasised (`<mark class="mlv-dropdown-panel__match">`) while searching; `_highlightQuery` is empty unless actively searching, so a committed single-select label is never highlighted.
|
|
301
|
+
|
|
302
|
+
**Option groups (group-aware filtering).** When `toOption` tags options with a `group` label, the shared `mlv-dropdown-panel` renders sticky, non-selectable section headers (APG `role="group"` + `aria-labelledby`). Filtering happens before grouping, headers never enter the forms value, and the activedescendant/reconciliation logic continues to operate only on option values.
|
|
303
|
+
|
|
304
|
+
**Field click keeps the list open.** The dropdown popup is backdrop-less (`[hasBackdrop]="false"`), so `mlv-popup` dismisses on any document click outside the floating panel. The trigger row (chips + input + chevron) lives outside that panel, so a click on the input to reposition the caret would otherwise dismiss the open list. The combobox passes the trigger element via `mlv-popup`'s `dismissExcludeElements` input (`_popupExcludeElements` computed from a `#trigger` `viewChild`), so clicks within the trigger are treated as "inside" and the list stays open while the caret moves.
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## Testing
|
|
309
|
+
|
|
310
|
+
- Nx project: **`core-combobox`** (*(internal)*) — `yarn nx test core-combobox`.
|
|
311
|
+
- `describe('MlvCombobox — async sources')` (9 tests) covers the adapter integration: the loading variant for a preset value awaiting its label from an `Observable` source (host class, `.mlv-combobox__loader`, empty + `readOnly` input, click cannot open) and its resolution to the real label once the observable emits; a remote `searchFn` (query forwarded on first open and on every keystroke, panel spinner row, **no local filtering** — stale options stay until the server answers — the list stays open, then the i18n `No results found` empty state); the consumer's `[loading]` input rendering the panel spinner row alongside live options; and an `MlvSelectDataSource` rendering its items with the paging sentinel mounted. It also pins the query-preservation and remote-reset contracts: a landing remote response leaves the typed text (and the active search, proven by the surviving `<mark>` highlight) alone in single- **and** multi-select, and the source is re-asked for `''` after a multi-select commit and after `onClear()` (`['', 'zz', '']`). Paging is driven by a local `PagedTagSource` stub — an `MlvDataSource` with `perPage: 2` over 4 items whose fetches resolve on an explicit `flush()` — because the panel's scroll sentinel cannot fire in jsdom (every layout metric is `0`); it asserts the top spinner for page one, then the `__loading-more` row plus the unchanged option count while page two is in flight, then the accumulated four options.
|
|
312
|
+
|
|
313
|
+
## Inline clear + chip Backspace (2026-07)
|
|
314
|
+
|
|
315
|
+
- `hasValue` = committed selection non-empty (search text alone is not a value); `ownsClearButton = true` — the clear X renders inline in the trigger row **before the chevron** (`.mlv-combobox__clear`, mousedown-prevented so the input keeps focus); the wrapper's trailing copy is suppressed.
|
|
316
|
+
- **Chip Backspace (tokenizer parity, multi only):** empty search input + Backspace arms the last chip (`.mlv-combobox__chip--armed` focus-ring, polite SR announcement, DOM focus stays in the input); next Backspace (or Delete) removes the armed chip via `removeSelected` and re-arms the new last; removing the final chip disarms with the input still focused. Typing, blur, trigger click, and click-removal disarm. Handlers: `onInputBackspace` / `onInputDelete`; wired on both the outer and in-sheet inputs.
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## Field surface (2026-08)
|
|
321
|
+
|
|
322
|
+
- Inherited `required` renders the `mlv-label` marker and is forwarded to the inner `mlv-input` (`aria-required` on the native input).
|
|
323
|
+
- Inherited `ariaLabel` is forwarded to the inner input when no visible `label` is set.
|
|
324
|
+
- Inherited `description` renders `<mlv-description>` below the control. The inner bare `mlv-input` receives `[ariaDescribedBy]="_describedBy()"`, so its `aria-describedby` points at the description/message elements the combobox itself renders.
|
|
325
|
+
- `<mlv-message>` carries `_messageId()`.
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Library: copy-to-clipboard
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
`@malva-ui/core/copy-to-clipboard` provides the `<mlv-copy-to-clipboard>` component — an inline text wrapper that copies its projected content (or an explicit `value`) to the system clipboard on click, Enter, or Space. Visually the component is invisible chrome by default: it reads as regular inline text until the user hovers or focuses it, at which point a subtle background tint appears and a small copy icon fades in. On successful copy, the icon morphs from Copy to Check via a soft blur crossfade, the `(copied)` output fires, and a visually hidden `aria-live="polite"` region announces the confirmation.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Public API
|
|
10
|
+
|
|
11
|
+
Exported from `@malva-ui/core/copy-to-clipboard`:
|
|
12
|
+
|
|
13
|
+
| Export | Kind | Description |
|
|
14
|
+
| -------------------- | --------- | ---------------------------------------------------------- |
|
|
15
|
+
| `MlvCopyToClipboard` | Component | `mlv-copy-to-clipboard` — inline copy-to-clipboard wrapper |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Components
|
|
20
|
+
|
|
21
|
+
### `MlvCopyToClipboard`
|
|
22
|
+
|
|
23
|
+
**Selector:** `mlv-copy-to-clipboard` | **Change Detection:** `OnPush` | **Encapsulation:** `None`
|
|
24
|
+
|
|
25
|
+
#### Inputs
|
|
26
|
+
|
|
27
|
+
| Name | Type | Default | Description |
|
|
28
|
+
| ----------------- | ------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
29
|
+
| `value` | `string \| undefined` | `undefined` | Explicit text to copy. When omitted, the component falls back to the trimmed `textContent` of the projected default slot. |
|
|
30
|
+
| `copiedDuration` | `number` | `2000` | Milliseconds the copied state remains active after a successful write. |
|
|
31
|
+
| `ariaLabel` | `string` | `'Copy to clipboard'` | Base accessible label for the host. When a resolved value is available it is appended for richer screen-reader context. |
|
|
32
|
+
| `copiedAriaLabel` | `string` | `'Copied to clipboard'` | Announced via the visually hidden `aria-live="polite"` region after a successful copy. |
|
|
33
|
+
| `disabled` | `BooleanInput` (coerced) | `false` | Disables the copy action, sets `aria-disabled`, and removes the host from the tab order. |
|
|
34
|
+
|
|
35
|
+
#### Outputs
|
|
36
|
+
|
|
37
|
+
| Name | Type | Description |
|
|
38
|
+
| -------- | -------------------------- | ---------------------------------------------------------------------------------- |
|
|
39
|
+
| `copied` | `OutputEmitterRef<string>` | Emits the exact string that was written to the clipboard after a successful write. |
|
|
40
|
+
|
|
41
|
+
#### Public Properties
|
|
42
|
+
|
|
43
|
+
| Property | Type | Description |
|
|
44
|
+
| ---------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
45
|
+
| `isCopied` | `Signal<boolean>` | Read-only signal reflecting the current copied state — useful for template-driven UI that reacts to the transient state. |
|
|
46
|
+
|
|
47
|
+
#### Methods
|
|
48
|
+
|
|
49
|
+
| Method | Returns | Description |
|
|
50
|
+
| -------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
51
|
+
| `copy()` | `Promise<void>` | Writes the resolved value to the clipboard, flips `isCopied()` to true, emits `copied`, and schedules the auto-reset timer. No-op when `disabled` is true or the resolved value is empty. Errors are swallowed silently (the idle state stays unchanged on failure). |
|
|
52
|
+
|
|
53
|
+
#### Host Bindings
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
host: {
|
|
57
|
+
'class': 'mlv-copy-to-clipboard',
|
|
58
|
+
'[class.mlv-copy-to-clipboard--copied]': 'isCopied()',
|
|
59
|
+
'[class.mlv-copy-to-clipboard--disabled]': 'disabled()',
|
|
60
|
+
'role': 'button',
|
|
61
|
+
'[attr.tabindex]': 'disabled() ? -1 : 0',
|
|
62
|
+
'[attr.aria-label]': '_computedAriaLabel()',
|
|
63
|
+
'[attr.aria-disabled]': 'disabled() || null',
|
|
64
|
+
'(click)': 'copy()',
|
|
65
|
+
'(keydown.enter)': 'copy(); $event.preventDefault()',
|
|
66
|
+
'(keydown.space)': 'copy(); $event.preventDefault()',
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Template Structure
|
|
73
|
+
|
|
74
|
+
```html
|
|
75
|
+
<span class="mlv-copy-to-clipboard__content">
|
|
76
|
+
<ng-content />
|
|
77
|
+
</span>
|
|
78
|
+
<span class="mlv-copy-to-clipboard__indicator" [mlvTooltip]="isCopied() ? 'Copied' : 'Copy'" tooltipPlacement="top" aria-hidden="true">
|
|
79
|
+
<svg lucideCopy class="mlv-copy-to-clipboard__icon mlv-copy-to-clipboard__icon--idle" [size]="12" />
|
|
80
|
+
<svg lucideCheck class="mlv-copy-to-clipboard__icon mlv-copy-to-clipboard__icon--success" [size]="12" />
|
|
81
|
+
</span>
|
|
82
|
+
<span class="mlv-copy-to-clipboard__live" aria-live="polite"> @if (isCopied()) { {{ copiedAriaLabel() }} } </span>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The indicator icon stack is decorated with `[mlvTooltip]` from `@malva-ui/core/tooltip` so the small icon gets a discoverable "Copy" label on hover, flipping to "Copied" in the success state.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## CSS Classes
|
|
90
|
+
|
|
91
|
+
| Class | Description |
|
|
92
|
+
| --------------------------------------- | -------------------------------------------------------------------------------- |
|
|
93
|
+
| `.mlv-copy-to-clipboard` | Root block — inline-flex wrapper with zero-inset hover tint |
|
|
94
|
+
| `.mlv-copy-to-clipboard__content` | Span wrapping the projected default slot |
|
|
95
|
+
| `.mlv-copy-to-clipboard__indicator` | Relatively-positioned ~0.875rem square holding the two icons |
|
|
96
|
+
| `.mlv-copy-to-clipboard__icon` | Absolutely-positioned icon inside the indicator |
|
|
97
|
+
| `.mlv-copy-to-clipboard__icon--idle` | Copy icon layer (visible in idle state) |
|
|
98
|
+
| `.mlv-copy-to-clipboard__icon--success` | Check icon layer (visible in copied state), colored with `--mlv-text-positive` |
|
|
99
|
+
| `.mlv-copy-to-clipboard__live` | Visually hidden `aria-live="polite"` announcement region |
|
|
100
|
+
| `.mlv-copy-to-clipboard--copied` | Success state modifier — crossfades the two icons with a blur bridge |
|
|
101
|
+
| `.mlv-copy-to-clipboard--disabled` | Disabled modifier — applies `--mlv-disabled-opacity` and disables pointer events |
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Motion Design
|
|
106
|
+
|
|
107
|
+
The component follows Emil Kowalski's motion principles:
|
|
108
|
+
|
|
109
|
+
- **Invisible by default.** The host has no visible chrome until hover or focus — the component reads as prose text.
|
|
110
|
+
- **Hover tint only on fine pointers.** The hover background reveal is gated behind `@media (hover: hover) and (pointer: fine)` so touch devices never stick with a phantom hover state. `:focus-visible` reveals the tint unconditionally so keyboard users always see it.
|
|
111
|
+
- **Blur crossfade between states.** The Copy and Check icons are absolutely stacked inside the indicator. Transitioning from idle to copied crossfades them while briefly applying `filter: blur(2px)` and opposing `transform: scale(...)` values — a soft bridge that hides the visual seam between the two glyphs.
|
|
112
|
+
- **Press feedback.** `:active` applies `transform: scale(0.97)` so the entire inline chunk depresses slightly on click.
|
|
113
|
+
- **Custom easing.** Uses `cubic-bezier(0.23, 1, 0.32, 1)` for every transition (no `transition: all`, no `ease-in`).
|
|
114
|
+
- **Reduced motion.** Under `@media (prefers-reduced-motion: reduce)` the scale and blur transforms drop out, leaving only opacity crossfade.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Accessibility
|
|
119
|
+
|
|
120
|
+
- Host has `role="button"`, `tabindex="0"` (or `-1` when disabled), and a computed `aria-label` that combines the base label with the resolved value when one is available.
|
|
121
|
+
- Activation is supported via mouse click, `Enter`, and `Space`. `Space` calls `preventDefault()` to suppress page scroll.
|
|
122
|
+
- The two absolutely-positioned icons are wrapped in a single `aria-hidden="true"` container, so screen readers do not see the "Copy/Check" SVGs as extra content.
|
|
123
|
+
- A visually hidden `aria-live="polite"` region exposes the `copiedAriaLabel()` text for the duration of the copied state, giving screen-reader users an unambiguous confirmation.
|
|
124
|
+
- `:focus-visible` shows an outline using `--mlv-border-focus` and reveals the hover tint so keyboard users see the same affordance as hover users.
|
|
125
|
+
- When `disabled`, the host reflects `aria-disabled="true"` and copy is a no-op.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Usage Examples
|
|
130
|
+
|
|
131
|
+
```html
|
|
132
|
+
<!-- Basic inline usage -->
|
|
133
|
+
<p>Your API key is <mlv-copy-to-clipboard>sk_live_abc123xyz</mlv-copy-to-clipboard>.</p>
|
|
134
|
+
|
|
135
|
+
<!-- Decouple visible label from copied payload -->
|
|
136
|
+
<mlv-copy-to-clipboard [value]="orderId">#0042</mlv-copy-to-clipboard>
|
|
137
|
+
|
|
138
|
+
<!-- Extended copied window -->
|
|
139
|
+
<mlv-copy-to-clipboard [copiedDuration]="4000">pnpm add @malva-ui/core</mlv-copy-to-clipboard>
|
|
140
|
+
|
|
141
|
+
<!-- Wire to toast -->
|
|
142
|
+
<mlv-copy-to-clipboard [value]="webhookUrl" (copied)="onCopied($event)"> hooks.example.com </mlv-copy-to-clipboard>
|
|
143
|
+
|
|
144
|
+
<!-- Disabled -->
|
|
145
|
+
<mlv-copy-to-clipboard disabled>cannot copy</mlv-copy-to-clipboard>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Dependencies
|
|
151
|
+
|
|
152
|
+
- `@angular/core` `[@angular/core_VERSION_PLACEHOLDER]` — `Component`, `inject`, `input`, `output`, `signal`, `computed`, `DestroyRef`, `ElementRef`
|
|
153
|
+
- `@angular/cdk/coercion` `[@angular/cdk_VERSION_PLACEHOLDER]` — `BooleanInput`, `coerceBooleanProperty`
|
|
154
|
+
- `@lucide/angular` `[@lucide/angular_VERSION_PLACEHOLDER]` — `LucideCopy`, `LucideCheck`
|
|
155
|
+
- `@malva-ui/core/tooltip` (workspace peer) — `MlvTooltip` for the indicator hover label
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## File Structure
|