@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,992 @@
|
|
|
1
|
+
# Library: sidebar
|
|
2
|
+
|
|
3
|
+
Collapsed item overlay links render their own `:focus-visible` ring because
|
|
4
|
+
DOM focus belongs to the link rather than the sidebar-item host.
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
The `@malva-ui/core/sidebar` library provides a navigation sidebar shell with collapsible group support, four layout modes (`icon`, `offcanvas`, `floating`, `fixed`), drag-to-resize rail, structural slot directives (header/content/footer), a workspace switcher, and a toggle trigger component. It exports a root container (`mlv-sidebar`), a styled workspace selector (`mlv-sidebar-workspace`), a collapsible group component (`mlv-sidebar-group`), a standalone item component (`mlv-sidebar-item`), a drag-to-resize rail (`mlv-sidebar-rail`), a toggle button (`mlv-sidebar-trigger`), and supporting directives for logo/text/icon/title/structural slots. The library handles both expanded and collapsed layouts transparently, sharing state via the `SIDEBAR_CONTEXT` injection token.
|
|
9
|
+
|
|
10
|
+
## Public API
|
|
11
|
+
|
|
12
|
+
Exported from `@malva-ui/core/sidebar`:
|
|
13
|
+
|
|
14
|
+
| Export | Kind | Description |
|
|
15
|
+
|--------|------|-------------|
|
|
16
|
+
| `MlvSidebar` | Component | Root sidebar container — `mlv-sidebar` |
|
|
17
|
+
| `MlvSidebarGroup` | Component | Collapsible group with `mlv-expand` accordion + `mlv-popup` flyout — `mlv-sidebar-group` |
|
|
18
|
+
| `MlvSidebarItem` | Component | Individual navigation item — `mlv-sidebar-item` |
|
|
19
|
+
| `MlvSidebarRail` | Component | Drag-to-resize rail with snap-to-collapse — `mlv-sidebar-rail` |
|
|
20
|
+
| `MlvSidebarTrigger` | Component | Toggle button for collapsing/expanding the sidebar — `mlv-sidebar-trigger` |
|
|
21
|
+
| `MlvSidebarWorkspace` | Component | Styled active-workspace row and multi-workspace menu — `mlv-sidebar-workspace` |
|
|
22
|
+
| `MlvSidebarWorkspaceLogo` | Structural directive | Custom logo template reused by the trigger and menu options — `[mlvSidebarWorkspaceLogo]` |
|
|
23
|
+
| `MlvSidebarWorkspaceText` | Structural directive | Custom text template reused by the trigger and menu options — `[mlvSidebarWorkspaceText]` |
|
|
24
|
+
| `MlvSidebarWorkspaceOption` | Interface | Workspace data contract (`id`, accessible `label`, optional `description`) |
|
|
25
|
+
| `MlvSidebarWorkspaceTemplateContext` | Interface | Logo/text template context exposing `$implicit` workspace and `selected` state |
|
|
26
|
+
| `MlvSidebarItemIcon` | Directive | Marks the icon slot inside a sidebar item or group — `[mlvSidebarItemIcon]` |
|
|
27
|
+
| `MlvSidebarItemHost` | Directive | Legacy attribute directive that applies sidebar item styling — `[mlvSidebarItem]` |
|
|
28
|
+
| `MlvSidebarItemTitle` | Directive | Marks a custom title template inside `mlv-sidebar-item` — `[mlvSidebarItemTitle]` |
|
|
29
|
+
| `MlvSidebarHeader` | Directive | Marks a sticky top region — `[mlvSidebarHeader]` |
|
|
30
|
+
| `MlvSidebarFooter` | Directive | Marks a sticky bottom region — `[mlvSidebarFooter]` |
|
|
31
|
+
| `MlvSidebarContent` | Component | Scrollable main content region backed by `mlv-scrollbar` — `[mlvSidebarContent]` |
|
|
32
|
+
| `SidebarContentDirective` | Compatibility alias | Backwards-compatible export alias for `MlvSidebarContent` |
|
|
33
|
+
| `MlvSidebarMode` | Type | `'icon' \| 'offcanvas' \| 'floating' \| 'fixed'` |
|
|
34
|
+
| `MlvSidebarContextValue` | Interface | Shape of the value provided via `SIDEBAR_CONTEXT` |
|
|
35
|
+
| `SIDEBAR_CONTEXT` | Injection Token | `InjectionToken<MlvSidebarContextValue>` — carries collapsed/mode/toggle/setWidth to descendants |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Components
|
|
40
|
+
|
|
41
|
+
### `MlvSidebar`
|
|
42
|
+
|
|
43
|
+
- **Selector:** `mlv-sidebar`
|
|
44
|
+
- **Change Detection:** `ChangeDetectionStrategy.OnPush`
|
|
45
|
+
- **Encapsulation:** `ViewEncapsulation.None`
|
|
46
|
+
- **Implements:** `MlvSidebarContextValue`
|
|
47
|
+
|
|
48
|
+
#### Inputs / Models
|
|
49
|
+
|
|
50
|
+
| Name | Kind | Type | Default | Description |
|
|
51
|
+
| ---------------- | --------- | ----------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
52
|
+
| `collapsed` | `model()` | `boolean` | `false` | Two-way bindable collapsed state. In `fixed` mode this is always treated as false. **Intentionally named `collapsed`, not `opened`** — it models rail collapse/expand (a persistent layout state), a distinct concept from the transient open/close of overlay surfaces (`mlv-drawer`/`mlv-popup`/`mlv-expand`, and the dialog's `[(mlvDialog)]`). It is deliberately excluded from the `opened` naming normalization. |
|
|
53
|
+
| `width` | `model()` | `string` | `'260px'` | Total expanded host width, including border and padding. Two-way bindable and updated by `setWidth()` during rail drag. |
|
|
54
|
+
| `collapsedWidth` | `input()` | `string` | `'56px'` | Total collapsed host width, including border and padding. |
|
|
55
|
+
| `mode` | `input()` | `MlvSidebarMode` | `'icon'` | Layout mode requested by the author: `'icon'`, `'offcanvas'`, `'floating'`, or `'fixed'`. Read `effectiveMode()` for the mode actually in effect. |
|
|
56
|
+
| `collapseBelow` | `input()` | `MlvBreakpoint \| null` | `null` | Viewport breakpoint below which the sidebar behaves as an offcanvas drawer regardless of `mode`. See **Responsive usage**. |
|
|
57
|
+
| `ariaLabel` | `input()` | `string \| undefined` | `undefined` | Accessible name for the `navigation` landmark. Falls back to `MLV_SIDEBAR_I18N.navigation`. A plain `aria-label` **attribute** on `<mlv-sidebar>` does not work — the host binding owns that attribute — so use this input when a page has more than one sidebar. |
|
|
58
|
+
| `fullHeight` | `input()` | `BooleanInput` | `false` | When true, sidebar uses `position: sticky` at full viewport height. |
|
|
59
|
+
| `minWidth` | `input()` | `number` | `200` | Minimum width in px during drag resize. |
|
|
60
|
+
| `maxWidth` | `input()` | `number` | `480` | Maximum width in px during drag resize. |
|
|
61
|
+
|
|
62
|
+
The two models emit `collapsedChange` and `widthChange` (the `model()` change outputs — there are no separate `output()` declarations).
|
|
63
|
+
|
|
64
|
+
#### Public computed signals
|
|
65
|
+
|
|
66
|
+
| Signal | Type | Description |
|
|
67
|
+
| --------------- | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
|
|
68
|
+
| `effectiveMode` | `Signal<MlvSidebarMode>` | `mode()`, unless `collapseBelow` is set and the viewport is narrower than it — then `'offcanvas'`. Bind against this, not `mode`. |
|
|
69
|
+
|
|
70
|
+
#### Host Bindings
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
host: {
|
|
74
|
+
class: 'mlv-sidebar',
|
|
75
|
+
'[class.mlv-sidebar--collapsed]': '_effectiveCollapsed()',
|
|
76
|
+
'[class]': '"mlv-sidebar--" + effectiveMode()',
|
|
77
|
+
'[class.mlv-sidebar--full-height]': 'fullHeight()',
|
|
78
|
+
'[style.--mlv-sidebar-expanded-width]': 'width()',
|
|
79
|
+
'[style.--mlv-sidebar-collapsed-width]': 'collapsedWidth()',
|
|
80
|
+
role: 'navigation',
|
|
81
|
+
'[attr.aria-label]': '_resolvedAriaLabel()',
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
#### Providers
|
|
86
|
+
|
|
87
|
+
Provides itself as `SIDEBAR_CONTEXT` so all descendant groups and items can inject the collapsed state:
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
{ provide: SIDEBAR_CONTEXT, useExisting: forwardRef(() => MlvSidebar) }
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### Key Methods
|
|
94
|
+
|
|
95
|
+
| Method | Signature | Description |
|
|
96
|
+
| ---------- | -------------------- | ---------------------------------------------------------------------------------------------- |
|
|
97
|
+
| `toggle` | `(): void` | Toggles the sidebar between collapsed and expanded. No-op when `effectiveMode()` is `'fixed'`. |
|
|
98
|
+
| `setWidth` | `(px: number): void` | Sets the sidebar width in pixels, clamped to the `[minWidth, maxWidth]` range. |
|
|
99
|
+
|
|
100
|
+
#### Protected handlers (template-facing, not public API)
|
|
101
|
+
|
|
102
|
+
| Method | Signature | Description |
|
|
103
|
+
| ----------------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
104
|
+
| `onContainerKeydown` | `(event: Event): void` | Handles `ArrowDown`/`ArrowUp` on the container to move focus between `mlv-sidebar-item`, `.mlv-sidebar-group__header`, `.mlv-sidebar-group__icon-btn`, and `button` elements in DOM order (wraps around). Skips elements inside `.cdk-overlay-container`. |
|
|
105
|
+
| `_onDrawerOpenedChange` | `(opened: boolean): void` | Syncs the drawer's open/close state back to the `collapsed` model (offcanvas mode). |
|
|
106
|
+
|
|
107
|
+
#### Internal Computed Signals
|
|
108
|
+
|
|
109
|
+
| Signal | Description |
|
|
110
|
+
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
111
|
+
| `_isBelowCollapseBreakpoint` | Private. `true` when `collapseBelow` is set and `MlvBreakpointService.isDown()` reports the viewport below it. SSR-safe (CDK `BreakpointObserver`, never `matchMedia` directly). |
|
|
112
|
+
| `_effectiveCollapsed` | Always `false` when `effectiveMode()` is `'fixed'`; otherwise returns `collapsed()`. Drives the `--collapsed` CSS modifier. |
|
|
113
|
+
| `_resolvedAriaLabel` | `ariaLabel() ?? _i18n().navigation` — the host `aria-label`. |
|
|
114
|
+
| `_hasSlots` | `true` when at least one structural slot directive (`[mlvSidebarHeader]`, `[mlvSidebarFooter]`, `[mlvSidebarContent]`) is projected. |
|
|
115
|
+
|
|
116
|
+
A constructor `effect` watches `_isBelowCollapseBreakpoint`: entering the responsive range stores the current `collapsed()` value and sets `collapsed` to `true` (the drawer must never pop open on a viewport change); leaving the range restores the stored value.
|
|
117
|
+
|
|
118
|
+
#### Template Summary
|
|
119
|
+
|
|
120
|
+
Uses `@if (effectiveMode() === 'offcanvas')` to branch between two layouts:
|
|
121
|
+
|
|
122
|
+
- **Shared body template:** The `.mlv-sidebar__container` (with the single `<ng-content />` projection slot) is declared once in a `#body` `<ng-template>` and rendered via `[ngTemplateOutlet]` in both branches. This avoids two default `<ng-content>` slots (Angular projects into only the last), which previously left the offcanvas drawer empty. The host owns width; the inner container remains `width: 100%` and clips trailing content during animation.
|
|
123
|
+
- **Offcanvas branch:** Wraps the shared body outlet in `<mlv-drawer>`'s **`<ng-template mlvDrawerContent>`** (required — `MlvDrawer` only renders content projected through `MlvDrawerContent`). Drawer is bound `[opened]="!_effectiveCollapsed()"`, `position="left"`, `[size]="width()"`, `[hasBackdrop]="true"`. The drawer's `openedChange` syncs back to `collapsed` via `_onDrawerOpenedChange`; its `cdkTrapFocusAutoCapture` moves focus into the panel on open and Escape/backdrop close it.
|
|
124
|
+
- **Default branch:** Renders the shared body directly. The host toggles between the expanded and collapsed width custom properties.
|
|
125
|
+
|
|
126
|
+
Both branches project `<ng-content />` and handle `(keydown)="onContainerKeydown($event)"` for arrow-key focus management.
|
|
127
|
+
|
|
128
|
+
#### Inline Style Summary
|
|
129
|
+
|
|
130
|
+
- **Block `.mlv-sidebar`:** owns the animated total width and exposes `--mlv-sidebar-expanded-width`, `--mlv-sidebar-collapsed-width`, `--mlv-sidebar-gutter`, `--mlv-sidebar-border-width`, derived `--mlv-sidebar-icon-column-width`, `--mlv-sidebar-row-height`, and the three state-surface variables (`--mlv-sidebar-hover-bg`, `--mlv-sidebar-active-bg`, `--mlv-sidebar-rail-color` — see **State surfaces**). The icon column is `collapsedWidth - (2 × gutter) - (2 × border)` and is shared by item, group, project-selector, header, and footer icon containers.
|
|
131
|
+
- **`--mlv-sidebar-row-height`** (default `2.25rem`) is the single source of truth for the height of every navigable row — `mlv-sidebar-item`, `.mlv-sidebar-group__header`, `.mlv-sidebar-group__icon-btn`, and `.mlv-sidebar-trigger__btn` all resolve `min-height: var(--mlv-sidebar-row-height, 2.25rem)`, so a mixed list keeps one rhythm. It is density-aware on the sidebar block: tight `1.875rem`, compact `--mlv-height-xs`, comfortable (default) `2.25rem`, spacious `--mlv-height-s`, airy `--mlv-height-m`. The icon column deliberately does **not** scale with density — it stays derived from `collapsedWidth`.
|
|
132
|
+
- **Element `.mlv-sidebar__container`:** flex column, `height: 100%`, `width: 100%`, `gap: 1px`, and `overflow: hidden`; it clips fading labels while the host's trailing edge contracts.
|
|
133
|
+
- **Element `.mlv-sidebar__header`:** `flex-shrink: 0` — stays pinned at top.
|
|
134
|
+
- **Element `.mlv-sidebar__content`:** `flex: 1 1 0`, `overflow: hidden`, `min-height: 0` — middle-region host whose internal `.mlv-sidebar__content-scrollbar` owns scrolling. Unslotted legacy content is wrapped by `.mlv-sidebar__scrollbar` at the sidebar level.
|
|
135
|
+
- **Element `.mlv-sidebar__footer`:** `flex-shrink: 0` — stays pinned at bottom.
|
|
136
|
+
- **Modifier `.mlv-sidebar--collapsed`:** switches only the host width. Descendant icon tracks remain start-anchored at the same derived width while labels fade and become `visibility: hidden` after the transition.
|
|
137
|
+
- **Modifier `.mlv-sidebar--offcanvas`:** removes border, shadow, and padding, and collapses the host to `width: 0` (`flex: 0 0 auto`, `overflow: hidden`). The panel lives in a CDK overlay, so the host is only an anchor in the page flow — it previously claimed `width: 100%` and squeezed the content beside it, which also broke the layout the moment `collapseBelow` crossed its breakpoint.
|
|
138
|
+
- **Modifier `.mlv-sidebar--floating`:** `position: absolute`, `z-index: 100`, elevated shadow (`--mlv-shadow-3`), `translateX(-100%)` when collapsed.
|
|
139
|
+
- **Modifier `.mlv-sidebar--full-height`:** `position: sticky`, full viewport height via `100dvh`, respects `--mlv-sidebar-offset-top` and `--mlv-sidebar-offset-bottom` CSS custom properties.
|
|
140
|
+
- **Drawer context** (`.mlv-drawer .mlv-sidebar`): fills drawer width, forces labels visible.
|
|
141
|
+
- **Reduced motion:** host, floating transform, label, badge, group heading, and trigger transitions use the instant duration when `prefers-reduced-motion: reduce` is active.
|
|
142
|
+
|
|
143
|
+
For a custom project selector or another consumer-owned header/footer row, keep all grid children in the same explicit row during collapse. Collapse trailing tracks to zero instead of removing them, for example `grid-template-columns: var(--mlv-sidebar-icon-column-width) minmax(0, 0fr) 0`; otherwise CSS auto-placement can move mounted fading text onto extra rows and add vertical spacing.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
### `MlvSidebarWorkspace`
|
|
148
|
+
|
|
149
|
+
-
|
|
150
|
+
-
|
|
151
|
+
-
|
|
152
|
+
|
|
153
|
+
- **Selector:** `mlv-sidebar-workspace`
|
|
154
|
+
- **Change Detection:** `ChangeDetectionStrategy.OnPush`
|
|
155
|
+
- **Encapsulation:** `ViewEncapsulation.None`
|
|
156
|
+
|
|
157
|
+
Styled workspace identity row intended for `[mlvSidebarHeader]`. It renders a non-interactive row for one workspace and upgrades to a native Malva button plus `mlv-menu` when `workspaces.length > 1`. Selecting a menu item updates the two-way `workspace` model, closes the menu, and restores focus to the trigger through the shared menu behavior.
|
|
158
|
+
|
|
159
|
+
#### Inputs / Models
|
|
160
|
+
|
|
161
|
+
| Name | Kind | Type | Description |
|
|
162
|
+
| ------------ | ------------------ | -------------------------------------- | ---------------------------------------------------------------------------- |
|
|
163
|
+
| `workspaces` | required `input()` | `readonly MlvSidebarWorkspaceOption[]` | Available workspace collection; two or more options enable the menu trigger. |
|
|
164
|
+
| `workspace` | required `model()` | `MlvSidebarWorkspaceOption` | Active workspace; emits `workspaceChange` after user selection. |
|
|
165
|
+
|
|
166
|
+
#### Structural templates
|
|
167
|
+
|
|
168
|
+
| Selector | Context | Description |
|
|
169
|
+
| --------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
170
|
+
| `[mlvSidebarWorkspaceLogo]` | `$implicit: MlvSidebarWorkspaceOption`, `selected: boolean` | Renders inside the fixed logo track for the active trigger and every menu option. Falls back to a generated monogram. |
|
|
171
|
+
| `[mlvSidebarWorkspaceText]` | `$implicit: MlvSidebarWorkspaceOption`, `selected: boolean` | Renders the primary/secondary copy for the active trigger and every menu option. Falls back to `label` + `description`. |
|
|
172
|
+
|
|
173
|
+
The component consumes `SIDEBAR_CONTEXT.collapsed` automatically. Collapsed mode retains the logo track and accessible trigger name while fading/clipping the text and chevron tracks. The overlay menu stays fully expanded because it renders outside the collapsed sidebar ancestry.
|
|
174
|
+
|
|
175
|
+
The trigger uses the shared `button[mlvButton]` and `mlv-menu` primitives. The menu provides Arrow Up/Down, Home/End, type-ahead, Enter/Space activation, Escape/outside-click dismissal, and focus restoration. The active option carries `aria-current="true"` and a decorative check mark.
|
|
176
|
+
|
|
177
|
+
#### Styling
|
|
178
|
+
|
|
179
|
+
- BEM block: `.mlv-sidebar-workspace`.
|
|
180
|
+
- Reuses `--mlv-sidebar-icon-column-width` so its logo aligns with sidebar items/groups.
|
|
181
|
+
- Stable three-track grid (`logo`, text, trailing affordance) prevents mounted content from reflowing during collapse.
|
|
182
|
+
- Popup options reuse the same structural templates and have a `14rem` minimum width.
|
|
183
|
+
- Motion is limited to short transform/opacity/color transitions and becomes instant under `prefers-reduced-motion: reduce`.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
### `MlvSidebarGroup`
|
|
188
|
+
|
|
189
|
+
- **Selector:** `mlv-sidebar-group`
|
|
190
|
+
- **Change Detection:** `ChangeDetectionStrategy.OnPush`
|
|
191
|
+
- **Encapsulation:** `ViewEncapsulation.None`
|
|
192
|
+
- **Implements:** `OnDestroy`
|
|
193
|
+
|
|
194
|
+
#### Inputs
|
|
195
|
+
|
|
196
|
+
| Name | Type | Default | Description |
|
|
197
|
+
| ------------ | -------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
198
|
+
| `label` | `string` | _(required)_ | Display label for the group header, flyout title, and collapsed icon button `aria-label`/`title`. |
|
|
199
|
+
| `badge` | `string \| number \| null` | `null` | Optional badge/count. Rendered as a trailing `mlv-badge` in the expanded accordion header, next to the flyout title (collapsed), and as a decorative `mlv-status-indicator` dot on the collapsed icon button. |
|
|
200
|
+
| `badgeTone` | `MlvBadgeTone` | `'default'` | Semantic tone applied to the group badge and the collapsed status dot. |
|
|
201
|
+
| `badgePulse` | `boolean` / `BooleanInput` | `false` | When true, the collapsed-mode status dot pulses. |
|
|
202
|
+
|
|
203
|
+
#### Internal Signals
|
|
204
|
+
|
|
205
|
+
| Signal | Type | Description |
|
|
206
|
+
| -------------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
207
|
+
| `expanded` | `signal(false)` | Whether the accordion panel is open (expanded sidebar mode). Public and writable — see `_accordionOpen` for what actually drives `mlv-expand`. |
|
|
208
|
+
| `_accordionOpen` | `computed` | Protected. `expanded() && !isSidebarCollapsed()` — bound to `mlv-expand`'s `[opened]`. See **Accordion never opens in the rail** below. |
|
|
209
|
+
| `flyoutOpen` | `computed` | Derived from the `mlv-popup` component's `opened()` signal — `true` while the flyout is open (collapsed sidebar mode). |
|
|
210
|
+
| `isSidebarCollapsed` | `computed` | `true` when the parent `SIDEBAR_CONTEXT.collapsed()` is true. |
|
|
211
|
+
| `hasActiveChild` | `computed` | `true` when any descendant `MlvSidebarItem` has `computedActive() === true`. Drives the active highlight on the group header and icon button. |
|
|
212
|
+
|
|
213
|
+
**Accordion never opens in the rail.** `expanded` is public, so a host that
|
|
214
|
+
auto-expands the group owning the active route can write it while the sidebar is
|
|
215
|
+
collapsed. The accordion stays mounted in that state (its header fades but keeps
|
|
216
|
+
the icon column in place), so honouring the write opened an empty panel inside
|
|
217
|
+
the icon rail — a ghost tree line plus reserved height — and, because
|
|
218
|
+
`#childrenRef` can only project once, it also pulled the children out of the
|
|
219
|
+
open flyout, leaving it showing just its header. `mlv-expand` is therefore bound
|
|
220
|
+
to `_accordionOpen()`, which gates on the collapsed state regardless of write
|
|
221
|
+
order. The constructor `effect` still resets `expanded` when collapse begins, so
|
|
222
|
+
the guard is purely presentational: a pending `expanded` write takes effect the
|
|
223
|
+
moment the sidebar expands again.
|
|
224
|
+
|
|
225
|
+
#### Content Children
|
|
226
|
+
|
|
227
|
+
| Query | Type | Description |
|
|
228
|
+
| ------------ | -------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
229
|
+
| `iconRef` | `contentChild(MlvSidebarItemIcon)` | Optional icon slot to display in both the accordion header and the collapsed icon button. |
|
|
230
|
+
| `childItems` | `contentChildren(MlvSidebarItem, { descendants: true })` | All nested `mlv-sidebar-item` components; used to compute `hasActiveChild`. |
|
|
231
|
+
|
|
232
|
+
#### View Children
|
|
233
|
+
|
|
234
|
+
| Query | Type | Description |
|
|
235
|
+
| ------------------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
236
|
+
| `childrenTpl` | `viewChild.required<TemplateRef<unknown>>('childrenRef')` | Template reference capturing projected `<ng-content>` once; reused in both accordion and flyout to avoid double-rendering. |
|
|
237
|
+
| `triggerBtn` | `viewChild<ElementRef<HTMLButtonElement>>('triggerBtn')` | Reference to the collapsed icon button trigger; focus is restored here after flyout closes. |
|
|
238
|
+
| `_flyoutContainer` | `viewChild<MlvPopupContainer>('flyoutContainer')` | Protected. Reference to the `mlv-popup-container` wrapping the flyout trigger and popup. Used for imperative `toggle()`/`open()`/`close()` calls. |
|
|
239
|
+
| `_flyoutPopup` | `viewChild<MlvPopup>('flyoutPopup')` | Protected. Reference to the `mlv-popup` component; its `opened()` signal drives `flyoutOpen`. |
|
|
240
|
+
|
|
241
|
+
#### Providers
|
|
242
|
+
|
|
243
|
+
Re-provides `SIDEBAR_CONTEXT` for descendants, setting `inFlyout: group.flyoutOpen` so child items inside the flyout render in expanded (non-collapsed) mode even while the parent sidebar is collapsed.
|
|
244
|
+
|
|
245
|
+
#### Key Methods
|
|
246
|
+
|
|
247
|
+
| Method | Signature | Description |
|
|
248
|
+
| -------- | ---------- | ---------------------------------------------------- |
|
|
249
|
+
| `toggle` | `(): void` | Flips `expanded` signal to open/close the accordion. |
|
|
250
|
+
|
|
251
|
+
#### Protected handlers (template-facing, not public API)
|
|
252
|
+
|
|
253
|
+
| Method | Signature | Description |
|
|
254
|
+
| ------------------ | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
255
|
+
| `onFlyoutKeydown` | `(event: Event): void` | Roving keyboard nav inside the open flyout menu: `ArrowDown`/`ArrowUp` cycles focus, `Home`/`End` jumps to first/last item, `Escape`/`ArrowLeft` closes the flyout via `_flyoutContainer.close()` and restores focus to the trigger. |
|
|
256
|
+
| `onTriggerKeydown` | `(event: Event): void` | `Enter`/`Space` toggle via `_flyoutContainer.toggle()`; `ArrowRight` opens (or, if already open, focuses the first item); `ArrowDown` on an **open** trigger enters the flyout (`preventDefault` + `stopPropagation`) instead of bubbling to the sidebar container's roving nav (which would skip past and orphan the flyout). |
|
|
257
|
+
| `onFlyoutClick` | `(event: Event): void` | Closes the flyout and returns focus to the icon trigger when a child item is activated inside it — the menu-button pattern. Bubbling `click` on the panel, gated on `target.closest('.mlv-sidebar-item')`, so the flyout header and empty panel space are ignored. Enter/Space are covered too: `MlvSidebarItem` activates a button-style row by calling `.click()` on its host, and a projected anchor dispatches a real click. |
|
|
258
|
+
| `onFlyoutFocusOut` | `(event: Event): void` | Closes the flyout when keyboard focus leaves it entirely (Tab out, or moving to another trigger) — via the `(focusout)` `relatedTarget`; focus moving between items or back to the owning trigger is ignored. |
|
|
259
|
+
|
|
260
|
+
On open, an `effect` on `flyoutOpen()` moves focus to the first flyout item on the next animation frame (WAI-ARIA menu-button pattern), resolving the panel through its generated `_flyoutId` (`mlvNextId`) since it renders in a CDK overlay. `_focusFirstFlyoutItem()` queries `a[href], button:not([disabled]), [tabindex="0"]` inside that panel.
|
|
261
|
+
|
|
262
|
+
#### Template Summary
|
|
263
|
+
|
|
264
|
+
- `#childrenRef` ng-template: captures `<ng-content>` once and is referenced by both the accordion and flyout via `ngTemplateOutlet`.
|
|
265
|
+
- **Persistent accordion header:** `.mlv-sidebar-group` remains mounted in both states, becomes inert/`aria-hidden` immediately on collapse, and fades its label/badge/chevron while preserving the icon column. Its `<mlv-expand>` closes when collapse begins.
|
|
266
|
+
- **Collapsed sidebar branch** (`@if (isSidebarCollapsed())`): renders `<mlv-popup-container #flyoutContainer>` wrapping a `<button #triggerBtn mlvPopupTrigger triggerOn="click" class="mlv-sidebar-group__icon-btn">` (its `aria-label` is `_resolvedAriaLabel()` — the label with the badge count folded in, e.g. `"Projects, 3 notifications"`; a decorative `.mlv-sidebar-group__status` dot overlays its top-right) and a `<mlv-popup #flyoutPopup position="right-start">`. The flyout content is a `.mlv-sidebar-group__flyout` div with a header (`.mlv-sidebar-group__flyout-title` + optional `.mlv-sidebar-group__flyout-badge`) and the `childrenTpl` outlet.
|
|
267
|
+
|
|
268
|
+
#### Inline Style Summary
|
|
269
|
+
|
|
270
|
+
**Accordion (`.mlv-sidebar-group`):**
|
|
271
|
+
|
|
272
|
+
- `__header`: grid with the shared fixed icon column followed by label, badge, and chevron tracks; hover/focus-visible background from `--mlv-sidebar-hover-bg` + 2px focus outline; modifier `--active` sets action color + bold and deliberately **no** pill (see **State surfaces**).
|
|
273
|
+
- `__icon`: centers the icon within the shared fixed-width column.
|
|
274
|
+
- `__label`: truncates with ellipsis and fades/translates without being removed during collapse.
|
|
275
|
+
- `__arrow`: transitions `transform`, modifier `--open` rotates 180°.
|
|
276
|
+
- `__content` (applied to `mlv-expand`): tree-line left border at `1.25rem` (coloured from `--mlv-sidebar-rail-color`) and the `0.125rem` top padding are both applied **only** via the `.mlv-expand--open` modifier — a closed `mlv-expand` still occupies its padding box, so the unconditional padding used to make every group 2px taller than a plain item. Expand/collapse animation handled by `mlv-expand`; `padding-top` eases with the border colour and goes instant under `prefers-reduced-motion`.
|
|
277
|
+
|
|
278
|
+
**Collapsed trigger (`.mlv-sidebar-group__icon-btn`):**
|
|
279
|
+
|
|
280
|
+
- Fixed-width button using `--mlv-sidebar-icon-column-width`; hover/focus-visible fill from `--mlv-sidebar-hover-bg` (the same tint a plain item uses — it previously reached for the stronger `--mlv-background-neutral-1-hover` step); modifier `--active` sets `--mlv-sidebar-active-bg` plus action text color, written against the block class so it survives `:hover`.
|
|
281
|
+
- `mlv-popup` provides the tooltip and flyout without requiring overflow outside the clipping container.
|
|
282
|
+
- `__status`: `position: absolute`, top-right (`0.125rem`), clear of the bottom-right group chevron glyph — collapsed-rail status dot.
|
|
283
|
+
|
|
284
|
+
**Flyout content (`.mlv-sidebar-group__flyout`, rendered inside `mlv-popup`):**
|
|
285
|
+
|
|
286
|
+
- flex column with gap; panel chrome (background, shadow, border-radius) provided by `mlv-popup`.
|
|
287
|
+
- `__flyout-header`: flex row (bold secondary text, `border-bottom` separator) holding `__flyout-title` (`flex: 1`, ellipsis) and an optional trailing `__flyout-badge`.
|
|
288
|
+
- `__badge` (header): trailing badge between the label and chevron in the expanded accordion header.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
### `MlvSidebarItem`
|
|
293
|
+
|
|
294
|
+
- **Selector:** `mlv-sidebar-item`
|
|
295
|
+
- **Change Detection:** `ChangeDetectionStrategy.OnPush`
|
|
296
|
+
- **Encapsulation:** `ViewEncapsulation.None`
|
|
297
|
+
|
|
298
|
+
#### Inputs
|
|
299
|
+
|
|
300
|
+
| Name | Type (read / write) | Default | Description |
|
|
301
|
+
| ------------ | -------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
302
|
+
| `label` | `string` | _(required)_ | Accessible label; used as `aria-label` on the host, fallback text when no `[mlvSidebarItemTitle]` is projected, and tooltip text when collapsed. |
|
|
303
|
+
| `active` | `boolean` / `BooleanInput` | `false` | Explicit active state; combined via OR with router link active detection in `computedActive`. |
|
|
304
|
+
| `badge` | `string \| number \| null` | `null` | Optional badge/count. Rendered as a trailing `mlv-badge` when expanded and as a decorative `mlv-status-indicator` dot (top-right of the icon) when collapsed. `null`/`''` renders nothing. **Sanctioned way to attach a badge** — composes with a projected `[mlvSidebarItemTitle]` (badge renders after the custom title). |
|
|
305
|
+
| `badgeTone` | `MlvBadgeTone` | `'default'` | Semantic tone applied to both the expanded badge and the collapsed status dot. |
|
|
306
|
+
| `badgePulse` | `boolean` / `BooleanInput` | `false` | When true, the collapsed-mode status dot pulses to draw attention. |
|
|
307
|
+
|
|
308
|
+
#### Computed Signals
|
|
309
|
+
|
|
310
|
+
| Signal | Description |
|
|
311
|
+
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
312
|
+
| `computedActive` | `true` if `active()` is `true` OR if the nested `RouterLinkActive` reports active. Drives the `--active` CSS modifier and is read by `MlvSidebarGroup.hasActiveChild`. |
|
|
313
|
+
| `isCollapsed` | `true` when `SIDEBAR_CONTEXT.collapsed()` is `true` AND `SIDEBAR_CONTEXT.inFlyout()` is `false`. Drives the `--collapsed` CSS modifier. |
|
|
314
|
+
|
|
315
|
+
#### Content Children
|
|
316
|
+
|
|
317
|
+
| Query | Type | Description |
|
|
318
|
+
| ----------------------- | ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
319
|
+
| `iconRef` | `contentChild(MlvSidebarItemIcon)` | Optional icon template projected via `[mlvSidebarItemIcon]`. |
|
|
320
|
+
| `titleRef` | `contentChild(MlvSidebarItemTitle)` | Optional custom title template projected via `[mlvSidebarItemTitle]`. Rendered instead of plain `label()` text. |
|
|
321
|
+
| `_routerLink` (private) | `contentChild(RouterLinkActive, { descendants: true })` | Detects Angular router active state from a projected `routerLinkActive` directive. Subscribed via `afterRenderEffect`. |
|
|
322
|
+
|
|
323
|
+
#### Host Bindings
|
|
324
|
+
|
|
325
|
+
```ts
|
|
326
|
+
host: {
|
|
327
|
+
class: 'mlv-sidebar-item',
|
|
328
|
+
'[class.mlv-sidebar-item--active]': 'computedActive()',
|
|
329
|
+
'[class.mlv-sidebar-item--collapsed]': 'isCollapsed()',
|
|
330
|
+
'[attr.role]': '_hostRole()', // 'menuitem' in a flyout, else 'button'; null when a focusable control is projected
|
|
331
|
+
'[attr.tabindex]': '_interactiveHost() ? 0 : null',
|
|
332
|
+
'[attr.aria-label]': '_resolvedAriaLabel()', // label(), with the badge count folded in when set; null for a presentational wrapper
|
|
333
|
+
'[attr.aria-current]': 'computedActive() ? "page" : null',
|
|
334
|
+
'(keydown.enter)': '_onKeyActivate($event)',
|
|
335
|
+
'(keydown.space)': '_onKeyActivate($event)',
|
|
336
|
+
'(mouseenter)': '_onMouseEnter()',
|
|
337
|
+
'(mouseleave)': '_onMouseLeave()',
|
|
338
|
+
'(focusin)': '_onMouseEnter()',
|
|
339
|
+
'(focusout)': '_onMouseLeave()',
|
|
340
|
+
}
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**Interactive-host detection.** `_interactiveHost` is `true` unless the projected
|
|
344
|
+
content already contains its **own** focusable control. After each render an
|
|
345
|
+
`afterRenderEffect` scans the host subtree with
|
|
346
|
+
`querySelector('a[href], button, input, select, textarea, [tabindex]:not([tabindex="-1"])')`
|
|
347
|
+
(descendants only — the host's own reactive `tabindex` is never matched) and
|
|
348
|
+
stores the result in `_hasProjectedFocusable`. So a `[mlvSidebarItemTitle]` that
|
|
349
|
+
projects a router `<a>` link makes the host a presentational wrapper (no
|
|
350
|
+
role/tabindex/aria-label — the `<a>` is the single interactive element), while a
|
|
351
|
+
title that projects only text + a badge keeps the host interactive
|
|
352
|
+
(`role="button"`, `tabindex="0"`, `aria-label`). `_hostRole` resolves to
|
|
353
|
+
`"menuitem"` when the item renders inside a collapsed-mode group flyout (a
|
|
354
|
+
`role="menu"`), `"button"` otherwise, or `null` for a presentational wrapper.
|
|
355
|
+
`aria-current="page"` is set on the host whenever `computedActive()` is true.
|
|
356
|
+
|
|
357
|
+
**Badge / status indicator.** The `badge` input renders a trailing muted
|
|
358
|
+
`mlv-badge` in the expanded row and a decorative (`aria-hidden`)
|
|
359
|
+
`mlv-status-indicator` dot (top-right of the icon) in the collapsed rail, where a
|
|
360
|
+
full badge does not fit. Both take their colour from `badgeTone` (and the dot
|
|
361
|
+
optionally pulses via `badgePulse`). Because the host `aria-label` overrides the
|
|
362
|
+
visible badge text, the count is folded into `_resolvedAriaLabel` in **both**
|
|
363
|
+
states — a pure-numeric badge via the `notifications` ICU key (e.g. `"Inbox, 3
|
|
364
|
+
notifications"`), any other value verbatim (e.g. `"Orders, New"`). The badge input
|
|
365
|
+
composes with a projected `[mlvSidebarItemTitle]` (badge renders after the custom
|
|
366
|
+
title). Edge case: when the projected content is itself a focusable control (a
|
|
367
|
+
router `<a>`) the host is a presentational wrapper with no `aria-label`, so the
|
|
368
|
+
count is not folded in — prefer the input-based path for full a11y of the count.
|
|
369
|
+
|
|
370
|
+
#### Protected handlers (template-facing, not public API)
|
|
371
|
+
|
|
372
|
+
| Method | Signature | Description |
|
|
373
|
+
| ---------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
374
|
+
| `_onKeyActivate` | `(event: Event): void` | Prevents default and programmatically `.click()`s the host element on Enter/Space, enabling keyboard activation of projected anchor links. |
|
|
375
|
+
|
|
376
|
+
#### Template Summary
|
|
377
|
+
|
|
378
|
+
1. Renders the icon template inside `.mlv-sidebar-item__icon`, a persistent container whose width is the shared derived icon column.
|
|
379
|
+
2. Renders `.mlv-sidebar-item__label` — either the custom `titleRef` template outlet or the plain `label()` string — followed by `.mlv-sidebar-item__badge` (`mlv-badge`, `aria-hidden`) when `badge` is set. Both remain mounted during collapse, are made inert/hidden from accessibility immediately, and visually fade within the clipped trailing tracks.
|
|
380
|
+
3. Renders `.mlv-sidebar-item__status` (`mlv-status-indicator`) when collapsed and `badge` is set — the icon-rail replacement for the badge.
|
|
381
|
+
4. Renders `.mlv-sidebar-item__tooltip` (`aria-hidden="true"`, always in DOM) showing `label()` for the collapsed tooltip.
|
|
382
|
+
|
|
383
|
+
#### Inline Style Summary
|
|
384
|
+
|
|
385
|
+
- **Block `.mlv-sidebar-item`:** three-column grid (`icon column`, `minmax(0, 1fr)` label, `auto` badge), full container width, zero horizontal padding, and stable row height.
|
|
386
|
+
- **Element `__icon`:** centers projected icon content inside `--mlv-sidebar-icon-column-width` in both states.
|
|
387
|
+
- **Element `__label`:** `min-width: 0`, ellipsis, opacity/translation fade, and delayed `visibility: hidden` in collapsed mode.
|
|
388
|
+
- **Element `__badge`:** trailing badge with the same opacity/delayed-visibility behavior.
|
|
389
|
+
- **Element `__status`:** `position: absolute`, top-right (`0.1875rem`), `pointer-events: none` — collapsed-rail status dot overlaying the icon.
|
|
390
|
+
- **Element `__tooltip`:** absolute, right of item, hidden (`opacity: 0`), shown on hover/focus-visible in collapsed mode.
|
|
391
|
+
- **Modifier `--active`:** action text color + `font-weight: 600` on the modifier, plus the active pill (`--mlv-sidebar-active-bg`, default `--mlv-background-accent-1-pale`) written against the block class so it survives `:hover`. See **State surfaces**.
|
|
392
|
+
- **Modifier `--collapsed`:** leaves the icon track unchanged; disables interaction on the label and fades trailing content while the sidebar container clips it.
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
### `MlvSidebarRail`
|
|
397
|
+
|
|
398
|
+
- **Selector:** `mlv-sidebar-rail`
|
|
399
|
+
- **Template:** empty (visual element only)
|
|
400
|
+
- **Change Detection:** `ChangeDetectionStrategy.OnPush`
|
|
401
|
+
- **Encapsulation:** `ViewEncapsulation.None`
|
|
402
|
+
|
|
403
|
+
Drag-to-resize rail that lives alongside the sidebar container. Supports pointer drag, snap-to-collapse, double-click toggle, and keyboard width adjustment.
|
|
404
|
+
|
|
405
|
+
#### Inputs
|
|
406
|
+
|
|
407
|
+
| Name | Type | Default | Description |
|
|
408
|
+
| --------------- | -------- | ------- | ------------------------------------------------------------------------------ |
|
|
409
|
+
| `minWidth` | `number` | `200` | Minimum sidebar width in px during drag. |
|
|
410
|
+
| `maxWidth` | `number` | `480` | Maximum sidebar width in px during drag. |
|
|
411
|
+
| `snapThreshold` | `number` | `100` | Width threshold below which the sidebar snaps to collapsed on pointer release. |
|
|
412
|
+
|
|
413
|
+
#### Host Bindings
|
|
414
|
+
|
|
415
|
+
```ts
|
|
416
|
+
host: {
|
|
417
|
+
class: 'mlv-sidebar-rail',
|
|
418
|
+
'[class.mlv-sidebar-rail--dragging]': '_isDragging()',
|
|
419
|
+
role: 'separator',
|
|
420
|
+
'aria-orientation': 'vertical',
|
|
421
|
+
tabindex: '0',
|
|
422
|
+
'aria-label': 'Resize sidebar',
|
|
423
|
+
'[attr.aria-valuetext]': '_currentWidthPx() + "px"',
|
|
424
|
+
'[attr.aria-valuenow]': '_currentWidthPx()',
|
|
425
|
+
'[attr.aria-valuemin]': 'minWidth()',
|
|
426
|
+
'[attr.aria-valuemax]': 'maxWidth()',
|
|
427
|
+
'(pointerdown)': '_onPointerDown($event)',
|
|
428
|
+
'(dblclick)': '_onDoubleClick()',
|
|
429
|
+
'(keydown)': '_onKeydown($event)',
|
|
430
|
+
}
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
#### Protected handlers (template-facing, not public API)
|
|
434
|
+
|
|
435
|
+
| Method | Signature | Description |
|
|
436
|
+
| ---------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
|
|
437
|
+
| `_onDoubleClick` | `(): void` | Toggles the sidebar collapsed state. |
|
|
438
|
+
| `_onKeydown` | `(event: KeyboardEvent): void` | `ArrowLeft`/`ArrowRight` adjust width by ±10px. `Home` collapses (no-op if already collapsed). `End` expands (no-op if already expanded). |
|
|
439
|
+
| `_onPointerDown` | `(event: PointerEvent): void` | Starts the drag: captures pointer, disables container transition, attaches `pointermove`/`pointerup` listeners outside Angular zone. |
|
|
440
|
+
|
|
441
|
+
#### Drag Behavior
|
|
442
|
+
|
|
443
|
+
- Runs `pointermove` handler outside Angular zone with `requestAnimationFrame` throttle for smooth 60fps resizing.
|
|
444
|
+
- On drag, computes `newWidth = event.clientX - sidebarRect.left`. If `newWidth < snapThreshold` and sidebar is not already collapsed, sets a snap flag. Otherwise clamps to `[minWidth, maxWidth]` and calls `setWidth()`.
|
|
445
|
+
- On pointer release, restores the container's CSS transition. If snap flag is set, calls `toggle()` to collapse.
|
|
446
|
+
- Cleans up document listeners and resets `user-select`/`cursor` overrides on destroy.
|
|
447
|
+
|
|
448
|
+
#### Inline Style Summary
|
|
449
|
+
|
|
450
|
+
- **Block `.mlv-sidebar-rail`:** `position: absolute`, `right: -1px`, `width: 2px`, transparent background, `cursor: col-resize`, `z-index: 1`. `::before` pseudo-element provides a wider hit area (±4px).
|
|
451
|
+
- **`:hover`:** expands to `width: 4px`, shows `--mlv-background-accent-1`.
|
|
452
|
+
- **`:focus-visible`:** standard focus ring (`--mlv-border-focus`).
|
|
453
|
+
- **Modifier `--dragging`:** same visual as hover (4px accent bar).
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
### `MlvSidebarTrigger`
|
|
458
|
+
|
|
459
|
+
- **Selector:** `mlv-sidebar-trigger`
|
|
460
|
+
- **Change Detection:** `ChangeDetectionStrategy.OnPush`
|
|
461
|
+
- **Encapsulation:** `ViewEncapsulation.None`
|
|
462
|
+
|
|
463
|
+
Toggle button that collapses/expands the sidebar. Renders a plain transparent icon button styled to match collapsed sidebar items, so it sits flush with the rest of the sidebar chrome. Auto-hides in `fixed` mode, and turns into a hamburger/close menu button while the sidebar's **effective** mode is `'offcanvas'`.
|
|
464
|
+
|
|
465
|
+
#### Inputs
|
|
466
|
+
|
|
467
|
+
| Name | Type | Default | Description |
|
|
468
|
+
| --------- | ------------------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
469
|
+
| `sidebar` | `MlvSidebarContextValue \| undefined` | `undefined` | The sidebar to control when the trigger is rendered **outside** `<mlv-sidebar>` — pass the sidebar's template reference (`<mlv-sidebar #nav />` → `[sidebar]="nav"`). Required for any sidebar that can become an offcanvas drawer: a closed drawer renders none of its projected content, so a nested trigger disappears with it. Falls back to the ancestor `SIDEBAR_CONTEXT`. |
|
|
470
|
+
|
|
471
|
+
#### Host Bindings
|
|
472
|
+
|
|
473
|
+
```ts
|
|
474
|
+
host: {
|
|
475
|
+
class: 'mlv-sidebar-trigger',
|
|
476
|
+
'[class.mlv-sidebar-trigger--hidden]': '_isHidden()',
|
|
477
|
+
'[class.mlv-sidebar-trigger--menu]': '_isDrawerTrigger()',
|
|
478
|
+
}
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
#### Internal Computed Signals
|
|
482
|
+
|
|
483
|
+
| Signal | Description |
|
|
484
|
+
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
485
|
+
| `_context` | Private. `sidebar() ?? inject(SIDEBAR_CONTEXT, { optional: true })` — the context this trigger drives. All reads are null-safe. |
|
|
486
|
+
| `_mode` | Private. `_context()?.effectiveMode?.() ?? _context()?.mode()` (defaults to `'icon'` when there is no context at all). |
|
|
487
|
+
| `_collapsed` | Reads `collapsed()` from the resolved context. Drives icon swap and ARIA attributes. |
|
|
488
|
+
| `_isDrawerTrigger` | `true` when `_mode()` is `'offcanvas'`. Swaps in the hamburger/close icons and adds the `--menu` modifier. |
|
|
489
|
+
| `_isHidden` | `true` when `_mode()` is `'fixed'`. Hides the trigger via `display: none` — a `collapseBelow` override therefore unhides it on mobile. |
|
|
490
|
+
| `_resolvedAriaLabel` | Drawer mode: `openNavigation`/`closeNavigation`. Rail mode: `expand`/`collapse`. All four come from `MLV_SIDEBAR_I18N`. |
|
|
491
|
+
|
|
492
|
+
#### Template Summary
|
|
493
|
+
|
|
494
|
+
Renders a plain `<button class="mlv-sidebar-trigger__btn">` with:
|
|
495
|
+
|
|
496
|
+
- `[attr.aria-label]` bound to `_resolvedAriaLabel()`.
|
|
497
|
+
- `[attr.aria-expanded]` bound to `!_collapsed()`.
|
|
498
|
+
- `(click)` calls the protected `_toggle()` method.
|
|
499
|
+
- Icons at `[size]="20"`: drawer mode swaps `lucideMenu` (closed) / `lucideX` (open); rail mode swaps `lucidePanelLeftOpen` (collapsed) / `lucidePanelLeftClose` (expanded).
|
|
500
|
+
|
|
501
|
+
#### Inline Style Summary
|
|
502
|
+
|
|
503
|
+
- **Block `.mlv-sidebar-trigger`:** `display: flex; width: 100%`.
|
|
504
|
+
- **Modifier `--hidden`:** `display: none`.
|
|
505
|
+
- **Modifier `--menu`:** `width: auto` and a square `__btn` sized from `--mlv-sidebar-row-height` — the drawer trigger usually lives outside the sidebar, where the rail's icon column does not exist.
|
|
506
|
+
- **Element `__btn`:** transparent icon button with `width: var(--mlv-sidebar-icon-column-width)`, zero padding, the shared `--mlv-sidebar-row-height`, secondary text color, hover background, focus-visible outline, and centered icon.
|
|
507
|
+
- **Element `__icon`:** smooth `transform` transition on the SVG.
|
|
508
|
+
|
|
509
|
+
---
|
|
510
|
+
|
|
511
|
+
## Directives
|
|
512
|
+
|
|
513
|
+
### `MlvSidebarHeader`
|
|
514
|
+
|
|
515
|
+
**Selector:** `[mlvSidebarHeader]`
|
|
516
|
+
|
|
517
|
+
Marks a sticky top region inside the sidebar. Applied to a container element that should remain visible at the top when content scrolls.
|
|
518
|
+
|
|
519
|
+
#### Host Bindings
|
|
520
|
+
|
|
521
|
+
```ts
|
|
522
|
+
host: { class: 'mlv-sidebar__header' }
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
No inputs, outputs, or lifecycle hooks.
|
|
526
|
+
|
|
527
|
+
---
|
|
528
|
+
|
|
529
|
+
### `MlvSidebarFooter`
|
|
530
|
+
|
|
531
|
+
**Selector:** `[mlvSidebarFooter]`
|
|
532
|
+
|
|
533
|
+
Marks a sticky bottom region inside the sidebar. Applied to a container element that should remain visible at the bottom when content scrolls.
|
|
534
|
+
|
|
535
|
+
#### Host Bindings
|
|
536
|
+
|
|
537
|
+
```ts
|
|
538
|
+
host: { class: 'mlv-sidebar__footer' }
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
No inputs, outputs, or lifecycle hooks.
|
|
542
|
+
|
|
543
|
+
---
|
|
544
|
+
|
|
545
|
+
### `MlvSidebarContent` (`SidebarContentDirective` compatibility alias)
|
|
546
|
+
|
|
547
|
+
**Selector:** `[mlvSidebarContent]`
|
|
548
|
+
|
|
549
|
+
Marks the scrollable middle region between header and footer inside the sidebar. It keeps the existing selector and import alias, fills the remaining space, and renders projected items inside the shared Malva scrollbar. When no named slots are present, `MlvSidebar` wraps its default projected content in the same scrollbar.
|
|
550
|
+
|
|
551
|
+
#### Host Bindings
|
|
552
|
+
|
|
553
|
+
```ts
|
|
554
|
+
host: { class: 'mlv-sidebar__content' }
|
|
555
|
+
template: `<mlv-scrollbar class="mlv-sidebar__content-scrollbar"><ng-content /></mlv-scrollbar>`
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
No inputs, outputs, or lifecycle hooks.
|
|
559
|
+
|
|
560
|
+
---
|
|
561
|
+
|
|
562
|
+
### `MlvSidebarItemIcon`
|
|
563
|
+
|
|
564
|
+
**Selector:** `[mlvSidebarItemIcon]`
|
|
565
|
+
**Extends:** `MlvStructural` (from `@malva-ui/core/form-utils`)
|
|
566
|
+
|
|
567
|
+
Marks an element or `ng-template` as the icon slot inside `mlv-sidebar-item` or `mlv-sidebar-group`. `MlvStructural` exposes `templateRef: TemplateRef<unknown>` used by the parent component via `ngTemplateOutlet`.
|
|
568
|
+
|
|
569
|
+
No inputs, outputs, or host bindings.
|
|
570
|
+
|
|
571
|
+
---
|
|
572
|
+
|
|
573
|
+
### `MlvSidebarItemHost`
|
|
574
|
+
|
|
575
|
+
**Selector:** `[mlvSidebarItem]`
|
|
576
|
+
|
|
577
|
+
Legacy attribute directive that applies sidebar item CSS classes and ARIA attributes to any host element (e.g., an `<a>` tag).
|
|
578
|
+
|
|
579
|
+
#### Inputs
|
|
580
|
+
|
|
581
|
+
| Name | Type | Default | Description |
|
|
582
|
+
| -------- | --------- | ------- | ----------------------------------------------------------- |
|
|
583
|
+
| `active` | `boolean` | `false` | Whether the item is the currently active navigation target. |
|
|
584
|
+
|
|
585
|
+
#### Host Bindings
|
|
586
|
+
|
|
587
|
+
```ts
|
|
588
|
+
host: {
|
|
589
|
+
class: 'mlv-sidebar-item',
|
|
590
|
+
'[class.mlv-sidebar-item--active]': 'active()',
|
|
591
|
+
role: 'treeitem',
|
|
592
|
+
'[attr.aria-selected]': 'active()',
|
|
593
|
+
tabindex: '0',
|
|
594
|
+
}
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
---
|
|
598
|
+
|
|
599
|
+
### `MlvSidebarItemTitle`
|
|
600
|
+
|
|
601
|
+
**Selector:** `[mlvSidebarItemTitle]`
|
|
602
|
+
**Extends:** `MlvStructural` (from `@malva-ui/core/form-utils`)
|
|
603
|
+
|
|
604
|
+
Marks a custom title template inside `mlv-sidebar-item`. When present, its `templateRef` is rendered in the `.mlv-sidebar-item__label` slot instead of the plain `label()` string. Useful for projecting a router `<a>` link.
|
|
605
|
+
|
|
606
|
+
#### Inputs
|
|
607
|
+
|
|
608
|
+
| Name | Type | Default | Description |
|
|
609
|
+
| -------- | ------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
610
|
+
| `active` | `BooleanInput` (coerced to `boolean`) | `false` | Optional active state on the directive (available but not currently consumed by `MlvSidebarItem`). Supports attribute usage: `<ng-template mlvSidebarItemTitle active>`. |
|
|
611
|
+
|
|
612
|
+
No host bindings.
|
|
613
|
+
|
|
614
|
+
---
|
|
615
|
+
|
|
616
|
+
## Services
|
|
617
|
+
|
|
618
|
+
This library contains no standalone services. Group flyout behavior uses Angular CDK `Overlay` injected directly into `MlvSidebarGroup`.
|
|
619
|
+
|
|
620
|
+
---
|
|
621
|
+
|
|
622
|
+
## Interfaces & Types
|
|
623
|
+
|
|
624
|
+
### `MlvSidebarContextValue`
|
|
625
|
+
|
|
626
|
+
```ts
|
|
627
|
+
export interface MlvSidebarContextValue {
|
|
628
|
+
readonly collapsed: Signal<boolean>;
|
|
629
|
+
readonly inFlyout?: Signal<boolean>;
|
|
630
|
+
readonly mode: Signal<MlvSidebarMode>;
|
|
631
|
+
readonly effectiveMode?: Signal<MlvSidebarMode>;
|
|
632
|
+
toggle(): void;
|
|
633
|
+
setWidth(px: number): void;
|
|
634
|
+
}
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
| Field | Type | Description |
|
|
638
|
+
| --------------- | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
639
|
+
| `collapsed` | `Signal<boolean>` | Whether the parent sidebar is in collapsed (icon-only) mode. |
|
|
640
|
+
| `inFlyout` | `Signal<boolean> \| undefined` | Set by `MlvSidebarGroup` to `true` when rendering inside the CDK overlay flyout. Causes child items to render in expanded mode despite the sidebar being collapsed. |
|
|
641
|
+
| `mode` | `Signal<MlvSidebarMode>` | The layout mode requested by the author (`'icon'`, `'offcanvas'`, `'floating'`, or `'fixed'`). |
|
|
642
|
+
| `effectiveMode` | `Signal<MlvSidebarMode> \| undefined` | The mode actually in effect — `'offcanvas'` while a `collapseBelow` override is active. **Optional** so externally implemented contexts stay valid; read it as `effectiveMode?.() ?? mode()`. |
|
|
643
|
+
| `toggle` | `() => void` | Toggles the sidebar between collapsed and expanded. No-op when the effective mode is `fixed`. |
|
|
644
|
+
| `setWidth` | `(px: number) => void` | Sets the sidebar width in pixels, clamped to `[minWidth, maxWidth]`. Used by `MlvSidebarRail` during drag. |
|
|
645
|
+
|
|
646
|
+
---
|
|
647
|
+
|
|
648
|
+
## Injection Tokens
|
|
649
|
+
|
|
650
|
+
### `SIDEBAR_CONTEXT`
|
|
651
|
+
|
|
652
|
+
| Property | Value |
|
|
653
|
+
| ----------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
|
654
|
+
| Token name | `SIDEBAR_CONTEXT` |
|
|
655
|
+
| Type | `InjectionToken<MlvSidebarContextValue>` |
|
|
656
|
+
| Description | Carries the sidebar's `collapsed` signal (and optionally `inFlyout`) down the component tree to all descendant groups and items. |
|
|
657
|
+
|
|
658
|
+
**Provided by:**
|
|
659
|
+
|
|
660
|
+
- `MlvSidebar` — provides itself (implements `MlvSidebarContextValue`); `collapsed` comes from its input signal.
|
|
661
|
+
- `MlvSidebarGroup` — re-provides a factory object that proxies the parent `collapsed`/`mode`/`effectiveMode` signals and adds `inFlyout: group.flyoutOpen`.
|
|
662
|
+
|
|
663
|
+
**Consumed by:**
|
|
664
|
+
|
|
665
|
+
- `MlvSidebarGroup` — reads `parentCtx?.collapsed()` to switch between accordion and icon-button layouts.
|
|
666
|
+
- `MlvSidebarItem` — reads `ctx?.collapsed()` and `ctx?.inFlyout?.()` to compute `isCollapsed`.
|
|
667
|
+
- `MlvSidebarRail` — reads `collapsed()`, calls `toggle()` and `setWidth()` during drag/keyboard interactions.
|
|
668
|
+
- `MlvSidebarTrigger` — reads `collapsed()` and `effectiveMode?.() ?? mode()`, calls `toggle()` on click. Injects the token **optionally** so it can be pointed at a sidebar with its `sidebar` input from outside the sidebar tree.
|
|
669
|
+
|
|
670
|
+
---
|
|
671
|
+
|
|
672
|
+
## Styles
|
|
673
|
+
|
|
674
|
+
All components use `ViewEncapsulation.None`, so all classes are global. The BEM structure is:
|
|
675
|
+
|
|
676
|
+
### State surfaces (`--mlv-sidebar-hover-bg` / `-active-bg` / `-rail-color`)
|
|
677
|
+
|
|
678
|
+
Three component-scoped variables declared on `.mlv-sidebar` (`sidebar.scss`)
|
|
679
|
+
carry every state fill in the sidebar. They are the **only** supported seam for
|
|
680
|
+
a host that paints the sidebar on its own chrome.
|
|
681
|
+
|
|
682
|
+
| Variable | Default | Consumed by |
|
|
683
|
+
| -------------------------- | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
684
|
+
| `--mlv-sidebar-hover-bg` | `var(--mlv-background-neutral-1)` | `mlv-sidebar-item:hover/:focus-visible`, `.mlv-sidebar-group__header:hover/:focus-visible`, `.mlv-sidebar-group__icon-btn:hover/:focus-visible`, `.mlv-sidebar-trigger__btn:hover`, `.mlv-sidebar-workspace__trigger:hover` |
|
|
685
|
+
| `--mlv-sidebar-active-bg` | `var(--mlv-background-accent-1-pale)` | `.mlv-sidebar-item--active` and `.mlv-sidebar-group__icon-btn--active` (both including their `:hover`/`:focus-visible` states) |
|
|
686
|
+
| `--mlv-sidebar-rail-color` | `var(--mlv-border-normal)` | `.mlv-sidebar-group__content.mlv-expand--open` tree line |
|
|
687
|
+
|
|
688
|
+
**Why they exist.** The three globals resolve against the _page_ surface. A host
|
|
689
|
+
that renders the sidebar on an arbitrary background — `mlv-page-shell` puts the
|
|
690
|
+
rail on the brand colour — got a global grey hover pill and a global lavender
|
|
691
|
+
active pill floating on that background, the lavender one under a white icon
|
|
692
|
+
(1.16:1, effectively invisible). Remapping the globals wholesale is not an
|
|
693
|
+
option: they are also read by everything else the consumer projects.
|
|
694
|
+
|
|
695
|
+
**Every use site repeats the global as the `var()` fallback**
|
|
696
|
+
(`var(--mlv-sidebar-hover-bg, var(--mlv-background-neutral-1))`). The group
|
|
697
|
+
flyout is portalled into the CDK overlay container, outside `.mlv-sidebar`, so
|
|
698
|
+
the declarations never reach a row rendered there — the fallback is what
|
|
699
|
+
renders, and a bare `var(--mlv-sidebar-hover-bg)` would resolve to nothing.
|
|
700
|
+
|
|
701
|
+
**Specificity.** Both `--active` rules are written against the block class
|
|
702
|
+
(`.mlv-sidebar-item.mlv-sidebar-item--active`, and the same for
|
|
703
|
+
`__icon-btn`), including explicit `:hover`/`:focus-visible` variants. The
|
|
704
|
+
modifier alone is one class and loses to the sibling `:hover` rule (class +
|
|
705
|
+
pseudo-class), which used to drop the active row back to the hover tint on
|
|
706
|
+
hover.
|
|
707
|
+
|
|
708
|
+
**`.mlv-sidebar-group__header--active` stays text-only** (action colour + bold,
|
|
709
|
+
no pill) on purpose: the accordion is open when a child is active, that child
|
|
710
|
+
already carries the pill, and a second pill on the header would read as two
|
|
711
|
+
active destinations rather than one active section.
|
|
712
|
+
|
|
713
|
+
`mlv-page-shell` remaps all three (plus the `--mlv-background-neutral-1`
|
|
714
|
+
hover/active ramp) from its computed chrome foreground — see `libs-page.md` →
|
|
715
|
+
**Chrome token remap**. The compiled-Sass contract is pinned by
|
|
716
|
+
*(internal)*.
|
|
717
|
+
|
|
718
|
+
### `mlv-sidebar` (block — `sidebar.scss`)
|
|
719
|
+
|
|
720
|
+
| Class | Type | Description |
|
|
721
|
+
| -------------------------- | -------- | ------------------------------------------------------------------------------------------------------------ |
|
|
722
|
+
| `mlv-sidebar` | Block | Root sidebar element. |
|
|
723
|
+
| `mlv-sidebar__container` | Element | Inner flex column container; drives width animation and defines `--_label-w`. |
|
|
724
|
+
| `mlv-sidebar__header` | Element | Sticky top region (applied by `[mlvSidebarHeader]`). `flex-shrink: 0`. |
|
|
725
|
+
| `mlv-sidebar__content` | Element | Scrollable middle region (applied by `[mlvSidebarContent]`). `flex: 1 1 0`. |
|
|
726
|
+
| `mlv-sidebar__footer` | Element | Sticky bottom region (applied by `[mlvSidebarFooter]`). `flex-shrink: 0`. |
|
|
727
|
+
| `mlv-sidebar--collapsed` | Modifier | Applied when `_effectiveCollapsed()` is true; switches to icon-only layout. |
|
|
728
|
+
| `mlv-sidebar--icon` | Modifier | Applied when `mode()` is `'icon'` (default). No additional styles beyond base. |
|
|
729
|
+
| `mlv-sidebar--offcanvas` | Modifier | Removes border, shadow, padding; container fills drawer width. |
|
|
730
|
+
| `mlv-sidebar--floating` | Modifier | `position: absolute`, elevated shadow, `translateX(-100%)` when collapsed. |
|
|
731
|
+
| `mlv-sidebar--fixed` | Modifier | Applied when `mode()` is `'fixed'`. No additional styles (collapse is suppressed via `_effectiveCollapsed`). |
|
|
732
|
+
| `mlv-sidebar--full-height` | Modifier | `position: sticky`, `height: 100dvh` minus offsets, `align-self: flex-start`. |
|
|
733
|
+
|
|
734
|
+
### `mlv-sidebar-group` (block — `sidebar-group.scss`)
|
|
735
|
+
|
|
736
|
+
| Class | Type | Description |
|
|
737
|
+
| ------------------------------------- | ------------------------- | ------------------------------------------------------------------------------ |
|
|
738
|
+
| `mlv-sidebar-group` | Block | Accordion group wrapper (visible in expanded mode). |
|
|
739
|
+
| `mlv-sidebar-group__header` | Element | Clickable button that toggles the accordion. |
|
|
740
|
+
| `mlv-sidebar-group__header--active` | Modifier | Applied when a child item is active; action color + bold. |
|
|
741
|
+
| `mlv-sidebar-group__icon` | Element | Wraps the projected icon in the header. |
|
|
742
|
+
| `mlv-sidebar-group__label` | Element | Text label in the header; truncates with ellipsis. |
|
|
743
|
+
| `mlv-sidebar-group__arrow` | Element | Chevron SVG icon. |
|
|
744
|
+
| `mlv-sidebar-group__arrow--open` | Modifier | Rotates chevron 180° when expanded. |
|
|
745
|
+
| `mlv-sidebar-group__content` | Element | Collapsible content panel with tree-line left border. |
|
|
746
|
+
| `mlv-sidebar-group__content--enter` | Modifier | Triggers `mlv-accordion--enter` animation on open. |
|
|
747
|
+
| `mlv-sidebar-group__content--leave` | Modifier | Triggers `mlv-accordion--leave` animation on close. |
|
|
748
|
+
| `mlv-sidebar-group__icon-btn` | Standalone element | Icon-only button shown in collapsed sidebar mode. |
|
|
749
|
+
| `mlv-sidebar-group__icon-btn--active` | Modifier | Active pill (`--mlv-sidebar-active-bg`) + action color when a child is active. |
|
|
750
|
+
| `mlv-sidebar-group__tooltip` | Element (of `__icon-btn`) | Hover tooltip label shown to the right of the icon button. |
|
|
751
|
+
| `mlv-sidebar-group__flyout` | Standalone element | CDK overlay flyout panel container (`role="menu"`). |
|
|
752
|
+
| `mlv-sidebar-group__flyout-header` | Element | Flex heading row with bottom separator inside the flyout. |
|
|
753
|
+
| `mlv-sidebar-group__flyout-title` | Element | Group label inside the flyout header (`flex: 1`, ellipsis). |
|
|
754
|
+
| `mlv-sidebar-group__flyout-badge` | Element | Optional badge next to the flyout title. |
|
|
755
|
+
| `mlv-sidebar-group__badge` | Element | Trailing badge in the expanded accordion header. |
|
|
756
|
+
| `mlv-sidebar-group__status` | Element (of `__icon-btn`) | Decorative collapsed-rail status dot (`mlv-status-indicator`). |
|
|
757
|
+
|
|
758
|
+
### `mlv-sidebar-item` (block — `sidebar-item.scss`)
|
|
759
|
+
|
|
760
|
+
| Class | Type | Description |
|
|
761
|
+
| ----------------------------- | -------- | ------------------------------------------------------------------------------------- |
|
|
762
|
+
| `mlv-sidebar-item` | Block | Individual navigation item. |
|
|
763
|
+
| `mlv-sidebar-item__label` | Element | Text label; fixed width drives smooth collapse animation. |
|
|
764
|
+
| `mlv-sidebar-item__badge` | Element | Trailing badge (`mlv-badge`) shown after the label when expanded. |
|
|
765
|
+
| `mlv-sidebar-item__status` | Element | Decorative collapsed-rail status dot (`mlv-status-indicator`), top-right of the icon. |
|
|
766
|
+
| `mlv-sidebar-item__tooltip` | Element | Collapsed-mode tooltip; always in DOM, shown on hover/focus-visible. |
|
|
767
|
+
| `mlv-sidebar-item--active` | Modifier | Active pill (`--mlv-sidebar-active-bg`), action text color, `font-weight: 600`. |
|
|
768
|
+
| `mlv-sidebar-item--collapsed` | Modifier | Square icon-only layout; label shrinks to `width: 0; opacity: 0`. |
|
|
769
|
+
|
|
770
|
+
### `mlv-sidebar-rail` (block — `sidebar-rail.scss`)
|
|
771
|
+
|
|
772
|
+
| Class | Type | Description |
|
|
773
|
+
| ---------------------------- | -------- | ------------------------------------------------------------------ |
|
|
774
|
+
| `mlv-sidebar-rail` | Block | Vertical resize handle positioned on the sidebar's right edge. |
|
|
775
|
+
| `mlv-sidebar-rail--dragging` | Modifier | Applied during pointer drag; same visual as `:hover` (accent bar). |
|
|
776
|
+
|
|
777
|
+
### `mlv-sidebar-trigger` (block — `sidebar-trigger.scss`)
|
|
778
|
+
|
|
779
|
+
| Class | Type | Description |
|
|
780
|
+
| ----------------------------- | -------- | ------------------------------------------------------ |
|
|
781
|
+
| `mlv-sidebar-trigger` | Block | Wrapper for the toggle button. `display: inline-flex`. |
|
|
782
|
+
| `mlv-sidebar-trigger--hidden` | Modifier | `display: none`. Applied in `fixed` mode. |
|
|
783
|
+
| `mlv-sidebar-trigger__icon` | Element | Icon SVG with smooth transform transition. |
|
|
784
|
+
|
|
785
|
+
---
|
|
786
|
+
|
|
787
|
+
## Usage Examples
|
|
788
|
+
|
|
789
|
+
### Basic sidebar with items
|
|
790
|
+
|
|
791
|
+
```html
|
|
792
|
+
<mlv-sidebar>
|
|
793
|
+
<mlv-sidebar-item label="Dashboard">
|
|
794
|
+
<ng-template mlvSidebarItemIcon>
|
|
795
|
+
<lucide-icon name="layout-dashboard" size="20" />
|
|
796
|
+
</ng-template>
|
|
797
|
+
<ng-template mlvSidebarItemTitle>
|
|
798
|
+
<a routerLink="/dashboard" routerLinkActive>Dashboard</a>
|
|
799
|
+
</ng-template>
|
|
800
|
+
</mlv-sidebar-item>
|
|
801
|
+
|
|
802
|
+
<mlv-sidebar-item label="Settings">
|
|
803
|
+
<ng-template mlvSidebarItemIcon>
|
|
804
|
+
<lucide-icon name="settings" size="20" />
|
|
805
|
+
</ng-template>
|
|
806
|
+
<ng-template mlvSidebarItemTitle>
|
|
807
|
+
<a routerLink="/settings" routerLinkActive>Settings</a>
|
|
808
|
+
</ng-template>
|
|
809
|
+
</mlv-sidebar-item>
|
|
810
|
+
</mlv-sidebar>
|
|
811
|
+
```
|
|
812
|
+
|
|
813
|
+
### Collapsible sidebar with a toggle button
|
|
814
|
+
|
|
815
|
+
```typescript
|
|
816
|
+
// In your component
|
|
817
|
+
readonly sidebarCollapsed = signal(false);
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
```html
|
|
821
|
+
<mlv-sidebar [collapsed]="sidebarCollapsed()" width="260px" collapsedWidth="56px">
|
|
822
|
+
<mlv-sidebar-item label="Home">
|
|
823
|
+
<ng-template mlvSidebarItemIcon>
|
|
824
|
+
<lucide-icon name="home" size="20" />
|
|
825
|
+
</ng-template>
|
|
826
|
+
<ng-template mlvSidebarItemTitle>
|
|
827
|
+
<a routerLink="/home" routerLinkActive>Home</a>
|
|
828
|
+
</ng-template>
|
|
829
|
+
</mlv-sidebar-item>
|
|
830
|
+
</mlv-sidebar>
|
|
831
|
+
|
|
832
|
+
<button type="button" (click)="sidebarCollapsed.update(v => !v)">Toggle sidebar</button>
|
|
833
|
+
```
|
|
834
|
+
|
|
835
|
+
### Badges on items and groups
|
|
836
|
+
|
|
837
|
+
Use the `badge`/`badgeTone` inputs (the sanctioned path) instead of embedding a
|
|
838
|
+
badge inside a projected `[mlvSidebarItemTitle]`. When expanded the item/group
|
|
839
|
+
shows a trailing `mlv-badge`; when the sidebar collapses the badge is replaced by
|
|
840
|
+
a `mlv-status-indicator` dot on the icon rail (a full badge does not fit), and the
|
|
841
|
+
count is folded into the accessible name. Groups also show the badge next to the
|
|
842
|
+
flyout title when collapsed. `badgePulse` makes the collapsed dot pulse.
|
|
843
|
+
|
|
844
|
+
```html
|
|
845
|
+
<mlv-sidebar [collapsed]="collapsed()">
|
|
846
|
+
<mlv-sidebar-item label="Inbox" badge="128" badgeTone="info">
|
|
847
|
+
<ng-template mlvSidebarItemIcon><svg lucideInbox size="20" /></ng-template>
|
|
848
|
+
</mlv-sidebar-item>
|
|
849
|
+
|
|
850
|
+
<mlv-sidebar-item label="Orders" badge="New" badgeTone="success">
|
|
851
|
+
<ng-template mlvSidebarItemIcon><svg lucidePackage size="20" /></ng-template>
|
|
852
|
+
</mlv-sidebar-item>
|
|
853
|
+
|
|
854
|
+
<mlv-sidebar-group label="Users & Access" badge="3" badgeTone="warning">
|
|
855
|
+
<ng-template mlvSidebarItemIcon><svg lucideUsers size="20" /></ng-template>
|
|
856
|
+
<mlv-sidebar-item label="Invitations" badge="3" badgeTone="warning" />
|
|
857
|
+
</mlv-sidebar-group>
|
|
858
|
+
</mlv-sidebar>
|
|
859
|
+
```
|
|
860
|
+
|
|
861
|
+
### Sidebar with collapsible groups
|
|
862
|
+
|
|
863
|
+
When the sidebar is **expanded**, groups render as an accordion. When the sidebar is **collapsed**, each group renders as an icon button that opens a CDK overlay flyout on click — no extra configuration needed.
|
|
864
|
+
|
|
865
|
+
```html
|
|
866
|
+
<mlv-sidebar [collapsed]="isCollapsed()">
|
|
867
|
+
<mlv-sidebar-group label="Analytics">
|
|
868
|
+
<ng-template mlvSidebarItemIcon>
|
|
869
|
+
<lucide-icon name="bar-chart-2" size="20" />
|
|
870
|
+
</ng-template>
|
|
871
|
+
|
|
872
|
+
<mlv-sidebar-item label="Overview">
|
|
873
|
+
<ng-template mlvSidebarItemTitle>
|
|
874
|
+
<a routerLink="/analytics/overview" routerLinkActive>Overview</a>
|
|
875
|
+
</ng-template>
|
|
876
|
+
</mlv-sidebar-item>
|
|
877
|
+
|
|
878
|
+
<mlv-sidebar-item label="Reports">
|
|
879
|
+
<ng-template mlvSidebarItemTitle>
|
|
880
|
+
<a routerLink="/analytics/reports" routerLinkActive>Reports</a>
|
|
881
|
+
</ng-template>
|
|
882
|
+
</mlv-sidebar-item>
|
|
883
|
+
</mlv-sidebar-group>
|
|
884
|
+
|
|
885
|
+
<mlv-sidebar-group label="Settings">
|
|
886
|
+
<ng-template mlvSidebarItemIcon>
|
|
887
|
+
<lucide-icon name="settings" size="20" />
|
|
888
|
+
</ng-template>
|
|
889
|
+
|
|
890
|
+
<mlv-sidebar-item label="Profile">
|
|
891
|
+
<ng-template mlvSidebarItemTitle>
|
|
892
|
+
<a routerLink="/settings/profile" routerLinkActive>Profile</a>
|
|
893
|
+
</ng-template>
|
|
894
|
+
</mlv-sidebar-item>
|
|
895
|
+
</mlv-sidebar-group>
|
|
896
|
+
</mlv-sidebar>
|
|
897
|
+
```
|
|
898
|
+
|
|
899
|
+
### Explicit active state (without router)
|
|
900
|
+
|
|
901
|
+
```html
|
|
902
|
+
<mlv-sidebar>
|
|
903
|
+
<mlv-sidebar-item label="Dashboard" [active]="selectedItem() === 'dashboard'" (click)="selectedItem.set('dashboard')">
|
|
904
|
+
<ng-template mlvSidebarItemIcon>
|
|
905
|
+
<lucide-icon name="layout-dashboard" size="20" />
|
|
906
|
+
</ng-template>
|
|
907
|
+
</mlv-sidebar-item>
|
|
908
|
+
</mlv-sidebar>
|
|
909
|
+
```
|
|
910
|
+
|
|
911
|
+
### Legacy directive usage on anchor elements
|
|
912
|
+
|
|
913
|
+
`[mlvSidebarItem]` can be applied to native elements when the component-based approach is not needed:
|
|
914
|
+
|
|
915
|
+
```html
|
|
916
|
+
<mlv-sidebar>
|
|
917
|
+
<a mlvSidebarItem [active]="currentRoute === '/home'" routerLink="/home">Home</a>
|
|
918
|
+
<a mlvSidebarItem [active]="currentRoute === '/settings'" routerLink="/settings">Settings</a>
|
|
919
|
+
</mlv-sidebar>
|
|
920
|
+
```
|
|
921
|
+
|
|
922
|
+
---
|
|
923
|
+
|
|
924
|
+
## Internationalization (i18n)
|
|
925
|
+
|
|
926
|
+
The `mlv-sidebar` landmark `aria-label` resolves through `MLV_SIDEBAR_I18N` (`@malva-ui/i18n`) key `navigation` — unless the author sets the `ariaLabel` input, which wins. The badge count folded into a collapsed item/group accessible name resolves through the `notifications` ICU-plural key (`"{count, plural, one {# notification} other {# notifications}}"`). `mlv-sidebar-workspace` uses the `switchWorkspace` ICU key (parameter `{ workspace }`) for its trigger and `workspaceMenu` for its menu label. The sidebar trigger uses `expand`/`collapse` in rail mode and `openNavigation`/`closeNavigation` while it is a drawer (offcanvas) menu button. ICU values resolve through `MlvI18nResolverService`. Provide `provideMlvI18nTesting()` in specs that instantiate any sidebar component.
|
|
927
|
+
|
|
928
|
+
## Dependencies
|
|
929
|
+
|
|
930
|
+
### Workspace libraries
|
|
931
|
+
|
|
932
|
+
| Library | Usage |
|
|
933
|
+
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
934
|
+
| `@malva-ui/core/form-utils` | `MlvStructural` — base class for `MlvSidebarItemIcon` and `MlvSidebarItemTitle`; exposes `templateRef: TemplateRef<unknown>`. |
|
|
935
|
+
| `@malva-ui/core/popup` | `MlvPopup`, `MlvPopupContainer`, `MlvPopupTrigger`, `MlvPopupContent` — powers the group flyout (collapsed mode) and the item tooltip (collapsed mode). |
|
|
936
|
+
| `@malva-ui/core/expand` | `MlvExpand` — animated accordion panel used by `MlvSidebarGroup` in expanded mode. |
|
|
937
|
+
| `@malva-ui/core/drawer` | `MlvDrawer` — off-canvas panel used by `MlvSidebar` in `offcanvas` mode. |
|
|
938
|
+
| `@malva-ui/core/scrollbar` | `MlvScrollbar` — themed scrolling for named sidebar content and legacy unslotted content. |
|
|
939
|
+
| `@malva-ui/core/badge` | `MlvBadge` (+ `MlvBadgeTone` type) — trailing badge on items/groups (expanded) and the flyout title. |
|
|
940
|
+
| `@malva-ui/core/status-indicator` | `MlvStatusIndicator` — decorative status dot replacing the badge on the collapsed icon rail. |
|
|
941
|
+
| `@malva-ui/core/button` | `MlvButton` — accessible transparent workspace trigger styling/semantics. |
|
|
942
|
+
| `@malva-ui/core/list` | `MlvListItem` — workspace rows inside the switcher menu. |
|
|
943
|
+
| `@malva-ui/core/menu` | `MlvMenu`, `MlvMenuTrigger`, `MlvMenuItem` — workspace overlay, roving focus, type-ahead, dismissal, and focus restoration. |
|
|
944
|
+
| `@malva-ui/i18n` | `MLV_SIDEBAR_I18N` (`navigation`, `notifications`, `switchWorkspace`, `workspaceMenu`, `expand`, `collapse`, `openNavigation`, `closeNavigation`) + `MlvI18nResolverService` — localized accessible names. |
|
|
945
|
+
| `@malva-ui/styles` | Design tokens (`--mlv-*` CSS custom properties), `mixins.base()`, `mlv-accordion--enter`/`mlv-accordion--leave` keyframes. |
|
|
946
|
+
|
|
947
|
+
### External packages
|
|
948
|
+
|
|
949
|
+
| Package | Usage |
|
|
950
|
+
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
951
|
+
| `@angular/cdk/coercion` | `BooleanInput`, `coerceBooleanProperty` — boolean input coercion on `fullHeight` and `active`. |
|
|
952
|
+
| `@angular/router` | `RouterLink`, `RouterLinkActive` — used by `MlvSidebarItem` to auto-detect active state from projected router links. |
|
|
953
|
+
| `@lucide/angular` | Sidebar group/trigger icons (`LucidePanelLeftOpen`/`LucidePanelLeftClose` for the rail toggle, `LucideMenu`/`LucideX` for the drawer menu button) plus `LucideChevronsUpDown` and `LucideCheck` in `MlvSidebarWorkspace`. |
|
|
954
|
+
| `@angular/common` | `NgTemplateOutlet` — template rendering in `MlvSidebar` (shared body outlet), `MlvSidebarGroup`, and `MlvSidebarItem`; `DOCUMENT` — resolving the overlay-rendered flyout panel by id in `MlvSidebarGroup`. |
|
|
955
|
+
| `@angular/core/rxjs-interop` | `takeUntilDestroyed` — manages `RouterLinkActive.isActiveChange` subscription lifecycle in `MlvSidebarItem`. |
|
|
956
|
+
| `@malva-ui/cdk/utils` | `clamp` (`MlvSidebar.setWidth`), `mlvNextId` (`MlvSidebarGroup` flyout id), `MlvBreakpointService` + `MlvBreakpoint` (`MlvSidebar.collapseBelow`). |
|
|
957
|
+
|
|
958
|
+
---
|
|
959
|
+
|
|
960
|
+
## Accessibility notes (updated)
|
|
961
|
+
|
|
962
|
+
- `MlvSidebarItem` never uses an invalid `role="listitem"` (which requires a `role="list"` ancestor) on an interactive host. The host is interactive (`role="button"` — or `role="menuitem"` inside a collapsed-group flyout — with `tabindex="0"` + `aria-label`) **unless the projected content already contains its own focusable control** (detected after render by scanning for `a[href], button, input, select, textarea, [tabindex]:not([tabindex="-1"])`), in which case the host is a presentational wrapper and that control (e.g. a router `<a>`) is the single interactive element. This keeps text/badge-only title rows named and keyboard-operable while never nesting two focusable controls. Container arrow-nav (`MlvSidebar`) and flyout arrow-nav (`MlvSidebarGroup`) resolve each item to its actual focus target.
|
|
963
|
+
- `aria-current="page"` is applied to the active item host. When the interactive element is a projected router link, also set `ariaCurrentWhenActive="page"` on its `routerLinkActive` for the current-page cue on the link itself.
|
|
964
|
+
- Collapsed-mode tooltips (item and group) use `panelRole="tooltip"` and open on keyboard focus (`focusin`/`focus`) as well as hover (WCAG 1.4.13).
|
|
965
|
+
- The collapsed group flyout is a proper menu: the trigger sets `[ariaHasPopup]="'menu'"`, the flyout panel is `role="menu"`, and its interactive item rows are `role="menuitem"`. Opening the flyout (click / Enter / Space / ArrowRight) moves focus to the first item; `Escape`/`ArrowLeft` close it and restore focus to the trigger; **activating a child item inside it** (click, or Enter/Space, which the item turns into a click) also closes it and restores focus to the trigger, as the menu-button pattern requires — without that a `routerLink` navigation left the flyout hanging over the new page; focus leaving the panel (Tab out) closes it so it is never left orphaned-open. A subtle `›` corner glyph on the collapsed group icon button distinguishes a group (opens a flyout) from a plain item.
|
|
966
|
+
- Badge counts stay announced without noise: the collapsed status dot is decorative (`aria-hidden`, no role/name), and the count is folded into the interactive host/trigger `aria-label` (numeric → the `notifications` ICU plural, e.g. `"Projects, 3 notifications"`; other values verbatim). The visible expanded badge is `aria-hidden` since the host `aria-label` already carries the count. When a projected router `<a>` is the interactive element the host has no `aria-label`, so use the `badge` input (not a badge inside a projected link) when the count must reach assistive tech.
|
|
967
|
+
|
|
968
|
+
---
|
|
969
|
+
|
|
970
|
+
## Responsive usage
|
|
971
|
+
|
|
972
|
+
Set **`collapseBelow`** (`MlvBreakpoint` = `'sm' | 'md' | 'lg'`, default `null` = off) and the sidebar owns the breakpoint itself — no `matchMedia` wiring, and the consumer never touches `mode`:
|
|
973
|
+
|
|
974
|
+
```html
|
|
975
|
+
<mlv-sidebar #nav collapseBelow="md" [(collapsed)]="collapsed" ariaLabel="Product navigation">
|
|
976
|
+
<div mlvSidebarContent>…</div>
|
|
977
|
+
</mlv-sidebar>
|
|
978
|
+
|
|
979
|
+
<!-- Outside the sidebar: a closed drawer renders none of its projected content. -->
|
|
980
|
+
<mlv-sidebar-trigger [sidebar]="nav" />
|
|
981
|
+
```
|
|
982
|
+
|
|
983
|
+
Below the breakpoint:
|
|
984
|
+
|
|
985
|
+
- `effectiveMode()` reports `'offcanvas'` regardless of `mode` (including `'fixed'`), so the host gets `.mlv-sidebar--offcanvas` and the drawer branch renders.
|
|
986
|
+
- The sidebar **closes itself** on entry (the previous `collapsed()` value is stored and restored when the viewport grows back past the breakpoint).
|
|
987
|
+
- `mlv-sidebar-trigger` becomes a hamburger (`lucideMenu`) / close (`lucideX`) menu button, is no longer hidden by `mode="fixed"`, and is named `openNavigation`/`closeNavigation`.
|
|
988
|
+
- Dismissal is the normal offcanvas behaviour inherited from `mlv-drawer`: Escape, backdrop click, or the trigger. The drawer captures focus on open and only mounts its content while open.
|
|
989
|
+
|
|
990
|
+
Thresholds come from `MLV_BREAKPOINT_CONFIG` (override with `provideMlvBreakpoints({ md, lg })`) so they stay in sync with the SCSS `breakpoint-*` mixins. Detection goes through `MlvBreakpointService` → CDK `BreakpointObserver`, which is SSR-safe: on the server it resolves to the initial `'sm'` tier instead of touching `matchMedia`.
|
|
991
|
+
|
|
992
|
+
Driving `mode` yourself from a `BreakpointObserver` signal still works and is the way to get a responsive behaviour other than offcanvas (for example `'icon'` ↔ `'floating'`).
|