@malva-ui/core 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +92 -0
- package/README.md +61 -0
- package/accordion/index.d.ts +3 -0
- package/accordion/lib/accordion/accordion.d.ts +47 -0
- package/accordion/lib/accordion-item/accordion-header.d.ts +22 -0
- package/accordion/lib/accordion-item/accordion-item.d.ts +49 -0
- package/accordion/malva-ui-core-accordion.d.ts +5 -0
- package/action-bar/index.d.ts +4 -0
- package/action-bar/lib/action-bar/action-bar.d.ts +59 -0
- package/action-bar/lib/action-bar/components/action-bar-actions.d.ts +9 -0
- package/action-bar/lib/action-bar/components/action-bar-logo.d.ts +5 -0
- package/action-bar/lib/action-bar/components/action-bar-spacer.d.ts +5 -0
- package/action-bar/malva-ui-core-action-bar.d.ts +5 -0
- package/alert/index.d.ts +2 -0
- package/alert/lib/alert/alert.d.ts +84 -0
- package/alert/lib/alert/alert.directives.d.ts +44 -0
- package/alert/malva-ui-core-alert.d.ts +5 -0
- package/autocomplete/index.d.ts +1 -0
- package/autocomplete/lib/autocomplete/autocomplete.d.ts +296 -0
- package/autocomplete/malva-ui-core-autocomplete.d.ts +5 -0
- package/avatar/index.d.ts +2 -0
- package/avatar/lib/avatar/avatar.d.ts +125 -0
- package/avatar/lib/color-from-text.pipe.d.ts +21 -0
- package/avatar/malva-ui-core-avatar.d.ts +5 -0
- package/avatar-group/index.d.ts +1 -0
- package/avatar-group/lib/avatar-group/avatar-group.d.ts +115 -0
- package/avatar-group/malva-ui-core-avatar-group.d.ts +5 -0
- package/badge/index.d.ts +2 -0
- package/badge/lib/badge/badge.d.ts +59 -0
- package/badge/lib/badge-icon.d.ts +35 -0
- package/badge/malva-ui-core-badge.d.ts +5 -0
- package/bottom-nav/index.d.ts +1 -0
- package/bottom-nav/lib/bottom-nav/bottom-nav.d.ts +99 -0
- package/bottom-nav/malva-ui-core-bottom-nav.d.ts +5 -0
- package/breadcrumb/index.d.ts +5 -0
- package/breadcrumb/lib/breadcrumb/breadcrumb-item-host.d.ts +32 -0
- package/breadcrumb/lib/breadcrumb/breadcrumb-item.d.ts +41 -0
- package/breadcrumb/lib/breadcrumb/breadcrumb-separator.d.ts +31 -0
- package/breadcrumb/lib/breadcrumb/breadcrumb.d.ts +151 -0
- package/breadcrumb/lib/breadcrumb/breadcrumb.types.d.ts +26 -0
- package/breadcrumb/malva-ui-core-breadcrumb.d.ts +5 -0
- package/button/index.d.ts +7 -0
- package/button/lib/button/button.d.ts +61 -0
- package/button/lib/button-close/button-close.d.ts +24 -0
- package/button/lib/button-group/button-group.d.ts +21 -0
- package/button/lib/button-split/button-split.d.ts +21 -0
- package/button/lib/button-toggle/button-toggle.d.ts +33 -0
- package/button/lib/button-variant.token.d.ts +13 -0
- package/button/lib/button.directives.d.ts +14 -0
- package/button/lib/button.types.d.ts +8 -0
- package/button/malva-ui-core-button.d.ts +5 -0
- package/calendar/index.d.ts +3 -0
- package/calendar/lib/calendar/calendar.d.ts +182 -0
- package/calendar/lib/date-provider/date-adapter.d.ts +92 -0
- package/calendar/lib/date-provider/native-date-adapter.d.ts +60 -0
- package/calendar/malva-ui-core-calendar.d.ts +5 -0
- package/card/index.d.ts +5 -0
- package/card/lib/card/card.d.ts +43 -0
- package/card/lib/card-actions-def.d.ts +10 -0
- package/card/lib/card-footer-def.d.ts +13 -0
- package/card/lib/card-header-def.d.ts +10 -0
- package/card/lib/card-subheader-def.d.ts +16 -0
- package/card/malva-ui-core-card.d.ts +5 -0
- package/chat/index.d.ts +9 -0
- package/chat/lib/chat/chat.d.ts +133 -0
- package/chat/lib/chat-audio/chat-audio.d.ts +51 -0
- package/chat/lib/chat-audio/chat-audio.service.d.ts +21 -0
- package/chat/lib/chat-date/chat-date.d.ts +16 -0
- package/chat/lib/chat-format.d.ts +5 -0
- package/chat/lib/chat-media-grid/chat-media-grid.d.ts +32 -0
- package/chat/lib/chat-message/chat-message.d.ts +45 -0
- package/chat/lib/chat-render-list.d.ts +16 -0
- package/chat/lib/chat-tokens.d.ts +25 -0
- package/chat/lib/chat-typing/chat-typing.d.ts +16 -0
- package/chat/lib/chat.types.d.ts +80 -0
- package/chat/lib/defs/chat-author-def.d.ts +30 -0
- package/chat/lib/defs/chat-date-def.d.ts +22 -0
- package/chat/lib/defs/chat-message-def.d.ts +23 -0
- package/chat/malva-ui-core-chat.d.ts +5 -0
- package/checkbox/index.d.ts +3 -0
- package/checkbox/lib/checkbox/checkbox.d.ts +129 -0
- package/checkbox/lib/checkbox-group/checkbox-group.d.ts +24 -0
- package/checkbox/lib/checkbox-group-token.d.ts +6 -0
- package/checkbox/malva-ui-core-checkbox.d.ts +5 -0
- package/chip/index.d.ts +2 -0
- package/chip/lib/chip/chip.d.ts +107 -0
- package/chip/lib/chip/chip.directives.d.ts +18 -0
- package/chip/malva-ui-core-chip.d.ts +5 -0
- package/color-picker/index.d.ts +3 -0
- package/color-picker/lib/color-picker/color-picker.d.ts +188 -0
- package/color-picker/lib/color-picker-popup/color-picker-popup.d.ts +151 -0
- package/color-picker/lib/color-utils/color-utils.d.ts +102 -0
- package/color-picker/malva-ui-core-color-picker.d.ts +5 -0
- package/combobox/index.d.ts +2 -0
- package/combobox/lib/combobox/combobox.d.ts +400 -0
- package/combobox/lib/combobox-template.directives.d.ts +10 -0
- package/combobox/malva-ui-core-combobox.d.ts +5 -0
- package/copy-to-clipboard/index.d.ts +1 -0
- package/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.d.ts +130 -0
- package/copy-to-clipboard/malva-ui-core-copy-to-clipboard.d.ts +5 -0
- package/data-table/index.d.ts +8 -0
- package/data-table/lib/data-source.d.ts +5 -0
- package/data-table/lib/data-table/data-table-layout.d.ts +31 -0
- package/data-table/lib/data-table/data-table.d.ts +699 -0
- package/data-table/lib/data-table/services/data-table-column-visibility.service.d.ts +19 -0
- package/data-table/lib/data-table/services/data-table-editing.service.d.ts +37 -0
- package/data-table/lib/data-table/services/data-table-pinning.service.d.ts +37 -0
- package/data-table/lib/data-table-cell.d.ts +44 -0
- package/data-table/lib/data-table-edit-cell.d.ts +44 -0
- package/data-table/lib/data-table-error.d.ts +37 -0
- package/data-table/lib/data-table-footer.d.ts +26 -0
- package/data-table/lib/data-table-no-data.d.ts +19 -0
- package/data-table/lib/filter-dropdown/filter-dropdown.d.ts +54 -0
- package/data-table/lib/types.d.ts +134 -0
- package/data-table/malva-ui-core-data-table.d.ts +5 -0
- package/date-range-picker/index.d.ts +1 -0
- package/date-range-picker/lib/date-range-picker/date-range-picker.d.ts +145 -0
- package/date-range-picker/malva-ui-core-date-range-picker.d.ts +5 -0
- package/day-picker/index.d.ts +1 -0
- package/day-picker/lib/day-picker/day-picker.d.ts +51 -0
- package/day-picker/malva-ui-core-day-picker.d.ts +5 -0
- package/dialog/index.d.ts +11 -0
- package/dialog/lib/confirm-dialog-options.d.ts +41 -0
- package/dialog/lib/confirm-dialog.d.ts +52 -0
- package/dialog/lib/dialog/dialog.d.ts +22 -0
- package/dialog/lib/dialog-body.d.ts +9 -0
- package/dialog/lib/dialog-close.d.ts +27 -0
- package/dialog/lib/dialog-config.d.ts +112 -0
- package/dialog/lib/dialog-container.d.ts +40 -0
- package/dialog/lib/dialog-footer.d.ts +13 -0
- package/dialog/lib/dialog-header.d.ts +74 -0
- package/dialog/lib/dialog-ref.d.ts +95 -0
- package/dialog/lib/dialog-template.d.ts +65 -0
- package/dialog/lib/dialog-text-content.d.ts +24 -0
- package/dialog/lib/dialog.service.d.ts +63 -0
- package/dialog/lib/generate-routable-dialog-route.d.ts +49 -0
- package/dialog/lib/inject-dialog-ref.d.ts +8 -0
- package/dialog/lib/routable-dialog.d.ts +30 -0
- package/dialog/malva-ui-core-dialog.d.ts +5 -0
- package/divider/index.d.ts +1 -0
- package/divider/lib/divider/divider.d.ts +64 -0
- package/divider/malva-ui-core-divider.d.ts +5 -0
- package/docs/ai/accordion.md +102 -0
- package/docs/ai/action-bar.md +198 -0
- package/docs/ai/alert.md +190 -0
- package/docs/ai/autocomplete.md +111 -0
- package/docs/ai/avatar-group.md +184 -0
- package/docs/ai/avatar.md +150 -0
- package/docs/ai/badge.md +163 -0
- package/docs/ai/bottom-nav.md +267 -0
- package/docs/ai/breadcrumb.md +174 -0
- package/docs/ai/button.md +306 -0
- package/docs/ai/calendar.md +237 -0
- package/docs/ai/card.md +196 -0
- package/docs/ai/chat.md +145 -0
- package/docs/ai/checkbox.md +193 -0
- package/docs/ai/chip.md +139 -0
- package/docs/ai/color-picker.md +270 -0
- package/docs/ai/combobox.md +325 -0
- package/docs/ai/copy-to-clipboard.md +159 -0
- package/docs/ai/core.md +216 -0
- package/docs/ai/data-table.md +917 -0
- package/docs/ai/date-range-picker.md +101 -0
- package/docs/ai/day-picker.md +135 -0
- package/docs/ai/dialog.md +852 -0
- package/docs/ai/divider.md +159 -0
- package/docs/ai/drawer.md +607 -0
- package/docs/ai/dropdown.md +343 -0
- package/docs/ai/empty-state.md +167 -0
- package/docs/ai/expand.md +234 -0
- package/docs/ai/file-upload.md +402 -0
- package/docs/ai/filter.md +43 -0
- package/docs/ai/form-utils.md +319 -0
- package/docs/ai/form.md +129 -0
- package/docs/ai/input.md +175 -0
- package/docs/ai/kbd.md +70 -0
- package/docs/ai/layout.md +192 -0
- package/docs/ai/link.md +179 -0
- package/docs/ai/list.md +249 -0
- package/docs/ai/loader.md +122 -0
- package/docs/ai/menu.md +335 -0
- package/docs/ai/notification.md +281 -0
- package/docs/ai/number-input.md +123 -0
- package/docs/ai/page.md +422 -0
- package/docs/ai/pagination.md +237 -0
- package/docs/ai/pin-input.md +173 -0
- package/docs/ai/popup.md +347 -0
- package/docs/ai/progress.md +84 -0
- package/docs/ai/radio.md +201 -0
- package/docs/ai/rating.md +76 -0
- package/docs/ai/scrollbar.md +170 -0
- package/docs/ai/search-field.md +85 -0
- package/docs/ai/segmented.md +331 -0
- package/docs/ai/select.md +512 -0
- package/docs/ai/sidebar.md +992 -0
- package/docs/ai/skeleton.md +187 -0
- package/docs/ai/slider.md +180 -0
- package/docs/ai/split-pane.md +235 -0
- package/docs/ai/status-indicator.md +95 -0
- package/docs/ai/stepper.md +385 -0
- package/docs/ai/switch.md +216 -0
- package/docs/ai/tabs.md +564 -0
- package/docs/ai/textarea.md +249 -0
- package/docs/ai/tile.md +150 -0
- package/docs/ai/time-picker.md +214 -0
- package/docs/ai/timeline.md +320 -0
- package/docs/ai/title.md +105 -0
- package/docs/ai/toast.md +484 -0
- package/docs/ai/tokenizer.md +236 -0
- package/docs/ai/toolbar.md +155 -0
- package/docs/ai/tooltip.md +154 -0
- package/docs/ai/tree.md +177 -0
- package/drawer/index.d.ts +11 -0
- package/drawer/lib/drawer/drawer.d.ts +106 -0
- package/drawer/lib/drawer-body.d.ts +8 -0
- package/drawer/lib/drawer-content.d.ts +6 -0
- package/drawer/lib/drawer-footer.d.ts +5 -0
- package/drawer/lib/drawer-header.d.ts +5 -0
- package/drawer/lib/drawer-ref.d.ts +29 -0
- package/drawer/lib/drawer-resize.d.ts +65 -0
- package/drawer/lib/drawer-section/drawer-section.d.ts +15 -0
- package/drawer/lib/drawer-sections/drawer-sections.d.ts +22 -0
- package/drawer/lib/drawer-sections.service.d.ts +42 -0
- package/drawer/lib/drawer.service.d.ts +66 -0
- package/drawer/lib/generate-routable-drawer-route.d.ts +42 -0
- package/drawer/lib/routable-drawer.d.ts +30 -0
- package/drawer/malva-ui-core-drawer.d.ts +5 -0
- package/dropdown/index.d.ts +9 -0
- package/dropdown/lib/active-descendant.d.ts +64 -0
- package/dropdown/lib/dropdown-panel/dropdown-panel.d.ts +178 -0
- package/dropdown/lib/highlight-match.pipe.d.ts +27 -0
- package/dropdown/lib/option-matcher.d.ts +87 -0
- package/dropdown/lib/options-adapter.d.ts +142 -0
- package/dropdown/lib/options-result.d.ts +6 -0
- package/dropdown/lib/reconciliation.d.ts +19 -0
- package/dropdown/lib/select-data-source.d.ts +18 -0
- package/dropdown/lib/select-option.d.ts +37 -0
- package/dropdown/malva-ui-core-dropdown.d.ts +5 -0
- package/empty-state/index.d.ts +1 -0
- package/empty-state/lib/empty-state/empty-state.d.ts +34 -0
- package/empty-state/malva-ui-core-empty-state.d.ts +5 -0
- package/esm2022/accordion/index.js +4 -0
- package/esm2022/accordion/index.js.map +1 -0
- package/esm2022/accordion/lib/accordion/accordion.js +65 -0
- package/esm2022/accordion/lib/accordion/accordion.js.map +1 -0
- package/esm2022/accordion/lib/accordion-item/accordion-header.js +30 -0
- package/esm2022/accordion/lib/accordion-item/accordion-header.js.map +1 -0
- package/esm2022/accordion/lib/accordion-item/accordion-item.js +70 -0
- package/esm2022/accordion/lib/accordion-item/accordion-item.js.map +1 -0
- package/esm2022/accordion/malva-ui-core-accordion.js +5 -0
- package/esm2022/accordion/malva-ui-core-accordion.js.map +1 -0
- package/esm2022/action-bar/index.js +5 -0
- package/esm2022/action-bar/index.js.map +1 -0
- package/esm2022/action-bar/lib/action-bar/action-bar.js +64 -0
- package/esm2022/action-bar/lib/action-bar/action-bar.js.map +1 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js +20 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js.map +1 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js +13 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js.map +1 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js +13 -0
- package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js.map +1 -0
- package/esm2022/action-bar/malva-ui-core-action-bar.js +5 -0
- package/esm2022/action-bar/malva-ui-core-action-bar.js.map +1 -0
- package/esm2022/alert/index.js +3 -0
- package/esm2022/alert/index.js.map +1 -0
- package/esm2022/alert/lib/alert/alert.directives.js +53 -0
- package/esm2022/alert/lib/alert/alert.directives.js.map +1 -0
- package/esm2022/alert/lib/alert/alert.js +118 -0
- package/esm2022/alert/lib/alert/alert.js.map +1 -0
- package/esm2022/alert/malva-ui-core-alert.js +5 -0
- package/esm2022/alert/malva-ui-core-alert.js.map +1 -0
- package/esm2022/autocomplete/index.js +2 -0
- package/esm2022/autocomplete/index.js.map +1 -0
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.js +765 -0
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.js.map +1 -0
- package/esm2022/autocomplete/malva-ui-core-autocomplete.js +5 -0
- package/esm2022/autocomplete/malva-ui-core-autocomplete.js.map +1 -0
- package/esm2022/avatar/index.js +3 -0
- package/esm2022/avatar/index.js.map +1 -0
- package/esm2022/avatar/lib/avatar/avatar.js +192 -0
- package/esm2022/avatar/lib/avatar/avatar.js.map +1 -0
- package/esm2022/avatar/lib/color-from-text.pipe.js +39 -0
- package/esm2022/avatar/lib/color-from-text.pipe.js.map +1 -0
- package/esm2022/avatar/malva-ui-core-avatar.js +5 -0
- package/esm2022/avatar/malva-ui-core-avatar.js.map +1 -0
- package/esm2022/avatar-group/index.js +2 -0
- package/esm2022/avatar-group/index.js.map +1 -0
- package/esm2022/avatar-group/lib/avatar-group/avatar-group.js +217 -0
- package/esm2022/avatar-group/lib/avatar-group/avatar-group.js.map +1 -0
- package/esm2022/avatar-group/malva-ui-core-avatar-group.js +5 -0
- package/esm2022/avatar-group/malva-ui-core-avatar-group.js.map +1 -0
- package/esm2022/badge/index.js +3 -0
- package/esm2022/badge/index.js.map +1 -0
- package/esm2022/badge/lib/badge/badge.js +71 -0
- package/esm2022/badge/lib/badge/badge.js.map +1 -0
- package/esm2022/badge/lib/badge-icon.js +47 -0
- package/esm2022/badge/lib/badge-icon.js.map +1 -0
- package/esm2022/badge/malva-ui-core-badge.js +5 -0
- package/esm2022/badge/malva-ui-core-badge.js.map +1 -0
- package/esm2022/bottom-nav/index.js +2 -0
- package/esm2022/bottom-nav/index.js.map +1 -0
- package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js +155 -0
- package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js.map +1 -0
- package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js +5 -0
- package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js.map +1 -0
- package/esm2022/breadcrumb/index.js +6 -0
- package/esm2022/breadcrumb/index.js.map +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js +43 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js.map +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js +110 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js.map +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js +38 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js.map +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js +284 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js.map +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js +1 -0
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js.map +1 -0
- package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js +5 -0
- package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js.map +1 -0
- package/esm2022/button/index.js +8 -0
- package/esm2022/button/index.js.map +1 -0
- package/esm2022/button/lib/button/button.js +137 -0
- package/esm2022/button/lib/button/button.js.map +1 -0
- package/esm2022/button/lib/button-close/button-close.js +52 -0
- package/esm2022/button/lib/button-close/button-close.js.map +1 -0
- package/esm2022/button/lib/button-group/button-group.js +44 -0
- package/esm2022/button/lib/button-group/button-group.js.map +1 -0
- package/esm2022/button/lib/button-split/button-split.js +44 -0
- package/esm2022/button/lib/button-split/button-split.js.map +1 -0
- package/esm2022/button/lib/button-toggle/button-toggle.js +94 -0
- package/esm2022/button/lib/button-toggle/button-toggle.js.map +1 -0
- package/esm2022/button/lib/button-variant.token.js +4 -0
- package/esm2022/button/lib/button-variant.token.js.map +1 -0
- package/esm2022/button/lib/button.directives.js +37 -0
- package/esm2022/button/lib/button.directives.js.map +1 -0
- package/esm2022/button/lib/button.types.js +1 -0
- package/esm2022/button/lib/button.types.js.map +1 -0
- package/esm2022/button/malva-ui-core-button.js +5 -0
- package/esm2022/button/malva-ui-core-button.js.map +1 -0
- package/esm2022/calendar/index.js +4 -0
- package/esm2022/calendar/index.js.map +1 -0
- package/esm2022/calendar/lib/calendar/calendar.js +672 -0
- package/esm2022/calendar/lib/calendar/calendar.js.map +1 -0
- package/esm2022/calendar/lib/date-provider/date-adapter.js +111 -0
- package/esm2022/calendar/lib/date-provider/date-adapter.js.map +1 -0
- package/esm2022/calendar/lib/date-provider/native-date-adapter.js +151 -0
- package/esm2022/calendar/lib/date-provider/native-date-adapter.js.map +1 -0
- package/esm2022/calendar/malva-ui-core-calendar.js +5 -0
- package/esm2022/calendar/malva-ui-core-calendar.js.map +1 -0
- package/esm2022/card/index.js +6 -0
- package/esm2022/card/index.js.map +1 -0
- package/esm2022/card/lib/card/card.js +54 -0
- package/esm2022/card/lib/card/card.js.map +1 -0
- package/esm2022/card/lib/card-actions-def.js +27 -0
- package/esm2022/card/lib/card-actions-def.js.map +1 -0
- package/esm2022/card/lib/card-footer-def.js +32 -0
- package/esm2022/card/lib/card-footer-def.js.map +1 -0
- package/esm2022/card/lib/card-header-def.js +27 -0
- package/esm2022/card/lib/card-header-def.js.map +1 -0
- package/esm2022/card/lib/card-subheader-def.js +33 -0
- package/esm2022/card/lib/card-subheader-def.js.map +1 -0
- package/esm2022/card/malva-ui-core-card.js +5 -0
- package/esm2022/card/malva-ui-core-card.js.map +1 -0
- package/esm2022/chat/index.js +10 -0
- package/esm2022/chat/index.js.map +1 -0
- package/esm2022/chat/lib/chat/chat.js +326 -0
- package/esm2022/chat/lib/chat/chat.js.map +1 -0
- package/esm2022/chat/lib/chat-audio/chat-audio.js +110 -0
- package/esm2022/chat/lib/chat-audio/chat-audio.js.map +1 -0
- package/esm2022/chat/lib/chat-audio/chat-audio.service.js +28 -0
- package/esm2022/chat/lib/chat-audio/chat-audio.service.js.map +1 -0
- package/esm2022/chat/lib/chat-date/chat-date.js +46 -0
- package/esm2022/chat/lib/chat-date/chat-date.js.map +1 -0
- package/esm2022/chat/lib/chat-format.js +11 -0
- package/esm2022/chat/lib/chat-format.js.map +1 -0
- package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js +53 -0
- package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js.map +1 -0
- package/esm2022/chat/lib/chat-message/chat-message.js +86 -0
- package/esm2022/chat/lib/chat-message/chat-message.js.map +1 -0
- package/esm2022/chat/lib/chat-render-list.js +55 -0
- package/esm2022/chat/lib/chat-render-list.js.map +1 -0
- package/esm2022/chat/lib/chat-tokens.js +9 -0
- package/esm2022/chat/lib/chat-tokens.js.map +1 -0
- package/esm2022/chat/lib/chat-typing/chat-typing.js +50 -0
- package/esm2022/chat/lib/chat-typing/chat-typing.js.map +1 -0
- package/esm2022/chat/lib/chat.types.js +1 -0
- package/esm2022/chat/lib/chat.types.js.map +1 -0
- package/esm2022/chat/lib/defs/chat-author-def.js +27 -0
- package/esm2022/chat/lib/defs/chat-author-def.js.map +1 -0
- package/esm2022/chat/lib/defs/chat-date-def.js +24 -0
- package/esm2022/chat/lib/defs/chat-date-def.js.map +1 -0
- package/esm2022/chat/lib/defs/chat-message-def.js +30 -0
- package/esm2022/chat/lib/defs/chat-message-def.js.map +1 -0
- package/esm2022/chat/malva-ui-core-chat.js +5 -0
- package/esm2022/chat/malva-ui-core-chat.js.map +1 -0
- package/esm2022/checkbox/index.js +4 -0
- package/esm2022/checkbox/index.js.map +1 -0
- package/esm2022/checkbox/lib/checkbox/checkbox.js +201 -0
- package/esm2022/checkbox/lib/checkbox/checkbox.js.map +1 -0
- package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js +68 -0
- package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js.map +1 -0
- package/esm2022/checkbox/lib/checkbox-group-token.js +3 -0
- package/esm2022/checkbox/lib/checkbox-group-token.js.map +1 -0
- package/esm2022/checkbox/malva-ui-core-checkbox.js +5 -0
- package/esm2022/checkbox/malva-ui-core-checkbox.js.map +1 -0
- package/esm2022/chip/index.js +3 -0
- package/esm2022/chip/index.js.map +1 -0
- package/esm2022/chip/lib/chip/chip.directives.js +32 -0
- package/esm2022/chip/lib/chip/chip.directives.js.map +1 -0
- package/esm2022/chip/lib/chip/chip.js +140 -0
- package/esm2022/chip/lib/chip/chip.js.map +1 -0
- package/esm2022/chip/malva-ui-core-chip.js +5 -0
- package/esm2022/chip/malva-ui-core-chip.js.map +1 -0
- package/esm2022/color-picker/index.js +4 -0
- package/esm2022/color-picker/index.js.map +1 -0
- package/esm2022/color-picker/lib/color-picker/color-picker.js +530 -0
- package/esm2022/color-picker/lib/color-picker/color-picker.js.map +1 -0
- package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js +419 -0
- package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js.map +1 -0
- package/esm2022/color-picker/lib/color-utils/color-utils.js +256 -0
- package/esm2022/color-picker/lib/color-utils/color-utils.js.map +1 -0
- package/esm2022/color-picker/malva-ui-core-color-picker.js +5 -0
- package/esm2022/color-picker/malva-ui-core-color-picker.js.map +1 -0
- package/esm2022/combobox/index.js +3 -0
- package/esm2022/combobox/index.js.map +1 -0
- package/esm2022/combobox/lib/combobox/combobox.js +911 -0
- package/esm2022/combobox/lib/combobox/combobox.js.map +1 -0
- package/esm2022/combobox/lib/combobox-template.directives.js +24 -0
- package/esm2022/combobox/lib/combobox-template.directives.js.map +1 -0
- package/esm2022/combobox/malva-ui-core-combobox.js +5 -0
- package/esm2022/combobox/malva-ui-core-combobox.js.map +1 -0
- package/esm2022/copy-to-clipboard/index.js +2 -0
- package/esm2022/copy-to-clipboard/index.js.map +1 -0
- package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js +201 -0
- package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js.map +1 -0
- package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js +5 -0
- package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js.map +1 -0
- package/esm2022/data-table/index.js +9 -0
- package/esm2022/data-table/index.js.map +1 -0
- package/esm2022/data-table/lib/data-source.js +6 -0
- package/esm2022/data-table/lib/data-source.js.map +1 -0
- package/esm2022/data-table/lib/data-table/data-table-layout.js +84 -0
- package/esm2022/data-table/lib/data-table/data-table-layout.js.map +1 -0
- package/esm2022/data-table/lib/data-table/data-table.js +1846 -0
- package/esm2022/data-table/lib/data-table/data-table.js.map +1 -0
- package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js +37 -0
- package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js.map +1 -0
- package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js +63 -0
- package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js.map +1 -0
- package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js +68 -0
- package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js.map +1 -0
- package/esm2022/data-table/lib/data-table-cell.js +46 -0
- package/esm2022/data-table/lib/data-table-cell.js.map +1 -0
- package/esm2022/data-table/lib/data-table-edit-cell.js +46 -0
- package/esm2022/data-table/lib/data-table-edit-cell.js.map +1 -0
- package/esm2022/data-table/lib/data-table-error.js +37 -0
- package/esm2022/data-table/lib/data-table-error.js.map +1 -0
- package/esm2022/data-table/lib/data-table-footer.js +33 -0
- package/esm2022/data-table/lib/data-table-footer.js.map +1 -0
- package/esm2022/data-table/lib/data-table-no-data.js +26 -0
- package/esm2022/data-table/lib/data-table-no-data.js.map +1 -0
- package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js +224 -0
- package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js.map +1 -0
- package/esm2022/data-table/lib/types.js +1 -0
- package/esm2022/data-table/lib/types.js.map +1 -0
- package/esm2022/data-table/malva-ui-core-data-table.js +5 -0
- package/esm2022/data-table/malva-ui-core-data-table.js.map +1 -0
- package/esm2022/date-range-picker/index.js +2 -0
- package/esm2022/date-range-picker/index.js.map +1 -0
- package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js +269 -0
- package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js.map +1 -0
- package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js +5 -0
- package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js.map +1 -0
- package/esm2022/day-picker/index.js +2 -0
- package/esm2022/day-picker/index.js.map +1 -0
- package/esm2022/day-picker/lib/day-picker/day-picker.js +124 -0
- package/esm2022/day-picker/lib/day-picker/day-picker.js.map +1 -0
- package/esm2022/day-picker/malva-ui-core-day-picker.js +5 -0
- package/esm2022/day-picker/malva-ui-core-day-picker.js.map +1 -0
- package/esm2022/dialog/index.js +12 -0
- package/esm2022/dialog/index.js.map +1 -0
- package/esm2022/dialog/lib/confirm-dialog-options.js +1 -0
- package/esm2022/dialog/lib/confirm-dialog-options.js.map +1 -0
- package/esm2022/dialog/lib/confirm-dialog.js +155 -0
- package/esm2022/dialog/lib/confirm-dialog.js.map +1 -0
- package/esm2022/dialog/lib/dialog/dialog.js +40 -0
- package/esm2022/dialog/lib/dialog/dialog.js.map +1 -0
- package/esm2022/dialog/lib/dialog-body.js +33 -0
- package/esm2022/dialog/lib/dialog-body.js.map +1 -0
- package/esm2022/dialog/lib/dialog-close.js +45 -0
- package/esm2022/dialog/lib/dialog-close.js.map +1 -0
- package/esm2022/dialog/lib/dialog-config.js +23 -0
- package/esm2022/dialog/lib/dialog-config.js.map +1 -0
- package/esm2022/dialog/lib/dialog-container.js +69 -0
- package/esm2022/dialog/lib/dialog-container.js.map +1 -0
- package/esm2022/dialog/lib/dialog-footer.js +29 -0
- package/esm2022/dialog/lib/dialog-footer.js.map +1 -0
- package/esm2022/dialog/lib/dialog-header.js +181 -0
- package/esm2022/dialog/lib/dialog-header.js.map +1 -0
- package/esm2022/dialog/lib/dialog-ref.js +167 -0
- package/esm2022/dialog/lib/dialog-ref.js.map +1 -0
- package/esm2022/dialog/lib/dialog-template.js +136 -0
- package/esm2022/dialog/lib/dialog-template.js.map +1 -0
- package/esm2022/dialog/lib/dialog-text-content.js +59 -0
- package/esm2022/dialog/lib/dialog-text-content.js.map +1 -0
- package/esm2022/dialog/lib/dialog.service.js +205 -0
- package/esm2022/dialog/lib/dialog.service.js.map +1 -0
- package/esm2022/dialog/lib/generate-routable-dialog-route.js +59 -0
- package/esm2022/dialog/lib/generate-routable-dialog-route.js.map +1 -0
- package/esm2022/dialog/lib/inject-dialog-ref.js +16 -0
- package/esm2022/dialog/lib/inject-dialog-ref.js.map +1 -0
- package/esm2022/dialog/lib/routable-dialog.js +91 -0
- package/esm2022/dialog/lib/routable-dialog.js.map +1 -0
- package/esm2022/dialog/malva-ui-core-dialog.js +5 -0
- package/esm2022/dialog/malva-ui-core-dialog.js.map +1 -0
- package/esm2022/divider/index.js +2 -0
- package/esm2022/divider/index.js.map +1 -0
- package/esm2022/divider/lib/divider/divider.js +73 -0
- package/esm2022/divider/lib/divider/divider.js.map +1 -0
- package/esm2022/divider/malva-ui-core-divider.js +5 -0
- package/esm2022/divider/malva-ui-core-divider.js.map +1 -0
- package/esm2022/drawer/index.js +12 -0
- package/esm2022/drawer/index.js.map +1 -0
- package/esm2022/drawer/lib/drawer/drawer.js +180 -0
- package/esm2022/drawer/lib/drawer/drawer.js.map +1 -0
- package/esm2022/drawer/lib/drawer-body.js +32 -0
- package/esm2022/drawer/lib/drawer-body.js.map +1 -0
- package/esm2022/drawer/lib/drawer-content.js +14 -0
- package/esm2022/drawer/lib/drawer-content.js.map +1 -0
- package/esm2022/drawer/lib/drawer-footer.js +14 -0
- package/esm2022/drawer/lib/drawer-footer.js.map +1 -0
- package/esm2022/drawer/lib/drawer-header.js +14 -0
- package/esm2022/drawer/lib/drawer-header.js.map +1 -0
- package/esm2022/drawer/lib/drawer-ref.js +31 -0
- package/esm2022/drawer/lib/drawer-ref.js.map +1 -0
- package/esm2022/drawer/lib/drawer-resize.js +243 -0
- package/esm2022/drawer/lib/drawer-resize.js.map +1 -0
- package/esm2022/drawer/lib/drawer-section/drawer-section.js +26 -0
- package/esm2022/drawer/lib/drawer-section/drawer-section.js.map +1 -0
- package/esm2022/drawer/lib/drawer-sections/drawer-sections.js +58 -0
- package/esm2022/drawer/lib/drawer-sections/drawer-sections.js.map +1 -0
- package/esm2022/drawer/lib/drawer-sections.service.js +83 -0
- package/esm2022/drawer/lib/drawer-sections.service.js.map +1 -0
- package/esm2022/drawer/lib/drawer.service.js +86 -0
- package/esm2022/drawer/lib/drawer.service.js.map +1 -0
- package/esm2022/drawer/lib/generate-routable-drawer-route.js +52 -0
- package/esm2022/drawer/lib/generate-routable-drawer-route.js.map +1 -0
- package/esm2022/drawer/lib/routable-drawer.js +91 -0
- package/esm2022/drawer/lib/routable-drawer.js.map +1 -0
- package/esm2022/drawer/malva-ui-core-drawer.js +5 -0
- package/esm2022/drawer/malva-ui-core-drawer.js.map +1 -0
- package/esm2022/dropdown/index.js +10 -0
- package/esm2022/dropdown/index.js.map +1 -0
- package/esm2022/dropdown/lib/active-descendant.js +92 -0
- package/esm2022/dropdown/lib/active-descendant.js.map +1 -0
- package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js +295 -0
- package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js.map +1 -0
- package/esm2022/dropdown/lib/highlight-match.pipe.js +36 -0
- package/esm2022/dropdown/lib/highlight-match.pipe.js.map +1 -0
- package/esm2022/dropdown/lib/option-matcher.js +124 -0
- package/esm2022/dropdown/lib/option-matcher.js.map +1 -0
- package/esm2022/dropdown/lib/options-adapter.js +356 -0
- package/esm2022/dropdown/lib/options-adapter.js.map +1 -0
- package/esm2022/dropdown/lib/options-result.js +11 -0
- package/esm2022/dropdown/lib/options-result.js.map +1 -0
- package/esm2022/dropdown/lib/reconciliation.js +32 -0
- package/esm2022/dropdown/lib/reconciliation.js.map +1 -0
- package/esm2022/dropdown/lib/select-data-source.js +21 -0
- package/esm2022/dropdown/lib/select-data-source.js.map +1 -0
- package/esm2022/dropdown/lib/select-option.js +25 -0
- package/esm2022/dropdown/lib/select-option.js.map +1 -0
- package/esm2022/dropdown/malva-ui-core-dropdown.js +5 -0
- package/esm2022/dropdown/malva-ui-core-dropdown.js.map +1 -0
- package/esm2022/empty-state/index.js +2 -0
- package/esm2022/empty-state/index.js.map +1 -0
- package/esm2022/empty-state/lib/empty-state/empty-state.js +43 -0
- package/esm2022/empty-state/lib/empty-state/empty-state.js.map +1 -0
- package/esm2022/empty-state/malva-ui-core-empty-state.js +5 -0
- package/esm2022/empty-state/malva-ui-core-empty-state.js.map +1 -0
- package/esm2022/expand/index.js +3 -0
- package/esm2022/expand/index.js.map +1 -0
- package/esm2022/expand/lib/expand/expand-content.js +33 -0
- package/esm2022/expand/lib/expand/expand-content.js.map +1 -0
- package/esm2022/expand/lib/expand/expand.js +93 -0
- package/esm2022/expand/lib/expand/expand.js.map +1 -0
- package/esm2022/expand/malva-ui-core-expand.js +5 -0
- package/esm2022/expand/malva-ui-core-expand.js.map +1 -0
- package/esm2022/file-upload/index.js +5 -0
- package/esm2022/file-upload/index.js.map +1 -0
- package/esm2022/file-upload/lib/file-upload/file-upload.js +324 -0
- package/esm2022/file-upload/lib/file-upload/file-upload.js.map +1 -0
- package/esm2022/file-upload/lib/file-upload/file-upload.types.js +1 -0
- package/esm2022/file-upload/lib/file-upload/file-upload.types.js.map +1 -0
- package/esm2022/file-upload/lib/file-upload-action.js +65 -0
- package/esm2022/file-upload/lib/file-upload-action.js.map +1 -0
- package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js +55 -0
- package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js.map +1 -0
- package/esm2022/file-upload/malva-ui-core-file-upload.js +5 -0
- package/esm2022/file-upload/malva-ui-core-file-upload.js.map +1 -0
- package/esm2022/filter/index.js +4 -0
- package/esm2022/filter/index.js.map +1 -0
- package/esm2022/filter/lib/filter/filter.js +552 -0
- package/esm2022/filter/lib/filter/filter.js.map +1 -0
- package/esm2022/filter/lib/filter.types.js +1 -0
- package/esm2022/filter/lib/filter.types.js.map +1 -0
- package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js +518 -0
- package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js.map +1 -0
- package/esm2022/filter/malva-ui-core-filter.js +5 -0
- package/esm2022/filter/malva-ui-core-filter.js.map +1 -0
- package/esm2022/form/index.js +7 -0
- package/esm2022/form/index.js.map +1 -0
- package/esm2022/form/lib/fieldset/fieldset.js +101 -0
- package/esm2022/form/lib/fieldset/fieldset.js.map +1 -0
- package/esm2022/form/lib/fieldset-span.js +49 -0
- package/esm2022/form/lib/fieldset-span.js.map +1 -0
- package/esm2022/form/lib/form/form.js +60 -0
- package/esm2022/form/lib/form/form.js.map +1 -0
- package/esm2022/form/lib/form-actions.js +34 -0
- package/esm2022/form/lib/form-actions.js.map +1 -0
- package/esm2022/form/lib/form-gap.js +15 -0
- package/esm2022/form/lib/form-gap.js.map +1 -0
- package/esm2022/form/lib/form-header.js +27 -0
- package/esm2022/form/lib/form-header.js.map +1 -0
- package/esm2022/form/lib/form.types.js +1 -0
- package/esm2022/form/lib/form.types.js.map +1 -0
- package/esm2022/form/malva-ui-core-form.js +5 -0
- package/esm2022/form/malva-ui-core-form.js.map +1 -0
- package/esm2022/form-utils/index.js +16 -0
- package/esm2022/form-utils/index.js.map +1 -0
- package/esm2022/form-utils/lib/aria-value-bridge.js +57 -0
- package/esm2022/form-utils/lib/aria-value-bridge.js.map +1 -0
- package/esm2022/form-utils/lib/description/description.js +24 -0
- package/esm2022/form-utils/lib/description/description.js.map +1 -0
- package/esm2022/form-utils/lib/focusable-group-base.js +87 -0
- package/esm2022/form-utils/lib/focusable-group-base.js.map +1 -0
- package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js +192 -0
- package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js.map +1 -0
- package/esm2022/form-utils/lib/form-control-sides.js +34 -0
- package/esm2022/form-utils/lib/form-control-sides.js.map +1 -0
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js +14 -0
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js.map +1 -0
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js +47 -0
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js.map +1 -0
- package/esm2022/form-utils/lib/form-field/form-field.js +245 -0
- package/esm2022/form-utils/lib/form-field/form-field.js.map +1 -0
- package/esm2022/form-utils/lib/hint/hint.js +11 -0
- package/esm2022/form-utils/lib/hint/hint.js.map +1 -0
- package/esm2022/form-utils/lib/label/label.js +55 -0
- package/esm2022/form-utils/lib/label/label.js.map +1 -0
- package/esm2022/form-utils/lib/message/message.js +20 -0
- package/esm2022/form-utils/lib/message/message.js.map +1 -0
- package/esm2022/form-utils/lib/models/error-display-strategy.js +1 -0
- package/esm2022/form-utils/lib/models/error-display-strategy.js.map +1 -0
- package/esm2022/form-utils/lib/models/form-control-connector.js +3 -0
- package/esm2022/form-utils/lib/models/form-control-connector.js.map +1 -0
- package/esm2022/form-utils/lib/models/form-state.js +1 -0
- package/esm2022/form-utils/lib/models/form-state.js.map +1 -0
- package/esm2022/form-utils/lib/selection.service.js +81 -0
- package/esm2022/form-utils/lib/selection.service.js.map +1 -0
- package/esm2022/form-utils/malva-ui-core-form-utils.js +5 -0
- package/esm2022/form-utils/malva-ui-core-form-utils.js.map +1 -0
- package/esm2022/form-utils/testing/index.js +2 -0
- package/esm2022/form-utils/testing/index.js.map +1 -0
- package/esm2022/form-utils/testing/lib/forms-binding-matrix.js +32 -0
- package/esm2022/form-utils/testing/lib/forms-binding-matrix.js.map +1 -0
- package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js +5 -0
- package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js.map +1 -0
- package/esm2022/index.js +70 -0
- package/esm2022/index.js.map +1 -0
- package/esm2022/input/index.js +4 -0
- package/esm2022/input/index.js.map +1 -0
- package/esm2022/input/lib/input/input-native.js +49 -0
- package/esm2022/input/lib/input/input-native.js.map +1 -0
- package/esm2022/input/lib/input/input-value-accessor.js +4 -0
- package/esm2022/input/lib/input/input-value-accessor.js.map +1 -0
- package/esm2022/input/lib/input/input.js +277 -0
- package/esm2022/input/lib/input/input.js.map +1 -0
- package/esm2022/input/lib/input/password-strength.js +46 -0
- package/esm2022/input/lib/input/password-strength.js.map +1 -0
- package/esm2022/input/malva-ui-core-input.js +5 -0
- package/esm2022/input/malva-ui-core-input.js.map +1 -0
- package/esm2022/kbd/index.js +2 -0
- package/esm2022/kbd/index.js.map +1 -0
- package/esm2022/kbd/lib/kbd/kbd.js +124 -0
- package/esm2022/kbd/lib/kbd/kbd.js.map +1 -0
- package/esm2022/kbd/malva-ui-core-kbd.js +5 -0
- package/esm2022/kbd/malva-ui-core-kbd.js.map +1 -0
- package/esm2022/layout/index.js +5 -0
- package/esm2022/layout/index.js.map +1 -0
- package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js +14 -0
- package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js.map +1 -0
- package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js +14 -0
- package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js.map +1 -0
- package/esm2022/layout/lib/layout/layout.js +43 -0
- package/esm2022/layout/lib/layout/layout.js.map +1 -0
- package/esm2022/layout/lib/layout/services/theme.service.js +121 -0
- package/esm2022/layout/lib/layout/services/theme.service.js.map +1 -0
- package/esm2022/layout/malva-ui-core-layout.js +5 -0
- package/esm2022/layout/malva-ui-core-layout.js.map +1 -0
- package/esm2022/link/index.js +3 -0
- package/esm2022/link/index.js.map +1 -0
- package/esm2022/link/lib/link/link.directives.js +24 -0
- package/esm2022/link/lib/link/link.directives.js.map +1 -0
- package/esm2022/link/lib/link/link.js +61 -0
- package/esm2022/link/lib/link/link.js.map +1 -0
- package/esm2022/link/malva-ui-core-link.js +5 -0
- package/esm2022/link/malva-ui-core-link.js.map +1 -0
- package/esm2022/list/index.js +14 -0
- package/esm2022/list/index.js.map +1 -0
- package/esm2022/list/lib/list/list.js +28 -0
- package/esm2022/list/lib/list/list.js.map +1 -0
- package/esm2022/list/lib/list-item/list-item.js +125 -0
- package/esm2022/list/lib/list-item/list-item.js.map +1 -0
- package/esm2022/list/lib/list-item-actions.js +23 -0
- package/esm2022/list/lib/list-item-actions.js.map +1 -0
- package/esm2022/list/lib/list-item-byline.js +13 -0
- package/esm2022/list/lib/list-item-byline.js.map +1 -0
- package/esm2022/list/lib/list-item-group/list-item-group.js +25 -0
- package/esm2022/list/lib/list-item-group/list-item-group.js.map +1 -0
- package/esm2022/list/lib/list-item-link/list-item-link.js +20 -0
- package/esm2022/list/lib/list-item-link/list-item-link.js.map +1 -0
- package/esm2022/list/lib/list-item-media.js +13 -0
- package/esm2022/list/lib/list-item-media.js.map +1 -0
- package/esm2022/list/lib/list-item-meta.js +13 -0
- package/esm2022/list/lib/list-item-meta.js.map +1 -0
- package/esm2022/list/lib/list-item-prefix.js +13 -0
- package/esm2022/list/lib/list-item-prefix.js.map +1 -0
- package/esm2022/list/lib/list-item-suffix.js +13 -0
- package/esm2022/list/lib/list-item-suffix.js.map +1 -0
- package/esm2022/list/lib/list-item-template.js +14 -0
- package/esm2022/list/lib/list-item-template.js.map +1 -0
- package/esm2022/list/lib/list-item-title.js +13 -0
- package/esm2022/list/lib/list-item-title.js.map +1 -0
- package/esm2022/list/lib/list-selectable.js +116 -0
- package/esm2022/list/lib/list-selectable.js.map +1 -0
- package/esm2022/list/malva-ui-core-list.js +5 -0
- package/esm2022/list/malva-ui-core-list.js.map +1 -0
- package/esm2022/loader/index.js +2 -0
- package/esm2022/loader/index.js.map +1 -0
- package/esm2022/loader/lib/loader/loader.js +134 -0
- package/esm2022/loader/lib/loader/loader.js.map +1 -0
- package/esm2022/loader/malva-ui-core-loader.js +5 -0
- package/esm2022/loader/malva-ui-core-loader.js.map +1 -0
- package/esm2022/malva-ui-core.js +5 -0
- package/esm2022/malva-ui-core.js.map +1 -0
- package/esm2022/menu/index.js +10 -0
- package/esm2022/menu/index.js.map +1 -0
- package/esm2022/menu/lib/menu/menu-group-label.js +35 -0
- package/esm2022/menu/lib/menu/menu-group-label.js.map +1 -0
- package/esm2022/menu/lib/menu/menu-group.js +44 -0
- package/esm2022/menu/lib/menu/menu-group.js.map +1 -0
- package/esm2022/menu/lib/menu/menu-item.js +117 -0
- package/esm2022/menu/lib/menu/menu-item.js.map +1 -0
- package/esm2022/menu/lib/menu/menu-separator.js +41 -0
- package/esm2022/menu/lib/menu/menu-separator.js.map +1 -0
- package/esm2022/menu/lib/menu/menu-trigger.js +653 -0
- package/esm2022/menu/lib/menu/menu-trigger.js.map +1 -0
- package/esm2022/menu/lib/menu/menu.js +308 -0
- package/esm2022/menu/lib/menu/menu.js.map +1 -0
- package/esm2022/menu/lib/menu/menu.types.js +4 -0
- package/esm2022/menu/lib/menu/menu.types.js.map +1 -0
- package/esm2022/menu/lib/menu/menubar.js +257 -0
- package/esm2022/menu/lib/menu/menubar.js.map +1 -0
- package/esm2022/menu/lib/menu/menubar.types.js +4 -0
- package/esm2022/menu/lib/menu/menubar.types.js.map +1 -0
- package/esm2022/menu/lib/menu/submenu-aim.js +30 -0
- package/esm2022/menu/lib/menu/submenu-aim.js.map +1 -0
- package/esm2022/menu/malva-ui-core-menu.js +5 -0
- package/esm2022/menu/malva-ui-core-menu.js.map +1 -0
- package/esm2022/notification/index.js +5 -0
- package/esm2022/notification/index.js.map +1 -0
- package/esm2022/notification/lib/notification-item/notification-item.js +65 -0
- package/esm2022/notification/lib/notification-item/notification-item.js.map +1 -0
- package/esm2022/notification/lib/notification-ref.js +13 -0
- package/esm2022/notification/lib/notification-ref.js.map +1 -0
- package/esm2022/notification/lib/notification.service.js +118 -0
- package/esm2022/notification/lib/notification.service.js.map +1 -0
- package/esm2022/notification/lib/notification.types.js +6 -0
- package/esm2022/notification/lib/notification.types.js.map +1 -0
- package/esm2022/notification/malva-ui-core-notification.js +5 -0
- package/esm2022/notification/malva-ui-core-notification.js.map +1 -0
- package/esm2022/number-input/index.js +2 -0
- package/esm2022/number-input/index.js.map +1 -0
- package/esm2022/number-input/lib/number-input/number-input.js +395 -0
- package/esm2022/number-input/lib/number-input/number-input.js.map +1 -0
- package/esm2022/number-input/malva-ui-core-number-input.js +5 -0
- package/esm2022/number-input/malva-ui-core-number-input.js.map +1 -0
- package/esm2022/page/index.js +15 -0
- package/esm2022/page/index.js.map +1 -0
- package/esm2022/page/lib/page/page-scroll.token.js +9 -0
- package/esm2022/page/lib/page/page-scroll.token.js.map +1 -0
- package/esm2022/page/lib/page/page-snap-controller.js +170 -0
- package/esm2022/page/lib/page/page-snap-controller.js.map +1 -0
- package/esm2022/page/lib/page/page-snap.directive.js +65 -0
- package/esm2022/page/lib/page/page-snap.directive.js.map +1 -0
- package/esm2022/page/lib/page/page.js +173 -0
- package/esm2022/page/lib/page/page.js.map +1 -0
- package/esm2022/page/lib/page-content/page-aside.js +13 -0
- package/esm2022/page/lib/page-content/page-aside.js.map +1 -0
- package/esm2022/page/lib/page-content/page-content.js +72 -0
- package/esm2022/page/lib/page-content/page-content.js.map +1 -0
- package/esm2022/page/lib/page-dock/page-dock.js +128 -0
- package/esm2022/page/lib/page-dock/page-dock.js.map +1 -0
- package/esm2022/page/lib/page-dock/page-dock.slots.js +39 -0
- package/esm2022/page/lib/page-dock/page-dock.slots.js.map +1 -0
- package/esm2022/page/lib/page-header/page-header.directives.js +88 -0
- package/esm2022/page/lib/page-header/page-header.directives.js.map +1 -0
- package/esm2022/page/lib/page-header/page-header.js +124 -0
- package/esm2022/page/lib/page-header/page-header.js.map +1 -0
- package/esm2022/page/lib/page-shell/page-shell-color.js +193 -0
- package/esm2022/page/lib/page-shell/page-shell-color.js.map +1 -0
- package/esm2022/page/lib/page-shell/page-shell-css-color.js +207 -0
- package/esm2022/page/lib/page-shell/page-shell-css-color.js.map +1 -0
- package/esm2022/page/lib/page-shell/page-shell.js +131 -0
- package/esm2022/page/lib/page-shell/page-shell.js.map +1 -0
- package/esm2022/page/lib/page-shell/page-shell.slots.js +41 -0
- package/esm2022/page/lib/page-shell/page-shell.slots.js.map +1 -0
- package/esm2022/page/lib/page-summary/page-summary-item.js +26 -0
- package/esm2022/page/lib/page-summary/page-summary-item.js.map +1 -0
- package/esm2022/page/lib/page-summary/page-summary.js +87 -0
- package/esm2022/page/lib/page-summary/page-summary.js.map +1 -0
- package/esm2022/page/malva-ui-core-page.js +5 -0
- package/esm2022/page/malva-ui-core-page.js.map +1 -0
- package/esm2022/pagination/index.js +5 -0
- package/esm2022/pagination/index.js.map +1 -0
- package/esm2022/pagination/lib/pagination/pagination.directives.js +58 -0
- package/esm2022/pagination/lib/pagination/pagination.directives.js.map +1 -0
- package/esm2022/pagination/lib/pagination/pagination.js +293 -0
- package/esm2022/pagination/lib/pagination/pagination.js.map +1 -0
- package/esm2022/pagination/lib/pagination/pagination.model.js +1 -0
- package/esm2022/pagination/lib/pagination/pagination.model.js.map +1 -0
- package/esm2022/pagination/lib/pagination/pagination.service.js +108 -0
- package/esm2022/pagination/lib/pagination/pagination.service.js.map +1 -0
- package/esm2022/pagination/malva-ui-core-pagination.js +5 -0
- package/esm2022/pagination/malva-ui-core-pagination.js.map +1 -0
- package/esm2022/pin-input/index.js +3 -0
- package/esm2022/pin-input/index.js.map +1 -0
- package/esm2022/pin-input/lib/pin-input/pin-input-separator.js +31 -0
- package/esm2022/pin-input/lib/pin-input/pin-input-separator.js.map +1 -0
- package/esm2022/pin-input/lib/pin-input/pin-input.js +365 -0
- package/esm2022/pin-input/lib/pin-input/pin-input.js.map +1 -0
- package/esm2022/pin-input/malva-ui-core-pin-input.js +5 -0
- package/esm2022/pin-input/malva-ui-core-pin-input.js.map +1 -0
- package/esm2022/popup/index.js +10 -0
- package/esm2022/popup/index.js.map +1 -0
- package/esm2022/popup/lib/popup/popup.js +500 -0
- package/esm2022/popup/lib/popup/popup.js.map +1 -0
- package/esm2022/popup/lib/popup-container/popup-container.js +169 -0
- package/esm2022/popup/lib/popup-container/popup-container.js.map +1 -0
- package/esm2022/popup/lib/popup-container/popup-container.token.js +9 -0
- package/esm2022/popup/lib/popup-container/popup-container.token.js.map +1 -0
- package/esm2022/popup/lib/popup-content.js +14 -0
- package/esm2022/popup/lib/popup-content.js.map +1 -0
- package/esm2022/popup/lib/popup-header-content.js +26 -0
- package/esm2022/popup/lib/popup-header-content.js.map +1 -0
- package/esm2022/popup/lib/popup-pinned-content.js +25 -0
- package/esm2022/popup/lib/popup-pinned-content.js.map +1 -0
- package/esm2022/popup/lib/popup-positions.js +252 -0
- package/esm2022/popup/lib/popup-positions.js.map +1 -0
- package/esm2022/popup/lib/popup-trigger/popup-trigger.js +308 -0
- package/esm2022/popup/lib/popup-trigger/popup-trigger.js.map +1 -0
- package/esm2022/popup/lib/popup.service.js +188 -0
- package/esm2022/popup/lib/popup.service.js.map +1 -0
- package/esm2022/popup/malva-ui-core-popup.js +5 -0
- package/esm2022/popup/malva-ui-core-popup.js.map +1 -0
- package/esm2022/progress/index.js +2 -0
- package/esm2022/progress/index.js.map +1 -0
- package/esm2022/progress/lib/progress/progress.js +102 -0
- package/esm2022/progress/lib/progress/progress.js.map +1 -0
- package/esm2022/progress/malva-ui-core-progress.js +5 -0
- package/esm2022/progress/malva-ui-core-progress.js.map +1 -0
- package/esm2022/radio/index.js +3 -0
- package/esm2022/radio/index.js.map +1 -0
- package/esm2022/radio/lib/radio/radio.js +134 -0
- package/esm2022/radio/lib/radio/radio.js.map +1 -0
- package/esm2022/radio/lib/radio-group/radio-group.js +176 -0
- package/esm2022/radio/lib/radio-group/radio-group.js.map +1 -0
- package/esm2022/radio/lib/radio-group-token.js +3 -0
- package/esm2022/radio/lib/radio-group-token.js.map +1 -0
- package/esm2022/radio/malva-ui-core-radio.js +5 -0
- package/esm2022/radio/malva-ui-core-radio.js.map +1 -0
- package/esm2022/rating/index.js +2 -0
- package/esm2022/rating/index.js.map +1 -0
- package/esm2022/rating/lib/rating/rating.js +208 -0
- package/esm2022/rating/lib/rating/rating.js.map +1 -0
- package/esm2022/rating/malva-ui-core-rating.js +5 -0
- package/esm2022/rating/malva-ui-core-rating.js.map +1 -0
- package/esm2022/scrollbar/index.js +2 -0
- package/esm2022/scrollbar/index.js.map +1 -0
- package/esm2022/scrollbar/lib/scrollbar/scrollbar.js +388 -0
- package/esm2022/scrollbar/lib/scrollbar/scrollbar.js.map +1 -0
- package/esm2022/scrollbar/malva-ui-core-scrollbar.js +5 -0
- package/esm2022/scrollbar/malva-ui-core-scrollbar.js.map +1 -0
- package/esm2022/search-field/index.js +3 -0
- package/esm2022/search-field/index.js.map +1 -0
- package/esm2022/search-field/lib/search-field/search-field.js +535 -0
- package/esm2022/search-field/lib/search-field/search-field.js.map +1 -0
- package/esm2022/search-field/lib/search-field/search-overlay-content.js +35 -0
- package/esm2022/search-field/lib/search-field/search-overlay-content.js.map +1 -0
- package/esm2022/search-field/malva-ui-core-search-field.js +5 -0
- package/esm2022/search-field/malva-ui-core-search-field.js.map +1 -0
- package/esm2022/segmented/index.js +5 -0
- package/esm2022/segmented/index.js.map +1 -0
- package/esm2022/segmented/lib/segmented/segmented.js +248 -0
- package/esm2022/segmented/lib/segmented/segmented.js.map +1 -0
- package/esm2022/segmented/lib/segmented-item/segmented-item.js +194 -0
- package/esm2022/segmented/lib/segmented-item/segmented-item.js.map +1 -0
- package/esm2022/segmented/lib/segmented-token.js +4 -0
- package/esm2022/segmented/lib/segmented-token.js.map +1 -0
- package/esm2022/segmented/lib/segmented.types.js +1 -0
- package/esm2022/segmented/lib/segmented.types.js.map +1 -0
- package/esm2022/segmented/malva-ui-core-segmented.js +5 -0
- package/esm2022/segmented/malva-ui-core-segmented.js.map +1 -0
- package/esm2022/select/index.js +4 -0
- package/esm2022/select/index.js.map +1 -0
- package/esm2022/select/lib/select/select.js +685 -0
- package/esm2022/select/lib/select/select.js.map +1 -0
- package/esm2022/select/lib/select-option.js +2 -0
- package/esm2022/select/lib/select-option.js.map +1 -0
- package/esm2022/select/lib/select-template.directives.js +34 -0
- package/esm2022/select/lib/select-template.directives.js.map +1 -0
- package/esm2022/select/malva-ui-core-select.js +5 -0
- package/esm2022/select/malva-ui-core-select.js.map +1 -0
- package/esm2022/sidebar/index.js +16 -0
- package/esm2022/sidebar/index.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar/sidebar.js +251 -0
- package/esm2022/sidebar/lib/sidebar/sidebar.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-content.js +37 -0
- package/esm2022/sidebar/lib/sidebar-content.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-context.js +3 -0
- package/esm2022/sidebar/lib/sidebar-context.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-footer.js +20 -0
- package/esm2022/sidebar/lib/sidebar-footer.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js +341 -0
- package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-header.js +20 -0
- package/esm2022/sidebar/lib/sidebar-header.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js +216 -0
- package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-item-host.js +39 -0
- package/esm2022/sidebar/lib/sidebar-item-host.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-item-icon.js +14 -0
- package/esm2022/sidebar/lib/sidebar-item-icon.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-mode.js +1 -0
- package/esm2022/sidebar/lib/sidebar-mode.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js +202 -0
- package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js +159 -0
- package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js +35 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js +107 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js.map +1 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js +1 -0
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js.map +1 -0
- package/esm2022/sidebar/malva-ui-core-sidebar.js +5 -0
- package/esm2022/sidebar/malva-ui-core-sidebar.js.map +1 -0
- package/esm2022/skeleton/index.js +2 -0
- package/esm2022/skeleton/index.js.map +1 -0
- package/esm2022/skeleton/lib/skeleton/skeleton.js +78 -0
- package/esm2022/skeleton/lib/skeleton/skeleton.js.map +1 -0
- package/esm2022/skeleton/malva-ui-core-skeleton.js +5 -0
- package/esm2022/skeleton/malva-ui-core-skeleton.js.map +1 -0
- package/esm2022/slider/index.js +3 -0
- package/esm2022/slider/index.js.map +1 -0
- package/esm2022/slider/lib/slider/slider-tooltip-def.js +31 -0
- package/esm2022/slider/lib/slider/slider-tooltip-def.js.map +1 -0
- package/esm2022/slider/lib/slider/slider.js +468 -0
- package/esm2022/slider/lib/slider/slider.js.map +1 -0
- package/esm2022/slider/malva-ui-core-slider.js +5 -0
- package/esm2022/slider/malva-ui-core-slider.js.map +1 -0
- package/esm2022/split-pane/index.js +4 -0
- package/esm2022/split-pane/index.js.map +1 -0
- package/esm2022/split-pane/lib/split-pane/split-pane-panel.js +49 -0
- package/esm2022/split-pane/lib/split-pane/split-pane-panel.js.map +1 -0
- package/esm2022/split-pane/lib/split-pane/split-pane.js +290 -0
- package/esm2022/split-pane/lib/split-pane/split-pane.js.map +1 -0
- package/esm2022/split-pane/lib/split-pane/split-pane.types.js +1 -0
- package/esm2022/split-pane/lib/split-pane/split-pane.types.js.map +1 -0
- package/esm2022/split-pane/malva-ui-core-split-pane.js +5 -0
- package/esm2022/split-pane/malva-ui-core-split-pane.js.map +1 -0
- package/esm2022/status-indicator/index.js +2 -0
- package/esm2022/status-indicator/index.js.map +1 -0
- package/esm2022/status-indicator/lib/status-indicator/status-indicator.js +71 -0
- package/esm2022/status-indicator/lib/status-indicator/status-indicator.js.map +1 -0
- package/esm2022/status-indicator/malva-ui-core-status-indicator.js +5 -0
- package/esm2022/status-indicator/malva-ui-core-status-indicator.js.map +1 -0
- package/esm2022/stepper/index.js +5 -0
- package/esm2022/stepper/index.js.map +1 -0
- package/esm2022/stepper/lib/stepper/step-header.js +46 -0
- package/esm2022/stepper/lib/stepper/step-header.js.map +1 -0
- package/esm2022/stepper/lib/stepper/step.js +65 -0
- package/esm2022/stepper/lib/stepper/step.js.map +1 -0
- package/esm2022/stepper/lib/stepper/stepper-token.js +4 -0
- package/esm2022/stepper/lib/stepper/stepper-token.js.map +1 -0
- package/esm2022/stepper/lib/stepper/stepper.js +216 -0
- package/esm2022/stepper/lib/stepper/stepper.js.map +1 -0
- package/esm2022/stepper/lib/stepper/stepper.types.js +1 -0
- package/esm2022/stepper/lib/stepper/stepper.types.js.map +1 -0
- package/esm2022/stepper/malva-ui-core-stepper.js +5 -0
- package/esm2022/stepper/malva-ui-core-stepper.js.map +1 -0
- package/esm2022/switch/index.js +3 -0
- package/esm2022/switch/index.js.map +1 -0
- package/esm2022/switch/lib/switch/switch.js +190 -0
- package/esm2022/switch/lib/switch/switch.js.map +1 -0
- package/esm2022/switch/lib/switch-group/switch-group.js +68 -0
- package/esm2022/switch/lib/switch-group/switch-group.js.map +1 -0
- package/esm2022/switch/lib/switch-group-token.js +3 -0
- package/esm2022/switch/lib/switch-group-token.js.map +1 -0
- package/esm2022/switch/malva-ui-core-switch.js +5 -0
- package/esm2022/switch/malva-ui-core-switch.js.map +1 -0
- package/esm2022/tabs/index.js +9 -0
- package/esm2022/tabs/index.js.map +1 -0
- package/esm2022/tabs/lib/tab/tab.js +72 -0
- package/esm2022/tabs/lib/tab/tab.js.map +1 -0
- package/esm2022/tabs/lib/tab-content/tab-content.js +19 -0
- package/esm2022/tabs/lib/tab-content/tab-content.js.map +1 -0
- package/esm2022/tabs/lib/tab-content-def.js +14 -0
- package/esm2022/tabs/lib/tab-content-def.js.map +1 -0
- package/esm2022/tabs/lib/tab-def.js +17 -0
- package/esm2022/tabs/lib/tab-def.js.map +1 -0
- package/esm2022/tabs/lib/tab-group-token.js +3 -0
- package/esm2022/tabs/lib/tab-group-token.js.map +1 -0
- package/esm2022/tabs/lib/tab-item/tab-item.js +44 -0
- package/esm2022/tabs/lib/tab-item/tab-item.js.map +1 -0
- package/esm2022/tabs/lib/tabs/tabs.js +542 -0
- package/esm2022/tabs/lib/tabs/tabs.js.map +1 -0
- package/esm2022/tabs/lib/tabs.service.js +83 -0
- package/esm2022/tabs/lib/tabs.service.js.map +1 -0
- package/esm2022/tabs/malva-ui-core-tabs.js +5 -0
- package/esm2022/tabs/malva-ui-core-tabs.js.map +1 -0
- package/esm2022/textarea/index.js +2 -0
- package/esm2022/textarea/index.js.map +1 -0
- package/esm2022/textarea/lib/textarea/textarea.js +194 -0
- package/esm2022/textarea/lib/textarea/textarea.js.map +1 -0
- package/esm2022/textarea/malva-ui-core-textarea.js +5 -0
- package/esm2022/textarea/malva-ui-core-textarea.js.map +1 -0
- package/esm2022/tile/index.js +3 -0
- package/esm2022/tile/index.js.map +1 -0
- package/esm2022/tile/lib/tile/tile.js +39 -0
- package/esm2022/tile/lib/tile/tile.js.map +1 -0
- package/esm2022/tile/lib/tile-header.js +14 -0
- package/esm2022/tile/lib/tile-header.js.map +1 -0
- package/esm2022/tile/malva-ui-core-tile.js +5 -0
- package/esm2022/tile/malva-ui-core-tile.js.map +1 -0
- package/esm2022/time-picker/index.js +2 -0
- package/esm2022/time-picker/index.js.map +1 -0
- package/esm2022/time-picker/lib/time-picker/time-picker.js +310 -0
- package/esm2022/time-picker/lib/time-picker/time-picker.js.map +1 -0
- package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js +216 -0
- package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js.map +1 -0
- package/esm2022/time-picker/malva-ui-core-time-picker.js +5 -0
- package/esm2022/time-picker/malva-ui-core-time-picker.js.map +1 -0
- package/esm2022/timeline/index.js +6 -0
- package/esm2022/timeline/index.js.map +1 -0
- package/esm2022/timeline/lib/timeline/timeline-item-icon.js +31 -0
- package/esm2022/timeline/lib/timeline/timeline-item-icon.js.map +1 -0
- package/esm2022/timeline/lib/timeline/timeline-item-meta.js +31 -0
- package/esm2022/timeline/lib/timeline/timeline-item-meta.js.map +1 -0
- package/esm2022/timeline/lib/timeline/timeline-item.js +69 -0
- package/esm2022/timeline/lib/timeline/timeline-item.js.map +1 -0
- package/esm2022/timeline/lib/timeline/timeline.js +36 -0
- package/esm2022/timeline/lib/timeline/timeline.js.map +1 -0
- package/esm2022/timeline/lib/timeline/timeline.types.js +1 -0
- package/esm2022/timeline/lib/timeline/timeline.types.js.map +1 -0
- package/esm2022/timeline/malva-ui-core-timeline.js +5 -0
- package/esm2022/timeline/malva-ui-core-timeline.js.map +1 -0
- package/esm2022/title/index.js +2 -0
- package/esm2022/title/index.js.map +1 -0
- package/esm2022/title/lib/title/title.js +171 -0
- package/esm2022/title/lib/title/title.js.map +1 -0
- package/esm2022/title/malva-ui-core-title.js +5 -0
- package/esm2022/title/malva-ui-core-title.js.map +1 -0
- package/esm2022/toast/index.js +13 -0
- package/esm2022/toast/index.js.map +1 -0
- package/esm2022/toast/lib/abstract-toast-container.js +50 -0
- package/esm2022/toast/lib/abstract-toast-container.js.map +1 -0
- package/esm2022/toast/lib/abstract-toast-item.js +75 -0
- package/esm2022/toast/lib/abstract-toast-item.js.map +1 -0
- package/esm2022/toast/lib/abstract-toast.service.js +176 -0
- package/esm2022/toast/lib/abstract-toast.service.js.map +1 -0
- package/esm2022/toast/lib/toast-container/toast-container.js +61 -0
- package/esm2022/toast/lib/toast-container/toast-container.js.map +1 -0
- package/esm2022/toast/lib/toast-item/toast-item.js +62 -0
- package/esm2022/toast/lib/toast-item/toast-item.js.map +1 -0
- package/esm2022/toast/lib/toast-ref.js +54 -0
- package/esm2022/toast/lib/toast-ref.js.map +1 -0
- package/esm2022/toast/lib/toast-timer.js +37 -0
- package/esm2022/toast/lib/toast-timer.js.map +1 -0
- package/esm2022/toast/lib/toast.directives.js +76 -0
- package/esm2022/toast/lib/toast.directives.js.map +1 -0
- package/esm2022/toast/lib/toast.service.js +127 -0
- package/esm2022/toast/lib/toast.service.js.map +1 -0
- package/esm2022/toast/lib/toast.types.js +39 -0
- package/esm2022/toast/lib/toast.types.js.map +1 -0
- package/esm2022/toast/malva-ui-core-toast.js +5 -0
- package/esm2022/toast/malva-ui-core-toast.js.map +1 -0
- package/esm2022/tokenizer/index.js +4 -0
- package/esm2022/tokenizer/index.js.map +1 -0
- package/esm2022/tokenizer/lib/token/token.js +123 -0
- package/esm2022/tokenizer/lib/token/token.js.map +1 -0
- package/esm2022/tokenizer/lib/token-template.js +23 -0
- package/esm2022/tokenizer/lib/token-template.js.map +1 -0
- package/esm2022/tokenizer/lib/tokenizer/tokenizer.js +324 -0
- package/esm2022/tokenizer/lib/tokenizer/tokenizer.js.map +1 -0
- package/esm2022/tokenizer/malva-ui-core-tokenizer.js +5 -0
- package/esm2022/tokenizer/malva-ui-core-tokenizer.js.map +1 -0
- package/esm2022/toolbar/index.js +4 -0
- package/esm2022/toolbar/index.js.map +1 -0
- package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js +13 -0
- package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js.map +1 -0
- package/esm2022/toolbar/lib/toolbar/toolbar-widget.js +106 -0
- package/esm2022/toolbar/lib/toolbar/toolbar-widget.js.map +1 -0
- package/esm2022/toolbar/lib/toolbar/toolbar.js +19 -0
- package/esm2022/toolbar/lib/toolbar/toolbar.js.map +1 -0
- package/esm2022/toolbar/malva-ui-core-toolbar.js +5 -0
- package/esm2022/toolbar/malva-ui-core-toolbar.js.map +1 -0
- package/esm2022/tooltip/index.js +4 -0
- package/esm2022/tooltip/index.js.map +1 -0
- package/esm2022/tooltip/lib/tooltip/tooltip-panel.js +69 -0
- package/esm2022/tooltip/lib/tooltip/tooltip-panel.js.map +1 -0
- package/esm2022/tooltip/lib/tooltip/tooltip.js +352 -0
- package/esm2022/tooltip/lib/tooltip/tooltip.js.map +1 -0
- package/esm2022/tooltip/lib/tooltip/tooltip.types.js +1 -0
- package/esm2022/tooltip/lib/tooltip/tooltip.types.js.map +1 -0
- package/esm2022/tooltip/malva-ui-core-tooltip.js +5 -0
- package/esm2022/tooltip/malva-ui-core-tooltip.js.map +1 -0
- package/esm2022/tree/index.js +5 -0
- package/esm2022/tree/index.js.map +1 -0
- package/esm2022/tree/lib/tree/tree-context.js +7 -0
- package/esm2022/tree/lib/tree/tree-context.js.map +1 -0
- package/esm2022/tree/lib/tree/tree-node-def.js +34 -0
- package/esm2022/tree/lib/tree/tree-node-def.js.map +1 -0
- package/esm2022/tree/lib/tree/tree-node.js +1 -0
- package/esm2022/tree/lib/tree/tree-node.js.map +1 -0
- package/esm2022/tree/lib/tree/tree-subtree.js +107 -0
- package/esm2022/tree/lib/tree/tree-subtree.js.map +1 -0
- package/esm2022/tree/lib/tree/tree.js +362 -0
- package/esm2022/tree/lib/tree/tree.js.map +1 -0
- package/esm2022/tree/malva-ui-core-tree.js +5 -0
- package/esm2022/tree/malva-ui-core-tree.js.map +1 -0
- package/expand/index.d.ts +2 -0
- package/expand/lib/expand/expand-content.d.ts +26 -0
- package/expand/lib/expand/expand.d.ts +74 -0
- package/expand/malva-ui-core-expand.d.ts +5 -0
- package/file-upload/README.md +7 -0
- package/file-upload/index.d.ts +4 -0
- package/file-upload/lib/file-upload/file-upload.d.ts +138 -0
- package/file-upload/lib/file-upload/file-upload.types.d.ts +42 -0
- package/file-upload/lib/file-upload-action.d.ts +53 -0
- package/file-upload/lib/file-upload-item/file-upload-item.d.ts +30 -0
- package/file-upload/malva-ui-core-file-upload.d.ts +5 -0
- package/filter/README.md +22 -0
- package/filter/index.d.ts +3 -0
- package/filter/lib/filter/filter.d.ts +156 -0
- package/filter/lib/filter.types.d.ts +75 -0
- package/filter/lib/smart-filter-bar/smart-filter-bar.d.ts +153 -0
- package/filter/malva-ui-core-filter.d.ts +5 -0
- package/form/index.d.ts +6 -0
- package/form/lib/fieldset/fieldset.d.ts +58 -0
- package/form/lib/fieldset-span.d.ts +28 -0
- package/form/lib/form/form.d.ts +37 -0
- package/form/lib/form-actions.d.ts +20 -0
- package/form/lib/form-gap.d.ts +5 -0
- package/form/lib/form-header.d.ts +18 -0
- package/form/lib/form.types.d.ts +13 -0
- package/form/malva-ui-core-form.d.ts +5 -0
- package/form-utils/index.d.ts +15 -0
- package/form-utils/lib/aria-value-bridge.d.ts +45 -0
- package/form-utils/lib/description/description.d.ts +16 -0
- package/form-utils/lib/focusable-group-base.d.ts +76 -0
- package/form-utils/lib/form-control-base/signal-form-control-base.d.ts +159 -0
- package/form-utils/lib/form-control-sides.d.ts +20 -0
- package/form-utils/lib/form-control-wrapper/form-control-wrapper-control.d.ts +6 -0
- package/form-utils/lib/form-control-wrapper/form-control-wrapper.d.ts +20 -0
- package/form-utils/lib/form-field/form-field.d.ts +68 -0
- package/form-utils/lib/hint/hint.d.ts +5 -0
- package/form-utils/lib/label/label.d.ts +22 -0
- package/form-utils/lib/message/message.d.ts +7 -0
- package/form-utils/lib/models/error-display-strategy.d.ts +1 -0
- package/form-utils/lib/models/form-control-connector.d.ts +41 -0
- package/form-utils/lib/models/form-state.d.ts +1 -0
- package/form-utils/lib/selection.service.d.ts +27 -0
- package/form-utils/malva-ui-core-form-utils.d.ts +5 -0
- package/form-utils/testing/index.d.ts +1 -0
- package/form-utils/testing/lib/forms-binding-matrix.d.ts +47 -0
- package/form-utils/testing/malva-ui-core-form-utils-testing.d.ts +5 -0
- package/index.d.ts +69 -0
- package/input/index.d.ts +3 -0
- package/input/lib/input/input-native.d.ts +36 -0
- package/input/lib/input/input-value-accessor.d.ts +11 -0
- package/input/lib/input/input.d.ts +189 -0
- package/input/lib/input/password-strength.d.ts +34 -0
- package/input/malva-ui-core-input.d.ts +5 -0
- package/kbd/index.d.ts +1 -0
- package/kbd/lib/kbd/kbd.d.ts +52 -0
- package/kbd/malva-ui-core-kbd.d.ts +5 -0
- package/layout/index.d.ts +4 -0
- package/layout/lib/layout/directives/MlvLayoutSide.d.ts +6 -0
- package/layout/lib/layout/directives/MlvLayoutTop.d.ts +6 -0
- package/layout/lib/layout/layout.d.ts +20 -0
- package/layout/lib/layout/services/theme.service.d.ts +33 -0
- package/layout/malva-ui-core-layout.d.ts +5 -0
- package/link/index.d.ts +2 -0
- package/link/lib/link/link.d.ts +15 -0
- package/link/lib/link/link.directives.d.ts +10 -0
- package/link/malva-ui-core-link.d.ts +5 -0
- package/list/index.d.ts +13 -0
- package/list/lib/list/list.d.ts +25 -0
- package/list/lib/list-item/list-item.d.ts +67 -0
- package/list/lib/list-item-actions.d.ts +12 -0
- package/list/lib/list-item-byline.d.ts +5 -0
- package/list/lib/list-item-group/list-item-group.d.ts +11 -0
- package/list/lib/list-item-link/list-item-link.d.ts +8 -0
- package/list/lib/list-item-media.d.ts +5 -0
- package/list/lib/list-item-meta.d.ts +5 -0
- package/list/lib/list-item-prefix.d.ts +5 -0
- package/list/lib/list-item-suffix.d.ts +5 -0
- package/list/lib/list-item-template.d.ts +10 -0
- package/list/lib/list-item-title.d.ts +5 -0
- package/list/lib/list-selectable.d.ts +73 -0
- package/list/malva-ui-core-list.d.ts +5 -0
- package/loader/index.d.ts +1 -0
- package/loader/lib/loader/loader.d.ts +84 -0
- package/loader/malva-ui-core-loader.d.ts +5 -0
- package/malva-ui-core.d.ts +5 -0
- package/menu/index.d.ts +9 -0
- package/menu/lib/menu/menu-group-label.d.ts +22 -0
- package/menu/lib/menu/menu-group.d.ts +27 -0
- package/menu/lib/menu/menu-item.d.ts +76 -0
- package/menu/lib/menu/menu-separator.d.ts +18 -0
- package/menu/lib/menu/menu-trigger.d.ts +255 -0
- package/menu/lib/menu/menu.d.ts +149 -0
- package/menu/lib/menu/menu.types.d.ts +13 -0
- package/menu/lib/menu/menubar.d.ts +131 -0
- package/menu/lib/menu/menubar.types.d.ts +82 -0
- package/menu/lib/menu/submenu-aim.d.ts +10 -0
- package/menu/malva-ui-core-menu.d.ts +5 -0
- package/notification/index.d.ts +4 -0
- package/notification/lib/notification-item/notification-item.d.ts +20 -0
- package/notification/lib/notification-ref.d.ts +12 -0
- package/notification/lib/notification.service.d.ts +43 -0
- package/notification/lib/notification.types.d.ts +52 -0
- package/notification/malva-ui-core-notification.d.ts +5 -0
- package/number-input/index.d.ts +1 -0
- package/number-input/lib/number-input/number-input.d.ts +162 -0
- package/number-input/malva-ui-core-number-input.d.ts +5 -0
- package/package.json +315 -0
- package/page/README.md +8 -0
- package/page/index.d.ts +14 -0
- package/page/lib/page/page-scroll.token.d.ts +19 -0
- package/page/lib/page/page-snap-controller.d.ts +87 -0
- package/page/lib/page/page-snap.directive.d.ts +40 -0
- package/page/lib/page/page.d.ts +74 -0
- package/page/lib/page-content/page-aside.d.ts +7 -0
- package/page/lib/page-content/page-content.d.ts +37 -0
- package/page/lib/page-dock/page-dock.d.ts +50 -0
- package/page/lib/page-dock/page-dock.slots.d.ts +16 -0
- package/page/lib/page-header/page-header.d.ts +77 -0
- package/page/lib/page-header/page-header.directives.d.ts +50 -0
- package/page/lib/page-shell/page-shell-color.d.ts +48 -0
- package/page/lib/page-shell/page-shell-css-color.d.ts +20 -0
- package/page/lib/page-shell/page-shell.d.ts +44 -0
- package/page/lib/page-shell/page-shell.slots.d.ts +16 -0
- package/page/lib/page-summary/page-summary-item.d.ts +11 -0
- package/page/lib/page-summary/page-summary.d.ts +36 -0
- package/page/malva-ui-core-page.d.ts +5 -0
- package/pagination/index.d.ts +4 -0
- package/pagination/lib/pagination/pagination.d.ts +182 -0
- package/pagination/lib/pagination/pagination.directives.d.ts +44 -0
- package/pagination/lib/pagination/pagination.model.d.ts +6 -0
- package/pagination/lib/pagination/pagination.service.d.ts +26 -0
- package/pagination/malva-ui-core-pagination.d.ts +5 -0
- package/pin-input/index.d.ts +2 -0
- package/pin-input/lib/pin-input/pin-input-separator.d.ts +24 -0
- package/pin-input/lib/pin-input/pin-input.d.ts +176 -0
- package/pin-input/malva-ui-core-pin-input.d.ts +5 -0
- package/popup/index.d.ts +9 -0
- package/popup/lib/popup/popup.d.ts +343 -0
- package/popup/lib/popup-container/popup-container.d.ts +61 -0
- package/popup/lib/popup-container/popup-container.token.d.ts +34 -0
- package/popup/lib/popup-content.d.ts +6 -0
- package/popup/lib/popup-header-content.d.ts +18 -0
- package/popup/lib/popup-pinned-content.d.ts +17 -0
- package/popup/lib/popup-positions.d.ts +105 -0
- package/popup/lib/popup-trigger/popup-trigger.d.ts +102 -0
- package/popup/lib/popup.service.d.ts +159 -0
- package/popup/malva-ui-core-popup.d.ts +5 -0
- package/progress/index.d.ts +1 -0
- package/progress/lib/progress/progress.d.ts +69 -0
- package/progress/malva-ui-core-progress.d.ts +5 -0
- package/radio/index.d.ts +2 -0
- package/radio/lib/radio/radio.d.ts +87 -0
- package/radio/lib/radio-group/radio-group.d.ts +35 -0
- package/radio/lib/radio-group-token.d.ts +7 -0
- package/radio/malva-ui-core-radio.d.ts +5 -0
- package/rating/index.d.ts +1 -0
- package/rating/lib/rating/rating.d.ts +100 -0
- package/rating/malva-ui-core-rating.d.ts +5 -0
- package/schematics/collection.json +12 -0
- package/schematics/ng-add/index.cjs +272 -0
- package/schematics/ng-add/schema.json +92 -0
- package/scrollbar/index.d.ts +1 -0
- package/scrollbar/lib/scrollbar/scrollbar.d.ts +166 -0
- package/scrollbar/malva-ui-core-scrollbar.d.ts +5 -0
- package/search-field/README.md +32 -0
- package/search-field/index.d.ts +2 -0
- package/search-field/lib/search-field/search-field.d.ts +347 -0
- package/search-field/lib/search-field/search-overlay-content.d.ts +59 -0
- package/search-field/malva-ui-core-search-field.d.ts +5 -0
- package/segmented/index.d.ts +4 -0
- package/segmented/lib/segmented/segmented.d.ts +80 -0
- package/segmented/lib/segmented-item/segmented-item.d.ts +89 -0
- package/segmented/lib/segmented-token.d.ts +22 -0
- package/segmented/lib/segmented.types.d.ts +9 -0
- package/segmented/malva-ui-core-segmented.d.ts +5 -0
- package/select/index.d.ts +3 -0
- package/select/lib/select/select.d.ts +379 -0
- package/select/lib/select-option.d.ts +1 -0
- package/select/lib/select-template.directives.d.ts +14 -0
- package/select/malva-ui-core-select.d.ts +5 -0
- package/sidebar/index.d.ts +15 -0
- package/sidebar/lib/sidebar/sidebar.d.ts +134 -0
- package/sidebar/lib/sidebar-content.d.ts +11 -0
- package/sidebar/lib/sidebar-context.d.ts +23 -0
- package/sidebar/lib/sidebar-footer.d.ts +9 -0
- package/sidebar/lib/sidebar-group/sidebar-group.d.ts +127 -0
- package/sidebar/lib/sidebar-header.d.ts +9 -0
- package/sidebar/lib/sidebar-item/sidebar-item.d.ts +104 -0
- package/sidebar/lib/sidebar-item-host.d.ts +18 -0
- package/sidebar/lib/sidebar-item-icon.d.ts +6 -0
- package/sidebar/lib/sidebar-mode.d.ts +2 -0
- package/sidebar/lib/sidebar-rail/sidebar-rail.d.ts +54 -0
- package/sidebar/lib/sidebar-trigger/sidebar-trigger.d.ts +67 -0
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.d.ts +54 -0
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.d.ts +19 -0
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.types.d.ts +20 -0
- package/sidebar/malva-ui-core-sidebar.d.ts +5 -0
- package/skeleton/index.d.ts +1 -0
- package/skeleton/lib/skeleton/skeleton.d.ts +60 -0
- package/skeleton/malva-ui-core-skeleton.d.ts +5 -0
- package/slider/index.d.ts +2 -0
- package/slider/lib/slider/slider-tooltip-def.d.ts +39 -0
- package/slider/lib/slider/slider.d.ts +171 -0
- package/slider/malva-ui-core-slider.d.ts +5 -0
- package/split-pane/index.d.ts +3 -0
- package/split-pane/lib/split-pane/split-pane-panel.d.ts +34 -0
- package/split-pane/lib/split-pane/split-pane.d.ts +98 -0
- package/split-pane/lib/split-pane/split-pane.types.d.ts +7 -0
- package/split-pane/malva-ui-core-split-pane.d.ts +5 -0
- package/status-indicator/index.d.ts +1 -0
- package/status-indicator/lib/status-indicator/status-indicator.d.ts +61 -0
- package/status-indicator/malva-ui-core-status-indicator.d.ts +5 -0
- package/stepper/index.d.ts +4 -0
- package/stepper/lib/stepper/step-header.d.ts +34 -0
- package/stepper/lib/stepper/step.d.ts +51 -0
- package/stepper/lib/stepper/stepper-token.d.ts +13 -0
- package/stepper/lib/stepper/stepper.d.ts +98 -0
- package/stepper/lib/stepper/stepper.types.d.ts +4 -0
- package/stepper/malva-ui-core-stepper.d.ts +5 -0
- package/styles/malva-ui.css +1706 -0
- package/styles/tokens.md +698 -0
- package/switch/index.d.ts +2 -0
- package/switch/lib/switch/switch.d.ts +118 -0
- package/switch/lib/switch-group/switch-group.d.ts +24 -0
- package/switch/lib/switch-group-token.d.ts +6 -0
- package/switch/malva-ui-core-switch.d.ts +5 -0
- package/tabs/index.d.ts +8 -0
- package/tabs/lib/tab/tab.d.ts +46 -0
- package/tabs/lib/tab-content/tab-content.d.ts +11 -0
- package/tabs/lib/tab-content-def.d.ts +6 -0
- package/tabs/lib/tab-def.d.ts +11 -0
- package/tabs/lib/tab-group-token.d.ts +10 -0
- package/tabs/lib/tab-item/tab-item.d.ts +28 -0
- package/tabs/lib/tabs/tabs.d.ts +202 -0
- package/tabs/lib/tabs.service.d.ts +24 -0
- package/tabs/malva-ui-core-tabs.d.ts +5 -0
- package/textarea/index.d.ts +1 -0
- package/textarea/lib/textarea/textarea.d.ts +77 -0
- package/textarea/malva-ui-core-textarea.d.ts +5 -0
- package/tile/index.d.ts +2 -0
- package/tile/lib/tile/tile.d.ts +20 -0
- package/tile/lib/tile-header.d.ts +6 -0
- package/tile/malva-ui-core-tile.d.ts +5 -0
- package/time-picker/README.md +7 -0
- package/time-picker/index.d.ts +1 -0
- package/time-picker/lib/time-picker/time-picker.d.ts +135 -0
- package/time-picker/lib/time-picker-column/time-picker-column.d.ts +111 -0
- package/time-picker/malva-ui-core-time-picker.d.ts +5 -0
- package/timeline/index.d.ts +5 -0
- package/timeline/lib/timeline/timeline-item-icon.d.ts +24 -0
- package/timeline/lib/timeline/timeline-item-meta.d.ts +24 -0
- package/timeline/lib/timeline/timeline-item.d.ts +52 -0
- package/timeline/lib/timeline/timeline.d.ts +27 -0
- package/timeline/lib/timeline/timeline.types.d.ts +18 -0
- package/timeline/malva-ui-core-timeline.d.ts +5 -0
- package/title/index.d.ts +1 -0
- package/title/lib/title/title.d.ts +63 -0
- package/title/malva-ui-core-title.d.ts +5 -0
- package/toast/index.d.ts +10 -0
- package/toast/lib/abstract-toast-container.d.ts +29 -0
- package/toast/lib/abstract-toast-item.d.ts +44 -0
- package/toast/lib/abstract-toast.service.d.ts +75 -0
- package/toast/lib/toast-container/toast-container.d.ts +23 -0
- package/toast/lib/toast-item/toast-item.d.ts +25 -0
- package/toast/lib/toast-ref.d.ts +33 -0
- package/toast/lib/toast-timer.d.ts +24 -0
- package/toast/lib/toast.directives.d.ts +13 -0
- package/toast/lib/toast.service.d.ts +41 -0
- package/toast/lib/toast.types.d.ts +139 -0
- package/toast/malva-ui-core-toast.d.ts +5 -0
- package/tokenizer/index.d.ts +3 -0
- package/tokenizer/lib/token/token.d.ts +60 -0
- package/tokenizer/lib/token-template.d.ts +29 -0
- package/tokenizer/lib/tokenizer/tokenizer.d.ts +109 -0
- package/tokenizer/malva-ui-core-tokenizer.d.ts +5 -0
- package/toolbar/index.d.ts +3 -0
- package/toolbar/lib/toolbar/toolbar-spacer.d.ts +5 -0
- package/toolbar/lib/toolbar/toolbar-widget.d.ts +75 -0
- package/toolbar/lib/toolbar/toolbar.d.ts +8 -0
- package/toolbar/malva-ui-core-toolbar.d.ts +5 -0
- package/tooltip/README.md +7 -0
- package/tooltip/index.d.ts +3 -0
- package/tooltip/lib/tooltip/tooltip-panel.d.ts +26 -0
- package/tooltip/lib/tooltip/tooltip.d.ts +148 -0
- package/tooltip/lib/tooltip/tooltip.types.d.ts +17 -0
- package/tooltip/malva-ui-core-tooltip.d.ts +5 -0
- package/tree/index.d.ts +4 -0
- package/tree/lib/tree/tree-context.d.ts +62 -0
- package/tree/lib/tree/tree-node-def.d.ts +33 -0
- package/tree/lib/tree/tree-node.d.ts +45 -0
- package/tree/lib/tree/tree-subtree.d.ts +63 -0
- package/tree/lib/tree/tree.d.ts +156 -0
- package/tree/malva-ui-core-tree.d.ts +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../../../../../libs/core/tabs/src/lib/tabs/tabs.ts","../../../../../../../libs/core/tabs/src/lib/tabs/tabs.html"],"names":[],"mappings":"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","sourcesContent":["import type { AfterViewInit, TemplateRef } from '@angular/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n model,\n signal,\n untracked,\n viewChild,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Router, NavigationEnd } from '@angular/router';\nimport type { IsActiveMatchOptions } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { Tab, TabContent, TabList, TabPanel, Tabs } from '@angular/aria/tabs';\nimport { MlvTabItem } from '../tab-item/tab-item';\nimport { MlvTabContent } from '../tab-content/tab-content';\nimport type { MlvTab } from '../tab/tab';\nimport { MlvTabsService } from '../tabs.service';\nimport type {\n MlvTabGroupAccessor,\n MlvTabOrientation,\n} from '../tab-group-token';\nimport { TAB_GROUP } from '../tab-group-token';\nimport {\n MlvPopup,\n MlvPopupContent,\n MlvPopupTrigger,\n} from '@malva-ui/core/popup';\nimport { MlvList, MlvListItem } from '@malva-ui/core/list';\nimport { MLV_TABS_I18N } from '@malva-ui/i18n';\nimport {\n MLV_DENSITY_ELEMENT,\n MlvDensityDirective,\n} from '@malva-ui/cdk/density';\n\n/**\n * Visual style of the tab header. Orthogonal to `orientation` — a boxed group can\n * be horizontal or vertical.\n *\n * - `'underline'` (default): a sliding indicator bar under/beside the active tab\n * (non-active tabs show a faint underline on hover).\n * - `'boxed'`: a segmented control — a grey, content-width track holds the tabs\n * and a white pill slides behind the active one (non-active tabs tint on hover).\n */\nexport type MlvTabAppearance = 'underline' | 'boxed';\n\n@Component({\n selector: 'mlv-tab-group',\n imports: [\n NgTemplateOutlet,\n TabList,\n Tab,\n TabPanel,\n TabContent,\n MlvTabItem,\n MlvTabContent,\n MlvPopup,\n MlvPopupContent,\n MlvPopupTrigger,\n MlvList,\n MlvListItem,\n ],\n templateUrl: './tabs.html',\n styleUrl: './tabs.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n // `Tabs` (`ngTabs`) is applied to the host so the aria tab list/panels\n // register against a single container; it carries no inputs.\n // `MlvDensityDirective` exposes `mlvDensity` for content-density sizing.\n hostDirectives: [\n Tabs,\n { directive: MlvDensityDirective, inputs: ['mlvDensity: mlvDensity'] },\n ],\n providers: [\n MlvTabsService,\n { provide: MLV_DENSITY_ELEMENT, useValue: 'tab-group' },\n {\n provide: TAB_GROUP,\n useExisting: MlvTabGroup,\n },\n ],\n host: {\n class: 'mlv-tab-group',\n '[class.mlv-tab-group--horizontal]': 'orientation() === \"horizontal\"',\n '[class.mlv-tab-group--vertical]': 'orientation() === \"vertical\"',\n '[class.mlv-tab-group--appearance-boxed]': \"appearance() === 'boxed'\",\n },\n})\nexport class MlvTabGroup implements MlvTabGroupAccessor, AfterViewInit {\n /** @private Scoped service tracking tab registration and visible/overflow split. */\n private readonly _tabsService = inject(MlvTabsService);\n /** @private Destroy reference used to tear down the resize observer. */\n private readonly _destroyRef = inject(DestroyRef);\n /**\n * @private Router used for routed-mode active detection and navigation.\n * `null` when `RouterModule`/`provideRouter` is not present, keeping non-routed\n * tab groups fully functional without a router.\n */\n private readonly _router = inject(Router, { optional: true });\n\n /** @protected The component's i18n strings signal. */\n protected readonly _i18n = inject(MLV_TABS_I18N);\n /** @private Native ResizeObserver watching the tab-list header for overflow recalculation. */\n private _resizeObserver: ResizeObserver | null = null;\n\n /**\n * @private Trailing debounce timer for the ResizeObserver. Coalesces the burst\n * of resize callbacks fired during a drag into a single recalculation so tabs\n * do not flip between the row and the overflow menu on every frame.\n */\n private _resizeDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n /**\n * @private Cache of each tab's natural (fully-rendered) header width, keyed by\n * tab value. Populated the first time all tabs are rendered and reused on every\n * subsequent recalculation so we never have to briefly expand the DOM to all\n * tabs to re-measure — which is what caused the \"dizzy\" flicker feedback loop.\n */\n private readonly _tabWidths = new Map<string, number>();\n\n /** @private Measured width of the \"More (N)\" overflow trigger (falls back to 100). */\n private _moreButtonWidth = 0;\n\n /** @private Trailing debounce (ms) applied to ResizeObserver-driven recalculation. */\n private static readonly _RESIZE_DEBOUNCE_MS = 64;\n\n /**\n * @private Extra px of clearance an overflowed tab must gain before it is\n * allowed back into the visible row. Provides hysteresis so a tab does not\n * oscillate in/out at boundary widths.\n */\n private static readonly _HYSTERESIS_PX = 24;\n\n /** @private True when popup closed because an item was selected (skip focus restoration). */\n private _popupClosedBySelection = false;\n\n readonly orientation = model<MlvTabOrientation>('horizontal');\n readonly activeTab = model<string>('');\n\n /**\n * Visual style of the tab header. `'underline'` (default) shows a sliding\n * indicator bar; `'boxed'` fills the active tab with a rounded surface and\n * hides the indicator. Orthogonal to `orientation` — composes with both\n * horizontal and vertical layouts.\n */\n readonly appearance = input<MlvTabAppearance>('underline');\n\n /**\n * @internal True when at least one registered tab carries a `[routerLink]`\n * (its `urlTree()` is non-null). In routed mode the active tab is derived from\n * the URL via `Router.isActive` rather than from click/keyboard selection, and\n * the auto-select-first + aria-selection paths defer to the route.\n */\n protected readonly _isRouted = computed(() =>\n this._tabsService.tabs().some((t) => t.urlTree() !== null),\n );\n\n /**\n * @internal Bridges the public `activeTab` model to the aria `ngTabList`\n * `selectedTab` model input (`string | undefined`). An empty `activeTab`\n * maps to `undefined` (no tab selected) so aria does not try to match a tab\n * whose value is the empty string.\n */\n protected readonly selectedTab = computed<string | undefined>(\n () => this.activeTab() || undefined,\n );\n\n /** @internal Tracks which overflow item has tabindex=0. */\n readonly overflowFocusedIndex = signal(0);\n\n readonly tabListRef = viewChild<ElementRef<HTMLElement>>('tabListRef');\n readonly indicatorRef = viewChild<ElementRef<HTMLElement>>('indicatorRef');\n readonly morePopupRef = viewChild<MlvPopup>('morePopup');\n readonly tabItems = viewChildren(MlvTabItem);\n\n /**\n * @private The \"More (N)\" overflow trigger button, present only while overflow\n * is active. An own-template element, so a signal view query replaces the\n * former `querySelector('.mlv-tab-group__more-trigger')` used when measuring\n * the trigger's width during overflow layout.\n */\n private readonly _moreTriggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('moreTrigger');\n\n /**\n * @private The overflow popup's focusable menu-item elements, in DOM order.\n * They are declared in this component's own template (inside `mlvPopupContent`),\n * so a signal view query resolves them even though the popup renders in a\n * detached overlay — replacing a `querySelectorAll('[data-overflow-item-index]')`\n * for the Arrow-key navigation inside the overflow menu.\n */\n private readonly _overflowItemRefs = viewChildren('overflowItem', {\n read: ElementRef,\n });\n\n readonly visibleTabs = computed(() => this._tabsService.visibleTabs());\n readonly overflowTabs = computed(() => this._tabsService.overflowTabs());\n\n readonly activeContentTemplate = computed<TemplateRef<unknown> | null>(() => {\n const value = this.activeTab();\n const tabs = this._tabsService.tabs();\n const activeTabComp = tabs.find((t) => t.value() === value);\n return activeTabComp?.contentTemplate()?.templateRef ?? null;\n });\n\n constructor() {\n // Auto-select first tab if none is set. Suppressed in routed mode where the\n // URL owns the active tab (see `_syncActiveFromRoute`).\n effect(() => {\n if (this._isRouted()) return;\n const tabs = this._tabsService.tabs();\n const active = this.activeTab();\n if (\n tabs.length > 0 &&\n (!active || !tabs.some((t) => t.value() === active))\n ) {\n this.activeTab.set(tabs[0].value());\n }\n });\n\n // ─── Routed mode ─────────────────────────────────────────────────────────\n // When any child <mlv-tab> carries a [routerLink], derive `activeTab` from\n // the current URL instead of click/keyboard selection. The routerLink is a\n // URL carrier on the display:none def node; because the header tab is\n // rendered separately, routerLinkActive cannot style it, so active state is\n // owned here via Router.isActive. Intentional, not a workaround.\n const router = this._router;\n if (router) {\n router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n takeUntilDestroyed(),\n )\n .subscribe(() => this._syncActiveFromRoute());\n\n // The router may already be settled (no further NavigationEnd will fire),\n // so run an initial sync once routed tabs register. Only `_isRouted()` /\n // `tabs()` are tracked; the set itself is untracked to avoid a feedback\n // loop through `activeTab`.\n effect(() => {\n if (!this._isRouted()) return;\n this._tabsService.tabs();\n untracked(() => this._syncActiveFromRoute());\n });\n }\n\n // Pin the active tab into the visible row. When overflow is active this\n // swaps the active tab into the last visible slot (identical to picking it\n // from the overflow popup) so the active tab ALWAYS keeps a rendered\n // `ngTab`. That is essential: if the active tab's `ngTab` is torn down (e.g.\n // a resize repartition pushes it into overflow), `@angular/aria` desyncs its\n // `selectedTab` model, marks the active `ngTabPanel` inert and the deferred\n // `ngTabContent` destroys the panel body permanently. Keeping the active\n // tab visible prevents that teardown, so the active content survives any\n // resize/repartition.\n effect(() => {\n const active = this.activeTab();\n this._tabsService.forcedVisibleValue.set(active || null);\n });\n\n // Update indicator position when active tab or visible tabs change\n effect(() => {\n this.activeTab();\n this.visibleTabs();\n this.tabItems();\n this._updateIndicator();\n });\n }\n\n ngAfterViewInit(): void {\n this._setupResizeObserver();\n this._destroyRef.onDestroy(() => this._teardownResizeObserver());\n }\n\n // ─── Public API ──────────────────────────────────────────────────────────\n\n selectTab(value: string): void {\n const tab = this._tabsService.tabs().find((t) => t.value() === value);\n if (tab?.disabled()) return;\n\n // Routed tab: navigation is the source of truth. Trigger it and let the\n // resulting NavigationEnd update `activeTab` via `_syncActiveFromRoute` — do\n // NOT set `activeTab` directly (that would desync the header from the URL).\n const urlTree = tab?.urlTree() ?? null;\n if (urlTree && this._router) {\n this._router.navigateByUrl(urlTree);\n return;\n }\n\n this.activeTab.set(value);\n }\n\n /**\n * @internal Bridges the aria `ngTabList` `selectedTab` output back to the\n * public `activeTab` model. Ignores `undefined` (aria emits it transiently\n * before the default selection settles) so the auto-select effect keeps\n * ownership of the initial value.\n */\n protected _onSelectedTabChange(value: string | undefined): void {\n // In routed mode the URL owns `activeTab`; ignore aria's optimistic\n // selection so the header cannot desync from the route (navigation,\n // triggered via `selectTab`, drives `activeTab` through NavigationEnd).\n if (this._isRouted()) return;\n if (value !== undefined && value !== this.activeTab()) {\n this.activeTab.set(value);\n }\n }\n\n selectOverflowTab(value: string): void {\n this._popupClosedBySelection = true;\n this._tabsService.forceVisible(value);\n this.selectTab(value);\n // Close popup then focus the newly promoted visible tab\n this.morePopupRef()?.opened.set(false);\n requestAnimationFrame(() => {\n const items = this.tabItems();\n const visibleTabs = this.visibleTabs();\n const idx = visibleTabs.findIndex((t) => t.value() === value);\n if (idx >= 0 && items[idx]) {\n items[idx].focus();\n }\n });\n }\n\n isActive(value: string): boolean {\n return this.activeTab() === value;\n }\n\n // ─── Routed mode helpers ─────────────────────────────────────────────────\n\n /**\n * @private Sets `activeTab` to the first tab whose routerLink target is active\n * for the current URL (per its `linkActiveOptions`). No-op when not routed or\n * when no tab matches (the route stays the source of truth).\n */\n private _syncActiveFromRoute(): void {\n if (!this._isRouted()) return;\n const match = this._tabsService\n .tabs()\n .find((t) => this._isTabActiveByRoute(t));\n if (match && match.value() !== this.activeTab()) {\n this.activeTab.set(match.value());\n }\n }\n\n /**\n * @private Whether a tab's routerLink `urlTree` is active for the current URL,\n * honouring its `linkActiveOptions`.\n */\n private _isTabActiveByRoute(tab: MlvTab): boolean {\n const router = this._router;\n const urlTree = tab.urlTree();\n if (!router || !urlTree) return false;\n const opts = tab.linkActiveOptions();\n // `Router.isActive` reads an object argument as raw `IsActiveMatchOptions`\n // and would silently ignore an `{ exact }` key, so map the RouterLinkActive\n // `{ exact }` shorthand through the boolean overload (matching Angular's own\n // RouterLinkActive), and pass a full `IsActiveMatchOptions` straight through.\n return this._isFullMatchOptions(opts)\n ? router.isActive(urlTree, opts)\n : router.isActive(urlTree, opts.exact);\n }\n\n /**\n * @private Type guard distinguishing a full `IsActiveMatchOptions` object from\n * the `{ exact: boolean }` shorthand (mirrors Angular's internal check).\n */\n private _isFullMatchOptions(\n opts: { exact: boolean } | IsActiveMatchOptions,\n ): opts is IsActiveMatchOptions {\n const o = opts as Partial<IsActiveMatchOptions>;\n return !!(o.paths || o.matrixParams || o.queryParams || o.fragment);\n }\n\n // ─── Overflow popup handling ─────────────────────────────────────────────\n\n /** Opens the overflow popup and focuses the first overflow item after render. */\n openOverflowPopup(): void {\n this.overflowFocusedIndex.set(0);\n this.morePopupRef()?.opened.set(true);\n }\n\n /**\n * Called when the overflow popup finishes opening.\n * Focuses the first (or active) overflow item.\n */\n onMorePopupAfterOpened(): void {\n // Active overflow tab gets initial focus, otherwise first item\n const overflowTabs = this.overflowTabs();\n const activeIdx = overflowTabs.findIndex((t) => this.isActive(t.value()));\n const targetIdx = activeIdx >= 0 ? activeIdx : 0;\n this.overflowFocusedIndex.set(targetIdx);\n\n this._overflowItemRefs()[targetIdx]?.nativeElement.focus();\n }\n\n /**\n * Called when the overflow popup finishes closing.\n * Returns focus to the active visible tab unless the popup was closed by\n * selecting an item (focus goes to the promoted tab instead).\n */\n onMorePopupAfterClosed(): void {\n if (this._popupClosedBySelection) {\n this._popupClosedBySelection = false;\n return;\n }\n const items = this.tabItems();\n const activeIdx = this.visibleTabs().findIndex((t) =>\n this.isActive(t.value()),\n );\n items[activeIdx >= 0 ? activeIdx : 0]?.focus();\n }\n\n /**\n * Keydown handler on the overflow list wrapper inside the popup.\n * Up/Down arrows navigate between items; Escape closes the popup.\n */\n onOverflowKeydown(event: KeyboardEvent): void {\n const items = this._overflowItemRefs().map((ref) => ref.nativeElement);\n const count = items.length;\n if (count === 0) return;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.overflowFocusedIndex.update((i) => Math.min(i + 1, count - 1));\n items[this.overflowFocusedIndex()]?.focus();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.overflowFocusedIndex.update((i) => Math.max(i - 1, 0));\n items[this.overflowFocusedIndex()]?.focus();\n } else if (event.key === 'Escape') {\n event.preventDefault();\n this.morePopupRef()?.opened.set(false);\n // afterClosed will restore focus to last focused visible tab\n }\n }\n\n // ─── Private helpers ─────────────────────────────────────────────────────\n\n /** @private Repositions the active-tab indicator bar via CSS custom properties. */\n private _updateIndicator(): void {\n queueMicrotask(() => {\n const items = this.tabItems();\n const indicatorEl = this.indicatorRef()?.nativeElement;\n if (!indicatorEl) return;\n\n const activeItem = items.find(\n (_, i) =>\n this.visibleTabs()[i] && this.isActive(this.visibleTabs()[i].value()),\n );\n\n if (!activeItem) {\n indicatorEl.style.setProperty('--mlv-tab-indicator-width', '0');\n indicatorEl.style.setProperty('--mlv-tab-indicator-height', '0');\n return;\n }\n\n const el = activeItem.elementRef.nativeElement;\n if (this.orientation() === 'horizontal') {\n indicatorEl.style.setProperty(\n '--mlv-tab-indicator-left',\n `${el.offsetLeft}px`,\n );\n indicatorEl.style.setProperty(\n '--mlv-tab-indicator-width',\n `${el.offsetWidth}px`,\n );\n } else {\n indicatorEl.style.setProperty(\n '--mlv-tab-indicator-top',\n `${el.offsetTop}px`,\n );\n indicatorEl.style.setProperty(\n '--mlv-tab-indicator-height',\n `${el.offsetHeight}px`,\n );\n }\n });\n }\n\n /** @private Attaches a ResizeObserver to the header to recalculate overflow on width changes. */\n private _setupResizeObserver(): void {\n if (this.orientation() === 'vertical') return;\n\n const headerEl = this.tabListRef()?.nativeElement;\n if (!headerEl) return;\n\n if (typeof ResizeObserver === 'undefined') return;\n\n // Debounce (trailing): a drag fires the observer many times per second.\n // Coalescing them into one recalculation after the width settles is the\n // first line of defence against the flickering \"dizzy\" repartition.\n this._resizeObserver = new ResizeObserver(() => {\n if (this._resizeDebounceTimer !== null) {\n clearTimeout(this._resizeDebounceTimer);\n }\n this._resizeDebounceTimer = setTimeout(() => {\n this._resizeDebounceTimer = null;\n this._recalculateOverflow();\n }, MlvTabGroup._RESIZE_DEBOUNCE_MS);\n });\n this._resizeObserver.observe(headerEl);\n }\n\n /** @private Disconnects and clears the header ResizeObserver and its debounce timer. */\n private _teardownResizeObserver(): void {\n if (this._resizeDebounceTimer !== null) {\n clearTimeout(this._resizeDebounceTimer);\n this._resizeDebounceTimer = null;\n }\n this._resizeObserver?.disconnect();\n this._resizeObserver = null;\n }\n\n /**\n * @private Updates the visible/overflow split for the current header width.\n *\n * Unlike the previous implementation it does NOT reset the rendered set to\n * \"show all\" on every call. Tab widths are cached (keyed by value) the first\n * time every tab is rendered; afterwards the split is computed purely from the\n * cache and the container width. That removes the measure→mutate→re-measure\n * feedback loop (moving a tab to overflow no longer changes what we measure),\n * which — together with the ResizeObserver debounce and the hysteresis in\n * {@link _computeFittingCount} — kills the flickering repartition.\n */\n private _recalculateOverflow(): void {\n if (this.orientation() === 'vertical') {\n this._tabsService.maxVisibleCount.set(-1);\n return;\n }\n\n const headerEl = this.tabListRef()?.nativeElement;\n if (!headerEl) return;\n\n // Refresh the cache from whatever is currently rendered (no DOM mutation).\n this._captureRenderedWidths();\n\n const allTabs = this._tabsService.tabs();\n const missingWidth = allTabs.some((t) => !this._tabWidths.has(t.value()));\n\n if (missingWidth) {\n // Cold cache (first run) or new tabs added: render every tab once so we\n // can capture the missing widths, then apply. This is the ONLY branch\n // that expands the DOM, and only runs until the cache is warm — so\n // steady-state resizes never flash the full tab set.\n this._tabsService.maxVisibleCount.set(-1);\n requestAnimationFrame(() => {\n this._captureRenderedWidths();\n this._applyOverflowFit();\n });\n return;\n }\n\n this._applyOverflowFit();\n }\n\n /**\n * @private Captures the natural widths of the currently-rendered tab items\n * (and the \"More\" trigger) into the width cache, keyed by tab value. Zero\n * widths (detached / not laid out) are ignored so a transient render never\n * poisons the cache.\n */\n private _captureRenderedWidths(): void {\n const items = this.tabItems();\n const visible = this._tabsService.visibleTabs();\n items.forEach((item, i) => {\n const value = visible[i]?.value();\n const width = item.elementRef.nativeElement.offsetWidth;\n if (value && width > 0) {\n this._tabWidths.set(value, width);\n }\n });\n\n const moreEl = this._moreTriggerRef()?.nativeElement;\n if (moreEl && moreEl.offsetWidth > 0) {\n this._moreButtonWidth = moreEl.offsetWidth;\n }\n }\n\n /**\n * @private Applies the cached-width overflow computation to the service and\n * repositions the indicator.\n */\n private _applyOverflowFit(): void {\n const headerEl = this.tabListRef()?.nativeElement;\n if (!headerEl) return;\n\n const allTabs = this._tabsService.tabs();\n const widths = allTabs.map((t) => this._tabWidths.get(t.value()) ?? 0);\n const fittingCount = this._computeFittingCount(\n widths,\n headerEl.clientWidth,\n this._moreButtonWidth || 100,\n this._tabsService.maxVisibleCount(),\n );\n\n this._tabsService.maxVisibleCount.set(fittingCount);\n this._updateIndicator();\n }\n\n /**\n * @private Pure overflow fit calculation. Returns how many leading tabs fit in\n * `containerWidth`, or `-1` when every tab fits with no \"More\" button.\n *\n * Hysteresis: a tab that is currently in the overflow region\n * (`i >= currentMax`) must clear the boundary by an extra\n * {@link _HYSTERESIS_PX} before it is allowed back into the visible row. A\n * currently-visible tab leaves as soon as it no longer fits. This asymmetric\n * threshold means the two states around a boundary width can never both be\n * satisfied, so the split cannot oscillate between adjacent widths.\n *\n * @param widths Natural width of each tab, in DOM order.\n * @param containerWidth Available header content width.\n * @param moreButtonWidth Width reserved for the \"More (N)\" trigger.\n * @param currentMax The current `maxVisibleCount` (`-1` = all visible).\n */\n private _computeFittingCount(\n widths: number[],\n containerWidth: number,\n moreButtonWidth: number,\n currentMax: number,\n ): number {\n const total = widths.reduce((sum, w) => sum + w, 0);\n // Everything fits without needing a \"More\" button.\n if (total <= containerWidth) return -1;\n\n let accumulated = 0;\n let count = 0;\n for (let i = 0; i < widths.length; i++) {\n const wasOverflowed = currentMax >= 0 && i >= currentMax;\n const margin = wasOverflowed ? MlvTabGroup._HYSTERESIS_PX : 0;\n if (\n accumulated + widths[i] + moreButtonWidth + margin <=\n containerWidth\n ) {\n accumulated += widths[i];\n count++;\n } else {\n break;\n }\n }\n return count;\n }\n}\n","<div\n class=\"mlv-tab-group__header\"\n ngTabList\n [orientation]=\"orientation()\"\n [wrap]=\"false\"\n [softDisabled]=\"false\"\n selectionMode=\"follow\"\n [selectedTab]=\"selectedTab()\"\n (selectedTabChange)=\"_onSelectedTabChange($event)\"\n #tabListRef\n>\n @for (tab of visibleTabs(); track tab.value(); let i = $index) {\n <mlv-tab-item\n ngTab\n [value]=\"tab.value()\"\n [active]=\"isActive(tab.value())\"\n [disabled]=\"tab.disabled()\"\n (activate)=\"selectTab(tab.value())\"\n >\n @if (tab.defTemplate(); as def) {\n <!--\n The label is rendered directly inside the roving `role=\"tab\"`\n (<mlv-tab-item>, ngTab). Routed tabs do NOT wrap it in an <a href>: an\n anchor is inherently interactive, and nesting it inside `role=\"tab\"` fails\n the axe `nested-interactive` rule (a11y is a hard requirement). Navigation\n is driven by the tab-item's `activate` output → selectTab() →\n router.navigateByUrl() for both click and keyboard, and the URL is fully\n deep-linkable; the only thing lost versus a nested anchor is native\n middle-click / open-in-new-tab, an accepted trade-off.\n -->\n <ng-template\n [ngTemplateOutlet]=\"def.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: false }\"\n />\n }\n </mlv-tab-item>\n } @if (overflowTabs().length > 0) {\n <button\n type=\"button\"\n #moreTrigger\n class=\"mlv-tab-group__more-trigger\"\n [mlvPopupTrigger]=\"morePopup\"\n triggerOn=\"click\"\n [ariaHasPopup]=\"'menu'\"\n [attr.aria-expanded]=\"morePopupRef()?.opened() ?? false\"\n [attr.aria-label]=\"_i18n().moreTabs\"\n >\n More ({{ overflowTabs().length }})\n </button>\n <mlv-popup\n #morePopup\n [hasShadow]=\"true\"\n (afterOpened)=\"onMorePopupAfterOpened()\"\n (afterClosed)=\"onMorePopupAfterClosed()\"\n >\n <ng-template mlvPopupContent>\n <div tabindex=\"-1\" (keydown)=\"onOverflowKeydown($event)\">\n <mlv-list listRole=\"menu\">\n @for (tab of overflowTabs(); track tab.value(); let i = $index) {\n <mlv-list-item\n #overflowItem\n itemRole=\"menuitemradio\"\n [class.mlv-list-item--active]=\"isActive(tab.value())\"\n [attr.tabindex]=\"overflowFocusedIndex() === i ? 0 : -1\"\n [attr.data-overflow-item-index]=\"i\"\n [attr.aria-disabled]=\"tab.disabled() || null\"\n [attr.aria-checked]=\"isActive(tab.value())\"\n (click)=\"selectOverflowTab(tab.value())\"\n (keydown.enter)=\"selectOverflowTab(tab.value()); $event.stopPropagation()\"\n (keydown.space)=\"selectOverflowTab(tab.value()); $event.stopPropagation(); $event.preventDefault()\"\n >\n @if (tab.defTemplate(); as def) {\n <ng-template\n [ngTemplateOutlet]=\"def.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: true }\"\n />\n }\n </mlv-list-item>\n }\n </mlv-list>\n </div>\n </ng-template>\n </mlv-popup>\n }\n\n <div class=\"mlv-tab-group__indicator\" #indicatorRef></div>\n</div>\n\n<div class=\"mlv-tab-group__body\">\n @if (activeContentTemplate(); as tmpl) {\n <mlv-tab-content ngTabPanel [value]=\"activeTab()\">\n <ng-template ngTabContent>\n <ng-container [ngTemplateOutlet]=\"tmpl\" />\n </ng-template>\n </mlv-tab-content>\n }\n <!--\n Inert stub panels for the visible-but-inactive tabs. Every `ngTab` must\n resolve to a corresponding `ngTabPanel` (aria wires `aria-controls` and\n validates the pairing). The active tab renders the real `mlv-tab-content`\n above; the remaining visible tabs get an empty, `ngTabContent`-carrying\n panel so their `aria-controls` resolves without rendering duplicate content.\n -->\n @for (tab of visibleTabs(); track tab.value()) { @if (!isActive(tab.value()))\n {\n <div class=\"mlv-tab-group__panel-stub\" ngTabPanel [value]=\"tab.value()\">\n <ng-template ngTabContent></ng-template>\n </div>\n } }\n</div>\n"]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { computed, Injectable, signal } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class MlvTabsService {
|
|
4
|
+
tabs = signal([], /* @ts-ignore */
|
|
5
|
+
...(ngDevMode ? [{ debugName: "tabs" }] : /* istanbul ignore next */ []));
|
|
6
|
+
/** How many tabs fit in the header. -1 means no overflow (all fit). */
|
|
7
|
+
maxVisibleCount = signal(-1, /* @ts-ignore */
|
|
8
|
+
...(ngDevMode ? [{ debugName: "maxVisibleCount" }] : /* istanbul ignore next */ []));
|
|
9
|
+
/** A tab value forced into the visible area (selected from overflow popup). */
|
|
10
|
+
forcedVisibleValue = signal(null, /* @ts-ignore */
|
|
11
|
+
...(ngDevMode ? [{ debugName: "forcedVisibleValue" }] : /* istanbul ignore next */ []));
|
|
12
|
+
/**
|
|
13
|
+
* Visible tabs with swap logic:
|
|
14
|
+
* - If a forced tab exists and is beyond maxVisibleCount,
|
|
15
|
+
* it replaces the last naturally-visible tab.
|
|
16
|
+
*
|
|
17
|
+
* Example: tabs=[t1,t2,t3,t4,t5], max=3, forced=t4
|
|
18
|
+
* visible=[t1,t2,t4], overflow=[t3,t5]
|
|
19
|
+
*/
|
|
20
|
+
visibleTabs = computed(() => {
|
|
21
|
+
const all = this.tabs();
|
|
22
|
+
const max = this.maxVisibleCount();
|
|
23
|
+
if (max < 0 || max >= all.length)
|
|
24
|
+
return all;
|
|
25
|
+
const forced = this.forcedVisibleValue();
|
|
26
|
+
const forcedIndex = forced !== null ? all.findIndex((t) => t.value() === forced) : -1;
|
|
27
|
+
// Forced tab is already in the visible range or doesn't exist
|
|
28
|
+
if (forcedIndex < 0 || forcedIndex < max) {
|
|
29
|
+
return all.slice(0, max);
|
|
30
|
+
}
|
|
31
|
+
// Swap: take first (max-1), then the forced tab. `Math.max(0, …)` guards the
|
|
32
|
+
// `max === 0` case (all tabs overflow) so the forced/active tab is the sole
|
|
33
|
+
// visible tab instead of duplicating the last natural tab.
|
|
34
|
+
const visible = all.slice(0, Math.max(0, max - 1));
|
|
35
|
+
visible.push(all[forcedIndex]);
|
|
36
|
+
return visible;
|
|
37
|
+
}, /* @ts-ignore */
|
|
38
|
+
...(ngDevMode ? [{ debugName: "visibleTabs" }] : /* istanbul ignore next */ []));
|
|
39
|
+
overflowTabs = computed(() => {
|
|
40
|
+
const all = this.tabs();
|
|
41
|
+
const max = this.maxVisibleCount();
|
|
42
|
+
if (max < 0 || max >= all.length)
|
|
43
|
+
return [];
|
|
44
|
+
const forced = this.forcedVisibleValue();
|
|
45
|
+
const forcedIndex = forced !== null ? all.findIndex((t) => t.value() === forced) : -1;
|
|
46
|
+
// No forced tab or forced is already visible
|
|
47
|
+
if (forcedIndex < 0 || forcedIndex < max) {
|
|
48
|
+
return all.slice(max);
|
|
49
|
+
}
|
|
50
|
+
// The last naturally-visible tab (index max-1) goes to overflow, plus all
|
|
51
|
+
// original overflow tabs except the forced one. When `max === 0` there is no
|
|
52
|
+
// last-natural tab to demote (guarded below).
|
|
53
|
+
const overflow = [];
|
|
54
|
+
if (max - 1 >= 0) {
|
|
55
|
+
overflow.push(all[max - 1]);
|
|
56
|
+
}
|
|
57
|
+
for (let i = max; i < all.length; i++) {
|
|
58
|
+
if (i !== forcedIndex) {
|
|
59
|
+
overflow.push(all[i]);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return overflow;
|
|
63
|
+
}, /* @ts-ignore */
|
|
64
|
+
...(ngDevMode ? [{ debugName: "overflowTabs" }] : /* istanbul ignore next */ []));
|
|
65
|
+
register(tab) {
|
|
66
|
+
this.tabs.update((tabs) => [...tabs, tab]);
|
|
67
|
+
}
|
|
68
|
+
unregister(tab) {
|
|
69
|
+
this.tabs.update((tabs) => tabs.filter((t) => t !== tab));
|
|
70
|
+
if (this.forcedVisibleValue() === tab.value()) {
|
|
71
|
+
this.forcedVisibleValue.set(null);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
forceVisible(value) {
|
|
75
|
+
this.forcedVisibleValue.set(value);
|
|
76
|
+
}
|
|
77
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvTabsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
78
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvTabsService });
|
|
79
|
+
}
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvTabsService, decorators: [{
|
|
81
|
+
type: Injectable
|
|
82
|
+
}] });
|
|
83
|
+
//# sourceMappingURL=tabs.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.service.js","sourceRoot":"","sources":["../../../../../../libs/core/tabs/src/lib/tabs.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { computed, Injectable, signal } from '@angular/core';\nimport type { MlvTab } from './tab/tab';\n\n@Injectable()\nexport class MlvTabsService {\n readonly tabs = signal<MlvTab[]>([]);\n\n /** How many tabs fit in the header. -1 means no overflow (all fit). */\n readonly maxVisibleCount = signal<number>(-1);\n\n /** A tab value forced into the visible area (selected from overflow popup). */\n readonly forcedVisibleValue = signal<string | null>(null);\n\n /**\n * Visible tabs with swap logic:\n * - If a forced tab exists and is beyond maxVisibleCount,\n * it replaces the last naturally-visible tab.\n *\n * Example: tabs=[t1,t2,t3,t4,t5], max=3, forced=t4\n * visible=[t1,t2,t4], overflow=[t3,t5]\n */\n readonly visibleTabs = computed(() => {\n const all = this.tabs();\n const max = this.maxVisibleCount();\n\n if (max < 0 || max >= all.length) return all;\n\n const forced = this.forcedVisibleValue();\n const forcedIndex =\n forced !== null ? all.findIndex((t) => t.value() === forced) : -1;\n\n // Forced tab is already in the visible range or doesn't exist\n if (forcedIndex < 0 || forcedIndex < max) {\n return all.slice(0, max);\n }\n\n // Swap: take first (max-1), then the forced tab. `Math.max(0, …)` guards the\n // `max === 0` case (all tabs overflow) so the forced/active tab is the sole\n // visible tab instead of duplicating the last natural tab.\n const visible = all.slice(0, Math.max(0, max - 1));\n visible.push(all[forcedIndex]);\n return visible;\n });\n\n readonly overflowTabs = computed(() => {\n const all = this.tabs();\n const max = this.maxVisibleCount();\n\n if (max < 0 || max >= all.length) return [];\n\n const forced = this.forcedVisibleValue();\n const forcedIndex =\n forced !== null ? all.findIndex((t) => t.value() === forced) : -1;\n\n // No forced tab or forced is already visible\n if (forcedIndex < 0 || forcedIndex < max) {\n return all.slice(max);\n }\n\n // The last naturally-visible tab (index max-1) goes to overflow, plus all\n // original overflow tabs except the forced one. When `max === 0` there is no\n // last-natural tab to demote (guarded below).\n const overflow: MlvTab[] = [];\n if (max - 1 >= 0) {\n overflow.push(all[max - 1]);\n }\n for (let i = max; i < all.length; i++) {\n if (i !== forcedIndex) {\n overflow.push(all[i]);\n }\n }\n return overflow;\n });\n\n register(tab: MlvTab): void {\n this.tabs.update((tabs) => [...tabs, tab]);\n }\n\n unregister(tab: MlvTab): void {\n this.tabs.update((tabs) => tabs.filter((t) => t !== tab));\n if (this.forcedVisibleValue() === tab.value()) {\n this.forcedVisibleValue.set(null);\n }\n }\n\n forceVisible(value: string): void {\n this.forcedVisibleValue.set(value);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"malva-ui-core-tabs.js","sourceRoot":"","sources":["../../../../../libs/core/tabs/src/malva-ui-core-tabs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/core/textarea/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC","sourcesContent":["export * from './lib/textarea/textarea';\n"]}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, forwardRef, input, model, ViewEncapsulation, viewChild, effect, } from '@angular/core';
|
|
2
|
+
import { MlvSignalFormControlBase, MlvDescription, MlvFormControlWrapper, MlvFormControlWrapperControl, MlvHint, MlvLabel, MLV_FORM_CONTROL, MlvMessage, } from '@malva-ui/core/form-utils';
|
|
3
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
4
|
+
import { MlvScrollbar } from '@malva-ui/core/scrollbar';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class MlvTextarea extends MlvSignalFormControlBase {
|
|
7
|
+
/** Placeholder text shown inside the textarea when empty. */
|
|
8
|
+
placeholder = input('', /* @ts-ignore */
|
|
9
|
+
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
10
|
+
/** Number of visible text rows. Determines the default height. */
|
|
11
|
+
rows = input(3, /* @ts-ignore */
|
|
12
|
+
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
13
|
+
/** Minimum number of rows when autoResize is enabled. */
|
|
14
|
+
minRows = input(undefined, /* @ts-ignore */
|
|
15
|
+
...(ngDevMode ? [{ debugName: "minRows" }] : /* istanbul ignore next */ []));
|
|
16
|
+
/** Maximum number of rows when autoResize is enabled. */
|
|
17
|
+
maxRows = input(undefined, /* @ts-ignore */
|
|
18
|
+
...(ngDevMode ? [{ debugName: "maxRows" }] : /* istanbul ignore next */ []));
|
|
19
|
+
/**
|
|
20
|
+
* When true, the textarea grows vertically with content.
|
|
21
|
+
* Respects minRows and maxRows constraints.
|
|
22
|
+
*/
|
|
23
|
+
autoResize = input(false, { ...(ngDevMode ? { debugName: "autoResize" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
24
|
+
/**
|
|
25
|
+
* Maximum number of characters allowed.
|
|
26
|
+
* When set, a character counter is displayed below the textarea.
|
|
27
|
+
*/
|
|
28
|
+
maxLength = input(undefined, /* @ts-ignore */
|
|
29
|
+
...(ngDevMode ? [{ debugName: "maxLength" }] : /* istanbul ignore next */ []));
|
|
30
|
+
/** The character count ID for aria-describedby linking to the count element. */
|
|
31
|
+
countId = computed(() => `${this.id()}-count`, /* @ts-ignore */
|
|
32
|
+
...(ngDevMode ? [{ debugName: "countId" }] : /* istanbul ignore next */ []));
|
|
33
|
+
/**
|
|
34
|
+
* @protected The textarea's `aria-describedby`: the shared description /
|
|
35
|
+
* message ids from the base plus the character counter when one is rendered.
|
|
36
|
+
* `null` when nothing describes the field, so no dangling IDREF is emitted.
|
|
37
|
+
*/
|
|
38
|
+
_textareaDescribedBy = computed(() => {
|
|
39
|
+
const ids = this._describedBy();
|
|
40
|
+
if (!this.maxLength())
|
|
41
|
+
return ids;
|
|
42
|
+
return ids ? `${ids} ${this.countId()}` : this.countId();
|
|
43
|
+
}, /* @ts-ignore */
|
|
44
|
+
...(ngDevMode ? [{ debugName: "_textareaDescribedBy" }] : /* istanbul ignore next */ []));
|
|
45
|
+
/**
|
|
46
|
+
* The textarea's text value — the signal-forms `FormValueControl` model.
|
|
47
|
+
* Two-way bindable (`[(value)]`) and kept in sync with the bound field by
|
|
48
|
+
* `[formField]` / `[formControl]` / `ngModel`. Replaces the former
|
|
49
|
+
* `internalValue` signal + CVA transport.
|
|
50
|
+
*/
|
|
51
|
+
value = model('', /* @ts-ignore */
|
|
52
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
53
|
+
/** @private Reference to the native textarea element. */
|
|
54
|
+
_textareaRef = viewChild('textareaEl', /* @ts-ignore */
|
|
55
|
+
...(ngDevMode ? [{ debugName: "_textareaRef" }] : /* istanbul ignore next */ []));
|
|
56
|
+
/**
|
|
57
|
+
* The current character count.
|
|
58
|
+
*/
|
|
59
|
+
charCount = computed(() => (this.value() ?? '').length, /* @ts-ignore */
|
|
60
|
+
...(ngDevMode ? [{ debugName: "charCount" }] : /* istanbul ignore next */ []));
|
|
61
|
+
/**
|
|
62
|
+
* Whether the character count is approaching the limit (>90%).
|
|
63
|
+
*/
|
|
64
|
+
isCountWarning = computed(() => {
|
|
65
|
+
const max = this.maxLength();
|
|
66
|
+
if (!max)
|
|
67
|
+
return false;
|
|
68
|
+
const ratio = this.charCount() / max;
|
|
69
|
+
return ratio >= 0.9 && ratio < 1;
|
|
70
|
+
}, /* @ts-ignore */
|
|
71
|
+
...(ngDevMode ? [{ debugName: "isCountWarning" }] : /* istanbul ignore next */ []));
|
|
72
|
+
/**
|
|
73
|
+
* Whether the character limit has been reached.
|
|
74
|
+
*/
|
|
75
|
+
isCountError = computed(() => {
|
|
76
|
+
const max = this.maxLength();
|
|
77
|
+
if (!max)
|
|
78
|
+
return false;
|
|
79
|
+
return this.charCount() >= max;
|
|
80
|
+
}, /* @ts-ignore */
|
|
81
|
+
...(ngDevMode ? [{ debugName: "isCountError" }] : /* istanbul ignore next */ []));
|
|
82
|
+
/**
|
|
83
|
+
* Computed minimum height style for the scrollbar wrapper.
|
|
84
|
+
* When rows = 1, matches `--mlv-height-m` (same as mlv-input).
|
|
85
|
+
* For multi-row, grows proportionally: each additional row adds 1.5em.
|
|
86
|
+
*/
|
|
87
|
+
minHeightStyle = computed(() => {
|
|
88
|
+
const rows = this.minRows() ?? this.rows();
|
|
89
|
+
if (rows === 1) {
|
|
90
|
+
return 'var(--mlv-height-m)';
|
|
91
|
+
}
|
|
92
|
+
// Base height for a single row equals --mlv-height-m (2.75rem).
|
|
93
|
+
// Each extra row adds one line (1.5em at font-size ~0.875rem ≈ 1.3125rem).
|
|
94
|
+
return `calc(var(--mlv-height-m) + ${rows - 1} * 1.5em)`;
|
|
95
|
+
}, /* @ts-ignore */
|
|
96
|
+
...(ngDevMode ? [{ debugName: "minHeightStyle" }] : /* istanbul ignore next */ []));
|
|
97
|
+
/**
|
|
98
|
+
* Computed maximum height style for the scrollbar wrapper based on maxRows input.
|
|
99
|
+
*/
|
|
100
|
+
maxHeightStyle = computed(() => {
|
|
101
|
+
const maxRows = this.maxRows();
|
|
102
|
+
if (!maxRows)
|
|
103
|
+
return undefined;
|
|
104
|
+
if (maxRows === 1) {
|
|
105
|
+
return 'var(--mlv-height-m)';
|
|
106
|
+
}
|
|
107
|
+
return `calc(var(--mlv-height-m) + ${maxRows - 1} * 1.5em)`;
|
|
108
|
+
}, /* @ts-ignore */
|
|
109
|
+
...(ngDevMode ? [{ debugName: "maxHeightStyle" }] : /* istanbul ignore next */ []));
|
|
110
|
+
constructor() {
|
|
111
|
+
super();
|
|
112
|
+
// Re-run auto-resize when value changes
|
|
113
|
+
effect(() => {
|
|
114
|
+
this.value();
|
|
115
|
+
if (this.autoResize()) {
|
|
116
|
+
this._runAutoResize();
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/** @private Adjusts textarea height to fit its content. */
|
|
121
|
+
_runAutoResize() {
|
|
122
|
+
const el = this._textareaRef()?.nativeElement;
|
|
123
|
+
if (!el)
|
|
124
|
+
return;
|
|
125
|
+
el.style.height = 'auto';
|
|
126
|
+
let newHeight = el.scrollHeight;
|
|
127
|
+
const minRows = this.minRows();
|
|
128
|
+
const maxRows = this.maxRows();
|
|
129
|
+
const lineHeight = parseFloat(getComputedStyle(el).lineHeight) || 24;
|
|
130
|
+
const paddingTop = parseFloat(getComputedStyle(el).paddingTop) || 0;
|
|
131
|
+
const paddingBottom = parseFloat(getComputedStyle(el).paddingBottom) || 0;
|
|
132
|
+
if (minRows) {
|
|
133
|
+
const minHeight = minRows * lineHeight + paddingTop + paddingBottom;
|
|
134
|
+
newHeight = Math.max(newHeight, minHeight);
|
|
135
|
+
}
|
|
136
|
+
if (maxRows) {
|
|
137
|
+
const maxHeight = maxRows * lineHeight + paddingTop + paddingBottom;
|
|
138
|
+
newHeight = Math.min(newHeight, maxHeight);
|
|
139
|
+
}
|
|
140
|
+
el.style.height = `${newHeight}px`;
|
|
141
|
+
}
|
|
142
|
+
/** Handles the native input event. */
|
|
143
|
+
onInput(event) {
|
|
144
|
+
this.value.set(event.target.value);
|
|
145
|
+
}
|
|
146
|
+
/** Handles the native blur event. */
|
|
147
|
+
onBlur() {
|
|
148
|
+
this.setFocused(false);
|
|
149
|
+
this._markTouched();
|
|
150
|
+
}
|
|
151
|
+
/** Whether the control holds a clearable value — Non-empty text present. */
|
|
152
|
+
hasValue = computed(() => (this.value() ?? '').length > 0, /* @ts-ignore */
|
|
153
|
+
...(ngDevMode ? [{ debugName: "hasValue" }] : /* istanbul ignore next */ []));
|
|
154
|
+
/** Clears the textarea value and marks the field touched. */
|
|
155
|
+
clearValue() {
|
|
156
|
+
this.value.set('');
|
|
157
|
+
this._markTouched();
|
|
158
|
+
}
|
|
159
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvTextarea, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
160
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvTextarea, isStandalone: true, selector: "mlv-textarea", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, minRows: { classPropertyName: "minRows", publicName: "minRows", isSignal: true, isRequired: false, transformFunction: null }, maxRows: { classPropertyName: "maxRows", publicName: "maxRows", isSignal: true, isRequired: false, transformFunction: null }, autoResize: { classPropertyName: "autoResize", publicName: "autoResize", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.mlv-textarea--default": "resolvedState() === \"default\"", "class.mlv-textarea--success": "resolvedState() === \"success\"", "class.mlv-textarea--info": "resolvedState() === \"info\"", "class.mlv-textarea--warning": "resolvedState() === \"warning\"", "class.mlv-textarea--error": "resolvedState() === \"error\"", "class.mlv-textarea--disabled": "computedDisabled()", "class.mlv-textarea--focused": "focused()", "class.mlv-textarea--auto-resize": "autoResize()" }, classAttribute: "mlv-textarea" }, providers: [
|
|
161
|
+
{
|
|
162
|
+
provide: MLV_FORM_CONTROL,
|
|
163
|
+
useExisting: forwardRef(() => MlvTextarea),
|
|
164
|
+
},
|
|
165
|
+
], viewQueries: [{ propertyName: "_textareaRef", first: true, predicate: ["textareaEl"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"[mlvTextareaPrepend]\" />\n\n<mlv-form-control-wrapper (clear)=\"clearValue()\">\n @if (label() || hint()) {\n <mlv-label [for]=\"id()\" [required]=\"required()\">\n {{ label() }} @if (hint()) {\n <mlv-hint>{{ hint() }}</mlv-hint>\n }\n </mlv-label>\n }\n\n <ng-template mlvFormControlWrapperControl>\n <mlv-scrollbar\n class=\"mlv-textarea__scrollbar\"\n [style.min-height]=\"minHeightStyle()\"\n [style.max-height]=\"maxHeightStyle()\"\n [disabled]=\"$any(autoResize())\"\n ariaLabel=\"Text area content\"\n >\n <textarea\n #textareaEl\n class=\"mlv-textarea__field\"\n [id]=\"id()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"computedDisabled()\"\n [readOnly]=\"readonly()\"\n [rows]=\"rows()\"\n [attr.maxlength]=\"maxLength() ?? null\"\n [value]=\"value() ?? ''\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"resolvedState() === 'error'\"\n [attr.aria-describedby]=\"_textareaDescribedBy()\"\n (input)=\"onInput($event)\"\n (focus)=\"setFocused(true)\"\n (blur)=\"onBlur()\"\n ></textarea>\n </mlv-scrollbar>\n </ng-template>\n\n @if (description()) {\n <mlv-description [id]=\"_descriptionId()\">{{ description() }}</mlv-description>\n } @if (message()) {\n <mlv-message [id]=\"_messageId()\" [state]=\"resolvedState()\">\n {{ message() }}\n </mlv-message>\n } @if (maxLength()) {\n <!-- The wrapper's aside slot \u2014 a plain child of mlv-form-control-wrapper\n matches no projection slot and would be dropped. -->\n <div\n mlvFormControlWrapperAside\n [id]=\"countId()\"\n class=\"mlv-textarea__count\"\n [class.mlv-textarea__count--warning]=\"isCountWarning()\"\n [class.mlv-textarea__count--error]=\"isCountError()\"\n aria-live=\"polite\"\n >\n {{ charCount() }}/{{ maxLength() }}\n </div>\n }\n</mlv-form-control-wrapper>\n\n<ng-content select=\"[mlvTextareaAppend]\" />\n", styles: [".mlv-textarea{display:block}.mlv-textarea .mlv-form-control-wrapper__control-container{height:auto;align-items:flex-start;padding:0}.mlv-textarea .mlv-form-control-wrapper__clear{align-self:flex-start;margin-top:var(--mlv-spacing-1);margin-inline-end:var(--mlv-spacing-1)}.mlv-textarea__scrollbar{flex:1 1 auto;min-width:0}.mlv-textarea__scrollbar.mlv-scrollbar--disabled{overflow:visible}.mlv-textarea__field{box-sizing:border-box;padding:var(--mlv-spacing-1) var(--form-ctrl-h-padding, var(--mlv-spacing-3));margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--form-ctrl-font-size, var(--mlv-font-size-m))}.mlv-textarea__field *{box-sizing:border-box}.mlv-textarea__field{display:block;width:100%;resize:none;border:none;outline:none;appearance:none;background:none;line-height:1.5;color:var(--mlv-text-primary);box-sizing:border-box;overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.mlv-textarea__field::-webkit-scrollbar{display:none}.mlv-textarea__field::placeholder{color:var(--mlv-text-tertiary)}.mlv-textarea__count{display:block;align-self:flex-end;text-align:right;font-size:var(--mlv-typography-ui-s-size);color:var(--mlv-text-tertiary)}.mlv-textarea__count--warning{color:var(--mlv-text-warning)}.mlv-textarea__count--error{color:var(--mlv-text-negative)}.mlv-textarea--auto-resize .mlv-textarea__field{resize:none;height:auto}\n"], dependencies: [{ kind: "component", type: MlvLabel, selector: "mlv-label", inputs: ["for", "required"] }, { kind: "component", type: MlvHint, selector: "mlv-hint" }, { kind: "component", type: MlvDescription, selector: "mlv-description" }, { kind: "component", type: MlvFormControlWrapper, selector: "mlv-form-control-wrapper", outputs: ["clear"] }, { kind: "directive", type: MlvFormControlWrapperControl, selector: "[mlvFormControlWrapperControl]" }, { kind: "component", type: MlvMessage, selector: "mlv-message", inputs: ["state"] }, { kind: "component", type: MlvScrollbar, selector: "mlv-scrollbar", inputs: ["orientation", "scrollbarSize", "disabled", "ariaLabel", "viewportTabIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
166
|
+
}
|
|
167
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvTextarea, decorators: [{
|
|
168
|
+
type: Component,
|
|
169
|
+
args: [{ selector: 'mlv-textarea', imports: [
|
|
170
|
+
MlvLabel,
|
|
171
|
+
MlvHint,
|
|
172
|
+
MlvDescription,
|
|
173
|
+
MlvFormControlWrapper,
|
|
174
|
+
MlvFormControlWrapperControl,
|
|
175
|
+
MlvMessage,
|
|
176
|
+
MlvScrollbar,
|
|
177
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
178
|
+
{
|
|
179
|
+
provide: MLV_FORM_CONTROL,
|
|
180
|
+
useExisting: forwardRef(() => MlvTextarea),
|
|
181
|
+
},
|
|
182
|
+
], host: {
|
|
183
|
+
class: 'mlv-textarea',
|
|
184
|
+
'[class.mlv-textarea--default]': 'resolvedState() === "default"',
|
|
185
|
+
'[class.mlv-textarea--success]': 'resolvedState() === "success"',
|
|
186
|
+
'[class.mlv-textarea--info]': 'resolvedState() === "info"',
|
|
187
|
+
'[class.mlv-textarea--warning]': 'resolvedState() === "warning"',
|
|
188
|
+
'[class.mlv-textarea--error]': 'resolvedState() === "error"',
|
|
189
|
+
'[class.mlv-textarea--disabled]': 'computedDisabled()',
|
|
190
|
+
'[class.mlv-textarea--focused]': 'focused()',
|
|
191
|
+
'[class.mlv-textarea--auto-resize]': 'autoResize()',
|
|
192
|
+
}, template: "<ng-content select=\"[mlvTextareaPrepend]\" />\n\n<mlv-form-control-wrapper (clear)=\"clearValue()\">\n @if (label() || hint()) {\n <mlv-label [for]=\"id()\" [required]=\"required()\">\n {{ label() }} @if (hint()) {\n <mlv-hint>{{ hint() }}</mlv-hint>\n }\n </mlv-label>\n }\n\n <ng-template mlvFormControlWrapperControl>\n <mlv-scrollbar\n class=\"mlv-textarea__scrollbar\"\n [style.min-height]=\"minHeightStyle()\"\n [style.max-height]=\"maxHeightStyle()\"\n [disabled]=\"$any(autoResize())\"\n ariaLabel=\"Text area content\"\n >\n <textarea\n #textareaEl\n class=\"mlv-textarea__field\"\n [id]=\"id()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"computedDisabled()\"\n [readOnly]=\"readonly()\"\n [rows]=\"rows()\"\n [attr.maxlength]=\"maxLength() ?? null\"\n [value]=\"value() ?? ''\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"resolvedState() === 'error'\"\n [attr.aria-describedby]=\"_textareaDescribedBy()\"\n (input)=\"onInput($event)\"\n (focus)=\"setFocused(true)\"\n (blur)=\"onBlur()\"\n ></textarea>\n </mlv-scrollbar>\n </ng-template>\n\n @if (description()) {\n <mlv-description [id]=\"_descriptionId()\">{{ description() }}</mlv-description>\n } @if (message()) {\n <mlv-message [id]=\"_messageId()\" [state]=\"resolvedState()\">\n {{ message() }}\n </mlv-message>\n } @if (maxLength()) {\n <!-- The wrapper's aside slot \u2014 a plain child of mlv-form-control-wrapper\n matches no projection slot and would be dropped. -->\n <div\n mlvFormControlWrapperAside\n [id]=\"countId()\"\n class=\"mlv-textarea__count\"\n [class.mlv-textarea__count--warning]=\"isCountWarning()\"\n [class.mlv-textarea__count--error]=\"isCountError()\"\n aria-live=\"polite\"\n >\n {{ charCount() }}/{{ maxLength() }}\n </div>\n }\n</mlv-form-control-wrapper>\n\n<ng-content select=\"[mlvTextareaAppend]\" />\n", styles: [".mlv-textarea{display:block}.mlv-textarea .mlv-form-control-wrapper__control-container{height:auto;align-items:flex-start;padding:0}.mlv-textarea .mlv-form-control-wrapper__clear{align-self:flex-start;margin-top:var(--mlv-spacing-1);margin-inline-end:var(--mlv-spacing-1)}.mlv-textarea__scrollbar{flex:1 1 auto;min-width:0}.mlv-textarea__scrollbar.mlv-scrollbar--disabled{overflow:visible}.mlv-textarea__field{box-sizing:border-box;padding:var(--mlv-spacing-1) var(--form-ctrl-h-padding, var(--mlv-spacing-3));margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--form-ctrl-font-size, var(--mlv-font-size-m))}.mlv-textarea__field *{box-sizing:border-box}.mlv-textarea__field{display:block;width:100%;resize:none;border:none;outline:none;appearance:none;background:none;line-height:1.5;color:var(--mlv-text-primary);box-sizing:border-box;overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.mlv-textarea__field::-webkit-scrollbar{display:none}.mlv-textarea__field::placeholder{color:var(--mlv-text-tertiary)}.mlv-textarea__count{display:block;align-self:flex-end;text-align:right;font-size:var(--mlv-typography-ui-s-size);color:var(--mlv-text-tertiary)}.mlv-textarea__count--warning{color:var(--mlv-text-warning)}.mlv-textarea__count--error{color:var(--mlv-text-negative)}.mlv-textarea--auto-resize .mlv-textarea__field{resize:none;height:auto}\n"] }]
|
|
193
|
+
}], ctorParameters: () => [], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], minRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "minRows", required: false }] }], maxRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxRows", required: false }] }], autoResize: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoResize", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], _textareaRef: [{ type: i0.ViewChild, args: ['textareaEl', { isSignal: true }] }] } });
|
|
194
|
+
//# sourceMappingURL=textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../../../../../../libs/core/textarea/src/lib/textarea/textarea.ts","../../../../../../../libs/core/textarea/src/lib/textarea/textarea.html"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,QAAQ,EAER,UAAU,EACV,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,SAAS,EACT,MAAM,GACP,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EACrB,4BAA4B,EAC5B,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,UAAU,GACX,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;;AAmCxD,MAAM,OAAO,WACX,SAAQ,wBAAgC;IAGxC,6DAA6D;IACpD,WAAW,GAAG,KAAK,CAAC,EAAE;oFAAC,CAAC;IAEjC,kEAAkE;IACzD,IAAI,GAAG,KAAK,CAAS,CAAC;6EAAC,CAAC;IAEjC,yDAAyD;IAChD,OAAO,GAAG,KAAK,CAAqB,SAAS;gFAAC,CAAC;IAExD,yDAAyD;IAChD,OAAO,GAAG,KAAK,CAAqB,SAAS;gFAAC,CAAC;IAExD;;;OAGG;IACM,UAAU,GAAG,KAAK,CAAwB,KAAK,kFACtD,SAAS,EAAE,qBAAqB,GAChC,CAAC;IAEH;;;OAGG;IACM,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC,CAAC;IAE1D,gFAAgF;IACvE,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ;gFAAC,CAAC;IAExD;;;;OAIG;IACgB,oBAAoB,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO,GAAG,CAAC;QAClC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC3D,CAAC;6FAAC,CAAC;IAEH;;;;;OAKG;IACM,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC,CAAC;IAEnC,yDAAyD;IACtC,YAAY,GAC7B,SAAS,CAAkC,YAAY;qFAAC,CAAC;IAE3D;;OAEG;IACM,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM;kFAAC,CAAC;IAEjE;;OAEG;IACM,cAAc,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC;QACrC,OAAO,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC;IACnC,CAAC;uFAAC,CAAC;IAEH;;OAEG;IACM,YAAY,GAAG,QAAQ,CAAC,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC;IACjC,CAAC;qFAAC,CAAC;IAEH;;;;OAIG;IACM,cAAc,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,gEAAgE;QAChE,2EAA2E;QAC3E,OAAO,8BAA8B,IAAI,GAAG,CAAC,WAAW,CAAC;IAC3D,CAAC;uFAAC,CAAC;IAEH;;OAEG;IACM,cAAc,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,OAAO,8BAA8B,OAAO,GAAG,CAAC,WAAW,CAAC;IAC9D,CAAC;uFAAC,CAAC;IAEH;QACE,KAAK,EAAE,CAAC;QACR,wCAAwC;QACxC,MAAM,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;gBACtB,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IACnD,cAAc;QACpB,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC;QAC9C,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,IAAI,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACrE,MAAM,UAAU,GAAG,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpE,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE1E,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;YACpE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;YACpE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC;QACD,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC;IACrC,CAAC;IAED,sCAAsC;IACtC,OAAO,CAAC,KAAY;QAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,KAAK,CAAC,MAA8B,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,qCAAqC;IACrC,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,4EAA4E;IACnE,QAAQ,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;iFAAC,CAAC;IAEpE,6DAA6D;IAC7D,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;uGA/JU,WAAW;2FAAX,WAAW,u/CAlBX;YACT;gBACE,OAAO,EAAE,gBAAgB;gBACzB,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC;aAC3C;SACF,6KC/CH,uiEA+DA,m5CDjCI,QAAQ,mFACR,OAAO,qDACP,cAAc,4DACd,qBAAqB,yFACrB,4BAA4B,2EAC5B,UAAU,2EACV,YAAY;;2FAwBH,WAAW;kBAjCvB,SAAS;+BACE,cAAc,WACf;wBACP,QAAQ;wBACR,OAAO;wBACP,cAAc;wBACd,qBAAqB;wBACrB,4BAA4B;wBAC5B,UAAU;wBACV,YAAY;qBACb,iBAGc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,aACpC;wBACT;4BACE,OAAO,EAAE,gBAAgB;4BACzB,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC;yBAC3C;qBACF,QACK;wBACJ,KAAK,EAAE,cAAc;wBACrB,+BAA+B,EAAE,+BAA+B;wBAChE,+BAA+B,EAAE,+BAA+B;wBAChE,4BAA4B,EAAE,4BAA4B;wBAC1D,+BAA+B,EAAE,+BAA+B;wBAChE,6BAA6B,EAAE,6BAA6B;wBAC5D,gCAAgC,EAAE,oBAAoB;wBACtD,+BAA+B,EAAE,WAAW;wBAC5C,mCAAmC,EAAE,cAAc;qBACpD;0yBAwD4C,YAAY","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n type ElementRef,\n forwardRef,\n input,\n model,\n ViewEncapsulation,\n viewChild,\n effect,\n} from '@angular/core';\nimport type { MlvFormControl } from '@malva-ui/core/form-utils';\nimport {\n MlvSignalFormControlBase,\n MlvDescription,\n MlvFormControlWrapper,\n MlvFormControlWrapperControl,\n MlvHint,\n MlvLabel,\n MLV_FORM_CONTROL,\n MlvMessage,\n} from '@malva-ui/core/form-utils';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { MlvScrollbar } from '@malva-ui/core/scrollbar';\n\n@Component({\n selector: 'mlv-textarea',\n imports: [\n MlvLabel,\n MlvHint,\n MlvDescription,\n MlvFormControlWrapper,\n MlvFormControlWrapperControl,\n MlvMessage,\n MlvScrollbar,\n ],\n templateUrl: './textarea.html',\n styleUrl: './textarea.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: MLV_FORM_CONTROL,\n useExisting: forwardRef(() => MlvTextarea),\n },\n ],\n host: {\n class: 'mlv-textarea',\n '[class.mlv-textarea--default]': 'resolvedState() === \"default\"',\n '[class.mlv-textarea--success]': 'resolvedState() === \"success\"',\n '[class.mlv-textarea--info]': 'resolvedState() === \"info\"',\n '[class.mlv-textarea--warning]': 'resolvedState() === \"warning\"',\n '[class.mlv-textarea--error]': 'resolvedState() === \"error\"',\n '[class.mlv-textarea--disabled]': 'computedDisabled()',\n '[class.mlv-textarea--focused]': 'focused()',\n '[class.mlv-textarea--auto-resize]': 'autoResize()',\n },\n})\nexport class MlvTextarea\n extends MlvSignalFormControlBase<string>\n implements MlvFormControl\n{\n /** Placeholder text shown inside the textarea when empty. */\n readonly placeholder = input('');\n\n /** Number of visible text rows. Determines the default height. */\n readonly rows = input<number>(3);\n\n /** Minimum number of rows when autoResize is enabled. */\n readonly minRows = input<number | undefined>(undefined);\n\n /** Maximum number of rows when autoResize is enabled. */\n readonly maxRows = input<number | undefined>(undefined);\n\n /**\n * When true, the textarea grows vertically with content.\n * Respects minRows and maxRows constraints.\n */\n readonly autoResize = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Maximum number of characters allowed.\n * When set, a character counter is displayed below the textarea.\n */\n readonly maxLength = input<number | undefined>(undefined);\n\n /** The character count ID for aria-describedby linking to the count element. */\n readonly countId = computed(() => `${this.id()}-count`);\n\n /**\n * @protected The textarea's `aria-describedby`: the shared description /\n * message ids from the base plus the character counter when one is rendered.\n * `null` when nothing describes the field, so no dangling IDREF is emitted.\n */\n protected readonly _textareaDescribedBy = computed(() => {\n const ids = this._describedBy();\n if (!this.maxLength()) return ids;\n return ids ? `${ids} ${this.countId()}` : this.countId();\n });\n\n /**\n * The textarea's text value — the signal-forms `FormValueControl` model.\n * Two-way bindable (`[(value)]`) and kept in sync with the bound field by\n * `[formField]` / `[formControl]` / `ngModel`. Replaces the former\n * `internalValue` signal + CVA transport.\n */\n readonly value = model<string>('');\n\n /** @private Reference to the native textarea element. */\n protected readonly _textareaRef =\n viewChild<ElementRef<HTMLTextAreaElement>>('textareaEl');\n\n /**\n * The current character count.\n */\n readonly charCount = computed(() => (this.value() ?? '').length);\n\n /**\n * Whether the character count is approaching the limit (>90%).\n */\n readonly isCountWarning = computed(() => {\n const max = this.maxLength();\n if (!max) return false;\n const ratio = this.charCount() / max;\n return ratio >= 0.9 && ratio < 1;\n });\n\n /**\n * Whether the character limit has been reached.\n */\n readonly isCountError = computed(() => {\n const max = this.maxLength();\n if (!max) return false;\n return this.charCount() >= max;\n });\n\n /**\n * Computed minimum height style for the scrollbar wrapper.\n * When rows = 1, matches `--mlv-height-m` (same as mlv-input).\n * For multi-row, grows proportionally: each additional row adds 1.5em.\n */\n readonly minHeightStyle = computed(() => {\n const rows = this.minRows() ?? this.rows();\n if (rows === 1) {\n return 'var(--mlv-height-m)';\n }\n // Base height for a single row equals --mlv-height-m (2.75rem).\n // Each extra row adds one line (1.5em at font-size ~0.875rem ≈ 1.3125rem).\n return `calc(var(--mlv-height-m) + ${rows - 1} * 1.5em)`;\n });\n\n /**\n * Computed maximum height style for the scrollbar wrapper based on maxRows input.\n */\n readonly maxHeightStyle = computed(() => {\n const maxRows = this.maxRows();\n if (!maxRows) return undefined;\n if (maxRows === 1) {\n return 'var(--mlv-height-m)';\n }\n return `calc(var(--mlv-height-m) + ${maxRows - 1} * 1.5em)`;\n });\n\n constructor() {\n super();\n // Re-run auto-resize when value changes\n effect(() => {\n this.value();\n if (this.autoResize()) {\n this._runAutoResize();\n }\n });\n }\n\n /** @private Adjusts textarea height to fit its content. */\n private _runAutoResize(): void {\n const el = this._textareaRef()?.nativeElement;\n if (!el) return;\n el.style.height = 'auto';\n let newHeight = el.scrollHeight;\n const minRows = this.minRows();\n const maxRows = this.maxRows();\n const lineHeight = parseFloat(getComputedStyle(el).lineHeight) || 24;\n const paddingTop = parseFloat(getComputedStyle(el).paddingTop) || 0;\n const paddingBottom = parseFloat(getComputedStyle(el).paddingBottom) || 0;\n\n if (minRows) {\n const minHeight = minRows * lineHeight + paddingTop + paddingBottom;\n newHeight = Math.max(newHeight, minHeight);\n }\n if (maxRows) {\n const maxHeight = maxRows * lineHeight + paddingTop + paddingBottom;\n newHeight = Math.min(newHeight, maxHeight);\n }\n el.style.height = `${newHeight}px`;\n }\n\n /** Handles the native input event. */\n onInput(event: Event): void {\n this.value.set((event.target as HTMLTextAreaElement).value);\n }\n\n /** Handles the native blur event. */\n onBlur(): void {\n this.setFocused(false);\n this._markTouched();\n }\n\n /** Whether the control holds a clearable value — Non-empty text present. */\n readonly hasValue = computed(() => (this.value() ?? '').length > 0);\n\n /** Clears the textarea value and marks the field touched. */\n clearValue(): void {\n this.value.set('');\n this._markTouched();\n }\n}\n","<ng-content select=\"[mlvTextareaPrepend]\" />\n\n<mlv-form-control-wrapper (clear)=\"clearValue()\">\n @if (label() || hint()) {\n <mlv-label [for]=\"id()\" [required]=\"required()\">\n {{ label() }} @if (hint()) {\n <mlv-hint>{{ hint() }}</mlv-hint>\n }\n </mlv-label>\n }\n\n <ng-template mlvFormControlWrapperControl>\n <mlv-scrollbar\n class=\"mlv-textarea__scrollbar\"\n [style.min-height]=\"minHeightStyle()\"\n [style.max-height]=\"maxHeightStyle()\"\n [disabled]=\"$any(autoResize())\"\n ariaLabel=\"Text area content\"\n >\n <textarea\n #textareaEl\n class=\"mlv-textarea__field\"\n [id]=\"id()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"computedDisabled()\"\n [readOnly]=\"readonly()\"\n [rows]=\"rows()\"\n [attr.maxlength]=\"maxLength() ?? null\"\n [value]=\"value() ?? ''\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"resolvedState() === 'error'\"\n [attr.aria-describedby]=\"_textareaDescribedBy()\"\n (input)=\"onInput($event)\"\n (focus)=\"setFocused(true)\"\n (blur)=\"onBlur()\"\n ></textarea>\n </mlv-scrollbar>\n </ng-template>\n\n @if (description()) {\n <mlv-description [id]=\"_descriptionId()\">{{ description() }}</mlv-description>\n } @if (message()) {\n <mlv-message [id]=\"_messageId()\" [state]=\"resolvedState()\">\n {{ message() }}\n </mlv-message>\n } @if (maxLength()) {\n <!-- The wrapper's aside slot — a plain child of mlv-form-control-wrapper\n matches no projection slot and would be dropped. -->\n <div\n mlvFormControlWrapperAside\n [id]=\"countId()\"\n class=\"mlv-textarea__count\"\n [class.mlv-textarea__count--warning]=\"isCountWarning()\"\n [class.mlv-textarea__count--error]=\"isCountError()\"\n aria-live=\"polite\"\n >\n {{ charCount() }}/{{ maxLength() }}\n </div>\n }\n</mlv-form-control-wrapper>\n\n<ng-content select=\"[mlvTextareaAppend]\" />\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"malva-ui-core-textarea.js","sourceRoot":"","sources":["../../../../../libs/core/textarea/src/malva-ui-core-textarea.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/core/tile/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC","sourcesContent":["export * from './lib/tile/tile';\nexport * from './lib/tile-header';\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ViewEncapsulation, contentChild, inject, input, output, } from '@angular/core';
|
|
2
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
3
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
4
|
+
import { LucideGripVertical, LucideX } from '@lucide/angular';
|
|
5
|
+
import { MlvButton } from '@malva-ui/core/button';
|
|
6
|
+
import { MlvTileHeader } from '../tile-header';
|
|
7
|
+
import { MLV_TILE_I18N } from '@malva-ui/i18n';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class MlvTile {
|
|
10
|
+
/** @protected The component's i18n strings signal. */
|
|
11
|
+
_i18n = inject(MLV_TILE_I18N);
|
|
12
|
+
size = input('m', /* @ts-ignore */
|
|
13
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
14
|
+
tone = input('default', /* @ts-ignore */
|
|
15
|
+
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
16
|
+
closable = input(false, { ...(ngDevMode ? { debugName: "closable" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
17
|
+
draggable = input(false, { ...(ngDevMode ? { debugName: "draggable" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
18
|
+
dragDisabled = input(false, { ...(ngDevMode ? { debugName: "dragDisabled" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
19
|
+
closed = output();
|
|
20
|
+
/** @protected Header slot template projected via `[mlvTileHeader]`. */
|
|
21
|
+
headerRef = contentChild(MlvTileHeader, /* @ts-ignore */
|
|
22
|
+
...(ngDevMode ? [{ debugName: "headerRef" }] : /* istanbul ignore next */ []));
|
|
23
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvTile, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
24
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvTile, isStandalone: true, selector: "mlv-tile", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, dragDisabled: { classPropertyName: "dragDisabled", publicName: "dragDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, host: { properties: { "class": "\"mlv-tile--size-\" + size()", "class.mlv-tile--tone-info": "tone() === \"info\"", "class.mlv-tile--tone-success": "tone() === \"success\"", "class.mlv-tile--tone-warning": "tone() === \"warning\"", "class.mlv-tile--tone-danger": "tone() === \"danger\"", "class.mlv-tile--draggable": "draggable()", "class.mlv-tile--drag-disabled": "dragDisabled()" }, classAttribute: "mlv-tile" }, queries: [{ propertyName: "headerRef", first: true, predicate: MlvTileHeader, descendants: true, isSignal: true }], ngImport: i0, template: "@if (headerRef() || closable() || draggable()) {\n<div class=\"mlv-tile__header\">\n @if (draggable()) {\n <span class=\"mlv-tile__drag-handle\" aria-hidden=\"true\">\n <svg lucideGripVertical size=\"16\" />\n </span>\n } @if (headerRef(); as headerTpl) {\n <ng-container [ngTemplateOutlet]=\"headerTpl.templateRef\" />\n } @if (closable()) {\n <button\n mlvButton\n variant=\"transparent\"\n shape=\"square\"\n size=\"xs\"\n class=\"mlv-tile__close\"\n type=\"button\"\n [attr.aria-label]=\"_i18n().close\"\n (click)=\"closed.emit()\"\n >\n <svg lucideX size=\"14\" />\n </button>\n }\n</div>\n}\n\n<div class=\"mlv-tile__body\">\n <ng-content />\n</div>\n", styles: ["@keyframes tile-enter{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.mlv-tile,.mlv-tile *,.mlv-tile:before,.mlv-tile:after,[class^=mlv-tile__],[class*=\" mlv-tile__\"],[class^=mlv-tile--],[class*=\" mlv-tile--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}@keyframes tile-leave-fade{0%{opacity:1;transform:none}to{opacity:0;transform:translateY(-6px) scale(.98)}}@keyframes tile-leave-collapse{0%{max-height:31.25rem}to{max-height:0}}.mlv-tile{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-tile *{box-sizing:border-box}.mlv-tile{position:relative;display:flex;flex-direction:column;background-color:var(--mlv-elevation-bg-1);color:var(--mlv-text-primary);box-shadow:var(--mlv-shadow-1);border-left:var(--mlv-stroke-width-thick) solid transparent;overflow:hidden;transition:box-shadow var(--mlv-duration-normal) var(--mlv-ease-out),background-color var(--mlv-duration-normal) var(--mlv-ease-out),border-left-color var(--mlv-duration-normal) var(--mlv-ease-out);animation:tile-enter var(--mlv-duration-normal) var(--mlv-ease-out) both}.mlv-tile--size-xs{padding:.5rem;border-radius:var(--mlv-radius-xs);gap:.25rem}.mlv-tile--size-s{padding:.625rem;border-radius:var(--mlv-radius-s);gap:.375rem}.mlv-tile--size-m{padding:var(--mlv-padding-s);border-radius:var(--mlv-radius-m);gap:.5rem}.mlv-tile--size-l{padding:var(--mlv-padding-m);border-radius:var(--mlv-radius-l);gap:.625rem}.mlv-tile--size-xl{padding:var(--mlv-padding-l);border-radius:var(--mlv-radius-xl);gap:.75rem}.mlv-tile--tone-info{border-left-color:var(--mlv-text-info)}.mlv-tile--tone-success{border-left-color:var(--mlv-text-positive)}.mlv-tile--tone-warning{border-left-color:var(--mlv-text-warning)}.mlv-tile--tone-danger{border-left-color:var(--mlv-text-negative)}.mlv-tile.sortable-drag{box-shadow:var(--mlv-shadow-floating);cursor:grabbing;z-index:var(--mlv-z-modal)}.mlv-tile.sortable-chosen{box-shadow:var(--mlv-shadow-3)}.mlv-tile.sortable-ghost{opacity:.35}.mlv-tile.sortable-drag,.mlv-tile.sortable-chosen,.mlv-tile.sortable-ghost{animation:none}.mlv-tile--leaving{overflow:hidden;pointer-events:none;animation:tile-leave-fade var(--mlv-duration-normal) var(--mlv-ease-out) forwards,tile-leave-collapse var(--mlv-duration-normal) var(--mlv-ease-out) forwards}.mlv-tile--drag-disabled{opacity:var(--mlv-disabled-opacity);cursor:not-allowed}.mlv-tile--drag-disabled .mlv-tile__drag-handle{cursor:not-allowed}.mlv-tile__drag-handle{display:flex;align-items:center;flex-shrink:0;cursor:grab;color:var(--mlv-text-secondary);touch-action:none}.sortable-drag .mlv-tile__drag-handle{cursor:grabbing}.mlv-tile__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;min-height:0;margin-bottom:.25rem}.mlv-tile__close{flex-shrink:0;margin-left:auto}.mlv-tile__body{flex:1 1 auto;min-height:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MlvButton, selector: "button[mlvButton], a[mlvButton]", inputs: ["variant", "shape", "disabled", "loading"] }, { kind: "component", type: LucideX, selector: "svg[lucideX]" }, { kind: "component", type: LucideGripVertical, selector: "svg[lucideGripVertical]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
25
|
+
}
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvTile, decorators: [{
|
|
27
|
+
type: Component,
|
|
28
|
+
args: [{ selector: 'mlv-tile', imports: [NgTemplateOutlet, MlvButton, LucideX, LucideGripVertical], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
29
|
+
class: 'mlv-tile',
|
|
30
|
+
'[class]': '"mlv-tile--size-" + size()',
|
|
31
|
+
'[class.mlv-tile--tone-info]': 'tone() === "info"',
|
|
32
|
+
'[class.mlv-tile--tone-success]': 'tone() === "success"',
|
|
33
|
+
'[class.mlv-tile--tone-warning]': 'tone() === "warning"',
|
|
34
|
+
'[class.mlv-tile--tone-danger]': 'tone() === "danger"',
|
|
35
|
+
'[class.mlv-tile--draggable]': 'draggable()',
|
|
36
|
+
'[class.mlv-tile--drag-disabled]': 'dragDisabled()',
|
|
37
|
+
}, template: "@if (headerRef() || closable() || draggable()) {\n<div class=\"mlv-tile__header\">\n @if (draggable()) {\n <span class=\"mlv-tile__drag-handle\" aria-hidden=\"true\">\n <svg lucideGripVertical size=\"16\" />\n </span>\n } @if (headerRef(); as headerTpl) {\n <ng-container [ngTemplateOutlet]=\"headerTpl.templateRef\" />\n } @if (closable()) {\n <button\n mlvButton\n variant=\"transparent\"\n shape=\"square\"\n size=\"xs\"\n class=\"mlv-tile__close\"\n type=\"button\"\n [attr.aria-label]=\"_i18n().close\"\n (click)=\"closed.emit()\"\n >\n <svg lucideX size=\"14\" />\n </button>\n }\n</div>\n}\n\n<div class=\"mlv-tile__body\">\n <ng-content />\n</div>\n", styles: ["@keyframes tile-enter{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.mlv-tile,.mlv-tile *,.mlv-tile:before,.mlv-tile:after,[class^=mlv-tile__],[class*=\" mlv-tile__\"],[class^=mlv-tile--],[class*=\" mlv-tile--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}@keyframes tile-leave-fade{0%{opacity:1;transform:none}to{opacity:0;transform:translateY(-6px) scale(.98)}}@keyframes tile-leave-collapse{0%{max-height:31.25rem}to{max-height:0}}.mlv-tile{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-font-size-m)}.mlv-tile *{box-sizing:border-box}.mlv-tile{position:relative;display:flex;flex-direction:column;background-color:var(--mlv-elevation-bg-1);color:var(--mlv-text-primary);box-shadow:var(--mlv-shadow-1);border-left:var(--mlv-stroke-width-thick) solid transparent;overflow:hidden;transition:box-shadow var(--mlv-duration-normal) var(--mlv-ease-out),background-color var(--mlv-duration-normal) var(--mlv-ease-out),border-left-color var(--mlv-duration-normal) var(--mlv-ease-out);animation:tile-enter var(--mlv-duration-normal) var(--mlv-ease-out) both}.mlv-tile--size-xs{padding:.5rem;border-radius:var(--mlv-radius-xs);gap:.25rem}.mlv-tile--size-s{padding:.625rem;border-radius:var(--mlv-radius-s);gap:.375rem}.mlv-tile--size-m{padding:var(--mlv-padding-s);border-radius:var(--mlv-radius-m);gap:.5rem}.mlv-tile--size-l{padding:var(--mlv-padding-m);border-radius:var(--mlv-radius-l);gap:.625rem}.mlv-tile--size-xl{padding:var(--mlv-padding-l);border-radius:var(--mlv-radius-xl);gap:.75rem}.mlv-tile--tone-info{border-left-color:var(--mlv-text-info)}.mlv-tile--tone-success{border-left-color:var(--mlv-text-positive)}.mlv-tile--tone-warning{border-left-color:var(--mlv-text-warning)}.mlv-tile--tone-danger{border-left-color:var(--mlv-text-negative)}.mlv-tile.sortable-drag{box-shadow:var(--mlv-shadow-floating);cursor:grabbing;z-index:var(--mlv-z-modal)}.mlv-tile.sortable-chosen{box-shadow:var(--mlv-shadow-3)}.mlv-tile.sortable-ghost{opacity:.35}.mlv-tile.sortable-drag,.mlv-tile.sortable-chosen,.mlv-tile.sortable-ghost{animation:none}.mlv-tile--leaving{overflow:hidden;pointer-events:none;animation:tile-leave-fade var(--mlv-duration-normal) var(--mlv-ease-out) forwards,tile-leave-collapse var(--mlv-duration-normal) var(--mlv-ease-out) forwards}.mlv-tile--drag-disabled{opacity:var(--mlv-disabled-opacity);cursor:not-allowed}.mlv-tile--drag-disabled .mlv-tile__drag-handle{cursor:not-allowed}.mlv-tile__drag-handle{display:flex;align-items:center;flex-shrink:0;cursor:grab;color:var(--mlv-text-secondary);touch-action:none}.sortable-drag .mlv-tile__drag-handle{cursor:grabbing}.mlv-tile__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;min-height:0;margin-bottom:.25rem}.mlv-tile__close{flex-shrink:0;margin-left:auto}.mlv-tile__body{flex:1 1 auto;min-height:0}\n"] }]
|
|
38
|
+
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], draggable: [{ type: i0.Input, args: [{ isSignal: true, alias: "draggable", required: false }] }], dragDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragDisabled", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], headerRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvTileHeader), { isSignal: true }] }] } });
|
|
39
|
+
//# sourceMappingURL=tile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tile.js","sourceRoot":"","sources":["../../../../../../../libs/core/tile/src/lib/tile/tile.ts","../../../../../../../libs/core/tile/src/lib/tile/tile.html"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,GACP,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;;AAwB/C,MAAM,OAAO,OAAO;IAClB,sDAAsD;IACnC,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAExC,IAAI,GAAG,KAAK,CAAc,GAAG;6EAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAc,SAAS;6EAAC,CAAC;IACrC,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFACpD,SAAS,EAAE,qBAAqB,GAChC,CAAC;IACM,SAAS,GAAG,KAAK,CAAwB,KAAK,iFACrD,SAAS,EAAE,qBAAqB,GAChC,CAAC;IACM,YAAY,GAAG,KAAK,CAAwB,KAAK,oFACxD,SAAS,EAAE,qBAAqB,GAChC,CAAC;IAEM,MAAM,GAAG,MAAM,EAAQ,CAAC;IAEjC,uEAAuE;IACpD,SAAS,GAAG,YAAY,CAAC,aAAa;kFAAC,CAAC;uGAnBhD,OAAO;2FAAP,OAAO,grCAmB0B,aAAa,gEC1D3D,4rBA4BA,qiGDLY,gBAAgB,oJAAE,SAAS,iIAAE,OAAO,yDAAE,kBAAkB;;2FAgBvD,OAAO;kBAlBnB,SAAS;+BACE,UAAU,WACX,CAAC,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,CAAC,iBAGpD,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,QACzC;wBACJ,KAAK,EAAE,UAAU;wBACjB,SAAS,EAAE,4BAA4B;wBACvC,6BAA6B,EAAE,mBAAmB;wBAClD,gCAAgC,EAAE,sBAAsB;wBACxD,gCAAgC,EAAE,sBAAsB;wBACxD,+BAA+B,EAAE,qBAAqB;wBACtD,6BAA6B,EAAE,aAAa;wBAC5C,iCAAiC,EAAE,gBAAgB;qBACpD;ymBAqB2C,aAAa","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n contentChild,\n inject,\n input,\n output,\n} from '@angular/core';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { LucideGripVertical, LucideX } from '@lucide/angular';\nimport { MlvButton } from '@malva-ui/core/button';\nimport { MlvTileHeader } from '../tile-header';\nimport { MLV_TILE_I18N } from '@malva-ui/i18n';\nimport type { MlvTone } from '@malva-ui/cdk/utils';\n\nexport type MlvTileSize = 'xs' | 's' | 'm' | 'l' | 'xl';\nexport type MlvTileTone = MlvTone | 'default';\n\n@Component({\n selector: 'mlv-tile',\n imports: [NgTemplateOutlet, MlvButton, LucideX, LucideGripVertical],\n templateUrl: './tile.html',\n styleUrl: './tile.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mlv-tile',\n '[class]': '\"mlv-tile--size-\" + size()',\n '[class.mlv-tile--tone-info]': 'tone() === \"info\"',\n '[class.mlv-tile--tone-success]': 'tone() === \"success\"',\n '[class.mlv-tile--tone-warning]': 'tone() === \"warning\"',\n '[class.mlv-tile--tone-danger]': 'tone() === \"danger\"',\n '[class.mlv-tile--draggable]': 'draggable()',\n '[class.mlv-tile--drag-disabled]': 'dragDisabled()',\n },\n})\nexport class MlvTile {\n /** @protected The component's i18n strings signal. */\n protected readonly _i18n = inject(MLV_TILE_I18N);\n\n readonly size = input<MlvTileSize>('m');\n readonly tone = input<MlvTileTone>('default');\n readonly closable = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n readonly draggable = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n readonly dragDisabled = input<boolean, BooleanInput>(false, {\n transform: coerceBooleanProperty,\n });\n\n readonly closed = output<void>();\n\n /** @protected Header slot template projected via `[mlvTileHeader]`. */\n protected readonly headerRef = contentChild(MlvTileHeader);\n}\n","@if (headerRef() || closable() || draggable()) {\n<div class=\"mlv-tile__header\">\n @if (draggable()) {\n <span class=\"mlv-tile__drag-handle\" aria-hidden=\"true\">\n <svg lucideGripVertical size=\"16\" />\n </span>\n } @if (headerRef(); as headerTpl) {\n <ng-container [ngTemplateOutlet]=\"headerTpl.templateRef\" />\n } @if (closable()) {\n <button\n mlvButton\n variant=\"transparent\"\n shape=\"square\"\n size=\"xs\"\n class=\"mlv-tile__close\"\n type=\"button\"\n [attr.aria-label]=\"_i18n().close\"\n (click)=\"closed.emit()\"\n >\n <svg lucideX size=\"14\" />\n </button>\n }\n</div>\n}\n\n<div class=\"mlv-tile__body\">\n <ng-content />\n</div>\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 MlvTileHeader extends MlvStructural {
|
|
5
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvTileHeader, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
6
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvTileHeader, isStandalone: true, selector: "[mlvTileHeader]", usesInheritance: true, ngImport: i0 });
|
|
7
|
+
}
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvTileHeader, decorators: [{
|
|
9
|
+
type: Directive,
|
|
10
|
+
args: [{
|
|
11
|
+
selector: '[mlvTileHeader]',
|
|
12
|
+
}]
|
|
13
|
+
}] });
|
|
14
|
+
//# sourceMappingURL=tile-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tile-header.js","sourceRoot":"","sources":["../../../../../../libs/core/tile/src/lib/tile-header.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;;AAKpD,MAAM,OAAO,aAAc,SAAQ,aAAa;uGAAnC,aAAa;2FAAb,aAAa;;2FAAb,aAAa;kBAHzB,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;iBAC5B","sourcesContent":["import { Directive } from '@angular/core';\nimport { MlvStructural } from '@malva-ui/cdk/utils';\n\n@Directive({\n selector: '[mlvTileHeader]',\n})\nexport class MlvTileHeader extends MlvStructural {}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"malva-ui-core-tile.js","sourceRoot":"","sources":["../../../../../libs/core/tile/src/malva-ui-core-tile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"]}
|