@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,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Forms ↔ `@angular/aria` value bridge.
|
|
3
|
+
*
|
|
4
|
+
* The headless `@angular/aria` selection patterns (`ngListbox`, `ngMenu`,
|
|
5
|
+
* `ngTree`, …) always model their selection as an **array** of values
|
|
6
|
+
* (`value: ModelSignal<V[]>`), even in single-select mode where the array holds
|
|
7
|
+
* at most one entry. Malva UI form controls expose the idiomatic public shape:
|
|
8
|
+
* a bare `T` for single-select and a `T[]` for multi-select, with `null` used
|
|
9
|
+
* to represent "no selection".
|
|
10
|
+
*
|
|
11
|
+
* These helpers translate between the two representations so a component can
|
|
12
|
+
* keep its public single/multi forms contract while driving an aria pattern
|
|
13
|
+
* underneath. They are pure and allocation-light, and are designed to
|
|
14
|
+
* round-trip: `fromAriaValues(toAriaValues(v, multi), multi)` yields the
|
|
15
|
+
* canonical form of `v`.
|
|
16
|
+
*
|
|
17
|
+
* @remarks
|
|
18
|
+
* `toAriaValues` treats an incoming array as an already-expanded multi-select
|
|
19
|
+
* value. If your single-select `T` is itself an array type, wrap it before
|
|
20
|
+
* bridging — this is the same ambiguity the aria patterns themselves carry.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Normalises a control value (`T`, `T[]`, or `null`/`undefined`) into the flat
|
|
24
|
+
* `V[]` array that `@angular/aria` selection patterns expect.
|
|
25
|
+
*
|
|
26
|
+
* - `null` / `undefined` → `[]` (cleared selection)
|
|
27
|
+
* - an array → a shallow copy of that array (multi-select)
|
|
28
|
+
* - any other value → a single-element array (single-select)
|
|
29
|
+
*
|
|
30
|
+
* @param value The control-side value to convert.
|
|
31
|
+
* @returns A fresh array suitable for assigning to an aria `value` model.
|
|
32
|
+
*/
|
|
33
|
+
export function toAriaValues(value) {
|
|
34
|
+
if (value === null || value === undefined) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
return Array.isArray(value) ? [...value] : [value];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Collapses the flat `V[]` array produced by an `@angular/aria` selection
|
|
41
|
+
* pattern back into the control-side value shape.
|
|
42
|
+
*
|
|
43
|
+
* - `multiple === true` → a shallow copy of the array (empty array stays `[]`)
|
|
44
|
+
* - `multiple === false` → the first entry, or `null` when the array is empty
|
|
45
|
+
*
|
|
46
|
+
* @param values The aria-side selection array.
|
|
47
|
+
* @param multiple Whether the control is in multi-select mode.
|
|
48
|
+
* @returns The control-side value: `V[]` for multi-select, `V | null` for single.
|
|
49
|
+
*/
|
|
50
|
+
export function fromAriaValues(values, multiple) {
|
|
51
|
+
const list = values ?? [];
|
|
52
|
+
if (multiple) {
|
|
53
|
+
return [...list];
|
|
54
|
+
}
|
|
55
|
+
return list.length > 0 ? list[0] : null;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=aria-value-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aria-value-bridge.js","sourceRoot":"","sources":["../../../../../../libs/core/form-utils/src/lib/aria-value-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,KAA0C;IAE1C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,KAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAU,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAuC,EACvC,QAAiB;IAEjB,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,CAAC;IAC1B,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC","sourcesContent":["/**\n * Forms ↔ `@angular/aria` value bridge.\n *\n * The headless `@angular/aria` selection patterns (`ngListbox`, `ngMenu`,\n * `ngTree`, …) always model their selection as an **array** of values\n * (`value: ModelSignal<V[]>`), even in single-select mode where the array holds\n * at most one entry. Malva UI form controls expose the idiomatic public shape:\n * a bare `T` for single-select and a `T[]` for multi-select, with `null` used\n * to represent \"no selection\".\n *\n * These helpers translate between the two representations so a component can\n * keep its public single/multi forms contract while driving an aria pattern\n * underneath. They are pure and allocation-light, and are designed to\n * round-trip: `fromAriaValues(toAriaValues(v, multi), multi)` yields the\n * canonical form of `v`.\n *\n * @remarks\n * `toAriaValues` treats an incoming array as an already-expanded multi-select\n * value. If your single-select `T` is itself an array type, wrap it before\n * bridging — this is the same ambiguity the aria patterns themselves carry.\n */\n\n/**\n * Normalises a control value (`T`, `T[]`, or `null`/`undefined`) into the flat\n * `V[]` array that `@angular/aria` selection patterns expect.\n *\n * - `null` / `undefined` → `[]` (cleared selection)\n * - an array → a shallow copy of that array (multi-select)\n * - any other value → a single-element array (single-select)\n *\n * @param value The control-side value to convert.\n * @returns A fresh array suitable for assigning to an aria `value` model.\n */\nexport function toAriaValues<V>(\n value: V | readonly V[] | null | undefined,\n): V[] {\n if (value === null || value === undefined) {\n return [];\n }\n return Array.isArray(value) ? [...(value as readonly V[])] : [value as V];\n}\n\n/**\n * Collapses the flat `V[]` array produced by an `@angular/aria` selection\n * pattern back into the control-side value shape.\n *\n * - `multiple === true` → a shallow copy of the array (empty array stays `[]`)\n * - `multiple === false` → the first entry, or `null` when the array is empty\n *\n * @param values The aria-side selection array.\n * @param multiple Whether the control is in multi-select mode.\n * @returns The control-side value: `V[]` for multi-select, `V | null` for single.\n */\nexport function fromAriaValues<V>(\n values: readonly V[] | null | undefined,\n multiple: boolean,\n): V | V[] | null {\n const list = values ?? [];\n if (multiple) {\n return [...list];\n }\n return list.length > 0 ? list[0] : null;\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Persistent help text rendered below a form control, in front of the
|
|
5
|
+
* validation message. Projected into `mlv-form-control-wrapper` through its
|
|
6
|
+
* `mlv-description` slot and referenced by the control's `aria-describedby`,
|
|
7
|
+
* so it stays readable while a validation message is shown.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* <mlv-description [id]="descriptionId">
|
|
11
|
+
* We only use this address for receipts.
|
|
12
|
+
* </mlv-description>
|
|
13
|
+
*/
|
|
14
|
+
export class MlvDescription {
|
|
15
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDescription, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.7", type: MlvDescription, isStandalone: true, selector: "mlv-description", host: { classAttribute: "mlv-description" }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: [".mlv-description{display:block;font-weight:400;font-size:var(--mlv-typography-body-s-size);color:var(--mlv-text-secondary)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
17
|
+
}
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvDescription, decorators: [{
|
|
19
|
+
type: Component,
|
|
20
|
+
args: [{ selector: 'mlv-description', template: `<ng-content />`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
21
|
+
class: 'mlv-description',
|
|
22
|
+
}, styles: [".mlv-description{display:block;font-weight:400;font-size:var(--mlv-typography-body-s-size);color:var(--mlv-text-secondary)}\n"] }]
|
|
23
|
+
}] });
|
|
24
|
+
//# sourceMappingURL=description.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"description.js","sourceRoot":"","sources":["../../../../../../../libs/core/form-utils/src/lib/description/description.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,iBAAiB,GAClB,MAAM,eAAe,CAAC;;AAEvB;;;;;;;;;;GAUG;AAWH,MAAM,OAAO,cAAc;uGAAd,cAAc;2FAAd,cAAc,wHARf,gBAAgB;;2FAQf,cAAc;kBAV1B,SAAS;+BACE,iBAAiB,YACjB,gBAAgB,iBAEX,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,QACzC;wBACJ,KAAK,EAAE,iBAAiB;qBACzB","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n} from '@angular/core';\n\n/**\n * Persistent help text rendered below a form control, in front of the\n * validation message. Projected into `mlv-form-control-wrapper` through its\n * `mlv-description` slot and referenced by the control's `aria-describedby`,\n * so it stays readable while a validation message is shown.\n *\n * @example\n * <mlv-description [id]=\"descriptionId\">\n * We only use this address for receipts.\n * </mlv-description>\n */\n@Component({\n selector: 'mlv-description',\n template: `<ng-content />`,\n styleUrl: './description.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mlv-description',\n },\n})\nexport class MlvDescription {}\n"]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Directive, DestroyRef, effect, inject } from '@angular/core';
|
|
2
|
+
import { FocusKeyManager } from '@angular/cdk/a11y';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Shared, selection-agnostic scaffold for composite groups that navigate their
|
|
6
|
+
* children with a vertical, wrapping {@link FocusKeyManager} and a roving
|
|
7
|
+
* tabindex that follows focus (only the active child is tabbable).
|
|
8
|
+
*
|
|
9
|
+
* Extracted from the duplicated lifecycle in `MlvCheckboxGroup` and
|
|
10
|
+
* `MlvSwitchGroup`. It owns **only** the focus / roving-tabindex concern:
|
|
11
|
+
* key-manager creation over the current children, the `change`→tabindex sync,
|
|
12
|
+
* keydown delegation, child-focus tracking, and teardown. Subclasses supply the
|
|
13
|
+
* live children signal ({@link _items}) and the skip predicate
|
|
14
|
+
* ({@link _isDisabled}); everything else (selection, CVA, templates) stays in
|
|
15
|
+
* the concrete component.
|
|
16
|
+
*
|
|
17
|
+
* NB: this is a *focus-roving* base — the tab stop follows the focused child.
|
|
18
|
+
* Groups whose tab stop must follow a *selected* child instead (e.g.
|
|
19
|
+
* `mlv-radio-group`, whose checked radio is the tab stop and whose arrow keys
|
|
20
|
+
* also move selection) do not fit this contract and keep their own manager.
|
|
21
|
+
*
|
|
22
|
+
* @typeParam T The concrete focusable child component type.
|
|
23
|
+
*/
|
|
24
|
+
export class MlvFocusableGroupBase {
|
|
25
|
+
/** @private FocusKeyManager driving roving-tabindex arrow navigation between children. */
|
|
26
|
+
_keyManager;
|
|
27
|
+
/** @private Subscription to the key manager's active-item changes. */
|
|
28
|
+
_changeSub;
|
|
29
|
+
constructor() {
|
|
30
|
+
inject(DestroyRef).onDestroy(() => {
|
|
31
|
+
this._changeSub?.unsubscribe();
|
|
32
|
+
this._keyManager?.destroy();
|
|
33
|
+
});
|
|
34
|
+
effect(() => {
|
|
35
|
+
const items = [...this._items()];
|
|
36
|
+
if (items.length === 0)
|
|
37
|
+
return;
|
|
38
|
+
// Destroy the previous instance before allocating a new one — without
|
|
39
|
+
// this, every children emission accumulates a live FocusKeyManager
|
|
40
|
+
// (subscriptions, change-detection refs) against detached items.
|
|
41
|
+
this._changeSub?.unsubscribe();
|
|
42
|
+
this._keyManager?.destroy();
|
|
43
|
+
this._keyManager = new FocusKeyManager(items)
|
|
44
|
+
.skipPredicate((item) => this._isDisabled(item))
|
|
45
|
+
.withVerticalOrientation()
|
|
46
|
+
.withWrap();
|
|
47
|
+
// Keep the roving tabindex in sync as focus moves between children so only
|
|
48
|
+
// the active item is tabbable. `tabIndex` is a signal, so the host binding
|
|
49
|
+
// updates under OnPush without an extra change-detection trigger.
|
|
50
|
+
this._changeSub = this._keyManager.change.subscribe((index) => this._syncTabIndices(index));
|
|
51
|
+
// Initial roving state: the first child is the single tab stop.
|
|
52
|
+
this._syncTabIndices(0);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Notifies the manager which child took focus so arrow navigation resumes from
|
|
57
|
+
* it. Wire to each child's focus notification (group accessor token).
|
|
58
|
+
*/
|
|
59
|
+
onChildFocus(item) {
|
|
60
|
+
const index = this._items().indexOf(item);
|
|
61
|
+
if (index >= 0) {
|
|
62
|
+
this._keyManager?.setActiveItem(index);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Delegates ArrowUp/ArrowDown to the key manager (moving focus + the tab stop)
|
|
67
|
+
* and suppresses the default page scroll. Wire to the group's `(keydown)`.
|
|
68
|
+
*/
|
|
69
|
+
onKeydown(event) {
|
|
70
|
+
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
|
71
|
+
this._keyManager?.onKeydown(event);
|
|
72
|
+
event.preventDefault();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** @private Sets tabindex 0 on the active child and -1 on the rest. */
|
|
76
|
+
_syncTabIndices(activeIndex) {
|
|
77
|
+
this._items().forEach((item, i) => {
|
|
78
|
+
item.tabIndex.set(i === activeIndex ? 0 : -1);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFocusableGroupBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
82
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvFocusableGroupBase, isStandalone: true, ngImport: i0 });
|
|
83
|
+
}
|
|
84
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFocusableGroupBase, decorators: [{
|
|
85
|
+
type: Directive
|
|
86
|
+
}], ctorParameters: () => [] });
|
|
87
|
+
//# sourceMappingURL=focusable-group-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focusable-group-base.js","sourceRoot":"","sources":["../../../../../../libs/core/form-utils/src/lib/focusable-group-base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;;AA0BpD;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,OAAgB,qBAAqB;IAczC,0FAA0F;IAClF,WAAW,CAAsB;IAEzC,sEAAsE;IAC9D,UAAU,CAAgB;IAElC;QACE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;YAChC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE/B,sEAAsE;YACtE,mEAAmE;YACnE,iEAAiE;YACjE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CAAI,KAAK,CAAC;iBAC7C,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC/C,uBAAuB,EAAE;iBACzB,QAAQ,EAAE,CAAC;YAEd,2EAA2E;YAC3E,2EAA2E;YAC3E,kEAAkE;YAClE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5D,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAC5B,CAAC;YAEF,gEAAgE;YAChE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,IAAO;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,KAAoB;QAC5B,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YACzD,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;YACnC,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,uEAAuE;IAC/D,eAAe,CAAC,WAAmB;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;uGA/EmB,qBAAqB;2FAArB,qBAAqB;;2FAArB,qBAAqB;kBAD1C,SAAS","sourcesContent":["import type { Signal, WritableSignal } from '@angular/core';\nimport { Directive, DestroyRef, effect, inject } from '@angular/core';\nimport type { FocusOrigin } from '@angular/cdk/a11y';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport type { Subscription } from 'rxjs';\n\n/**\n * The per-item contract a roving-tabindex group needs from each child: a\n * focusable element whose `tabIndex` is a writable signal the group flips\n * between `0` (the single tab stop) and `-1` (the rest). Satisfied by\n * `mlv-checkbox` and `mlv-switch`, whose native input binds `[attr.tabindex]`\n * to this signal.\n *\n * Deliberately NOT `extends FocusableOption`: components type `disabled` as a\n * coerced input signal (`InputSignalWithTransform<boolean, BooleanInput>`),\n * which is incompatible with `FocusableOption`'s plain `disabled?: boolean`.\n * Disabled-skipping is expressed through the group's\n * {@link MlvFocusableGroupBase._isDisabled} predicate instead, and\n * `FocusKeyManager<T>` needs no constraint (it intersects `FocusableOption & T`\n * internally).\n */\nexport interface MlvFocusableGroupItem {\n /** Focuses the item's focus target (the visually-hidden native input). */\n focus(origin?: FocusOrigin): void;\n\n /** Roving tabindex applied to the item's focus target. */\n readonly tabIndex: WritableSignal<number>;\n}\n\n/**\n * Shared, selection-agnostic scaffold for composite groups that navigate their\n * children with a vertical, wrapping {@link FocusKeyManager} and a roving\n * tabindex that follows focus (only the active child is tabbable).\n *\n * Extracted from the duplicated lifecycle in `MlvCheckboxGroup` and\n * `MlvSwitchGroup`. It owns **only** the focus / roving-tabindex concern:\n * key-manager creation over the current children, the `change`→tabindex sync,\n * keydown delegation, child-focus tracking, and teardown. Subclasses supply the\n * live children signal ({@link _items}) and the skip predicate\n * ({@link _isDisabled}); everything else (selection, CVA, templates) stays in\n * the concrete component.\n *\n * NB: this is a *focus-roving* base — the tab stop follows the focused child.\n * Groups whose tab stop must follow a *selected* child instead (e.g.\n * `mlv-radio-group`, whose checked radio is the tab stop and whose arrow keys\n * also move selection) do not fit this contract and keep their own manager.\n *\n * @typeParam T The concrete focusable child component type.\n */\n@Directive()\nexport abstract class MlvFocusableGroupBase<T extends MlvFocusableGroupItem> {\n /**\n * @protected The live children in DOM order — typically a `contentChildren`\n * signal on the subclass. Read reactively inside the base effect so the key\n * manager is rebuilt whenever the projected set changes.\n */\n protected abstract readonly _items: Signal<readonly T[]>;\n\n /**\n * @protected Predicate marking a child as skipped by arrow navigation. Groups\n * bridge their own disabled model here (e.g. `computedDisabled()`).\n */\n protected abstract _isDisabled(item: T): boolean;\n\n /** @private FocusKeyManager driving roving-tabindex arrow navigation between children. */\n private _keyManager?: FocusKeyManager<T>;\n\n /** @private Subscription to the key manager's active-item changes. */\n private _changeSub?: Subscription;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this._changeSub?.unsubscribe();\n this._keyManager?.destroy();\n });\n\n effect(() => {\n const items = [...this._items()];\n if (items.length === 0) return;\n\n // Destroy the previous instance before allocating a new one — without\n // this, every children emission accumulates a live FocusKeyManager\n // (subscriptions, change-detection refs) against detached items.\n this._changeSub?.unsubscribe();\n this._keyManager?.destroy();\n this._keyManager = new FocusKeyManager<T>(items)\n .skipPredicate((item) => this._isDisabled(item))\n .withVerticalOrientation()\n .withWrap();\n\n // Keep the roving tabindex in sync as focus moves between children so only\n // the active item is tabbable. `tabIndex` is a signal, so the host binding\n // updates under OnPush without an extra change-detection trigger.\n this._changeSub = this._keyManager.change.subscribe((index) =>\n this._syncTabIndices(index),\n );\n\n // Initial roving state: the first child is the single tab stop.\n this._syncTabIndices(0);\n });\n }\n\n /**\n * Notifies the manager which child took focus so arrow navigation resumes from\n * it. Wire to each child's focus notification (group accessor token).\n */\n onChildFocus(item: T): void {\n const index = this._items().indexOf(item);\n if (index >= 0) {\n this._keyManager?.setActiveItem(index);\n }\n }\n\n /**\n * Delegates ArrowUp/ArrowDown to the key manager (moving focus + the tab stop)\n * and suppresses the default page scroll. Wire to the group's `(keydown)`.\n */\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n this._keyManager?.onKeydown(event);\n event.preventDefault();\n }\n }\n\n /** @private Sets tabindex 0 on the active child and -1 on the rest. */\n private _syncTabIndices(activeIndex: number): void {\n this._items().forEach((item, i) => {\n item.tabIndex.set(i === activeIndex ? 0 : -1);\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { computed, contentChild, Directive, input, output, signal, } from '@angular/core';
|
|
2
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
3
|
+
import { mlvNextId } from '@malva-ui/cdk/utils';
|
|
4
|
+
import { MlvFormControlAppend } from '../form-control-sides';
|
|
5
|
+
import { MlvFormControlInset } from '../form-control-sides';
|
|
6
|
+
import { MlvFormControlPrepend } from '../form-control-sides';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
/**
|
|
9
|
+
* Shared, forms-transport-agnostic surface for **signal-forms** Malva controls.
|
|
10
|
+
* Owns everything EXCEPT the value/checked model: the
|
|
11
|
+
* Malva field surface (`state`, `label`, `hint`, `message`, `clearable`,
|
|
12
|
+
* `id`, prepend/append slots), the wrapper connector contract
|
|
13
|
+
* ({@link MlvFormControl}), and the signal-forms field↔control bindings —
|
|
14
|
+
* `errors` / `disabled` / `readonly` / `touched` / `dirty` input signals the
|
|
15
|
+
* `[formField]` directive binds automatically, plus the `touch` output the
|
|
16
|
+
* control emits when the user leaves the field.
|
|
17
|
+
*
|
|
18
|
+
* Per the signal-forms contract a component must NOT implement both
|
|
19
|
+
* `ControlValueAccessor` and `FormValueControl`; controls therefore adopt
|
|
20
|
+
* either {@link MlvSignalFormControlBase} or {@link MlvSignalCheckboxControlBase}
|
|
21
|
+
* atomically. Reactive (`[formControl]`)
|
|
22
|
+
* and template-driven (`ngModel`) bindings keep working — Angular binds the
|
|
23
|
+
* signal contract from those directives without extra compatibility code.
|
|
24
|
+
*/
|
|
25
|
+
export class MlvSignalFormUiControlBase {
|
|
26
|
+
/** @protected Backing signal for {@link focused}. */
|
|
27
|
+
_focused = signal(false, /* @ts-ignore */
|
|
28
|
+
...(ngDevMode ? [{ debugName: "_focused" }] : /* istanbul ignore next */ []));
|
|
29
|
+
/** Whether the control currently has focus (drives the wrapper's focus ring). */
|
|
30
|
+
focused = this._focused;
|
|
31
|
+
/** Sets the control's focus state (wired to the focus target's focus/blur). */
|
|
32
|
+
setFocused(value) {
|
|
33
|
+
this._focused.set(value);
|
|
34
|
+
}
|
|
35
|
+
/** Explicit consumer-authored visual validation state. */
|
|
36
|
+
state = input('default', /* @ts-ignore */
|
|
37
|
+
...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
|
|
38
|
+
/**
|
|
39
|
+
* Whether the control is read-only. Also a signal-forms field binding: when
|
|
40
|
+
* bound via `[formField]`, a `readonly` schema rule drives this input.
|
|
41
|
+
*/
|
|
42
|
+
readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {}), transform: (value) => coerceBooleanProperty(value) });
|
|
43
|
+
/**
|
|
44
|
+
* Whether the control is disabled. Also a signal-forms field binding: when
|
|
45
|
+
* bound via `[formField]`, the field's disabled state drives this input.
|
|
46
|
+
*/
|
|
47
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: (value) => coerceBooleanProperty(value) });
|
|
48
|
+
/**
|
|
49
|
+
* Whether the control must be filled in. Renders the required marker in
|
|
50
|
+
* `mlv-label` and sets `aria-required` on the control's focus target. Also a
|
|
51
|
+
* signal-forms field binding: when bound via `[formField]`, a `required()`
|
|
52
|
+
* schema rule drives this input.
|
|
53
|
+
*/
|
|
54
|
+
required = input(false, { ...(ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {}), transform: (value) => coerceBooleanProperty(value) });
|
|
55
|
+
/** Whether the control shows its loading affordance. */
|
|
56
|
+
loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
57
|
+
/** Whether the control renders a clear (X) affordance while it has a value. */
|
|
58
|
+
clearable = input(false, { ...(ngDevMode ? { debugName: "clearable" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
59
|
+
/**
|
|
60
|
+
* Fully rounded (stadium) control container. Shared by every control that
|
|
61
|
+
* renders through `mlv-form-control-wrapper`, mirroring `shape="pill"` on
|
|
62
|
+
* buttons and the pill action bar.
|
|
63
|
+
*/
|
|
64
|
+
pill = input(false, { ...(ngDevMode ? { debugName: "pill" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
65
|
+
/**
|
|
66
|
+
* Signal-forms field binding: current validation errors of the bound field
|
|
67
|
+
* (`[formField]` binds them automatically). Empty when unbound.
|
|
68
|
+
*/
|
|
69
|
+
errors = input([], /* @ts-ignore */
|
|
70
|
+
...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
|
|
71
|
+
/** Signal-forms field binding: whether the bound field is touched. */
|
|
72
|
+
touched = input(false, { ...(ngDevMode ? { debugName: "touched" } : /* istanbul ignore next */ {}), transform: (value) => coerceBooleanProperty(value) });
|
|
73
|
+
/** Signal-forms field binding: whether the bound field is dirty. */
|
|
74
|
+
dirty = input(false, { ...(ngDevMode ? { debugName: "dirty" } : /* istanbul ignore next */ {}), transform: (value) => coerceBooleanProperty(value) });
|
|
75
|
+
/**
|
|
76
|
+
* Effective visual state exposed through the Malva form-control connector.
|
|
77
|
+
* An explicit non-default state wins; otherwise a signal-form validation
|
|
78
|
+
* error becomes visible after the field is touched, matching the default
|
|
79
|
+
* `MlvFormField` error-display strategy.
|
|
80
|
+
*/
|
|
81
|
+
resolvedState = computed(() => {
|
|
82
|
+
const explicitState = this.state();
|
|
83
|
+
if (explicitState !== 'default')
|
|
84
|
+
return explicitState;
|
|
85
|
+
return this.errors().length > 0 && this.touched() ? 'error' : 'default';
|
|
86
|
+
}, /* @ts-ignore */
|
|
87
|
+
...(ngDevMode ? [{ debugName: "resolvedState" }] : /* istanbul ignore next */ []));
|
|
88
|
+
/**
|
|
89
|
+
* Emits when the user finishes interacting with the field (blur) — the
|
|
90
|
+
* signal-forms replacement for the CVA `onTouched` callback; `[formField]`
|
|
91
|
+
* subscribes and marks the bound field touched.
|
|
92
|
+
*/
|
|
93
|
+
touch = output();
|
|
94
|
+
/** HTML id applied to the control's focus target. */
|
|
95
|
+
id = input(mlvNextId('mlv-control'), /* @ts-ignore */
|
|
96
|
+
...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
97
|
+
/** Label text rendered above the control. */
|
|
98
|
+
label = input('', /* @ts-ignore */
|
|
99
|
+
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
100
|
+
/** Hint text rendered inside the label. */
|
|
101
|
+
hint = input('', /* @ts-ignore */
|
|
102
|
+
...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
103
|
+
/**
|
|
104
|
+
* Persistent help text rendered **below** the control, in front of the
|
|
105
|
+
* validation message. Unlike {@link hint} (a short inline aside inside the
|
|
106
|
+
* label) this is meant for sentence-length descriptions, and it stays
|
|
107
|
+
* visible while {@link message} is shown. Referenced by `aria-describedby`.
|
|
108
|
+
*/
|
|
109
|
+
description = input('', /* @ts-ignore */
|
|
110
|
+
...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
|
|
111
|
+
/** Validation/status message rendered below the control. */
|
|
112
|
+
message = input('', /* @ts-ignore */
|
|
113
|
+
...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
|
|
114
|
+
/**
|
|
115
|
+
* Accessible name applied to the control's focus target (`aria-label`).
|
|
116
|
+
* Use it when the control renders no visible `<mlv-label>`.
|
|
117
|
+
*/
|
|
118
|
+
ariaLabel = input(null, /* @ts-ignore */
|
|
119
|
+
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
120
|
+
/** @protected Id of the rendered `<mlv-description>` element. */
|
|
121
|
+
_descriptionId = computed(() => `${this.id()}-description`, /* @ts-ignore */
|
|
122
|
+
...(ngDevMode ? [{ debugName: "_descriptionId" }] : /* istanbul ignore next */ []));
|
|
123
|
+
/** @protected Id of the rendered `<mlv-message>` element. */
|
|
124
|
+
_messageId = computed(() => `${this.id()}-message`, /* @ts-ignore */
|
|
125
|
+
...(ngDevMode ? [{ debugName: "_messageId" }] : /* istanbul ignore next */ []));
|
|
126
|
+
/**
|
|
127
|
+
* @protected Space-separated `aria-describedby` value covering the rendered
|
|
128
|
+
* description and message elements — `null` when neither is rendered, so no
|
|
129
|
+
* dangling IDREF is emitted.
|
|
130
|
+
*/
|
|
131
|
+
_describedBy = computed(() => {
|
|
132
|
+
const ids = [];
|
|
133
|
+
if (this.description())
|
|
134
|
+
ids.push(this._descriptionId());
|
|
135
|
+
if (this.message())
|
|
136
|
+
ids.push(this._messageId());
|
|
137
|
+
return ids.length > 0 ? ids.join(' ') : null;
|
|
138
|
+
}, /* @ts-ignore */
|
|
139
|
+
...(ngDevMode ? [{ debugName: "_describedBy" }] : /* istanbul ignore next */ []));
|
|
140
|
+
/** Projected prefix slot. */
|
|
141
|
+
prepend = contentChild(MlvFormControlPrepend, /* @ts-ignore */
|
|
142
|
+
...(ngDevMode ? [{ debugName: "prepend" }] : /* istanbul ignore next */ []));
|
|
143
|
+
/** Projected suffix slot. */
|
|
144
|
+
append = contentChild(MlvFormControlAppend, /* @ts-ignore */
|
|
145
|
+
...(ngDevMode ? [{ debugName: "append" }] : /* istanbul ignore next */ []));
|
|
146
|
+
/** Projected full-width content rendered inside the control border. */
|
|
147
|
+
inset = contentChild(MlvFormControlInset, /* @ts-ignore */
|
|
148
|
+
...(ngDevMode ? [{ debugName: "inset" }] : /* istanbul ignore next */ []));
|
|
149
|
+
/**
|
|
150
|
+
* Effective disabled state. In the signal base there is no CVA
|
|
151
|
+
* `setDisabledState` side channel — the `disabled` input is the single
|
|
152
|
+
* source (consumer-bound or field-bound), kept as a computed so existing
|
|
153
|
+
* control templates retain one consistent disabled-state signal.
|
|
154
|
+
*/
|
|
155
|
+
computedDisabled = computed(() => this.disabled(), /* @ts-ignore */
|
|
156
|
+
...(ngDevMode ? [{ debugName: "computedDisabled" }] : /* istanbul ignore next */ []));
|
|
157
|
+
/** @protected Notifies the field that the user left the control. */
|
|
158
|
+
_markTouched() {
|
|
159
|
+
this.touch.emit();
|
|
160
|
+
}
|
|
161
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSignalFormUiControlBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
162
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.7", type: MlvSignalFormUiControlBase, isStandalone: true, inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, pill: { classPropertyName: "pill", publicName: "pill", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, dirty: { classPropertyName: "dirty", publicName: "dirty", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { touch: "touch" }, queries: [{ propertyName: "prepend", first: true, predicate: MlvFormControlPrepend, descendants: true, isSignal: true }, { propertyName: "append", first: true, predicate: MlvFormControlAppend, descendants: true, isSignal: true }, { propertyName: "inset", first: true, predicate: MlvFormControlInset, descendants: true, isSignal: true }], ngImport: i0 });
|
|
163
|
+
}
|
|
164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSignalFormUiControlBase, decorators: [{
|
|
165
|
+
type: Directive
|
|
166
|
+
}], propDecorators: { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], pill: [{ type: i0.Input, args: [{ isSignal: true, alias: "pill", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }], dirty: [{ type: i0.Input, args: [{ isSignal: true, alias: "dirty", required: false }] }], touch: [{ type: i0.Output, args: ["touch"] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], prepend: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvFormControlPrepend), { isSignal: true }] }], append: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvFormControlAppend), { isSignal: true }] }], inset: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvFormControlInset), { isSignal: true }] }] } });
|
|
167
|
+
/**
|
|
168
|
+
* Signal-forms base for **value** controls: adds the required
|
|
169
|
+
* `value: ModelSignal<T>` of the `FormValueControl` contract. Each control
|
|
170
|
+
* supplies the model itself (`readonly value = model<T>(initial)`), mirroring
|
|
171
|
+
* how `hasValue` is supplied.
|
|
172
|
+
*/
|
|
173
|
+
export class MlvSignalFormControlBase extends MlvSignalFormUiControlBase {
|
|
174
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSignalFormControlBase, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
175
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvSignalFormControlBase, isStandalone: true, usesInheritance: true, ngImport: i0 });
|
|
176
|
+
}
|
|
177
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSignalFormControlBase, decorators: [{
|
|
178
|
+
type: Directive
|
|
179
|
+
}] });
|
|
180
|
+
/**
|
|
181
|
+
* Signal-forms base for **checkbox-shaped** controls (checkbox, switch): adds
|
|
182
|
+
* the required `checked: ModelSignal<boolean>` of the `FormCheckboxControl`
|
|
183
|
+
* contract. The contract forbids a `value` member on this variant.
|
|
184
|
+
*/
|
|
185
|
+
export class MlvSignalCheckboxControlBase extends MlvSignalFormUiControlBase {
|
|
186
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSignalCheckboxControlBase, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
187
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvSignalCheckboxControlBase, isStandalone: true, usesInheritance: true, ngImport: i0 });
|
|
188
|
+
}
|
|
189
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvSignalCheckboxControlBase, decorators: [{
|
|
190
|
+
type: Directive
|
|
191
|
+
}] });
|
|
192
|
+
//# sourceMappingURL=signal-form-control-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-form-control-base.js","sourceRoot":"","sources":["../../../../../../../libs/core/form-utils/src/lib/form-control-base/signal-form-control-base.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,KAAK,EACL,MAAM,EACN,MAAM,GACP,MAAM,eAAe,CAAC;AAQvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;;AAE9D;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,OAAgB,0BAA0B;IAC9C,qDAAqD;IAClC,QAAQ,GAAG,MAAM,CAAC,KAAK;iFAAC,CAAC;IAE5C,iFAAiF;IACxE,OAAO,GAAoB,IAAI,CAAC,QAAQ,CAAC;IAElD,+EAA+E;IAC/E,UAAU,CAAC,KAAc;QACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,0DAA0D;IACjD,KAAK,GAAG,KAAK,CAAe,SAAS;8EAAC,CAAC;IAEhD;;;OAGG;IACM,QAAQ,GAAG,KAAK,CAAmB,KAAK,gFAC/C,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAqB,CAAC,GAC3E,CAAC;IAEH;;;OAGG;IACM,QAAQ,GAAG,KAAK,CAAmB,KAAK,gFAC/C,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAqB,CAAC,GAC3E,CAAC;IAEH;;;;;OAKG;IACM,QAAQ,GAAG,KAAK,CAAmB,KAAK,gFAC/C,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAqB,CAAC,GAC3E,CAAC;IAEH,wDAAwD;IAC/C,OAAO,GAAG,KAAK,CAAwB,KAAK,+EACnD,SAAS,EAAE,qBAAqB,GAChC,CAAC;IAEH,+EAA+E;IACtE,SAAS,GAAG,KAAK,CAAwB,KAAK,iFACrD,SAAS,EAAE,qBAAqB,GAChC,CAAC;IAEH;;;;OAIG;IACM,IAAI,GAAG,KAAK,CAAwB,KAAK,4EAChD,SAAS,EAAE,qBAAqB,GAChC,CAAC;IAEH;;;OAGG;IACM,MAAM,GAAG,KAAK,CAAmD,EAAE;+EAAC,CAAC;IAE9E,sEAAsE;IAC7D,OAAO,GAAG,KAAK,CAAmB,KAAK,+EAC9C,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAqB,CAAC,GAC3E,CAAC;IAEH,oEAAoE;IAC3D,KAAK,GAAG,KAAK,CAAmB,KAAK,6EAC5C,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAqB,CAAC,GAC3E,CAAC;IAEH;;;;;OAKG;IACM,aAAa,GAAG,QAAQ,CAAe,GAAG,EAAE;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,aAAa,KAAK,SAAS;YAAE,OAAO,aAAa,CAAC;QACtD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,CAAC;sFAAC,CAAC;IAEH;;;;OAIG;IACM,KAAK,GAAG,MAAM,EAAQ,CAAC;IAOhC,qDAAqD;IAC5C,EAAE,GAAG,KAAK,CAAS,SAAS,CAAC,aAAa,CAAC;2EAAC,CAAC;IACtD,6CAA6C;IACpC,KAAK,GAAG,KAAK,CAAC,EAAE;8EAAC,CAAC;IAC3B,2CAA2C;IAClC,IAAI,GAAG,KAAK,CAAC,EAAE;6EAAC,CAAC;IAC1B;;;;;OAKG;IACM,WAAW,GAAG,KAAK,CAAC,EAAE;oFAAC,CAAC;IACjC,4DAA4D;IACnD,OAAO,GAAG,KAAK,CAAC,EAAE;gFAAC,CAAC;IAE7B;;;OAGG;IACM,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC,CAAC;IAEhD,iEAAiE;IAC9C,cAAc,GAAG,QAAQ,CAC1C,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,cAAc;uFACjC,CAAC;IAEF,6DAA6D;IAC1C,UAAU,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,UAAU;mFAAC,CAAC;IAEvE;;;;OAIG;IACgB,YAAY,GAAG,QAAQ,CAAC,GAAG,EAAE;QAC9C,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;qFAAC,CAAC;IAEH,6BAA6B;IACpB,OAAO,GAAG,YAAY,CAAC,qBAAqB;gFAAC,CAAC;IACvD,6BAA6B;IACpB,MAAM,GAAG,YAAY,CAAC,oBAAoB;+EAAC,CAAC;IACrD,uEAAuE;IAC9D,KAAK,GAAG,YAAY,CAAC,mBAAmB;8EAAC,CAAC;IAEnD;;;;;OAKG;IACM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;yFAAC,CAAC;IAE5D,oEAAoE;IAC1D,YAAY;QACpB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;uGAhKmB,0BAA0B;2FAA1B,0BAA0B,ukEA+Id,qBAAqB,yFAEtB,oBAAoB,wFAErB,mBAAmB;;2FAnJ7B,0BAA0B;kBAD/C,SAAS;6lDAgJwB,qBAAqB,wFAEtB,oBAAoB,uFAErB,mBAAmB;AAgBnD;;;;;GAKG;AAEH,MAAM,OAAgB,wBACpB,SAAQ,0BAA0B;uGADd,wBAAwB;2FAAxB,wBAAwB;;2FAAxB,wBAAwB;kBAD7C,SAAS;;AASV;;;;GAIG;AAEH,MAAM,OAAgB,4BACpB,SAAQ,0BAA0B;uGADd,4BAA4B;2FAA5B,4BAA4B;;2FAA5B,4BAA4B;kBADjD,SAAS","sourcesContent":["import type { ModelSignal, Signal } from '@angular/core';\nimport {\n computed,\n contentChild,\n Directive,\n input,\n output,\n signal,\n} from '@angular/core';\nimport type {\n FormCheckboxControl,\n FormValueControl,\n ValidationError,\n} from '@angular/forms/signals';\nimport type { MlvFormState } from '../models/form-state';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { mlvNextId } from '@malva-ui/cdk/utils';\nimport type { MlvFormControl } from '../models/form-control-connector';\nimport { MlvFormControlAppend } from '../form-control-sides';\nimport { MlvFormControlInset } from '../form-control-sides';\nimport { MlvFormControlPrepend } from '../form-control-sides';\n\n/**\n * Shared, forms-transport-agnostic surface for **signal-forms** Malva controls.\n * Owns everything EXCEPT the value/checked model: the\n * Malva field surface (`state`, `label`, `hint`, `message`, `clearable`,\n * `id`, prepend/append slots), the wrapper connector contract\n * ({@link MlvFormControl}), and the signal-forms field↔control bindings —\n * `errors` / `disabled` / `readonly` / `touched` / `dirty` input signals the\n * `[formField]` directive binds automatically, plus the `touch` output the\n * control emits when the user leaves the field.\n *\n * Per the signal-forms contract a component must NOT implement both\n * `ControlValueAccessor` and `FormValueControl`; controls therefore adopt\n * either {@link MlvSignalFormControlBase} or {@link MlvSignalCheckboxControlBase}\n * atomically. Reactive (`[formControl]`)\n * and template-driven (`ngModel`) bindings keep working — Angular binds the\n * signal contract from those directives without extra compatibility code.\n */\n@Directive()\nexport abstract class MlvSignalFormUiControlBase implements MlvFormControl {\n /** @protected Backing signal for {@link focused}. */\n protected readonly _focused = signal(false);\n\n /** Whether the control currently has focus (drives the wrapper's focus ring). */\n readonly focused: Signal<boolean> = this._focused;\n\n /** Sets the control's focus state (wired to the focus target's focus/blur). */\n setFocused(value: boolean): void {\n this._focused.set(value);\n }\n\n /** Explicit consumer-authored visual validation state. */\n readonly state = input<MlvFormState>('default');\n\n /**\n * Whether the control is read-only. Also a signal-forms field binding: when\n * bound via `[formField]`, a `readonly` schema rule drives this input.\n */\n readonly readonly = input<boolean, unknown>(false, {\n transform: (value: unknown) => coerceBooleanProperty(value as BooleanInput),\n });\n\n /**\n * Whether the control is disabled. Also a signal-forms field binding: when\n * bound via `[formField]`, the field's disabled state drives this input.\n */\n readonly disabled = input<boolean, unknown>(false, {\n transform: (value: unknown) => coerceBooleanProperty(value as BooleanInput),\n });\n\n /**\n * Whether the control must be filled in. Renders the required marker in\n * `mlv-label` and sets `aria-required` on the control's focus target. Also a\n * signal-forms field binding: when bound via `[formField]`, a `required()`\n * schema rule drives this input.\n */\n readonly required = input<boolean, unknown>(false, {\n transform: (value: unknown) => coerceBooleanProperty(value as BooleanInput),\n });\n\n /** Whether the control shows its loading affordance. */\n readonly loading = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /** Whether the control renders a clear (X) affordance while it has a value. */\n readonly clearable = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Fully rounded (stadium) control container. Shared by every control that\n * renders through `mlv-form-control-wrapper`, mirroring `shape=\"pill\"` on\n * buttons and the pill action bar.\n */\n readonly pill = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Signal-forms field binding: current validation errors of the bound field\n * (`[formField]` binds them automatically). Empty when unbound.\n */\n readonly errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n\n /** Signal-forms field binding: whether the bound field is touched. */\n readonly touched = input<boolean, unknown>(false, {\n transform: (value: unknown) => coerceBooleanProperty(value as BooleanInput),\n });\n\n /** Signal-forms field binding: whether the bound field is dirty. */\n readonly dirty = input<boolean, unknown>(false, {\n transform: (value: unknown) => coerceBooleanProperty(value as BooleanInput),\n });\n\n /**\n * Effective visual state exposed through the Malva form-control connector.\n * An explicit non-default state wins; otherwise a signal-form validation\n * error becomes visible after the field is touched, matching the default\n * `MlvFormField` error-display strategy.\n */\n readonly resolvedState = computed<MlvFormState>(() => {\n const explicitState = this.state();\n if (explicitState !== 'default') return explicitState;\n return this.errors().length > 0 && this.touched() ? 'error' : 'default';\n });\n\n /**\n * Emits when the user finishes interacting with the field (blur) — the\n * signal-forms replacement for the CVA `onTouched` callback; `[formField]`\n * subscribes and marks the bound field touched.\n */\n readonly touch = output<void>();\n\n /**\n * Whether the control currently holds a clearable (non-empty) value.\n */\n abstract readonly hasValue: Signal<boolean>;\n\n /** HTML id applied to the control's focus target. */\n readonly id = input<string>(mlvNextId('mlv-control'));\n /** Label text rendered above the control. */\n readonly label = input('');\n /** Hint text rendered inside the label. */\n readonly hint = input('');\n /**\n * Persistent help text rendered **below** the control, in front of the\n * validation message. Unlike {@link hint} (a short inline aside inside the\n * label) this is meant for sentence-length descriptions, and it stays\n * visible while {@link message} is shown. Referenced by `aria-describedby`.\n */\n readonly description = input('');\n /** Validation/status message rendered below the control. */\n readonly message = input('');\n\n /**\n * Accessible name applied to the control's focus target (`aria-label`).\n * Use it when the control renders no visible `<mlv-label>`.\n */\n readonly ariaLabel = input<string | null>(null);\n\n /** @protected Id of the rendered `<mlv-description>` element. */\n protected readonly _descriptionId = computed(\n () => `${this.id()}-description`,\n );\n\n /** @protected Id of the rendered `<mlv-message>` element. */\n protected readonly _messageId = computed(() => `${this.id()}-message`);\n\n /**\n * @protected Space-separated `aria-describedby` value covering the rendered\n * description and message elements — `null` when neither is rendered, so no\n * dangling IDREF is emitted.\n */\n protected readonly _describedBy = computed(() => {\n const ids: string[] = [];\n if (this.description()) ids.push(this._descriptionId());\n if (this.message()) ids.push(this._messageId());\n return ids.length > 0 ? ids.join(' ') : null;\n });\n\n /** Projected prefix slot. */\n readonly prepend = contentChild(MlvFormControlPrepend);\n /** Projected suffix slot. */\n readonly append = contentChild(MlvFormControlAppend);\n /** Projected full-width content rendered inside the control border. */\n readonly inset = contentChild(MlvFormControlInset);\n\n /**\n * Effective disabled state. In the signal base there is no CVA\n * `setDisabledState` side channel — the `disabled` input is the single\n * source (consumer-bound or field-bound), kept as a computed so existing\n * control templates retain one consistent disabled-state signal.\n */\n readonly computedDisabled = computed(() => this.disabled());\n\n /** @protected Notifies the field that the user left the control. */\n protected _markTouched(): void {\n this.touch.emit();\n }\n}\n\n/**\n * Signal-forms base for **value** controls: adds the required\n * `value: ModelSignal<T>` of the `FormValueControl` contract. Each control\n * supplies the model itself (`readonly value = model<T>(initial)`), mirroring\n * how `hasValue` is supplied.\n */\n@Directive()\nexport abstract class MlvSignalFormControlBase<T>\n extends MlvSignalFormUiControlBase\n implements FormValueControl<T>\n{\n /** The control's value — kept in sync with the bound field by `[formField]`. */\n abstract readonly value: ModelSignal<T>;\n}\n\n/**\n * Signal-forms base for **checkbox-shaped** controls (checkbox, switch): adds\n * the required `checked: ModelSignal<boolean>` of the `FormCheckboxControl`\n * contract. The contract forbids a `value` member on this variant.\n */\n@Directive()\nexport abstract class MlvSignalCheckboxControlBase\n extends MlvSignalFormUiControlBase\n implements FormCheckboxControl\n{\n /** The control's checked state — kept in sync with the bound field by `[formField]`. */\n abstract readonly checked: ModelSignal<boolean>;\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import { MlvStructural } from '@malva-ui/cdk/utils';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class MlvFormControlPrepend extends MlvStructural {
|
|
5
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFormControlPrepend, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
6
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvFormControlPrepend, isStandalone: true, selector: "[mlvFormControlPrepend]", usesInheritance: true, ngImport: i0 });
|
|
7
|
+
}
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFormControlPrepend, decorators: [{
|
|
9
|
+
type: Directive,
|
|
10
|
+
args: [{ selector: '[mlvFormControlPrepend]' }]
|
|
11
|
+
}] });
|
|
12
|
+
export class MlvFormControlAppend extends MlvStructural {
|
|
13
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFormControlAppend, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
14
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvFormControlAppend, isStandalone: true, selector: "[mlvFormControlAppend]", usesInheritance: true, ngImport: i0 });
|
|
15
|
+
}
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFormControlAppend, decorators: [{
|
|
17
|
+
type: Directive,
|
|
18
|
+
args: [{ selector: '[mlvFormControlAppend]' }]
|
|
19
|
+
}] });
|
|
20
|
+
/**
|
|
21
|
+
* Full-width content rendered inside the bordered control, after its main row.
|
|
22
|
+
*
|
|
23
|
+
* Use for secondary, non-interactive control presentation such as strength
|
|
24
|
+
* meters. Prefix and suffix actions remain in their dedicated slots.
|
|
25
|
+
*/
|
|
26
|
+
export class MlvFormControlInset extends MlvStructural {
|
|
27
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFormControlInset, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
28
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvFormControlInset, isStandalone: true, selector: "[mlvFormControlInset]", usesInheritance: true, ngImport: i0 });
|
|
29
|
+
}
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFormControlInset, decorators: [{
|
|
31
|
+
type: Directive,
|
|
32
|
+
args: [{ selector: '[mlvFormControlInset]' }]
|
|
33
|
+
}] });
|
|
34
|
+
//# sourceMappingURL=form-control-sides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-control-sides.js","sourceRoot":"","sources":["../../../../../../libs/core/form-utils/src/lib/form-control-sides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;;AAGpD,MAAM,OAAO,qBAAsB,SAAQ,aAAa;uGAA3C,qBAAqB;2FAArB,qBAAqB;;2FAArB,qBAAqB;kBADjC,SAAS;mBAAC,EAAE,QAAQ,EAAE,yBAAyB,EAAE;;AAIlD,MAAM,OAAO,oBAAqB,SAAQ,aAAa;uGAA1C,oBAAoB;2FAApB,oBAAoB;;2FAApB,oBAAoB;kBADhC,SAAS;mBAAC,EAAE,QAAQ,EAAE,wBAAwB,EAAE;;AAGjD;;;;;GAKG;AAEH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;uGAAzC,mBAAmB;2FAAnB,mBAAmB;;2FAAnB,mBAAmB;kBAD/B,SAAS;mBAAC,EAAE,QAAQ,EAAE,uBAAuB,EAAE","sourcesContent":["import { Directive } from '@angular/core';\nimport { MlvStructural } from '@malva-ui/cdk/utils';\n\n@Directive({ selector: '[mlvFormControlPrepend]' })\nexport class MlvFormControlPrepend extends MlvStructural {}\n\n@Directive({ selector: '[mlvFormControlAppend]' })\nexport class MlvFormControlAppend extends MlvStructural {}\n\n/**\n * Full-width content rendered inside the bordered control, after its main row.\n *\n * Use for secondary, non-interactive control presentation such as strength\n * meters. Prefix and suffix actions remain in their dedicated slots.\n */\n@Directive({ selector: '[mlvFormControlInset]' })\nexport class MlvFormControlInset extends MlvStructural {}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import { MlvStructural } from '@malva-ui/cdk/utils';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class MlvFormControlWrapperControl extends MlvStructural {
|
|
5
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFormControlWrapperControl, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
6
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvFormControlWrapperControl, isStandalone: true, selector: "[mlvFormControlWrapperControl]", usesInheritance: true, ngImport: i0 });
|
|
7
|
+
}
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFormControlWrapperControl, decorators: [{
|
|
9
|
+
type: Directive,
|
|
10
|
+
args: [{
|
|
11
|
+
selector: '[mlvFormControlWrapperControl]',
|
|
12
|
+
}]
|
|
13
|
+
}] });
|
|
14
|
+
//# sourceMappingURL=form-control-wrapper-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-control-wrapper-control.js","sourceRoot":"","sources":["../../../../../../../libs/core/form-utils/src/lib/form-control-wrapper/form-control-wrapper-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;;AAKpD,MAAM,OAAO,4BAA6B,SAAQ,aAAa;uGAAlD,4BAA4B;2FAA5B,4BAA4B;;2FAA5B,4BAA4B;kBAHxC,SAAS;mBAAC;oBACT,QAAQ,EAAE,gCAAgC;iBAC3C","sourcesContent":["import { Directive } from '@angular/core';\nimport { MlvStructural } from '@malva-ui/cdk/utils';\n\n@Directive({\n selector: '[mlvFormControlWrapperControl]',\n})\nexport class MlvFormControlWrapperControl extends MlvStructural {}\n"]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, contentChild, inject, output, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { MlvClick } from '@malva-ui/cdk/accessibility';
|
|
3
|
+
import { MlvFormControlWrapperControl } from './form-control-wrapper-control';
|
|
4
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
5
|
+
import { MLV_FORM_CONTROL } from '../models/form-control-connector';
|
|
6
|
+
import { MlvButtonClose } from '@malva-ui/core/button';
|
|
7
|
+
import { MLV_FORM_UTILS_I18N } from '@malva-ui/i18n';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class MlvFormControlWrapper {
|
|
10
|
+
/** @protected Optional injected form control connector for state/focus/disabled bindings. */
|
|
11
|
+
formControl = inject(MLV_FORM_CONTROL, {
|
|
12
|
+
optional: true,
|
|
13
|
+
});
|
|
14
|
+
/** @protected Computed BEM state modifier class derived from the control's validation state. */
|
|
15
|
+
_stateClass = computed(() => `mlv-form-control-wrapper--state-${this.formControl?.resolvedState?.() ??
|
|
16
|
+
this.formControl?.state() ??
|
|
17
|
+
'default'}`, /* @ts-ignore */
|
|
18
|
+
...(ngDevMode ? [{ debugName: "_stateClass" }] : /* istanbul ignore next */ []));
|
|
19
|
+
/** @protected Required projected control-slot directive rendered inside the wrapper. */
|
|
20
|
+
renderer = contentChild.required(MlvFormControlWrapperControl, /* @ts-ignore */
|
|
21
|
+
...(ngDevMode ? [{ debugName: "renderer" }] : /* istanbul ignore next */ []));
|
|
22
|
+
/** @protected The component's i18n strings signal. */
|
|
23
|
+
_i18n = inject(MLV_FORM_UTILS_I18N);
|
|
24
|
+
/**
|
|
25
|
+
* Clear event emitter. Emits when user clicks on clear button
|
|
26
|
+
*/
|
|
27
|
+
clear = output();
|
|
28
|
+
/** @protected Handles the clear-button click by emitting the `clear` output. */
|
|
29
|
+
_onClearClick() {
|
|
30
|
+
this.clear.emit();
|
|
31
|
+
}
|
|
32
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFormControlWrapper, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvFormControlWrapper, isStandalone: true, selector: "mlv-form-control-wrapper", outputs: { clear: "clear" }, host: { properties: { "class": "_stateClass()", "class.mlv-form-control-wrapper--focused": "formControl?.focused()", "class.mlv-form-control-wrapper--disabled": "formControl?.disabled()", "class.mlv-form-control-wrapper--readonly": "formControl?.readonly()", "class.mlv-form-control-wrapper--loading": "formControl?.loading()", "class.mlv-form-control-wrapper--pill": "formControl?.pill?.() ?? false" }, classAttribute: "mlv-form-control-wrapper" }, queries: [{ propertyName: "renderer", first: true, predicate: MlvFormControlWrapperControl, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"mlv-form-control-wrapper__label-container\">\n <ng-content select=\"mlv-label\"></ng-content>\n</div>\n<div\n class=\"mlv-form-control-wrapper__control-container\"\n [class.mlv-form-control-wrapper__control-container--with-inset]=\"\n formControl?.inset()\n \"\n>\n <div class=\"mlv-form-control-wrapper__control-row\">\n @if (formControl?.prepend(); as prependTpl) {\n <div class=\"mlv-form-control-wrapper__side-content\">\n <ng-template [ngTemplateOutlet]=\"prependTpl.templateRef\"></ng-template>\n </div>\n }\n\n <ng-template [ngTemplateOutlet]=\"renderer().templateRef\"></ng-template>\n\n @if ( formControl?.clearable() && formControl?.hasValue() &&\n !formControl?.ownsClearButton?.() ) {\n <div class=\"mlv-form-control-wrapper__clear\">\n <mlv-button-close\n (mlvClick)=\"_onClearClick()\"\n mlvDensity=\"tight\"\n [ariaLabel]=\"_i18n().clear\"\n />\n </div>\n } @if (formControl?.append(); as appendTpl) {\n <div class=\"mlv-form-control-wrapper__side-content\">\n <ng-template [ngTemplateOutlet]=\"appendTpl.templateRef\"></ng-template>\n </div>\n }\n </div>\n\n @if (formControl?.inset(); as insetTpl) {\n <div class=\"mlv-form-control-wrapper__inset\">\n <ng-template [ngTemplateOutlet]=\"insetTpl.templateRef\"></ng-template>\n </div>\n }\n</div>\n\n<!-- Below-control slots. `mlv-description` is persistent help text, `mlv-message`\n the stateful validation line, and `[mlvFormControlWrapperAside]` any\n control-owned auxiliary readout (e.g. the textarea character counter). -->\n<div class=\"mlv-form-control-wrapper__message-container\">\n <ng-content select=\"mlv-description\"></ng-content>\n <ng-content select=\"mlv-message\"></ng-content>\n <ng-content select=\"[mlvFormControlWrapperAside]\"></ng-content>\n</div>\n", styles: [".mlv-form-control-wrapper{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-form-control-wrapper *{box-sizing:border-box}.mlv-form-control-wrapper{display:flex;flex-direction:column;gap:.25rem;--form-ctrl-height: var(--mlv-height-m);--form-ctrl-h-padding: var(--mlv-spacing-3);--form-ctrl-font-size: var(--mlv-font-size-m);--form-ctrl-radius: var(--mlv-radius-m);--container-border-color: var(--mlv-border-normal);--container-background-color: var(--mlv-elevation-bg-3);--container-side-content-color: var(--mlv-text-primary);--container-shadow: none;--container-action-color: var(--mlv-text-secondary)}[class*=--tight] .mlv-form-control-wrapper:not([class*=--compact],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-form-control-wrapper[class*=--tight]{--form-ctrl-height: var(--mlv-height-xs);--form-ctrl-h-padding: var(--mlv-spacing-2);--form-ctrl-font-size: var(--mlv-font-size-s);--form-ctrl-radius: var(--mlv-radius-s)}[class*=--compact] .mlv-form-control-wrapper:not([class*=--tight],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-form-control-wrapper[class*=--compact]{--form-ctrl-height: var(--mlv-height-s);--form-ctrl-h-padding: var(--mlv-spacing-2-5);--form-ctrl-font-size: var(--mlv-font-size-m);--form-ctrl-radius: var(--mlv-radius-m)}[class*=--spacious] .mlv-form-control-wrapper:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--airy]),.mlv-form-control-wrapper[class*=--spacious]{--form-ctrl-height: var(--mlv-height-l);--form-ctrl-h-padding: var(--mlv-spacing-4);--form-ctrl-font-size: var(--mlv-font-size-l);--form-ctrl-radius: var(--mlv-radius-l)}[class*=--airy] .mlv-form-control-wrapper:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--spacious]),.mlv-form-control-wrapper[class*=--airy]{--form-ctrl-height: var(--mlv-height-xl);--form-ctrl-h-padding: var(--mlv-spacing-5);--form-ctrl-font-size: var(--mlv-font-size-xl);--form-ctrl-radius: var(--mlv-radius-xl)}.mlv-form-control-wrapper--pill .mlv-form-control-wrapper__control-container{border-radius:var(--mlv-radius-full);padding-inline:calc(var(--form-ctrl-h-padding) * 1.35)}.mlv-form-control-wrapper__control-container{display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;width:100%;border-radius:var(--form-ctrl-radius);background-color:var(--container-background-color);border:.0625rem solid var(--container-border-color);--mlv-control-padding: var(--mlv-spacing-1) var(--form-ctrl-h-padding);padding:var(--mlv-control-padding);color:var(--container-border-color);box-shadow:var(--container-shadow);transition:all var(--mlv-duration-normal) var(--mlv-ease-default);transition-property:background-color,border-color,box-shadow;height:var(--form-ctrl-height);font-size:var(--form-ctrl-font-size)}.mlv-form-control-wrapper__control-container--with-inset{position:relative}.mlv-form-control-wrapper__control-container:hover{--container-action-color: var(--mlv-text-primary)}.mlv-form-control-wrapper__control-row{display:flex;align-items:center;justify-content:space-between;gap:.25rem;width:100%;min-height:0;flex:1}.mlv-form-control-wrapper__inset{position:absolute;bottom:0;left:0;right:0;padding:var(--mlv-control-padding)}.mlv-form-control-wrapper__message-container{display:flex;flex-direction:column;gap:.125rem;min-width:0}.mlv-form-control-wrapper__message-container:empty{display:none}.mlv-form-control-wrapper__side-content{color:var(--container-side-content-color);line-height:1}.mlv-form-control-wrapper--state-success{--container-border-color: var(--mlv-border-success)}.mlv-form-control-wrapper--state-info{--container-border-color: var(--mlv-border-info)}.mlv-form-control-wrapper--state-warning{--container-border-color: var(--mlv-border-warning)}.mlv-form-control-wrapper--state-error{--container-border-color: var(--mlv-border-error)}.mlv-form-control-wrapper--state-default:hover{--container-border-color: var(--mlv-palette-neutral-300)}.mlv-form-control-wrapper--focused{--container-shadow: 0 0 0 1px currentColor;--container-action-color: var(--mlv-text-primary)}.mlv-form-control-wrapper--focused.mlv-form-control-wrapper--state-default{--container-border-color: var(--mlv-border-focus)}.mlv-form-control-wrapper--disabled{--container-background-color: var(--mlv-background-sunken);cursor:not-allowed;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MlvButtonClose, selector: "mlv-button-close", inputs: ["variant", "shape", "ariaLabel"] }, { kind: "directive", type: MlvClick, selector: "[mlvClick]", inputs: ["disabled", "hostRole"], outputs: ["mlvClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
34
|
+
}
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvFormControlWrapper, decorators: [{
|
|
36
|
+
type: Component,
|
|
37
|
+
args: [{ selector: 'mlv-form-control-wrapper', imports: [NgTemplateOutlet, MlvButtonClose, MlvClick], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
38
|
+
class: 'mlv-form-control-wrapper',
|
|
39
|
+
'[class]': '_stateClass()',
|
|
40
|
+
'[class.mlv-form-control-wrapper--focused]': 'formControl?.focused()',
|
|
41
|
+
'[class.mlv-form-control-wrapper--disabled]': 'formControl?.disabled()',
|
|
42
|
+
'[class.mlv-form-control-wrapper--readonly]': 'formControl?.readonly()',
|
|
43
|
+
'[class.mlv-form-control-wrapper--loading]': 'formControl?.loading()',
|
|
44
|
+
'[class.mlv-form-control-wrapper--pill]': 'formControl?.pill?.() ?? false',
|
|
45
|
+
}, template: "<div class=\"mlv-form-control-wrapper__label-container\">\n <ng-content select=\"mlv-label\"></ng-content>\n</div>\n<div\n class=\"mlv-form-control-wrapper__control-container\"\n [class.mlv-form-control-wrapper__control-container--with-inset]=\"\n formControl?.inset()\n \"\n>\n <div class=\"mlv-form-control-wrapper__control-row\">\n @if (formControl?.prepend(); as prependTpl) {\n <div class=\"mlv-form-control-wrapper__side-content\">\n <ng-template [ngTemplateOutlet]=\"prependTpl.templateRef\"></ng-template>\n </div>\n }\n\n <ng-template [ngTemplateOutlet]=\"renderer().templateRef\"></ng-template>\n\n @if ( formControl?.clearable() && formControl?.hasValue() &&\n !formControl?.ownsClearButton?.() ) {\n <div class=\"mlv-form-control-wrapper__clear\">\n <mlv-button-close\n (mlvClick)=\"_onClearClick()\"\n mlvDensity=\"tight\"\n [ariaLabel]=\"_i18n().clear\"\n />\n </div>\n } @if (formControl?.append(); as appendTpl) {\n <div class=\"mlv-form-control-wrapper__side-content\">\n <ng-template [ngTemplateOutlet]=\"appendTpl.templateRef\"></ng-template>\n </div>\n }\n </div>\n\n @if (formControl?.inset(); as insetTpl) {\n <div class=\"mlv-form-control-wrapper__inset\">\n <ng-template [ngTemplateOutlet]=\"insetTpl.templateRef\"></ng-template>\n </div>\n }\n</div>\n\n<!-- Below-control slots. `mlv-description` is persistent help text, `mlv-message`\n the stateful validation line, and `[mlvFormControlWrapperAside]` any\n control-owned auxiliary readout (e.g. the textarea character counter). -->\n<div class=\"mlv-form-control-wrapper__message-container\">\n <ng-content select=\"mlv-description\"></ng-content>\n <ng-content select=\"mlv-message\"></ng-content>\n <ng-content select=\"[mlvFormControlWrapperAside]\"></ng-content>\n</div>\n", styles: [".mlv-form-control-wrapper{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-form-control-wrapper *{box-sizing:border-box}.mlv-form-control-wrapper{display:flex;flex-direction:column;gap:.25rem;--form-ctrl-height: var(--mlv-height-m);--form-ctrl-h-padding: var(--mlv-spacing-3);--form-ctrl-font-size: var(--mlv-font-size-m);--form-ctrl-radius: var(--mlv-radius-m);--container-border-color: var(--mlv-border-normal);--container-background-color: var(--mlv-elevation-bg-3);--container-side-content-color: var(--mlv-text-primary);--container-shadow: none;--container-action-color: var(--mlv-text-secondary)}[class*=--tight] .mlv-form-control-wrapper:not([class*=--compact],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-form-control-wrapper[class*=--tight]{--form-ctrl-height: var(--mlv-height-xs);--form-ctrl-h-padding: var(--mlv-spacing-2);--form-ctrl-font-size: var(--mlv-font-size-s);--form-ctrl-radius: var(--mlv-radius-s)}[class*=--compact] .mlv-form-control-wrapper:not([class*=--tight],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-form-control-wrapper[class*=--compact]{--form-ctrl-height: var(--mlv-height-s);--form-ctrl-h-padding: var(--mlv-spacing-2-5);--form-ctrl-font-size: var(--mlv-font-size-m);--form-ctrl-radius: var(--mlv-radius-m)}[class*=--spacious] .mlv-form-control-wrapper:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--airy]),.mlv-form-control-wrapper[class*=--spacious]{--form-ctrl-height: var(--mlv-height-l);--form-ctrl-h-padding: var(--mlv-spacing-4);--form-ctrl-font-size: var(--mlv-font-size-l);--form-ctrl-radius: var(--mlv-radius-l)}[class*=--airy] .mlv-form-control-wrapper:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--spacious]),.mlv-form-control-wrapper[class*=--airy]{--form-ctrl-height: var(--mlv-height-xl);--form-ctrl-h-padding: var(--mlv-spacing-5);--form-ctrl-font-size: var(--mlv-font-size-xl);--form-ctrl-radius: var(--mlv-radius-xl)}.mlv-form-control-wrapper--pill .mlv-form-control-wrapper__control-container{border-radius:var(--mlv-radius-full);padding-inline:calc(var(--form-ctrl-h-padding) * 1.35)}.mlv-form-control-wrapper__control-container{display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;width:100%;border-radius:var(--form-ctrl-radius);background-color:var(--container-background-color);border:.0625rem solid var(--container-border-color);--mlv-control-padding: var(--mlv-spacing-1) var(--form-ctrl-h-padding);padding:var(--mlv-control-padding);color:var(--container-border-color);box-shadow:var(--container-shadow);transition:all var(--mlv-duration-normal) var(--mlv-ease-default);transition-property:background-color,border-color,box-shadow;height:var(--form-ctrl-height);font-size:var(--form-ctrl-font-size)}.mlv-form-control-wrapper__control-container--with-inset{position:relative}.mlv-form-control-wrapper__control-container:hover{--container-action-color: var(--mlv-text-primary)}.mlv-form-control-wrapper__control-row{display:flex;align-items:center;justify-content:space-between;gap:.25rem;width:100%;min-height:0;flex:1}.mlv-form-control-wrapper__inset{position:absolute;bottom:0;left:0;right:0;padding:var(--mlv-control-padding)}.mlv-form-control-wrapper__message-container{display:flex;flex-direction:column;gap:.125rem;min-width:0}.mlv-form-control-wrapper__message-container:empty{display:none}.mlv-form-control-wrapper__side-content{color:var(--container-side-content-color);line-height:1}.mlv-form-control-wrapper--state-success{--container-border-color: var(--mlv-border-success)}.mlv-form-control-wrapper--state-info{--container-border-color: var(--mlv-border-info)}.mlv-form-control-wrapper--state-warning{--container-border-color: var(--mlv-border-warning)}.mlv-form-control-wrapper--state-error{--container-border-color: var(--mlv-border-error)}.mlv-form-control-wrapper--state-default:hover{--container-border-color: var(--mlv-palette-neutral-300)}.mlv-form-control-wrapper--focused{--container-shadow: 0 0 0 1px currentColor;--container-action-color: var(--mlv-text-primary)}.mlv-form-control-wrapper--focused.mlv-form-control-wrapper--state-default{--container-border-color: var(--mlv-border-focus)}.mlv-form-control-wrapper--disabled{--container-background-color: var(--mlv-background-sunken);cursor:not-allowed;pointer-events:none}\n"] }]
|
|
46
|
+
}], propDecorators: { renderer: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvFormControlWrapperControl), { isSignal: true }] }], clear: [{ type: i0.Output, args: ["clear"] }] } });
|
|
47
|
+
//# sourceMappingURL=form-control-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-control-wrapper.js","sourceRoot":"","sources":["../../../../../../../libs/core/form-utils/src/lib/form-control-wrapper/form-control-wrapper.ts","../../../../../../../libs/core/form-utils/src/lib/form-control-wrapper/form-control-wrapper.html"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,MAAM,EACN,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;;AAmBrD,MAAM,OAAO,qBAAqB;IAChC,6FAA6F;IAC1E,WAAW,GAAG,MAAM,CAAC,gBAAgB,EAAE;QACxD,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,gGAAgG;IAC7E,WAAW,GAAG,QAAQ,CACvC,GAAG,EAAE,CACH,mCACE,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE;QACnC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE;QACzB,SACF,EAAE;oFACL,CAAC;IAEF,wFAAwF;IACrE,QAAQ,GAAG,YAAY,CAAC,QAAQ,CACjD,4BAA4B;iFAC7B,CAAC;IAEF,sDAAsD;IACnC,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAEvD;;OAEG;IACM,KAAK,GAAG,MAAM,EAAQ,CAAC;IAEhC,gFAAgF;IACtE,aAAa;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;uGAhCU,qBAAqB;2FAArB,qBAAqB,ylBAkB9B,4BAA4B,gECnDhC,s0DAiDA,q3ID/BY,gBAAgB,oJAAE,cAAc,wGAAE,QAAQ;;2FAezC,qBAAqB;kBAjBjC,SAAS;+BACE,0BAA0B,WAC3B,CAAC,gBAAgB,EAAE,cAAc,EAAE,QAAQ,CAAC,iBACtC,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,QAGzC;wBACJ,KAAK,EAAE,0BAA0B;wBACjC,SAAS,EAAE,eAAe;wBAC1B,2CAA2C,EAAE,wBAAwB;wBACrE,4CAA4C,EAAE,yBAAyB;wBACvE,4CAA4C,EAAE,yBAAyB;wBACvE,2CAA2C,EAAE,wBAAwB;wBACrE,wCAAwC,EAAE,gCAAgC;qBAC3E;6FAoBC,4BAA4B","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n inject,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MlvClick } from '@malva-ui/cdk/accessibility';\nimport { MlvFormControlWrapperControl } from './form-control-wrapper-control';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MLV_FORM_CONTROL } from '../models/form-control-connector';\nimport { MlvButtonClose } from '@malva-ui/core/button';\nimport { MLV_FORM_UTILS_I18N } from '@malva-ui/i18n';\n\n@Component({\n selector: 'mlv-form-control-wrapper',\n imports: [NgTemplateOutlet, MlvButtonClose, MlvClick],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './form-control-wrapper.html',\n styleUrl: './form-control-wrapper.scss',\n host: {\n class: 'mlv-form-control-wrapper',\n '[class]': '_stateClass()',\n '[class.mlv-form-control-wrapper--focused]': 'formControl?.focused()',\n '[class.mlv-form-control-wrapper--disabled]': 'formControl?.disabled()',\n '[class.mlv-form-control-wrapper--readonly]': 'formControl?.readonly()',\n '[class.mlv-form-control-wrapper--loading]': 'formControl?.loading()',\n '[class.mlv-form-control-wrapper--pill]': 'formControl?.pill?.() ?? false',\n },\n})\nexport class MlvFormControlWrapper {\n /** @protected Optional injected form control connector for state/focus/disabled bindings. */\n protected readonly formControl = inject(MLV_FORM_CONTROL, {\n optional: true,\n });\n\n /** @protected Computed BEM state modifier class derived from the control's validation state. */\n protected readonly _stateClass = computed(\n () =>\n `mlv-form-control-wrapper--state-${\n this.formControl?.resolvedState?.() ??\n this.formControl?.state() ??\n 'default'\n }`,\n );\n\n /** @protected Required projected control-slot directive rendered inside the wrapper. */\n protected readonly renderer = contentChild.required(\n MlvFormControlWrapperControl,\n );\n\n /** @protected The component's i18n strings signal. */\n protected readonly _i18n = inject(MLV_FORM_UTILS_I18N);\n\n /**\n * Clear event emitter. Emits when user clicks on clear button\n */\n readonly clear = output<void>();\n\n /** @protected Handles the clear-button click by emitting the `clear` output. */\n protected _onClearClick(): void {\n this.clear.emit();\n }\n}\n","<div class=\"mlv-form-control-wrapper__label-container\">\n <ng-content select=\"mlv-label\"></ng-content>\n</div>\n<div\n class=\"mlv-form-control-wrapper__control-container\"\n [class.mlv-form-control-wrapper__control-container--with-inset]=\"\n formControl?.inset()\n \"\n>\n <div class=\"mlv-form-control-wrapper__control-row\">\n @if (formControl?.prepend(); as prependTpl) {\n <div class=\"mlv-form-control-wrapper__side-content\">\n <ng-template [ngTemplateOutlet]=\"prependTpl.templateRef\"></ng-template>\n </div>\n }\n\n <ng-template [ngTemplateOutlet]=\"renderer().templateRef\"></ng-template>\n\n @if ( formControl?.clearable() && formControl?.hasValue() &&\n !formControl?.ownsClearButton?.() ) {\n <div class=\"mlv-form-control-wrapper__clear\">\n <mlv-button-close\n (mlvClick)=\"_onClearClick()\"\n mlvDensity=\"tight\"\n [ariaLabel]=\"_i18n().clear\"\n />\n </div>\n } @if (formControl?.append(); as appendTpl) {\n <div class=\"mlv-form-control-wrapper__side-content\">\n <ng-template [ngTemplateOutlet]=\"appendTpl.templateRef\"></ng-template>\n </div>\n }\n </div>\n\n @if (formControl?.inset(); as insetTpl) {\n <div class=\"mlv-form-control-wrapper__inset\">\n <ng-template [ngTemplateOutlet]=\"insetTpl.templateRef\"></ng-template>\n </div>\n }\n</div>\n\n<!-- Below-control slots. `mlv-description` is persistent help text, `mlv-message`\n the stateful validation line, and `[mlvFormControlWrapperAside]` any\n control-owned auxiliary readout (e.g. the textarea character counter). -->\n<div class=\"mlv-form-control-wrapper__message-container\">\n <ng-content select=\"mlv-description\"></ng-content>\n <ng-content select=\"mlv-message\"></ng-content>\n <ng-content select=\"[mlvFormControlWrapperAside]\"></ng-content>\n</div>\n"]}
|