@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,917 @@
|
|
|
1
|
+
# @malva-ui/data-table
|
|
2
|
+
|
|
3
|
+
**Import path:** `@malva-ui/core/data-table`
|
|
4
|
+
**Selector:** `mlv-data-table`
|
|
5
|
+
|
|
6
|
+
Feature-rich data table component for Angular. Accepts a plain `T[]` array or a custom `MlvDataSource<T>` and renders a searchable, sortable, filterable table with toolbar or per-column filter presentation, pinned/sticky and resizable columns, virtual scroll, tree rows, editing, grouped headers, row selection, column visibility, loading, summaries, and paged or infinite pagination.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Public API
|
|
11
|
+
|
|
12
|
+
| Export | Kind | Description |
|
|
13
|
+
| ----------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
14
|
+
| `MlvDataTable` | Component | Main table component (`mlv-data-table`) |
|
|
15
|
+
| `MlvDataTableCell` | Directive | `mlvDataTableCell` structural directive for custom cell templates |
|
|
16
|
+
| `MlvDataTableEditCell` | Directive | `mlvDataTableEditCell` structural directive for custom edit-mode cell templates |
|
|
17
|
+
| `MlvDataTableNoData` | Directive | `mlvDataTableNoData` structural directive for custom empty-state template |
|
|
18
|
+
| `MlvDataTableError` | Directive | `mlvDataTableError` structural directive for custom failed-request template |
|
|
19
|
+
| `MlvDataTableErrorContext` | Interface | Error template context (`{ $implicit: message, retry }`) |
|
|
20
|
+
| `MlvDataTableFooter` | Directive | `mlvDataTableFooter` structural directive for custom footer summary row templates |
|
|
21
|
+
| `MlvDataSource<T>` | Abstract class | Base class for custom data sources — re-exported from `@malva-ui/cdk/data-source` |
|
|
22
|
+
| `MlvArrayDataSource<T>` | Class | In-memory data source — handles filtering, sorting, pagination. Re-exported from `@malva-ui/cdk/data-source` |
|
|
23
|
+
| `MlvDataSourceState` | Interface | Serialisable source snapshot — re-exported from `@malva-ui/cdk/data-source` |
|
|
24
|
+
| `MlvDataTableColumn<T>` | Interface | Column definition type |
|
|
25
|
+
| `MlvDataTableColumnGroup` | Interface | Column group definition for multi-row headers |
|
|
26
|
+
| `MlvFilterState` | Interface | Active filter state (`{ key, operator, value }`) |
|
|
27
|
+
| `MlvDataSourceFilterOperator` | Type | `'contains' \| 'not-contains' \| 'equals' \| 'not-equals' \| 'in' \| 'not-in'` — re-exported from `@malva-ui/cdk/data-source` |
|
|
28
|
+
| `MlvDataTableFilterOperator` | Type | **Deprecated** alias of `MlvDataSourceFilterOperator` |
|
|
29
|
+
| `MlvSearchState` | Interface | Global query plus the explicit column keys it may inspect |
|
|
30
|
+
| `MlvSearchFieldTrigger` | Type | `'live' \| 'submit'` search commit strategy |
|
|
31
|
+
| `MlvFilterDisplay` | Type | `'toolbar' \| 'column' \| 'none'` filter-control placement |
|
|
32
|
+
| `MlvSortState` | Interface | Active sort state (`{ key, direction }`) |
|
|
33
|
+
| `MlvSortDirection` | Type | `'asc' \| 'desc'` |
|
|
34
|
+
| `MlvEditMode` | Type | `'row' \| 'cell'` |
|
|
35
|
+
| `MlvEditEvent<T>` | Interface | Row edit start/cancel event (`{ row, index }`) |
|
|
36
|
+
| `MlvEditSaveEvent<T>` | Interface | Row edit save event (`{ row, index, originalRow }`) |
|
|
37
|
+
| `MlvRowClickEvent<T>` | Interface | Row click event (`{ row, index, event }`) |
|
|
38
|
+
| `MlvSelectableMode` | Type | `'single' \| 'multi' \| false` |
|
|
39
|
+
| `MlvSelectionChangeEvent<T>` | Interface | Selection change event (`{ selectedRows, row? }`) |
|
|
40
|
+
| `MlvPaginationMode` | Type | `'paged' \| 'infinite'` — pagination strategy |
|
|
41
|
+
| `MlvLoadMoreEvent` | Interface | Infinite-scroll load-more payload (`{ page, perPage, distance }`) |
|
|
42
|
+
| `MlvColumnFilterConfig` | Interface | Per-column filter options and allowed operators |
|
|
43
|
+
| `MlvColumnValueLabels` | Type | Raw-value → label map for a column's default cell renderer |
|
|
44
|
+
| `MlvColumnToneFn<T>` | Type | `(row: T) => MlvTone \| null \| undefined` per-row tone resolver |
|
|
45
|
+
| `MlvColumnResponsive` | Type | Responsive breakpoint map (`Record<string \| number, 'hidden' \| 'visible'>`) |
|
|
46
|
+
| `MlvColumnAlign` | Type | `'left' \| 'center' \| 'right'` |
|
|
47
|
+
| `MlvPinSide` | Type | `'left' \| 'right'` — the side a column can be pinned to |
|
|
48
|
+
| `MlvColumnResizeSource` | Type | `'pointer' \| 'keyboard' \| 'reset'` resize commit source |
|
|
49
|
+
| `MlvColumnResizeEvent` | Interface | Committed column key, pixel width or reset, and interaction source |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Components
|
|
54
|
+
|
|
55
|
+
### `MlvDataTable`
|
|
56
|
+
|
|
57
|
+
- **Selector:** `mlv-data-table`
|
|
58
|
+
- **Change Detection:** `OnPush`
|
|
59
|
+
- **Encapsulation:** `None`
|
|
60
|
+
-
|
|
61
|
+
-
|
|
62
|
+
|
|
63
|
+
#### Inputs
|
|
64
|
+
|
|
65
|
+
| Input | Type | Default | Description |
|
|
66
|
+
| ------------------------- | -------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
67
|
+
| `columns` | `MlvDataTableColumn[]` | required | Column definitions |
|
|
68
|
+
| `data` | `T[] \| MlvDataSource<T> \| undefined` | `undefined` | Row data — array (auto-wrapped) or custom data source |
|
|
69
|
+
| `rowHeight` | `number` | `40` | Row height in px. Required when `virtualScroll` is on — must match the actual rendered row height (which depends on the active density) so the CDK viewport positions rows correctly. |
|
|
70
|
+
| `virtualScroll` | `boolean` | `false` | Enable CDK virtual scroll for large datasets. Splits the table into a header table, a `cdk-virtual-scroll-viewport` body, and an optional footer table so only the visible row slice is rendered. |
|
|
71
|
+
| `striped` | `boolean` | `false` | Alternating row shading |
|
|
72
|
+
| `bordered` | `boolean` | `false` | Cell border lines |
|
|
73
|
+
| `stickyHeader` | `boolean` | `true` | Sticky table header on scroll |
|
|
74
|
+
| `maxHeight` | `string \| undefined` | `undefined` | Maximum height of the scrollable table area (e.g. `'28rem'`, `'400px'`). Enables vertical scroll. |
|
|
75
|
+
| `columnGroups` | `MlvDataTableColumnGroup[]` | `[]` | Column group definitions for multi-row headers |
|
|
76
|
+
| `editable` | `BooleanInput` | `false` | Enable editable mode (shows edit/save/cancel action buttons per row) |
|
|
77
|
+
| `editMode` | `MlvEditMode` | `'row'` | Edit granularity: `'row'` edits entire rows, `'cell'` edits individual cells |
|
|
78
|
+
| `addRow` | `BooleanInput` | `false` | Show an "Add row" button in the toolbar when editable |
|
|
79
|
+
| `loading` | `BooleanInput` | `false` | Show a centered loading overlay (spinner) on top of the table body |
|
|
80
|
+
| `error` | `boolean \| string` | `false` | Failed-request state. `true` uses the localized default message, a non-empty string is used verbatim. Replaces the table body while set and not loading. See "Error State" below. |
|
|
81
|
+
| `showSearch` | `BooleanInput` | `true` | Render the built-in toolbar search field when searchable columns exist. Set to `false` when an external control owns search; `searchQuery` and searchable-column behavior remain active. |
|
|
82
|
+
| `searchTrigger` | `MlvSearchFieldTrigger` | `'live'` | Commit the built-in search field live after its debounce or only on explicit submit |
|
|
83
|
+
| `searchDebounce` | `number` | `200` | Trailing delay in milliseconds for live search; values below zero are clamped to zero |
|
|
84
|
+
| `searchQuery` | `string` (model) | `''` | Applied global query. It searches only columns marked `searchable` and can be controlled externally even when `showSearch` is false |
|
|
85
|
+
| `filterDisplay` | `MlvFilterDisplay` | `'toolbar'` | Place table-owned filters in one toolbar dialog, as scoped column-header popovers, or hide the controls for an external filter surface |
|
|
86
|
+
| `activeFilters` | `MlvFilterState[]` (model) | `[]` | Applied column predicates. Global search is OR across searchable keys, then ANDed with this filter list |
|
|
87
|
+
| `selectable` | `MlvSelectableMode` | `false` | Row selection mode: `'single'`, `'multi'`, or `false` |
|
|
88
|
+
| `selectedRows` | `Set<T>` (model) | `new Set()` | Two-way bindable set of currently selected rows |
|
|
89
|
+
| `actionsHeaderLabel` | `string` | `'Actions'` | Accessible name for the trailing actions-column header (shown when `editable`). Rendered as visually-hidden text so the `<th>` is never nameless. Plain English default; i18n token is a follow-up. |
|
|
90
|
+
| `paginationMode` | `MlvPaginationMode` | `'paged'` | `'paged'` renders the classic paginator footer; `'infinite'` hides it and emits `loadMore` as the user scrolls near the bottom |
|
|
91
|
+
| `hasMore` | `BooleanInput` | `true` | In infinite mode, whether more data is available. Set to `false` when the data source is exhausted so the directive stops observing |
|
|
92
|
+
| `infiniteScrollThreshold` | `number` | `200` | Distance in px from the bottom at which `loadMore` fires (infinite mode only) |
|
|
93
|
+
| `cellNavigation` | `BooleanInput` | `false` | **Experimental.** Opt into cell-level keyboard navigation backed by `@angular/aria` grid directives. Non-virtual only — yields to row-level roving when `virtualScroll` is on. See "Experimental cell navigation" below. |
|
|
94
|
+
|
|
95
|
+
#### Outputs
|
|
96
|
+
|
|
97
|
+
| Output | Type | Description |
|
|
98
|
+
| ----------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
99
|
+
| `rowEditStart` | `MlvEditEvent` | Emits when a row enters edit mode |
|
|
100
|
+
| `rowEditSave` | `MlvEditSaveEvent` | Emits when the user confirms edits on a row |
|
|
101
|
+
| `rowEditCancel` | `MlvEditEvent` | Emits when the user cancels editing a row |
|
|
102
|
+
| `rowAdd` | `void` | Emits when the user clicks "Add row" |
|
|
103
|
+
| `rowClick` | `MlvRowClickEvent` | Emits when the user clicks any data row (not including selection checkbox clicks) |
|
|
104
|
+
| `selectionChange` | `MlvSelectionChangeEvent` | Emits whenever the row selection changes |
|
|
105
|
+
| `retry` | `void` | Emits when the error block's retry control is activated. The consumer refetches and clears `error` |
|
|
106
|
+
| `columnResize` | `MlvColumnResizeEvent` | Emits committed pointer/keyboard widths and resets so consumers can persist column state |
|
|
107
|
+
| `loadMore` | `MlvLoadMoreEvent` | Emits in infinite mode when the user scrolls within `infiniteScrollThreshold` of the bottom (`{ page, perPage, distance }`) |
|
|
108
|
+
|
|
109
|
+
`selectedRows`, `searchQuery`, and `activeFilters` are `model()`s, so they also
|
|
110
|
+
emit `selectedRowsChange`, `searchQueryChange`, and `activeFiltersChange`.
|
|
111
|
+
|
|
112
|
+
#### Density
|
|
113
|
+
|
|
114
|
+
Uses `MlvDensityDirective` as a `hostDirective` with `mlvDensity` input exposed. Provides `MLV_DENSITY_ELEMENT = 'data-table'`.
|
|
115
|
+
|
|
116
|
+
Density-aware CSS custom properties set on the host cascade through the entire table:
|
|
117
|
+
|
|
118
|
+
| Variable | Tight | Compact | Comfortable | Spacious | Airy |
|
|
119
|
+
| --------------------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
|
|
120
|
+
| `--mlv-dt-row-height` | `2.5rem` | `3rem` | `3.5rem` | `4.25rem` | `5rem` |
|
|
121
|
+
| `--mlv-dt-cell-padding-x` | `0.75rem` | `1rem` | `1.25rem` | `1.5rem` | `1.75rem` |
|
|
122
|
+
| `--mlv-dt-header-height` | `2.25rem` | `2.5rem` | `3rem` | `3.25rem` | `3.75rem` |
|
|
123
|
+
| `--mlv-dt-font-size` | `font-size-s` | `font-size-s` | `font-size-m` | `font-size-l` | `font-size-l` |
|
|
124
|
+
| `--mlv-dt-header-font-size` | `font-size-s` | `font-size-s` | `font-size-m` | `font-size-l` | `font-size-l` |
|
|
125
|
+
| `--mlv-dt-icon-size` | `0.75rem` | `0.875rem` | `1rem` | `1.125rem` | `1.25rem` |
|
|
126
|
+
|
|
127
|
+
#### Content children (structural directives)
|
|
128
|
+
|
|
129
|
+
- `mlvDataTableCell="key"` — custom cell template; context: `{ $implicit: row, row, index }`
|
|
130
|
+
- `mlvDataTableEditCell="key"` — custom edit-mode cell template; context: `{ $implicit: row, row, index }`
|
|
131
|
+
- `mlvDataTableNoData` — custom empty-state template shown when filtered data is empty
|
|
132
|
+
- `mlvDataTableError` — custom failed-request template; context: `{ $implicit: message, retry: () => void }`
|
|
133
|
+
- `mlvDataTableFooter` — custom footer summary row template rendered inside `<tfoot>`; context: `{ $implicit: visibleColumns }`
|
|
134
|
+
|
|
135
|
+
#### Internal state (signals on the component instance)
|
|
136
|
+
|
|
137
|
+
| Signal | Description |
|
|
138
|
+
| ---------------- | ------------------------------------------------------------ |
|
|
139
|
+
| `activeFilters` | Current `MlvFilterState[]` — a `model()`, two-way bindable |
|
|
140
|
+
| `searchQuery` | Applied global search string — a `model()`, two-way bindable |
|
|
141
|
+
| `currentSort` | Current `MlvSortState \| null` |
|
|
142
|
+
| `currentPage` | Active page number |
|
|
143
|
+
| `currentPerPage` | Active items-per-page |
|
|
144
|
+
| `containerWidth` | Tracked element width (drives responsive columns) |
|
|
145
|
+
|
|
146
|
+
#### Template-facing public methods
|
|
147
|
+
|
|
148
|
+
The component template drives every feature through public methods on the
|
|
149
|
+
instance. They are part of the declared surface (not `_`-prefixed), but they
|
|
150
|
+
exist for the component's own template — a consumer normally reaches for the
|
|
151
|
+
inputs/outputs above instead.
|
|
152
|
+
|
|
153
|
+
| Area | Methods |
|
|
154
|
+
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
155
|
+
| Cell rendering | `getTemplate`, `getCellContext`, `getCellValue`, `getCellDisplayValue`, `getCellTone`, `getAlignClass`, `getCellStyle` |
|
|
156
|
+
| Empty/error state | `getNoDataTemplate`, `getErrorTemplate`, `onRetry` |
|
|
157
|
+
| Editing | `getEditTemplate`, `isEditing`, `startEdit`, `saveEdit`, `cancelEdit`, `onAddRow` |
|
|
158
|
+
| Rows | `onRowClick`, `isRowSelected`, `toggleRowSelection`, `toggleSelectAll`, `onInfiniteScrollLoadMore` |
|
|
159
|
+
| Columns | `isColumnHidden`, `toggleColumnVisibility`, `getColStyle`, `getColWidth`, `getFooterTemplate` |
|
|
160
|
+
| Search & filters | `onSearch`, `isColumnFiltered`, `getFilterLabel`, `onColumnFiltersChange`, `getColumnFilterColumns`, `focusColumnFilterTrigger` |
|
|
161
|
+
| Pinning | `getPinnableSides`, `togglePin`, `pinTo`, `unpin`, `isColumnPinned`, `getColumnPinSide` |
|
|
162
|
+
| Tree rows | `isRowExpanded`, `hasChildren`, `getDepth`, `toggleExpand` |
|
|
163
|
+
| Sorting | `onSortClick`, `getSortDirection`, `getSortLabel` |
|
|
164
|
+
| Column resizing | `onResizeStart`, `onColumnResizeKeydown`, `getColumnResizeLabel`, `getColumnResizeValue`, `getColumnResizeMin`, `getColumnResizeMax`, `getColumnResizeValueText`, `resetColumnWidth` |
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Directives
|
|
169
|
+
|
|
170
|
+
### `MlvDataTableCell`
|
|
171
|
+
|
|
172
|
+
**Selector:** `[mlvDataTableCell]`
|
|
173
|
+
|
|
174
|
+
Structural directive for custom cell templates with full generic type inference.
|
|
175
|
+
|
|
176
|
+
#### Inputs
|
|
177
|
+
|
|
178
|
+
| Input | Alias | Type | Description |
|
|
179
|
+
| ----------- | ---------------------- | -------------------------------------- | ------------------------------------------------------------------------ |
|
|
180
|
+
| `columnKey` | `mlvDataTableCell` | `string` (required) | Column key this template handles |
|
|
181
|
+
| `from` | `mlvDataTableCellFrom` | `T[] \| MlvDataSource<T> \| undefined` | Pass the same value as `[data]` — Angular infers `T` and types `let-row` |
|
|
182
|
+
|
|
183
|
+
#### Type narrowing
|
|
184
|
+
|
|
185
|
+
The directive declares `static ngTemplateContextGuard` so Angular narrows the template context to `MlvDataTableCellContext<T>`, giving full autocomplete on `let-row` without bracket indexing.
|
|
186
|
+
|
|
187
|
+
#### Usage — asterisk shorthand (preferred)
|
|
188
|
+
|
|
189
|
+
```html
|
|
190
|
+
<span *mlvDataTableCell="'salary'; let row from employees"> ${{ row.salary.toLocaleString() }} </span>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Microsyntax expands to `[mlvDataTableCell]="'salary'" [mlvDataTableCellFrom]="employees" let-row`. Angular infers `T` from the type of `employees`.
|
|
194
|
+
|
|
195
|
+
#### Usage — explicit `ng-template`
|
|
196
|
+
|
|
197
|
+
```html
|
|
198
|
+
<ng-template mlvDataTableCell="status" [mlvDataTableCellFrom]="employees" let-row>
|
|
199
|
+
<span [class]="'badge--' + row.status">{{ row.status }}</span>
|
|
200
|
+
</ng-template>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### `MlvDataTableEditCell`
|
|
204
|
+
|
|
205
|
+
**Selector:** `[mlvDataTableEditCell]`
|
|
206
|
+
|
|
207
|
+
Structural directive for custom edit-mode cell templates. Mirrors `MlvDataTableCell` API. When a row enters edit mode, the edit template replaces the display template for matching column keys.
|
|
208
|
+
|
|
209
|
+
#### Inputs
|
|
210
|
+
|
|
211
|
+
| Input | Alias | Type | Description |
|
|
212
|
+
| ----------- | -------------------------- | -------------------------------------- | ------------------------------------------------------------------------ |
|
|
213
|
+
| `columnKey` | `mlvDataTableEditCell` | `string` (required) | Column key this edit template applies to |
|
|
214
|
+
| `from` | `mlvDataTableEditCellFrom` | `T[] \| MlvDataSource<T> \| undefined` | Pass the same value as `[data]` — Angular infers `T` and types `let-row` |
|
|
215
|
+
|
|
216
|
+
Like `MlvDataTableCell`, it declares `static ngTemplateContextGuard` so the
|
|
217
|
+
template context narrows to the row type.
|
|
218
|
+
|
|
219
|
+
#### Usage
|
|
220
|
+
|
|
221
|
+
```html
|
|
222
|
+
<mlv-input *mlvDataTableEditCell="'name'; let row from employees" [ngModel]="row.name" (ngModelChange)="row.name = $event" />
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### `MlvDataTableNoData`
|
|
226
|
+
|
|
227
|
+
**Selector:** `[mlvDataTableNoData]`
|
|
228
|
+
|
|
229
|
+
Structural directive. Template is shown in the table body when the data source returns zero rows.
|
|
230
|
+
|
|
231
|
+
```html
|
|
232
|
+
<ng-template mlvDataTableNoData>
|
|
233
|
+
<p>No items found — try adjusting your filters.</p>
|
|
234
|
+
</ng-template>
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### `MlvDataTableError`
|
|
238
|
+
|
|
239
|
+
**Selector:** `[mlvDataTableError]`
|
|
240
|
+
|
|
241
|
+
Structural directive. Replaces the default error block described under "Error State". Context is `MlvDataTableErrorContext` — `{ $implicit: message, retry: () => void }` — narrowed by a `static ngTemplateContextGuard`.
|
|
242
|
+
|
|
243
|
+
```html
|
|
244
|
+
<ng-template mlvDataTableError let-message let-retry="retry">
|
|
245
|
+
<p>{{ message }}</p>
|
|
246
|
+
<button mlvButton variant="secondary" type="button" (click)="retry()">Try again</button>
|
|
247
|
+
</ng-template>
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Editable Mode
|
|
253
|
+
|
|
254
|
+
Enable editing with `[editable]="true"`. An actions column is appended with edit/save/cancel buttons per row.
|
|
255
|
+
|
|
256
|
+
### Edit flow
|
|
257
|
+
|
|
258
|
+
1. User clicks pencil icon → `startEdit(row, index)` clones the row and emits `rowEditStart`
|
|
259
|
+
2. Edit templates replace display templates for columns that have a `mlvDataTableEditCell` defined
|
|
260
|
+
3. User clicks check → `saveEdit(row, index)` emits `rowEditSave` with both modified and original row
|
|
261
|
+
4. User clicks X → `cancelEdit(row, index)` emits `rowEditCancel`
|
|
262
|
+
|
|
263
|
+
### Add row
|
|
264
|
+
|
|
265
|
+
Set `[addRow]="true"` to show an "Add row" button in the toolbar. The `rowAdd` output emits — the consumer is responsible for appending the new row to the data source.
|
|
266
|
+
|
|
267
|
+
### Example
|
|
268
|
+
|
|
269
|
+
```html
|
|
270
|
+
<mlv-data-table [data]="employees" [columns]="columns" editable addRow (rowEditSave)="onSave($event)" (rowAdd)="onAddRow()">
|
|
271
|
+
<mlv-input *mlvDataTableEditCell="'name'; let row from employees" [ngModel]="row.name" (ngModelChange)="row.name = $event" />
|
|
272
|
+
<mlv-input *mlvDataTableEditCell="'email'; let row from employees" [ngModel]="row.email" (ngModelChange)="row.email = $event" />
|
|
273
|
+
</mlv-data-table>
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Column Groups (Multi-Row Headers)
|
|
279
|
+
|
|
280
|
+
Define `[columnGroups]` to render a two-row header. Columns in a group get a shared group header cell with colspan. Columns not belonging to any group get `rowspan="2"` and span both header rows.
|
|
281
|
+
|
|
282
|
+
```ts
|
|
283
|
+
columnGroups: MlvDataTableColumnGroup[] = [
|
|
284
|
+
{ title: 'Personal Info', columns: ['firstName', 'lastName', 'email'] },
|
|
285
|
+
{ title: 'Employment', columns: ['department', 'role', 'salary'] },
|
|
286
|
+
];
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
```html
|
|
290
|
+
<mlv-data-table [data]="employees" [columns]="columns" [columnGroups]="columnGroups" />
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### `MlvDataTableColumnGroup`
|
|
294
|
+
|
|
295
|
+
```ts
|
|
296
|
+
interface MlvDataTableColumnGroup {
|
|
297
|
+
title: string; // Display title for the group header cell
|
|
298
|
+
columns: string[]; // Column keys this group spans
|
|
299
|
+
align?: MlvColumnAlign; // Optional alignment (default: center)
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Row Selection
|
|
306
|
+
|
|
307
|
+
Set `selectable="multi"` or `selectable="single"` to enable row selection. The table inserts a dedicated checkbox column before the first data column.
|
|
308
|
+
|
|
309
|
+
- `'multi'` — each row has a checkbox, plus a header checkbox that selects/deselects all visible rows with an indeterminate state.
|
|
310
|
+
- `'single'` — only one row can be selected at a time; checking a row clears any previous selection.
|
|
311
|
+
|
|
312
|
+
The selection state is exposed via the `selectedRows` two-way bindable model (a `Set<T>`) and the `selectionChange` output.
|
|
313
|
+
|
|
314
|
+
```ts
|
|
315
|
+
readonly selected = signal<Set<Record<string, unknown>>>(new Set());
|
|
316
|
+
readonly total = computed(() => {
|
|
317
|
+
let sum = 0;
|
|
318
|
+
for (const row of this.selected()) sum += (row as User).score;
|
|
319
|
+
return sum;
|
|
320
|
+
});
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
```html
|
|
324
|
+
<mlv-data-table [data]="users" [columns]="columns" selectable="multi" [(selectedRows)]="selected" (selectionChange)="onChange($event)" />
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
Selection survives pagination because the underlying row reference is the identity key (`_mlvRef` for tree rows).
|
|
328
|
+
|
|
329
|
+
> **Checkbox labelling** — header/row selection checkboxes are labelled via the
|
|
330
|
+
> `mlv-checkbox` `[ariaLabel]` input (never `[attr.aria-label]` on the host),
|
|
331
|
+
> which forwards the name to the checkbox's inner native input. This resolved
|
|
332
|
+
> the former `aria-prohibited-attr` axe exception. (The former
|
|
333
|
+
> `nested-interactive` and `empty-table-header` exceptions on the sortable and
|
|
334
|
+
> actions headers are also fixed — see "Sortable headers" and "Actions column
|
|
335
|
+
> header" below.)
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## Row Click
|
|
340
|
+
|
|
341
|
+
Subscribe to `(rowClick)` to react to users clicking a data row. The event contains `{ row, index, event }`. Clicks on selection checkboxes are stopped from bubbling so they do not trigger `rowClick`.
|
|
342
|
+
|
|
343
|
+
```html
|
|
344
|
+
<mlv-data-table [data]="rows" [columns]="columns" (rowClick)="openDetails($event.row)" />
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## Infinite Scroll Pagination
|
|
350
|
+
|
|
351
|
+
Set `paginationMode="infinite"` to replace the classic paginator footer with infinite scrolling. The table hides the paginator, forces its internal `MlvArrayDataSource` to emit every row in the bound array (no per-page slicing), and attaches the `[mlvInfiniteScroll]` directive from `@malva-ui/cdk/infinite-scroll` to its scroll wrapper.
|
|
352
|
+
|
|
353
|
+
When the user scrolls within `infiniteScrollThreshold` pixels of the bottom, the table emits `(loadMore)` with `{ page, perPage, distance }`. The consumer is responsible for fetching the next page and appending the new rows to the array bound to `[data]`.
|
|
354
|
+
|
|
355
|
+
Bind `[loading]` to your in-flight fetch flag so the directive suppresses duplicate emissions during a single scroll gesture. While `[loading]` is truthy in infinite mode, the table renders a compact circular spinner inline at the bottom of the scroll wrapper (below the last row) instead of the full-table overlay used in paged mode — this keeps the already-loaded rows fully visible while the next page is being fetched. Bind `[hasMore]` to `false` once the backing source has been exhausted so the directive stops observing. A `maxHeight` is required so the table wrapper is actually scrollable — otherwise the page body is the scrolling surface and the directive has nothing to observe.
|
|
356
|
+
|
|
357
|
+
```ts
|
|
358
|
+
readonly rows = signal<Transaction[]>(buildPage(1));
|
|
359
|
+
readonly isLoading = signal(false);
|
|
360
|
+
readonly hasMore = signal(true);
|
|
361
|
+
|
|
362
|
+
onLoadMore(event: MlvLoadMoreEvent) {
|
|
363
|
+
if (this.isLoading() || !this.hasMore()) return;
|
|
364
|
+
this.isLoading.set(true);
|
|
365
|
+
fetchPage(event.page).then((next) => {
|
|
366
|
+
this.rows.update((current) => [...current, ...next]);
|
|
367
|
+
if (event.page >= TOTAL_PAGES) this.hasMore.set(false);
|
|
368
|
+
this.isLoading.set(false);
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
```html
|
|
374
|
+
<mlv-data-table [data]="rows()" [columns]="columns" paginationMode="infinite" [loading]="isLoading()" [hasMore]="hasMore()" maxHeight="24rem" (loadMore)="onLoadMore($event)" />
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## Virtual Scroll
|
|
380
|
+
|
|
381
|
+
Set `[virtualScroll]="true"` to use Angular CDK's `cdk-virtual-scroll-viewport` for efficient rendering of very large datasets. Only the visible slice of rows is materialized in the DOM; as the user scrolls, rows are recycled.
|
|
382
|
+
|
|
383
|
+
### Architecture — split tables
|
|
384
|
+
|
|
385
|
+
A single `<table>` cannot be used with `cdk-virtual-scroll-viewport` because the viewport applies a CSS `transform` to its inner content wrapper, which silently breaks `position: sticky` on descendants (sticky headers and pinned columns). To work around this, the table is split into **three separate `<table>` elements** in virtual mode:
|
|
386
|
+
|
|
387
|
+
1. **Header table** (`.mlv-data-table__table--virtual` with `<thead>` only) — rendered **outside** the viewport so it sits above the scroll surface in normal document flow.
|
|
388
|
+
2. **Body table** (`.mlv-data-table__table--virtual` with `<tbody>` only) — rendered **inside** the `cdk-virtual-scroll-viewport`. Uses `*cdkVirtualFor` to render only the visible slice of `flatRows()`.
|
|
389
|
+
3. **Footer table** (`.mlv-data-table__table--virtual` with `<tfoot>` only) — rendered **outside** the viewport below the body, only when a `mlvDataTableFooter` template is projected.
|
|
390
|
+
|
|
391
|
+
All three tables share the same `<colgroup>` (rendered via the internal `#colgroupTpl`) and use `table-layout: fixed`, so column widths stay perfectly aligned across the split tables. The wrapper itself uses `overflow-y: visible` in virtual mode — all vertical scrolling happens inside the viewport.
|
|
392
|
+
|
|
393
|
+
### Row height requirement
|
|
394
|
+
|
|
395
|
+
CDK virtual scroll requires a fixed item height so it can compute the positions of non-rendered rows. The `rowHeight` input is passed to `[itemSize]` on the viewport, and each rendered `<tr>` has its height forced via `[style.height.px]="rowHeight()"`.
|
|
396
|
+
|
|
397
|
+
**`rowHeight` MUST match the actual rendered row height for the active density**, otherwise the viewport will mis-position rows and the table will appear jumpy. See the density table above for the default `--mlv-dt-row-height` per density step (e.g. `56` for comfortable at 3.5rem = 56px).
|
|
398
|
+
|
|
399
|
+
### Viewport height
|
|
400
|
+
|
|
401
|
+
The viewport requires an explicit height because `cdk-virtual-scroll-viewport` does not derive its size from its content. The component exposes a `virtualViewportHeight` computed signal that returns `maxHeight()` if provided, otherwise falls back to `'24rem'`. Pass `[maxHeight]` (e.g. `'32rem'`) to control the visible height of the scroll area in virtual mode.
|
|
402
|
+
|
|
403
|
+
### Mutual exclusion with infinite scroll
|
|
404
|
+
|
|
405
|
+
Virtual scroll and infinite scroll (`paginationMode="infinite"`) solve different problems and are **mutually exclusive** in this component:
|
|
406
|
+
|
|
407
|
+
- **Infinite scroll** — progressively fetches more data from a remote source as the user scrolls near the bottom; all fetched rows remain in the DOM.
|
|
408
|
+
- **Virtual scroll** — assumes the full dataset is already in memory and renders only the visible slice.
|
|
409
|
+
|
|
410
|
+
When `virtualScroll` is on, the `[mlvInfiniteScroll]` directive is disabled and the bottom loader is not rendered. Use the classic paginator or no pagination at all with virtual scroll.
|
|
411
|
+
|
|
412
|
+
### Limitations
|
|
413
|
+
|
|
414
|
+
- **Sticky footer** — the footer table sits outside the scroll viewport, so it is always "pinned" under the body. There is no separate `sticky`/`non-sticky` mode in virtual mode.
|
|
415
|
+
- **Loading overlay** — the standard loading overlay still covers the whole component (including the sticky header) in virtual mode.
|
|
416
|
+
- **Pinned columns** — work correctly because `<colgroup>` + `table-layout: fixed` keeps widths aligned and pinned cells use `position: sticky` relative to their own `<table>`, not the viewport.
|
|
417
|
+
|
|
418
|
+
### Example
|
|
419
|
+
|
|
420
|
+
```ts
|
|
421
|
+
// Generate or fetch a large dataset up front
|
|
422
|
+
readonly rows = signal<Transaction[]>(generateLargeDataset(10_000));
|
|
423
|
+
readonly columns: MlvDataTableColumn[] = [
|
|
424
|
+
{ key: 'id', title: 'ID', width: '100px' },
|
|
425
|
+
{ key: 'merchant', title: 'Merchant', width: '220px' },
|
|
426
|
+
{ key: 'amount', title: 'Amount', align: 'right', width: '120px' },
|
|
427
|
+
{ key: 'status', title: 'Status', width: '140px' },
|
|
428
|
+
];
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
```html
|
|
432
|
+
<mlv-data-table [data]="rows()" [columns]="columns" [virtualScroll]="true" [rowHeight]="56" maxHeight="32rem" />
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
## Loading State
|
|
438
|
+
|
|
439
|
+
Set `[loading]="true"` to show a loading indicator. The rendering differs by `paginationMode`:
|
|
440
|
+
|
|
441
|
+
- **`paginationMode="paged"` (default)** — A centered spinner is rendered on top of the entire component inside a translucent backdrop (`.mlv-data-table__loading-overlay`). Existing rows remain visible beneath so the user keeps context during a refetch.
|
|
442
|
+
- **`paginationMode="infinite"`** — A compact circular spinner is rendered inline at the bottom of the scroll wrapper (`.mlv-data-table__loading-bottom`), directly below the last row. No backdrop is drawn; the already-loaded rows stay fully interactive while the next page is being fetched.
|
|
443
|
+
|
|
444
|
+
```html
|
|
445
|
+
<mlv-data-table [data]="rows" [columns]="columns" [loading]="isLoading()" />
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
---
|
|
449
|
+
|
|
450
|
+
## Error State
|
|
451
|
+
|
|
452
|
+
`[error]` distinguishes "the request failed" from "there is nothing to show" — without it a 500 renders as an empty list.
|
|
453
|
+
|
|
454
|
+
| Value | Result |
|
|
455
|
+
| ---------------------- | ----------------------------------------------------- |
|
|
456
|
+
| `false` (default) | No error; the table renders normally |
|
|
457
|
+
| `true` | Error block with the localized `errorMessage` default |
|
|
458
|
+
| a non-empty string | Error block with that string as the message |
|
|
459
|
+
| `''` / whitespace-only | Treated as no error |
|
|
460
|
+
|
|
461
|
+
**Precedence and visibility**
|
|
462
|
+
|
|
463
|
+
- While `error` is set **and** `loading` is falsy, the error block replaces the entire table body — it outranks both the data rows and the `mlvDataTableNoData` template. `showError()` exposes this decision.
|
|
464
|
+
- `loading` wins: an in-flight refetch suppresses the previous failure so the spinner is not competing with a stale message.
|
|
465
|
+
- Rendered in all three body paths (standard, virtual scroll, experimental cell navigation).
|
|
466
|
+
|
|
467
|
+
**Default block**
|
|
468
|
+
|
|
469
|
+
An `mlv-empty-state` inside `.mlv-data-table__error` (`role="alert"`, `aria-live="assertive"`) with a danger-toned `lucideTriangleAlert` icon (`.mlv-data-table__error-icon`, `--mlv-text-negative`), the localized `errorTitle`, the resolved message, and a `button[mlvButton]` (`variant="secondary"`) that emits `(retry)`. Strings come from `MLV_DATA_TABLE_I18N` (`errorTitle`, `errorMessage`, `retry`).
|
|
470
|
+
|
|
471
|
+
The consumer owns the refetch and is responsible for clearing `error` once it succeeds.
|
|
472
|
+
|
|
473
|
+
```ts
|
|
474
|
+
readonly rows = signal<Invoice[]>([]);
|
|
475
|
+
readonly error = signal<boolean | string>(false);
|
|
476
|
+
readonly isLoading = signal(false);
|
|
477
|
+
|
|
478
|
+
reload(): void {
|
|
479
|
+
this.isLoading.set(true);
|
|
480
|
+
fetchInvoices()
|
|
481
|
+
.then((next) => { this.rows.set(next); this.error.set(false); })
|
|
482
|
+
.catch((e) => this.error.set(e.userMessage ?? true))
|
|
483
|
+
.finally(() => this.isLoading.set(false));
|
|
484
|
+
}
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
```html
|
|
488
|
+
<mlv-data-table [data]="rows()" [columns]="columns" [error]="error()" [loading]="isLoading()" (retry)="reload()" />
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
Project `<ng-template mlvDataTableError>` (see `MlvDataTableError` above) to replace the default block; the alert region wrapper is kept around the projected content.
|
|
492
|
+
|
|
493
|
+
---
|
|
494
|
+
|
|
495
|
+
## Column Visibility Toggle
|
|
496
|
+
|
|
497
|
+
Mark individual columns with `hideable: true` to opt them into the column visibility popup. A "Columns" button appears in the toolbar and lists every hideable column with a checkbox; users can toggle columns on and off at runtime. Columns without `hideable` are always visible and cannot be hidden.
|
|
498
|
+
|
|
499
|
+
```ts
|
|
500
|
+
columns: MlvDataTableColumn[] = [
|
|
501
|
+
{ key: 'id', title: 'ID' }, // always visible
|
|
502
|
+
{ key: 'name', title: 'Name' }, // always visible
|
|
503
|
+
{ key: 'email', title: 'Email', hideable: true }, // user-toggleable
|
|
504
|
+
{ key: 'phone', title: 'Phone', hideable: true }, // user-toggleable
|
|
505
|
+
{ key: 'created', title: 'Created', hideable: true }, // user-toggleable
|
|
506
|
+
];
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
Internally tracked via the `_hiddenColumns` signal; hidden columns are filtered out of `visibleColumns` before layout calculations.
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
## Footer Summary Row
|
|
514
|
+
|
|
515
|
+
Project a `<ng-template mlvDataTableFooter>` into the table to render a summary row inside a `<tfoot>` element. The template receives the current visible columns as its implicit context. Emit semantic `<th>`/`<td>` elements directly; the component owns their density padding, height, vertical alignment, top divider, opaque sticky surface, and bordered-cell separators without requiring consumers to apply private BEM classes.
|
|
516
|
+
|
|
517
|
+
```html
|
|
518
|
+
<mlv-data-table [data]="items" [columns]="columns">
|
|
519
|
+
<ng-template mlvDataTableFooter let-cols>
|
|
520
|
+
<th scope="row" [attr.colspan]="cols.length - 1">Total</th>
|
|
521
|
+
<td>{{ subtotal() }}</td>
|
|
522
|
+
</ng-template>
|
|
523
|
+
</mlv-data-table>
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
The footer uses `position: sticky; bottom: 0` when `[stickyHeader]="true"` so it stays visible while scrolling.
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
## Data Sources
|
|
531
|
+
|
|
532
|
+
> **Moved.** `MlvDataSource`, `MlvArrayDataSource`, `MlvSortDirection`, `MlvSortState`, `MlvFilterState`, `MlvSearchState` and `MlvDataSourceState` now live in **`@malva-ui/cdk/data-source`** (*(internal)*) so the option controls can share them without a cycle through `@malva-ui/core/dropdown`. *(internal)* is a compat re-export — every `@malva-ui/core/data-table` import keeps working unchanged. See [libs-cdk-data-source.md](libs-cdk-data-source.md) for the full contract.
|
|
533
|
+
|
|
534
|
+
### `MlvDataSource<T>` (abstract)
|
|
535
|
+
|
|
536
|
+
(re-exported from *(internal)*)
|
|
537
|
+
|
|
538
|
+
Extend this class to implement server-side pagination, remote filtering, or any custom data access.
|
|
539
|
+
|
|
540
|
+
```ts
|
|
541
|
+
class MyServerDataSource extends MlvDataSource<MyRow> {
|
|
542
|
+
readonly totalItems = signal(0);
|
|
543
|
+
connect(): Signal<MyRow[]> { ... }
|
|
544
|
+
}
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
Protected signals available in subclasses: `_sort`, `_filters`, `_search`, `_page`, `_perPage`, `_loading`. Public readonly counterparts: `sort`, `filters`, `search`, `page`, `perPage`, `loading`.
|
|
548
|
+
|
|
549
|
+
`_loading` (default `false`) is new — flip it **synchronously** when a request starts and back when it settles, so consumers can tell "loaded and empty" from "not fetched yet". The table's own `[loading]` input is independent of it; a custom source can drive both.
|
|
550
|
+
|
|
551
|
+
`connect()` returns the **current page's slice**, never an accumulated array.
|
|
552
|
+
|
|
553
|
+
### `MlvArrayDataSource<T>`
|
|
554
|
+
|
|
555
|
+
(re-exported from *(internal)*)
|
|
556
|
+
|
|
557
|
+
Default in-memory data source. Pass a `T[]` array or a `Signal<T[]>`. Automatically created when you pass an array to `[data]`.
|
|
558
|
+
|
|
559
|
+
`T` is no longer constrained to `extends object` — primitive rows (`string[]`, `number[]`) are supported for the option controls.
|
|
560
|
+
|
|
561
|
+
Filter operators: `contains`, `not-contains`, `equals`, `not-equals`, `in`, `not-in`. `setSearch()` stores a query plus explicit keys, normalizes case and diacritics, matches with OR semantics across those keys, and ANDs the result with column filters before sorting and pagination. `setSearch()` and `setFilters()` both reset the page to one.
|
|
562
|
+
|
|
563
|
+
**Natural-field search.** An **empty** `keys` array no longer means "match nothing" — it means "match the row's natural fields": a primitive row is matched on `String(row)`, an object row on every own enumerable string/number/boolean value. The data table always passes its `searchable` column keys, so its behaviour is unchanged; the mode exists for `mlv-select`/`mlv-combobox`/`[mlvAutocomplete]`, which know no column keys.
|
|
564
|
+
|
|
565
|
+
### Filter operator type
|
|
566
|
+
|
|
567
|
+
The shared declaration is **`MlvDataSourceFilterOperator`** in `@malva-ui/cdk/data-source` (deliberately not `MlvFilterOperator` — `@malva-ui/core/filter` owns that name for its own, wider 16-member condition union). `@malva-ui/core/data-table` star-re-exports it and additionally keeps `MlvDataTableFilterOperator` as a `@deprecated` alias, so every existing import keeps compiling. New code should use `MlvDataSourceFilterOperator` — the library's own internals (`MlvFilterDropdown`, `MlvColumnFilterConfig.operators`) and the docs examples already do; the alias declaration in `types.ts` is its only remaining use in the repo.
|
|
568
|
+
|
|
569
|
+
---
|
|
570
|
+
|
|
571
|
+
## Column Definition (`MlvDataTableColumn<T>`)
|
|
572
|
+
|
|
573
|
+
```ts
|
|
574
|
+
interface MlvDataTableColumn<T = unknown> {
|
|
575
|
+
key: string; // matches a key of T
|
|
576
|
+
title?: string; // header label (defaults to key)
|
|
577
|
+
sortable?: boolean; // click header to sort
|
|
578
|
+
searchable?: boolean; // include this column in global search
|
|
579
|
+
filterable?: boolean; // show column in filter dropdown
|
|
580
|
+
/**
|
|
581
|
+
* User-pinning mode. Controls whether the header pin button is shown and which sides are allowed.
|
|
582
|
+
* - `true` → both sides (click opens a popup with left / right / unpin)
|
|
583
|
+
* - `'left'` / `'right'` → single side (click directly toggles pinned ↔ unpinned)
|
|
584
|
+
* - `['left', 'right']` → explicit list form (multi-element → popup)
|
|
585
|
+
* - `false` / `undefined` → not user-pinnable
|
|
586
|
+
*/
|
|
587
|
+
pinnable?: boolean | MlvPinSide | MlvPinSide[];
|
|
588
|
+
pinned?: boolean; // sticky column (initial state)
|
|
589
|
+
pinSide?: MlvPinSide; // sticky side
|
|
590
|
+
hideable?: boolean; // user can hide/show via toolbar column popup
|
|
591
|
+
align?: 'left' | 'center' | 'right';
|
|
592
|
+
resizable?: boolean; // drag-resize via handle on header
|
|
593
|
+
width?: string; // e.g. '120px'
|
|
594
|
+
minWidth?: string; // minimum resize width
|
|
595
|
+
maxWidth?: string; // maximum resize width
|
|
596
|
+
responsive?: MlvColumnResponsive; // breakpoint visibility map
|
|
597
|
+
filterConfig?: MlvColumnFilterConfig; // available filter options/operators
|
|
598
|
+
valueLabels?: MlvColumnValueLabels; // raw value → label for the default cell
|
|
599
|
+
tone?: MlvTone | MlvColumnToneFn<T>; // render the default cell as a muted badge
|
|
600
|
+
}
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### Value labels & cell tones (default cell renderer)
|
|
604
|
+
|
|
605
|
+
Both fields affect only the **default** cell renderer — a `mlvDataTableCell` template for the same column always wins.
|
|
606
|
+
|
|
607
|
+
- **`valueLabels`** — `Record<rawValue, label>` or a `{ label, value }[]` list. When omitted, the column's `filterConfig.options` are used as the fallback source, so a column that already declares option filters renders its option labels for free. Lookup is by `String(rawValue)`; unmapped and nullish values pass through unchanged. Memoized into one `Map<columnKey, Map<string, string>>` computed off `visibleColumns()`.
|
|
608
|
+
- **`tone`** — a fixed `MlvTone` (`'info' | 'success' | 'warning' | 'danger'` from `@malva-ui/cdk/utils`) or a `(row) => MlvTone | null | undefined` resolver. When it resolves to a tone, the cell renders `<mlv-badge [tone] muted>` around the display value; `null`/`undefined` falls back to plain text for that row. `MlvColumnToneFn` uses the method-syntax bivariance form so `MlvDataTableColumn<Row>[]` stays assignable to the component's `MlvDataTableColumn[]` input.
|
|
609
|
+
|
|
610
|
+
```ts
|
|
611
|
+
readonly columns: MlvDataTableColumn<Deployment>[] = [
|
|
612
|
+
{
|
|
613
|
+
key: 'environment',
|
|
614
|
+
filterable: true,
|
|
615
|
+
filterConfig: { options: [{ label: 'Production', value: 'prod' }] }, // labels reused by the cell
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
key: 'status',
|
|
619
|
+
valueLabels: { succeeded: 'Succeeded', failed: 'Failed' },
|
|
620
|
+
tone: (row) => (row.status === 'failed' ? 'danger' : 'success'),
|
|
621
|
+
},
|
|
622
|
+
];
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
Template helpers: `getCellDisplayValue(row, col)` and `getCellTone(row, col)`.
|
|
626
|
+
|
|
627
|
+
### Responsive columns
|
|
628
|
+
|
|
629
|
+
`responsive` maps minimum **table** widths (not viewport widths) to `'hidden' | 'visible'`:
|
|
630
|
+
|
|
631
|
+
```ts
|
|
632
|
+
{ key: 'description', responsive: { 0: 'hidden', 769: 'visible' } }
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
Uses an internal `MlvResizeObserverService` to track container width.
|
|
636
|
+
|
|
637
|
+
Row flattening, responsive visibility, width parsing, and sticky-cell style
|
|
638
|
+
calculation live in the pure internal `data-table-layout.ts` module. The
|
|
639
|
+
component owns state and orchestration; the extracted functions are covered by
|
|
640
|
+
focused unit tests.
|
|
641
|
+
|
|
642
|
+
### Column resizing
|
|
643
|
+
|
|
644
|
+
Set `resizable: true` on a column to render a visible, focusable separator on its right edge. `minWidth` and `maxWidth` constrain every interaction; complete pixel values are direct, while percentages resolve against the rendered header-table width. Declared CSS lengths such as `rem` remain valid for layout; a resize starts from the rendered header measurement instead of misreading the numeric prefix as pixels.
|
|
645
|
+
|
|
646
|
+
- **Pointer:** mouse, touch, and pen share Pointer Events. Document-level tracking keeps the gesture intact if pointer capture is unavailable, while capture improves targeting when supported. The table ignores additional contacts, clamps live movement, cancels without committing on `pointercancel` or unexpected capture loss, and cleans up every listener if it is destroyed.
|
|
647
|
+
- **Keyboard:** `ArrowLeft`/`ArrowRight` resize by 8px, Shift uses a 32px step, Home/End move to the minimum/maximum, and Enter restores the declared width. The separator exposes localized `role="separator"` value metadata including an explicit pixel `aria-valuetext`.
|
|
648
|
+
- **Layout:** before resizing, the table measures every visible data, selection, and action column. Once an override exists, it freezes those measurements and applies the same summed pixel width to the standard table or all virtual header/body/footer tables. The virtual viewport remains wrapper-width and synchronizes horizontal movement with the outer wrapper in both directions outside Angular, including focus-driven viewport scrolling. Measured native scrollbar gutters correct right-pinned offsets and extend the wrapper's scroll range through the final body pixel. This prevents browser table-layout redistribution, keeps both pin sides aligned, and leaves the outer wrapper as the sole user-facing horizontal scroll owner.
|
|
649
|
+
- **Performance:** live width uses the lightweight `_liveResize` signal and is rAF-throttled to one update per frame. Release commits one `_columnWidths` map clone inside Angular.
|
|
650
|
+
- **Persistence:** `(columnResize)` emits `{ key, width, source }` after pointer/keyboard commits. A reset emits `width: null`; double-clicking a separator or calling `resetColumnWidth(key?)` removes one or all overrides.
|
|
651
|
+
- **Styling:** the contrast-safe divider remains visually quiet at one pixel, grows on hover/focus/active, and sits inside a larger invisible hit target that expands further on coarse pointers.
|
|
652
|
+
|
|
653
|
+
### Pinned columns
|
|
654
|
+
|
|
655
|
+
Multiple columns can be pinned on both sides simultaneously. Offsets are computed cumulatively. Pinned cells now include a `transition` on `background` matching the static row transition timing (`--mlv-duration-normal`).
|
|
656
|
+
|
|
657
|
+
```ts
|
|
658
|
+
{ key: 'id', pinned: true, pinSide: 'left', width: '80px' },
|
|
659
|
+
{ key: 'amount', pinned: true, pinSide: 'right', width: '110px' },
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
### Pinnable columns (UI toggle)
|
|
663
|
+
|
|
664
|
+
Set `pinnable` on a column to show a pin/unpin button in the header cell. The pin icon appears on header hover and stays visible when the column is pinned. `pinnable` controls **which sides the user may pin the column to** and how the click behaves:
|
|
665
|
+
|
|
666
|
+
| Value | Allowed sides | Click behavior |
|
|
667
|
+
| ------------------------ | ------------- | ------------------------------------------------------------------------------------------------------ |
|
|
668
|
+
| `true` | both | Opens a popup with **Pin left** / **Pin right** / **Unpin** options (the current side is highlighted). |
|
|
669
|
+
| `'left'` or `'right'` | single | Directly toggles between pinned on that side and unpinned. |
|
|
670
|
+
| `['left', 'right']` | both | Same as `true` — explicit list form. |
|
|
671
|
+
| `['left']` / `['right']` | single | Same as the string form — direct toggle. |
|
|
672
|
+
| `false` / `undefined` | — | Column is not user-pinnable (it may still be pinned at load via `pinned`/`pinSide`). |
|
|
673
|
+
|
|
674
|
+
```ts
|
|
675
|
+
// Both sides allowed — clicking the header pin icon opens the side-chooser popup.
|
|
676
|
+
{ key: 'merchant', title: 'Merchant', width: '180px', pinnable: true },
|
|
677
|
+
|
|
678
|
+
// Starts pinned left; both sides allowed — user can switch to right or unpin via the popup.
|
|
679
|
+
{ key: 'id', title: 'ID', pinned: true, pinSide: 'left', pinnable: true },
|
|
680
|
+
|
|
681
|
+
// Only left pinning allowed — clicking the pin icon directly toggles pinned/unpinned.
|
|
682
|
+
{ key: 'status', title: 'Status', pinnable: 'left' },
|
|
683
|
+
|
|
684
|
+
// Only right pinning allowed.
|
|
685
|
+
{ key: 'amount', title: 'Amount', align: 'right', pinnable: 'right' },
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
The component tracks pin overrides internally via `_pinnedOverrides` signal. Public methods: `togglePin(col, side?)` (direct toggle, used by single-side pinnable columns), `pinTo(col, side)` (pin to a specific side, used by the popup), `unpin(col)` (explicit unpin, used by the popup), `isColumnPinned(col)`, `getColumnPinSide(col)`, `getPinnableSides(col)`.
|
|
689
|
+
|
|
690
|
+
---
|
|
691
|
+
|
|
692
|
+
## Sticky Header
|
|
693
|
+
|
|
694
|
+
Enabled by default (`[stickyHeader]="true"`). The `<thead>` uses `position: sticky; top: 0; z-index: 3`.
|
|
695
|
+
|
|
696
|
+
CSS variable `--mlv-dt-sticky-top` allows overriding the `top` offset (e.g., when the table is inside a page with a fixed app bar).
|
|
697
|
+
|
|
698
|
+
Pinned cells inside the sticky header get `z-index: 4` to ensure they stay above both the sticky header plane and other pinned body cells.
|
|
699
|
+
|
|
700
|
+
---
|
|
701
|
+
|
|
702
|
+
## Tree View
|
|
703
|
+
|
|
704
|
+
Add `_mlvChildren: T[]` to any row to make it expandable. Children can be nested arbitrarily deep. Each child row is indented proportionally to its depth.
|
|
705
|
+
|
|
706
|
+
```ts
|
|
707
|
+
type MyRow = {
|
|
708
|
+
name: string;
|
|
709
|
+
_mlvChildren?: MyRow[];
|
|
710
|
+
};
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
---
|
|
714
|
+
|
|
715
|
+
## Filter Dropdown (`MlvFilterDropdown`)
|
|
716
|
+
|
|
717
|
+
**Selector:** `mlv-dt-filter-dropdown` (internal — rendered automatically by `MlvDataTable`)
|
|
718
|
+
|
|
719
|
+
With `filterDisplay="toolbar"`, the shared editor opens from the toolbar Filters button. With `filterDisplay="column"`, a scoped instance opens from a sibling icon button beside each filterable header; it never nests inside the sort control and preserves conditions from other columns. Option filters use `in`/`not-in`; free-text filters expose the configured operators. Apply merges the owned draft into `activeFilters`, while Clear removes only keys owned by that editor and Cancel restores the committed snapshot. The Data Table performs the final merge against its current committed state at the column-editor boundary, so a stale overlay snapshot cannot replace filters owned by other columns.
|
|
720
|
+
|
|
721
|
+
The hosting `mlv-popup` is wired as a **non-modal dialog**: `panelRole="dialog"` with `[ariaLabel]="_i18n().filters"` (the trigger button keeps `aria-haspopup="dialog"`). It is intentionally non-modal so the page stays interactive; `Escape`/backdrop close is handled by the popup overlay, and `(afterClosed)="_onFiltersClosed()"` returns focus to the `#filterBtn` toolbar trigger so keyboard focus is never stranded on the destroyed overlay.
|
|
722
|
+
|
|
723
|
+
Column filter triggers restore focus to the matching header button after their editor closes. An applied filter is exposed through the localized accessible label (for example, “Filter Status, active”) rather than `aria-pressed`, because activating the button opens an editor instead of toggling the filter directly.
|
|
724
|
+
|
|
725
|
+
---
|
|
726
|
+
|
|
727
|
+
## Accessibility
|
|
728
|
+
|
|
729
|
+
### Row-level grid keyboard navigation
|
|
730
|
+
|
|
731
|
+
The table is a `role="grid"`. Data rows implement the **row-focus grid** pattern:
|
|
732
|
+
|
|
733
|
+
- Each data `<tr>` carries a roving `[attr.tabindex]` (`_rowTabIndex(i)` → `0` for the focused row, `-1` for the rest), plus `[attr.data-row-index]="i"`, so the row grid has a **single tab stop**.
|
|
734
|
+
- `_focusedRowIndex` (signal) tracks the focused flat-rows index; it is re-clamped in a constructor `effect` whenever `flatRows()` changes size (filter / sort / page / tree expand / data replacement) so it can never point out of range.
|
|
735
|
+
- `_onRowKeydown(i, row, event)` on each `<tr>` handles navigation **only when the row itself holds focus** (`event.target === event.currentTarget`) so keys typed into a cell widget (checkbox, button, edit input) are left alone:
|
|
736
|
+
- `ArrowUp` / `ArrowDown` — move row focus by one (clamped)
|
|
737
|
+
- `Home` / `End` — first / last row
|
|
738
|
+
- `Space` / `Enter` — toggle selection of the focused row when `selectable()` is set
|
|
739
|
+
- `_moveRowFocus(target)` sets the roving index and focuses the row after the next render (`afterNextRender`). In **virtual-scroll mode** it first calls `viewport.scrollToIndex(target, 'smooth')` so an off-screen target row is materialised before it is focused (arrow steps hit already-rendered adjacent rows directly).
|
|
740
|
+
- `(focus)="_onRowFocus(i)"` and `onRowClick` keep `_focusedRowIndex` in sync when a row is reached by Tab or mouse.
|
|
741
|
+
|
|
742
|
+
### Row selection
|
|
743
|
+
|
|
744
|
+
- The per-row selection `mlv-checkbox` is rendered with `[tabbable]="false"` so it does **not** add a second tab stop per row — the row is the single tab stop, its `Space`/`Enter` toggles selection, and the checkbox stays mouse-operable. The header select-all checkbox remains tabbable.
|
|
745
|
+
- Selected rows expose `aria-selected` on the `<tr>`.
|
|
746
|
+
|
|
747
|
+
### Sortable headers
|
|
748
|
+
|
|
749
|
+
- Follows the WAI-ARIA grid **sort** pattern. The header `<th>` stays a plain, non-interactive cell — it carries `scope="col"` and `[attr.aria-sort]` (`'ascending' | 'descending' | 'none'`), but **no** widget `role` and **no** `tabindex`.
|
|
750
|
+
- The sort control is **one native `<button class="mlv-data-table__sort-button">`** rendered _inside_ the `<th>`, wrapping the header label (`__header-title`) and the sort-direction icon (`__sort-icon`, `aria-hidden`). The button carries the `aria-label` resolved from the `sortByColumn` ICU string ("Sort by {column}") via `getSortLabel(col)`.
|
|
751
|
+
- Keyboard activation (Enter / Space → sort) is handled natively by the `<button>` — there is no custom keydown handler. `(click)="onSortClick(col)"` cycles asc → desc → unsorted.
|
|
752
|
+
- The pin button (`pinButtonTpl`) and focusable resize separator are **siblings** of the sort button inside the `<th>`, never nested inside it — so no interactive control is nested within another (fixes the former axe `nested-interactive` violation).
|
|
753
|
+
- Resizable headers expose a named `role="separator"` with `aria-orientation="vertical"`, current/min/max pixel values, localized `aria-valuetext`, Pointer Events, Arrow/Home/End keyboard control, and Enter-to-reset.
|
|
754
|
+
- The shared `#headerCellInnerTpl` template (context `{ $implicit: col }`) renders this inner content once and is reused by all three header branches (standalone column in a group-header row, grouped sub-header row, and the standard single-row header), keeping the markup DRY.
|
|
755
|
+
- The button is chromeless (`font: inherit; color: inherit; background/border: none`) so it is visually identical to the previous plain-text header; the `--sortable:hover` color shift on `__cell-inner` still cascades into it, and `:focus-visible` shows the `--mlv-border-focus` ring.
|
|
756
|
+
|
|
757
|
+
### Actions column header
|
|
758
|
+
|
|
759
|
+
- The trailing actions column (rendered when `editable` is on) has no visible label. Its `<th>` is given an accessible name via visually-hidden text (`<span class="mlv-data-table__visually-hidden">`) driven by the `actionsHeaderLabel` input (default `'Actions'`) — this fixes the former axe `empty-table-header` violation.
|
|
760
|
+
- Row expansion/collapse and column pin controls resolve their accessible names
|
|
761
|
+
through `MLV_DATA_TABLE_I18N`. `actionsHeaderLabel` remains a consumer-owned
|
|
762
|
+
input so applications can provide their preferred localized heading.
|
|
763
|
+
|
|
764
|
+
### Tree rows
|
|
765
|
+
|
|
766
|
+
- Tree-view rows keep `aria-level` (depth + 1) and the expand/collapse button keeps `aria-expanded`.
|
|
767
|
+
|
|
768
|
+
### Error state
|
|
769
|
+
|
|
770
|
+
- The error block is wrapped in `.mlv-data-table__error` with `role="alert"` + `aria-live="assertive"`, so a failure that appears after the table has rendered is announced. The wrapper is kept around projected `mlvDataTableError` content too.
|
|
771
|
+
- The default Retry control is a real `button[mlvButton]` with visible text, so it is keyboard-operable and named without extra ARIA.
|
|
772
|
+
- The icon is `aria-hidden` — the title/description carry the message.
|
|
773
|
+
|
|
774
|
+
### Experimental cell navigation (`@angular/aria` grid)
|
|
775
|
+
|
|
776
|
+
Set `[cellNavigation]="true"` to swap the default **row-level** roving navigation for full **cell-level** navigation backed by the `@angular/aria` grid pattern. This is an **experimental, opt-in prototype** (default off). Off by default, the table is byte-for-byte the stable row-roving implementation described above — every existing spec passes unchanged.
|
|
777
|
+
|
|
778
|
+
**How it is wired**
|
|
779
|
+
|
|
780
|
+
- `ngGrid` is applied to the **non-virtual** `<table>` (config pinned in the template: `rowWrap="nowrap"`, `colWrap="nowrap"`; aria defaults kept for `focusMode="roving"` and `enableSelection=false`). aria owns `role="grid"`, roving `tabindex`, `aria-activedescendant`, and Arrow/Home/End keyboard navigation across cells.
|
|
781
|
+
- Each data `<tr>` carries `ngGridRow` (`role="row"`); each `<td>` carries `ngGridCell` (`role="gridcell"`). Only **body** cells are registered — header cells stay outside grid navigation.
|
|
782
|
+
- Interactive cells expose an `ngGridCellWidget`: edit-mode cells wrap their edit template in `widgetType="editable"` and the actions column wraps its buttons in `widgetType="complex"`, so Enter pauses grid navigation to interact and Escape resumes.
|
|
783
|
+
- The grid `<tr>`/`<td>` markup is a parallel template branch (aria directives can't be toggled on an element at runtime); the presentational cell body is shared via the internal `#cellContentTpl` / `#actionsButtonsTpl` templates, so display logic is not duplicated.
|
|
784
|
+
|
|
785
|
+
**Prototype limitations (honest, documented)**
|
|
786
|
+
|
|
787
|
+
- **Requires non-virtual mode.** `_cellNav()` is `cellNavigation() && !virtualScroll()`. When `virtualScroll` is on, cell navigation is inert and the table falls back to row-level roving. `virtualScroll` splits the table into separate header/body/footer `<table>`s (a grid can't span them) and recycles rows out of the DOM (the aria grid's DOM-registered row/cell `SortedCollection` can't track recycled rows). The virtual + cell-nav combination was assessed and deliberately not supported in this prototype.
|
|
788
|
+
- **Row selection stays row-level.** aria's own cell-selection model (`enableSelection`) is intentionally left off; selection continues via the checkbox + `selectedRows`/`toggleRowSelection`. The per-row checkbox stays `[tabbable]="false"`, so keyboard row selection from within a cell is out of prototype scope.
|
|
789
|
+
- Pinned columns, tree rows, editing, and column groups all render unchanged under cell nav (the header/colgroup/footer are shared, cell styles/pins are reused); only the navigation model changes.
|
|
790
|
+
|
|
791
|
+
Covered by the `experimental cell navigation (aria ngGrid)` spec block (grid roles, single roving tab stop, no row-level tabindex, ArrowRight/ArrowDown cell movement, `ngGridCellWidget` presence, and the virtual-scroll fallback).
|
|
792
|
+
|
|
793
|
+
### Column pin popup — `@angular/aria` `ngMenu` evaluation (kept manual)
|
|
794
|
+
|
|
795
|
+
The header pin-side chooser (`.mlv-data-table__pin-popup`, `role="menu"` with `menuitemradio` Pin-left/Pin-right + `menuitem` Unpin) was evaluated against `@angular/aria`'s `ngMenu`/`ngMenuItem` and **kept as manual markup** — the plan's sanctioned fallback. Note the reasoning differs from the `mlv-menu` (Task 2.6) rejection:
|
|
796
|
+
|
|
797
|
+
- The menu 2.6 blocker (DI parent ≠ DOM location due to content projection) **does not apply here** — the `role="menu"` container and its items live in the **same** `*mlvPopupContent` template, so DI parent and DOM coincide and `ngMenu`/`ngMenuItem` _could_ attach.
|
|
798
|
+
- It is kept manual anyway because: (1) aria `Menu` has **no selection/value model** (`MenuInputs` omits `value`; `MenuItem` renders no `aria-checked`) — the popup's core state (which side is pinned) would stay hand-managed regardless, so aria replaces none of the selection plumbing; (2) aria `Menu`'s keyboard/focus/visibility model is coupled to `ngMenuTrigger`, but the popup opens via `mlvPopupTrigger`/CDK overlay (the plan's mandated positioning), and `mlv-popup` here is non-modal with no focus-trap and does not move focus into the panel on open, so aria's roving/typeahead never engages; (3) adopting aria roving would collapse the 2–3 native-button tab stops to one for marginal arrow-nav gain. The manual markup already emits correct `role="menu"`/`menuitemradio`/`menuitem`/`aria-checked`.
|
|
799
|
+
|
|
800
|
+
---
|
|
801
|
+
|
|
802
|
+
## Rendering internals (performance)
|
|
803
|
+
|
|
804
|
+
Per-cell template helpers are memoized so they no longer allocate a fresh object (or scan a list) on every change-detection cycle:
|
|
805
|
+
|
|
806
|
+
- **Cell styles** — `getCellStyle(col)` reads a memoized `_columnStyles` computed (`Map<columnKey, styleObject>`) built from `visibleColumns()` + `columnOffsets()`. Header and body cells of a column share one **stable** style-object reference across CD cycles, so the `[style]` binding skips re-diffing until widths / pins / visibility / live-resize actually change. `_buildCellStyle(col, offsets)` is the extracted builder (identical output to the old inline logic). `getColStyle`/`getColWidth` are unchanged.
|
|
807
|
+
- **Cell contexts** — `getCellContext(row, index)` returns a **stable** per-row `ngTemplateOutletContext` cached in a `WeakMap<row, MlvDataTableCellContext>` (`_cellContextCache`), instead of a new `{ $implicit, row, index }` per cell per CD. `flatRows()` rebuilds its row objects on every data/sort/filter/expand change, so the WeakMap self-scopes (stale rows are GC'd) and a cached entry's `index` always matches the row's current position. The row-level `rowCellsTpl` outlets in both the standard and virtual `<tr>` branches now pass `getCellContext(row, i)` too (previously an inline literal). NB: in Angular 22 `NgTemplateOutlet` forwards context reads through a Proxy to the latest `ngTemplateOutletContext` (no view teardown on context change) — stabilizing the reference removes the per-CD allocation and `NgTemplateOutlet.ngOnChanges` churn rather than a teardown.
|
|
808
|
+
- **Cell templates** — `getTemplate(key)` / `getEditTemplate(key)` read `_cellTemplateMap` / `_editCellTemplateMap` computeds (`Map<columnKey, TemplateRef>`, rebuilt only when the projected `cellTemplates()` / `editCellTemplates()` sets change), replacing an `Array.find()` per cell per CD. First registration wins for duplicate keys (preserves the old first-match `find()` semantics).
|
|
809
|
+
- `getCellValue(row, key)` is left as-is — it is plain property access with nothing to memoize.
|
|
810
|
+
|
|
811
|
+
## Styling
|
|
812
|
+
|
|
813
|
+
**Design philosophy:** Completely flat and borderless — no wrapper chrome, no shadow, no radius on the container. The table sits directly on the page. Visual hierarchy comes from typography and spacing alone. Headers use normal-case text in a muted accent color (`color-mix` of `--mlv-text-action` and `--mlv-text-secondary`), `font-weight-medium`. Row separators are barely visible (`--mlv-border-subtle`), with a slightly heavier `--mlv-border-normal` line between header and body. Summary footers reuse density geometry with a strong top divider and opaque sticky surface. Resize separators remain subtly visible at rest and become explicit on hover, press, or keyboard focus. Sort icons on unsorted columns are completely hidden until hover. Row hover uses `--mlv-background-sunken`. Row heights are generous (3.5rem comfortable, up to 5rem airy) to support rich multi-line cell content.
|
|
814
|
+
|
|
815
|
+
**BEM block:** `.mlv-data-table`
|
|
816
|
+
|
|
817
|
+
Key classes: `__wrapper`, `__wrapper--virtual`, `__table`, `__table--virtual`, `__virtual-viewport`, `__col--select`, `__col--actions`, `__head`, `__cell`, `__cell--header`, `__cell--data`, `__cell--pinned`, `__cell--group-header`, `__cell--standalone`, `__cell--actions`, `__cell--select`, `__cell-inner`, `__sort-button`, `__header-title`, `__sort-icon`, `__resize-handle`, `__visually-hidden`, `__pin-btn`, `__pin-btn--active`, `__pin-popup`, `__pin-popup-item`, `__pin-popup-item--active`, `__pin-popup-item--unpin`, `__row`, `__row--group-header`, `__row--editing`, `__row--selected`, `__row--footer`, `__row--error`, `__cell--error`, `__expand-btn`, `__expand-icon`, `__actions`, `__no-data-default`, `__error`, `__error-icon`, `__error-retry`, `__toolbar`, `__footer`, `__foot`, `__foot--sticky`, `__loading-overlay`, `__loading-bottom`, `__columns-dropdown`, `__columns-item`.
|
|
818
|
+
|
|
819
|
+
---
|
|
820
|
+
|
|
821
|
+
## Dependencies
|
|
822
|
+
|
|
823
|
+
| Package | Version |
|
|
824
|
+
| ------------------------------- | ------------- |
|
|
825
|
+
| `@angular/core` | `^22.0.0` |
|
|
826
|
+
| `@angular/common` | `^22.0.0` |
|
|
827
|
+
| `@angular/cdk` | `^22.0.0` |
|
|
828
|
+
| `@malva-ui/core/pagination` | `workspace:*` |
|
|
829
|
+
| `@malva-ui/core/button` | `workspace:*` |
|
|
830
|
+
| `@malva-ui/core/badge` | `workspace:*` |
|
|
831
|
+
| `@malva-ui/core/empty-state` | `workspace:*` |
|
|
832
|
+
| `@malva-ui/core/checkbox` | `workspace:*` |
|
|
833
|
+
| `@malva-ui/core/loader` | `workspace:*` |
|
|
834
|
+
| `@malva-ui/core/popup` | `workspace:*` |
|
|
835
|
+
| `@malva-ui/core/search-field` | `workspace:*` |
|
|
836
|
+
| `@malva-ui/core/dropdown` | `workspace:*` |
|
|
837
|
+
| `@malva-ui/i18n` | `workspace:*` |
|
|
838
|
+
| `@malva-ui/cdk` | `workspace:*` |
|
|
839
|
+
| `@malva-ui/cdk/density` | `workspace:*` |
|
|
840
|
+
| `@malva-ui/cdk/data-source` | `workspace:*` |
|
|
841
|
+
| `@malva-ui/cdk/infinite-scroll` | `workspace:*` |
|
|
842
|
+
| `@lucide/angular` | `*` |
|
|
843
|
+
|
|
844
|
+
---
|
|
845
|
+
|
|
846
|
+
## Usage Examples
|
|
847
|
+
|
|
848
|
+
### Basic table
|
|
849
|
+
|
|
850
|
+
```ts
|
|
851
|
+
columns: MlvDataTableColumn[] = [
|
|
852
|
+
{ key: 'name', title: 'Name', sortable: true, filterable: true },
|
|
853
|
+
{ key: 'email', title: 'Email', width: '200px' },
|
|
854
|
+
];
|
|
855
|
+
```
|
|
856
|
+
|
|
857
|
+
```html
|
|
858
|
+
<mlv-data-table [data]="users" [columns]="columns" />
|
|
859
|
+
```
|
|
860
|
+
|
|
861
|
+
### Custom cell template
|
|
862
|
+
|
|
863
|
+
```html
|
|
864
|
+
<mlv-data-table [data]="rows" [columns]="columns">
|
|
865
|
+
<ng-template mlvDataTableCell="status" let-row>
|
|
866
|
+
<mlv-badge [color]="row['status'] === 'Active' ? 'success' : 'danger'" muted> {{ row['status'] }} </mlv-badge>
|
|
867
|
+
</ng-template>
|
|
868
|
+
</mlv-data-table>
|
|
869
|
+
```
|
|
870
|
+
|
|
871
|
+
### Editable table
|
|
872
|
+
|
|
873
|
+
```html
|
|
874
|
+
<mlv-data-table [data]="employees" [columns]="columns" editable addRow (rowEditSave)="onSave($event)" (rowAdd)="onAddRow()">
|
|
875
|
+
<mlv-input *mlvDataTableEditCell="'name'; let row from employees" [ngModel]="row.name" (ngModelChange)="row.name = $event" />
|
|
876
|
+
</mlv-data-table>
|
|
877
|
+
```
|
|
878
|
+
|
|
879
|
+
### Column groups
|
|
880
|
+
|
|
881
|
+
```html
|
|
882
|
+
<mlv-data-table
|
|
883
|
+
[data]="employees"
|
|
884
|
+
[columns]="columns"
|
|
885
|
+
[columnGroups]="[
|
|
886
|
+
{ title: 'Personal', columns: ['name', 'email'] },
|
|
887
|
+
{ title: 'Work', columns: ['department', 'role'] }
|
|
888
|
+
]"
|
|
889
|
+
/>
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
### Custom data source
|
|
893
|
+
|
|
894
|
+
```ts
|
|
895
|
+
class RemoteDS extends MlvDataSource<User> {
|
|
896
|
+
readonly totalItems = signal(0);
|
|
897
|
+
connect(): Signal<User[]> {
|
|
898
|
+
return computed(() => {
|
|
899
|
+
/* fetch from API using this._page(), this._perPage(), etc. */
|
|
900
|
+
});
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
```
|
|
904
|
+
|
|
905
|
+
```html
|
|
906
|
+
<mlv-data-table [data]="remoteSource" [columns]="columns" />
|
|
907
|
+
```
|
|
908
|
+
|
|
909
|
+
### Virtual scroll
|
|
910
|
+
|
|
911
|
+
```ts
|
|
912
|
+
readonly rows = signal<Transaction[]>(generateLargeDataset(10_000));
|
|
913
|
+
```
|
|
914
|
+
|
|
915
|
+
```html
|
|
916
|
+
<mlv-data-table [data]="rows()" [columns]="columns" [virtualScroll]="true" [rowHeight]="56" maxHeight="32rem" />
|
|
917
|
+
```
|