@malva-ui/core 0.1.13 → 0.1.14
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 +4 -1
- package/README.md +15 -0
- package/docs/ai/avatar.md +2 -0
- package/docs/ai/breadcrumb.md +67 -7
- package/docs/ai/button.md +74 -19
- package/docs/ai/card.md +8 -6
- package/docs/ai/chat.md +59 -45
- package/docs/ai/checkbox.md +12 -0
- package/docs/ai/combobox.md +18 -2
- package/docs/ai/copy-to-clipboard.md +1 -1
- package/docs/ai/core.md +15 -0
- package/docs/ai/data-table.md +89 -54
- package/docs/ai/dialog.md +76 -67
- package/docs/ai/drawer.md +15 -12
- package/docs/ai/dropdown.md +24 -19
- package/docs/ai/empty-state.md +3 -3
- package/docs/ai/filter.md +24 -5
- package/docs/ai/form-utils.md +160 -5
- package/docs/ai/icon-toggle.md +160 -0
- package/docs/ai/input.md +30 -0
- package/docs/ai/layout.md +23 -0
- package/docs/ai/list.md +10 -6
- package/docs/ai/menu.md +75 -1
- package/docs/ai/page.md +220 -60
- package/docs/ai/radio.md +9 -0
- package/docs/ai/scrollbar.md +30 -8
- package/docs/ai/segmented.md +35 -35
- package/docs/ai/select.md +30 -5
- package/docs/ai/sidebar.md +45 -27
- package/docs/ai/switch.md +114 -19
- package/docs/ai/table.md +69 -0
- package/docs/ai/tabs.md +2 -1
- package/docs/ai/tile.md +311 -85
- package/docs/ai/timeline.md +63 -39
- package/docs/ai/tokenizer.md +21 -5
- package/docs/ai/tooltip.md +5 -5
- package/docs/ai/view-variant.md +75 -0
- package/fesm2022/malva-ui-core-accordion.mjs +167 -0
- package/fesm2022/malva-ui-core-accordion.mjs.map +1 -0
- package/fesm2022/malva-ui-core-action-bar.mjs +111 -0
- package/fesm2022/malva-ui-core-action-bar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-alert.mjs +173 -0
- package/fesm2022/malva-ui-core-alert.mjs.map +1 -0
- package/fesm2022/malva-ui-core-autocomplete.mjs +775 -0
- package/fesm2022/malva-ui-core-autocomplete.mjs.map +1 -0
- package/fesm2022/malva-ui-core-avatar-group.mjs +224 -0
- package/fesm2022/malva-ui-core-avatar-group.mjs.map +1 -0
- package/fesm2022/malva-ui-core-avatar.mjs +247 -0
- package/fesm2022/malva-ui-core-avatar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-badge.mjs +122 -0
- package/fesm2022/malva-ui-core-badge.mjs.map +1 -0
- package/fesm2022/malva-ui-core-bottom-nav.mjs +161 -0
- package/fesm2022/malva-ui-core-bottom-nav.mjs.map +1 -0
- package/fesm2022/malva-ui-core-breadcrumb.mjs +494 -0
- package/fesm2022/malva-ui-core-breadcrumb.mjs.map +1 -0
- package/fesm2022/malva-ui-core-button.mjs +406 -0
- package/fesm2022/malva-ui-core-button.mjs.map +1 -0
- package/fesm2022/malva-ui-core-calendar.mjs +938 -0
- package/fesm2022/malva-ui-core-calendar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-card.mjs +164 -0
- package/fesm2022/malva-ui-core-card.mjs.map +1 -0
- package/fesm2022/malva-ui-core-chat.mjs +825 -0
- package/fesm2022/malva-ui-core-chat.mjs.map +1 -0
- package/fesm2022/malva-ui-core-checkbox.mjs +272 -0
- package/fesm2022/malva-ui-core-checkbox.mjs.map +1 -0
- package/fesm2022/malva-ui-core-chip.mjs +176 -0
- package/fesm2022/malva-ui-core-chip.mjs.map +1 -0
- package/fesm2022/malva-ui-core-color-picker.mjs +1204 -0
- package/fesm2022/malva-ui-core-color-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-combobox.mjs +945 -0
- package/fesm2022/malva-ui-core-combobox.mjs.map +1 -0
- package/fesm2022/malva-ui-core-copy-to-clipboard.mjs +255 -0
- package/fesm2022/malva-ui-core-copy-to-clipboard.mjs.map +1 -0
- package/fesm2022/malva-ui-core-data-table.mjs +2696 -0
- package/fesm2022/malva-ui-core-data-table.mjs.map +1 -0
- package/fesm2022/malva-ui-core-date-range-picker.mjs +276 -0
- package/fesm2022/malva-ui-core-date-range-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-day-picker.mjs +131 -0
- package/fesm2022/malva-ui-core-day-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-dialog-routable-dialog-CvjXMtlD.mjs +94 -0
- package/fesm2022/malva-ui-core-dialog-routable-dialog-CvjXMtlD.mjs.map +1 -0
- package/fesm2022/malva-ui-core-dialog.mjs +1223 -0
- package/fesm2022/malva-ui-core-dialog.mjs.map +1 -0
- package/fesm2022/malva-ui-core-divider.mjs +80 -0
- package/fesm2022/malva-ui-core-divider.mjs.map +1 -0
- package/fesm2022/malva-ui-core-drawer-routable-drawer-qUk6Etnx.mjs +94 -0
- package/fesm2022/malva-ui-core-drawer-routable-drawer-qUk6Etnx.mjs.map +1 -0
- package/fesm2022/malva-ui-core-drawer.mjs +814 -0
- package/fesm2022/malva-ui-core-drawer.mjs.map +1 -0
- package/fesm2022/malva-ui-core-dropdown.mjs +994 -0
- package/fesm2022/malva-ui-core-dropdown.mjs.map +1 -0
- package/fesm2022/malva-ui-core-empty-state.mjs +50 -0
- package/fesm2022/malva-ui-core-empty-state.mjs.map +1 -0
- package/fesm2022/malva-ui-core-expand.mjs +130 -0
- package/fesm2022/malva-ui-core-expand.mjs.map +1 -0
- package/fesm2022/malva-ui-core-file-upload.mjs +451 -0
- package/fesm2022/malva-ui-core-file-upload.mjs.map +1 -0
- package/fesm2022/malva-ui-core-filter.mjs +1627 -0
- package/fesm2022/malva-ui-core-filter.mjs.map +1 -0
- package/fesm2022/malva-ui-core-form-utils-testing.mjs +39 -0
- package/fesm2022/malva-ui-core-form-utils-testing.mjs.map +1 -0
- package/fesm2022/malva-ui-core-form-utils.mjs +977 -0
- package/fesm2022/malva-ui-core-form-utils.mjs.map +1 -0
- package/fesm2022/malva-ui-core-form.mjs +283 -0
- package/fesm2022/malva-ui-core-form.mjs.map +1 -0
- package/fesm2022/malva-ui-core-icon-toggle.mjs +120 -0
- package/fesm2022/malva-ui-core-icon-toggle.mjs.map +1 -0
- package/fesm2022/malva-ui-core-input.mjs +375 -0
- package/fesm2022/malva-ui-core-input.mjs.map +1 -0
- package/fesm2022/malva-ui-core-kbd.mjs +131 -0
- package/fesm2022/malva-ui-core-kbd.mjs.map +1 -0
- package/fesm2022/malva-ui-core-layout.mjs +212 -0
- package/fesm2022/malva-ui-core-layout.mjs.map +1 -0
- package/fesm2022/malva-ui-core-link.mjs +89 -0
- package/fesm2022/malva-ui-core-link.mjs.map +1 -0
- package/fesm2022/malva-ui-core-list.mjs +413 -0
- package/fesm2022/malva-ui-core-list.mjs.map +1 -0
- package/fesm2022/malva-ui-core-loader.mjs +141 -0
- package/fesm2022/malva-ui-core-loader.mjs.map +1 -0
- package/fesm2022/malva-ui-core-menu.mjs +2540 -0
- package/fesm2022/malva-ui-core-menu.mjs.map +1 -0
- package/fesm2022/malva-ui-core-notification.mjs +201 -0
- package/fesm2022/malva-ui-core-notification.mjs.map +1 -0
- package/fesm2022/malva-ui-core-number-input.mjs +404 -0
- package/fesm2022/malva-ui-core-number-input.mjs.map +1 -0
- package/fesm2022/malva-ui-core-page.mjs +1898 -0
- package/fesm2022/malva-ui-core-page.mjs.map +1 -0
- package/fesm2022/malva-ui-core-pagination.mjs +458 -0
- package/fesm2022/malva-ui-core-pagination.mjs.map +1 -0
- package/fesm2022/malva-ui-core-pin-input.mjs +405 -0
- package/fesm2022/malva-ui-core-pin-input.mjs.map +1 -0
- package/fesm2022/malva-ui-core-popup.mjs +1488 -0
- package/fesm2022/malva-ui-core-popup.mjs.map +1 -0
- package/fesm2022/malva-ui-core-progress.mjs +109 -0
- package/fesm2022/malva-ui-core-progress.mjs.map +1 -0
- package/fesm2022/malva-ui-core-radio.mjs +317 -0
- package/fesm2022/malva-ui-core-radio.mjs.map +1 -0
- package/fesm2022/malva-ui-core-rating.mjs +236 -0
- package/fesm2022/malva-ui-core-rating.mjs.map +1 -0
- package/fesm2022/malva-ui-core-scrollbar.mjs +430 -0
- package/fesm2022/malva-ui-core-scrollbar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-search-field.mjs +578 -0
- package/fesm2022/malva-ui-core-search-field.mjs.map +1 -0
- package/fesm2022/malva-ui-core-segmented.mjs +458 -0
- package/fesm2022/malva-ui-core-segmented.mjs.map +1 -0
- package/fesm2022/malva-ui-core-select.mjs +855 -0
- package/fesm2022/malva-ui-core-select.mjs.map +1 -0
- package/fesm2022/malva-ui-core-sidebar.mjs +1504 -0
- package/fesm2022/malva-ui-core-sidebar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-skeleton.mjs +85 -0
- package/fesm2022/malva-ui-core-skeleton.mjs.map +1 -0
- package/fesm2022/malva-ui-core-slider.mjs +514 -0
- package/fesm2022/malva-ui-core-slider.mjs.map +1 -0
- package/fesm2022/malva-ui-core-split-pane.mjs +359 -0
- package/fesm2022/malva-ui-core-split-pane.mjs.map +1 -0
- package/fesm2022/malva-ui-core-status-indicator.mjs +78 -0
- package/fesm2022/malva-ui-core-status-indicator.mjs.map +1 -0
- package/fesm2022/malva-ui-core-stepper.mjs +332 -0
- package/fesm2022/malva-ui-core-stepper.mjs.map +1 -0
- package/fesm2022/malva-ui-core-switch.mjs +272 -0
- package/fesm2022/malva-ui-core-switch.mjs.map +1 -0
- package/fesm2022/malva-ui-core-table.mjs +79 -0
- package/fesm2022/malva-ui-core-table.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tabs.mjs +794 -0
- package/fesm2022/malva-ui-core-tabs.mjs.map +1 -0
- package/fesm2022/malva-ui-core-textarea.mjs +201 -0
- package/fesm2022/malva-ui-core-textarea.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tile.mjs +1404 -0
- package/fesm2022/malva-ui-core-tile.mjs.map +1 -0
- package/fesm2022/malva-ui-core-time-picker.mjs +533 -0
- package/fesm2022/malva-ui-core-time-picker.mjs.map +1 -0
- package/fesm2022/malva-ui-core-timeline.mjs +216 -0
- package/fesm2022/malva-ui-core-timeline.mjs.map +1 -0
- package/fesm2022/malva-ui-core-title.mjs +178 -0
- package/fesm2022/malva-ui-core-title.mjs.map +1 -0
- package/fesm2022/malva-ui-core-toast.mjs +749 -0
- package/fesm2022/malva-ui-core-toast.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tokenizer.mjs +502 -0
- package/fesm2022/malva-ui-core-tokenizer.mjs.map +1 -0
- package/fesm2022/malva-ui-core-toolbar.mjs +141 -0
- package/fesm2022/malva-ui-core-toolbar.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tooltip.mjs +432 -0
- package/fesm2022/malva-ui-core-tooltip.mjs.map +1 -0
- package/fesm2022/malva-ui-core-tree.mjs +505 -0
- package/fesm2022/malva-ui-core-tree.mjs.map +1 -0
- package/fesm2022/malva-ui-core-view-variant.mjs +292 -0
- package/fesm2022/malva-ui-core-view-variant.mjs.map +1 -0
- package/fesm2022/malva-ui-core.mjs +77 -0
- package/fesm2022/malva-ui-core.mjs.map +1 -0
- package/package.json +179 -156
- package/styles/malva-ui.css +253 -220
- package/styles/tokens.md +174 -173
- package/table/README.md +46 -0
- package/types/malva-ui-core-accordion.d.ts +121 -0
- package/types/malva-ui-core-action-bar.d.ts +82 -0
- package/types/malva-ui-core-alert.d.ts +131 -0
- package/types/malva-ui-core-autocomplete.d.ts +301 -0
- package/types/malva-ui-core-avatar-group.d.ts +119 -0
- package/types/malva-ui-core-avatar.d.ts +156 -0
- package/types/malva-ui-core-badge.d.ts +97 -0
- package/types/malva-ui-core-bottom-nav.d.ts +104 -0
- package/types/malva-ui-core-breadcrumb.d.ts +308 -0
- package/types/malva-ui-core-button.d.ts +194 -0
- package/types/malva-ui-core-calendar.d.ts +339 -0
- package/types/malva-ui-core-card.d.ts +88 -0
- package/types/malva-ui-core-chat.d.ts +375 -0
- package/types/malva-ui-core-checkbox.d.ts +158 -0
- package/types/malva-ui-core-chip.d.ts +128 -0
- package/types/malva-ui-core-color-picker.d.ts +442 -0
- package/types/malva-ui-core-combobox.d.ts +419 -0
- package/types/malva-ui-core-copy-to-clipboard.d.ts +148 -0
- package/types/malva-ui-core-data-table.d.ts +1074 -0
- package/types/malva-ui-core-date-range-picker.d.ts +149 -0
- package/types/malva-ui-core-day-picker.d.ts +55 -0
- package/types/malva-ui-core-dialog.d.ts +597 -0
- package/types/malva-ui-core-divider.d.ts +68 -0
- package/types/malva-ui-core-drawer.d.ts +333 -0
- package/types/malva-ui-core-dropdown.d.ts +592 -0
- package/types/malva-ui-core-empty-state.d.ts +37 -0
- package/types/malva-ui-core-expand.d.ts +102 -0
- package/types/malva-ui-core-file-upload.d.ts +267 -0
- package/types/malva-ui-core-filter.d.ts +552 -0
- package/types/malva-ui-core-form-utils-testing.d.ts +50 -0
- package/types/malva-ui-core-form-utils.d.ts +579 -0
- package/types/malva-ui-core-form.d.ts +176 -0
- package/types/malva-ui-core-icon-toggle.d.ts +80 -0
- package/types/malva-ui-core-input.d.ts +262 -0
- package/types/malva-ui-core-kbd.d.ts +56 -0
- package/types/malva-ui-core-layout.d.ts +70 -0
- package/types/malva-ui-core-link.d.ts +28 -0
- package/types/malva-ui-core-list.d.ts +252 -0
- package/types/malva-ui-core-loader.d.ts +89 -0
- package/types/malva-ui-core-menu.d.ts +954 -0
- package/types/malva-ui-core-notification.d.ts +122 -0
- package/types/malva-ui-core-number-input.d.ts +167 -0
- package/types/malva-ui-core-page.d.ts +799 -0
- package/types/malva-ui-core-pagination.d.ts +261 -0
- package/types/malva-ui-core-pin-input.d.ts +203 -0
- package/types/malva-ui-core-popup.d.ts +834 -0
- package/types/malva-ui-core-progress.d.ts +73 -0
- package/types/malva-ui-core-radio.d.ts +130 -0
- package/types/malva-ui-core-rating.d.ts +115 -0
- package/types/malva-ui-core-scrollbar.d.ts +203 -0
- package/types/malva-ui-core-search-field.d.ts +408 -0
- package/types/malva-ui-core-segmented.d.ts +206 -0
- package/types/malva-ui-core-select.d.ts +456 -0
- package/types/malva-ui-core-sidebar.d.ts +698 -0
- package/types/malva-ui-core-skeleton.d.ts +64 -0
- package/types/malva-ui-core-slider.d.ts +219 -0
- package/types/malva-ui-core-split-pane.d.ts +149 -0
- package/types/malva-ui-core-status-indicator.d.ts +65 -0
- package/types/malva-ui-core-stepper.d.ts +168 -0
- package/types/malva-ui-core-switch.d.ts +146 -0
- package/types/malva-ui-core-table.d.ts +37 -0
- package/types/malva-ui-core-tabs.d.ts +339 -0
- package/types/malva-ui-core-textarea.d.ts +79 -0
- package/types/malva-ui-core-tile.d.ts +373 -0
- package/types/malva-ui-core-time-picker.d.ts +141 -0
- package/types/malva-ui-core-timeline.d.ts +188 -0
- package/types/malva-ui-core-title.d.ts +66 -0
- package/types/malva-ui-core-toast.d.ts +432 -0
- package/types/malva-ui-core-tokenizer.d.ts +217 -0
- package/types/malva-ui-core-toolbar.d.ts +91 -0
- package/types/malva-ui-core-tooltip.d.ts +200 -0
- package/types/malva-ui-core-tree.d.ts +289 -0
- package/types/malva-ui-core-view-variant.d.ts +207 -0
- package/types/malva-ui-core.d.ts +72 -0
- package/view-variant/README.md +3 -0
- package/accordion/index.d.ts +0 -3
- package/accordion/lib/accordion/accordion.d.ts +0 -47
- package/accordion/lib/accordion-item/accordion-header.d.ts +0 -22
- package/accordion/lib/accordion-item/accordion-item.d.ts +0 -49
- package/accordion/malva-ui-core-accordion.d.ts +0 -5
- package/action-bar/index.d.ts +0 -4
- package/action-bar/lib/action-bar/action-bar.d.ts +0 -59
- package/action-bar/lib/action-bar/components/action-bar-actions.d.ts +0 -9
- package/action-bar/lib/action-bar/components/action-bar-logo.d.ts +0 -5
- package/action-bar/lib/action-bar/components/action-bar-spacer.d.ts +0 -5
- package/action-bar/malva-ui-core-action-bar.d.ts +0 -5
- package/alert/index.d.ts +0 -2
- package/alert/lib/alert/alert.d.ts +0 -84
- package/alert/lib/alert/alert.directives.d.ts +0 -44
- package/alert/malva-ui-core-alert.d.ts +0 -5
- package/autocomplete/index.d.ts +0 -1
- package/autocomplete/lib/autocomplete/autocomplete.d.ts +0 -296
- package/autocomplete/malva-ui-core-autocomplete.d.ts +0 -5
- package/avatar/index.d.ts +0 -2
- package/avatar/lib/avatar/avatar.d.ts +0 -125
- package/avatar/lib/color-from-text.pipe.d.ts +0 -21
- package/avatar/malva-ui-core-avatar.d.ts +0 -5
- package/avatar-group/index.d.ts +0 -1
- package/avatar-group/lib/avatar-group/avatar-group.d.ts +0 -115
- package/avatar-group/malva-ui-core-avatar-group.d.ts +0 -5
- package/badge/index.d.ts +0 -2
- package/badge/lib/badge/badge.d.ts +0 -59
- package/badge/lib/badge-icon.d.ts +0 -35
- package/badge/malva-ui-core-badge.d.ts +0 -5
- package/bottom-nav/index.d.ts +0 -1
- package/bottom-nav/lib/bottom-nav/bottom-nav.d.ts +0 -99
- package/bottom-nav/malva-ui-core-bottom-nav.d.ts +0 -5
- package/breadcrumb/index.d.ts +0 -5
- package/breadcrumb/lib/breadcrumb/breadcrumb-item-host.d.ts +0 -32
- package/breadcrumb/lib/breadcrumb/breadcrumb-item.d.ts +0 -41
- package/breadcrumb/lib/breadcrumb/breadcrumb-separator.d.ts +0 -31
- package/breadcrumb/lib/breadcrumb/breadcrumb.d.ts +0 -151
- package/breadcrumb/lib/breadcrumb/breadcrumb.types.d.ts +0 -26
- package/breadcrumb/malva-ui-core-breadcrumb.d.ts +0 -5
- package/button/index.d.ts +0 -7
- package/button/lib/button/button.d.ts +0 -61
- package/button/lib/button-close/button-close.d.ts +0 -24
- package/button/lib/button-group/button-group.d.ts +0 -21
- package/button/lib/button-split/button-split.d.ts +0 -21
- package/button/lib/button-toggle/button-toggle.d.ts +0 -33
- package/button/lib/button-variant.token.d.ts +0 -13
- package/button/lib/button.directives.d.ts +0 -14
- package/button/lib/button.types.d.ts +0 -8
- package/button/malva-ui-core-button.d.ts +0 -5
- package/calendar/index.d.ts +0 -3
- package/calendar/lib/calendar/calendar.d.ts +0 -182
- package/calendar/lib/date-provider/date-adapter.d.ts +0 -92
- package/calendar/lib/date-provider/native-date-adapter.d.ts +0 -60
- package/calendar/malva-ui-core-calendar.d.ts +0 -5
- package/card/index.d.ts +0 -5
- package/card/lib/card/card.d.ts +0 -43
- package/card/lib/card-actions-def.d.ts +0 -10
- package/card/lib/card-footer-def.d.ts +0 -13
- package/card/lib/card-header-def.d.ts +0 -10
- package/card/lib/card-subheader-def.d.ts +0 -16
- package/card/malva-ui-core-card.d.ts +0 -5
- package/chat/index.d.ts +0 -9
- package/chat/lib/chat/chat.d.ts +0 -133
- package/chat/lib/chat-audio/chat-audio.d.ts +0 -51
- package/chat/lib/chat-audio/chat-audio.service.d.ts +0 -21
- package/chat/lib/chat-date/chat-date.d.ts +0 -16
- package/chat/lib/chat-format.d.ts +0 -5
- package/chat/lib/chat-media-grid/chat-media-grid.d.ts +0 -32
- package/chat/lib/chat-message/chat-message.d.ts +0 -45
- package/chat/lib/chat-render-list.d.ts +0 -16
- package/chat/lib/chat-tokens.d.ts +0 -25
- package/chat/lib/chat-typing/chat-typing.d.ts +0 -16
- package/chat/lib/chat.types.d.ts +0 -80
- package/chat/lib/defs/chat-author-def.d.ts +0 -30
- package/chat/lib/defs/chat-date-def.d.ts +0 -22
- package/chat/lib/defs/chat-message-def.d.ts +0 -23
- package/chat/malva-ui-core-chat.d.ts +0 -5
- package/checkbox/index.d.ts +0 -3
- package/checkbox/lib/checkbox/checkbox.d.ts +0 -129
- package/checkbox/lib/checkbox-group/checkbox-group.d.ts +0 -24
- package/checkbox/lib/checkbox-group-token.d.ts +0 -6
- package/checkbox/malva-ui-core-checkbox.d.ts +0 -5
- package/chip/index.d.ts +0 -2
- package/chip/lib/chip/chip.d.ts +0 -107
- package/chip/lib/chip/chip.directives.d.ts +0 -18
- package/chip/malva-ui-core-chip.d.ts +0 -5
- package/color-picker/index.d.ts +0 -3
- package/color-picker/lib/color-picker/color-picker.d.ts +0 -188
- package/color-picker/lib/color-picker-popup/color-picker-popup.d.ts +0 -151
- package/color-picker/lib/color-utils/color-utils.d.ts +0 -102
- package/color-picker/malva-ui-core-color-picker.d.ts +0 -5
- package/combobox/index.d.ts +0 -2
- package/combobox/lib/combobox/combobox.d.ts +0 -400
- package/combobox/lib/combobox-template.directives.d.ts +0 -10
- package/combobox/malva-ui-core-combobox.d.ts +0 -5
- package/copy-to-clipboard/index.d.ts +0 -1
- package/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.d.ts +0 -130
- package/copy-to-clipboard/malva-ui-core-copy-to-clipboard.d.ts +0 -5
- package/data-table/index.d.ts +0 -8
- package/data-table/lib/data-source.d.ts +0 -5
- package/data-table/lib/data-table/data-table-layout.d.ts +0 -31
- package/data-table/lib/data-table/data-table.d.ts +0 -699
- package/data-table/lib/data-table/services/data-table-column-visibility.service.d.ts +0 -19
- package/data-table/lib/data-table/services/data-table-editing.service.d.ts +0 -37
- package/data-table/lib/data-table/services/data-table-pinning.service.d.ts +0 -37
- package/data-table/lib/data-table-cell.d.ts +0 -44
- package/data-table/lib/data-table-edit-cell.d.ts +0 -44
- package/data-table/lib/data-table-error.d.ts +0 -37
- package/data-table/lib/data-table-footer.d.ts +0 -26
- package/data-table/lib/data-table-no-data.d.ts +0 -19
- package/data-table/lib/filter-dropdown/filter-dropdown.d.ts +0 -54
- package/data-table/lib/types.d.ts +0 -134
- package/data-table/malva-ui-core-data-table.d.ts +0 -5
- package/date-range-picker/index.d.ts +0 -1
- package/date-range-picker/lib/date-range-picker/date-range-picker.d.ts +0 -145
- package/date-range-picker/malva-ui-core-date-range-picker.d.ts +0 -5
- package/day-picker/index.d.ts +0 -1
- package/day-picker/lib/day-picker/day-picker.d.ts +0 -51
- package/day-picker/malva-ui-core-day-picker.d.ts +0 -5
- package/dialog/index.d.ts +0 -11
- package/dialog/lib/confirm-dialog-options.d.ts +0 -41
- package/dialog/lib/confirm-dialog.d.ts +0 -52
- package/dialog/lib/dialog/dialog.d.ts +0 -22
- package/dialog/lib/dialog-body.d.ts +0 -9
- package/dialog/lib/dialog-close.d.ts +0 -27
- package/dialog/lib/dialog-config.d.ts +0 -112
- package/dialog/lib/dialog-container.d.ts +0 -40
- package/dialog/lib/dialog-footer.d.ts +0 -13
- package/dialog/lib/dialog-header.d.ts +0 -74
- package/dialog/lib/dialog-ref.d.ts +0 -95
- package/dialog/lib/dialog-template.d.ts +0 -65
- package/dialog/lib/dialog-text-content.d.ts +0 -24
- package/dialog/lib/dialog.service.d.ts +0 -63
- package/dialog/lib/generate-routable-dialog-route.d.ts +0 -49
- package/dialog/lib/inject-dialog-ref.d.ts +0 -8
- package/dialog/lib/routable-dialog.d.ts +0 -30
- package/dialog/malva-ui-core-dialog.d.ts +0 -5
- package/divider/index.d.ts +0 -1
- package/divider/lib/divider/divider.d.ts +0 -64
- package/divider/malva-ui-core-divider.d.ts +0 -5
- package/drawer/index.d.ts +0 -11
- package/drawer/lib/drawer/drawer.d.ts +0 -106
- package/drawer/lib/drawer-body.d.ts +0 -8
- package/drawer/lib/drawer-content.d.ts +0 -6
- package/drawer/lib/drawer-footer.d.ts +0 -5
- package/drawer/lib/drawer-header.d.ts +0 -5
- package/drawer/lib/drawer-ref.d.ts +0 -29
- package/drawer/lib/drawer-resize.d.ts +0 -65
- package/drawer/lib/drawer-section/drawer-section.d.ts +0 -15
- package/drawer/lib/drawer-sections/drawer-sections.d.ts +0 -22
- package/drawer/lib/drawer-sections.service.d.ts +0 -42
- package/drawer/lib/drawer.service.d.ts +0 -66
- package/drawer/lib/generate-routable-drawer-route.d.ts +0 -42
- package/drawer/lib/routable-drawer.d.ts +0 -30
- package/drawer/malva-ui-core-drawer.d.ts +0 -5
- package/dropdown/index.d.ts +0 -9
- package/dropdown/lib/active-descendant.d.ts +0 -64
- package/dropdown/lib/dropdown-panel/dropdown-panel.d.ts +0 -178
- package/dropdown/lib/highlight-match.pipe.d.ts +0 -27
- package/dropdown/lib/option-matcher.d.ts +0 -87
- package/dropdown/lib/options-adapter.d.ts +0 -142
- package/dropdown/lib/options-result.d.ts +0 -6
- package/dropdown/lib/reconciliation.d.ts +0 -19
- package/dropdown/lib/select-data-source.d.ts +0 -18
- package/dropdown/lib/select-option.d.ts +0 -37
- package/dropdown/malva-ui-core-dropdown.d.ts +0 -5
- package/empty-state/index.d.ts +0 -1
- package/empty-state/lib/empty-state/empty-state.d.ts +0 -34
- package/empty-state/malva-ui-core-empty-state.d.ts +0 -5
- package/esm2022/accordion/index.js +0 -4
- package/esm2022/accordion/index.js.map +0 -1
- package/esm2022/accordion/lib/accordion/accordion.js +0 -65
- package/esm2022/accordion/lib/accordion/accordion.js.map +0 -1
- package/esm2022/accordion/lib/accordion-item/accordion-header.js +0 -30
- package/esm2022/accordion/lib/accordion-item/accordion-header.js.map +0 -1
- package/esm2022/accordion/lib/accordion-item/accordion-item.js +0 -70
- package/esm2022/accordion/lib/accordion-item/accordion-item.js.map +0 -1
- package/esm2022/accordion/malva-ui-core-accordion.js +0 -5
- package/esm2022/accordion/malva-ui-core-accordion.js.map +0 -1
- package/esm2022/action-bar/index.js +0 -5
- package/esm2022/action-bar/index.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/action-bar.js +0 -64
- package/esm2022/action-bar/lib/action-bar/action-bar.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js +0 -20
- package/esm2022/action-bar/lib/action-bar/components/action-bar-actions.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js +0 -13
- package/esm2022/action-bar/lib/action-bar/components/action-bar-logo.js.map +0 -1
- package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js +0 -13
- package/esm2022/action-bar/lib/action-bar/components/action-bar-spacer.js.map +0 -1
- package/esm2022/action-bar/malva-ui-core-action-bar.js +0 -5
- package/esm2022/action-bar/malva-ui-core-action-bar.js.map +0 -1
- package/esm2022/alert/index.js +0 -3
- package/esm2022/alert/index.js.map +0 -1
- package/esm2022/alert/lib/alert/alert.directives.js +0 -53
- package/esm2022/alert/lib/alert/alert.directives.js.map +0 -1
- package/esm2022/alert/lib/alert/alert.js +0 -118
- package/esm2022/alert/lib/alert/alert.js.map +0 -1
- package/esm2022/alert/malva-ui-core-alert.js +0 -5
- package/esm2022/alert/malva-ui-core-alert.js.map +0 -1
- package/esm2022/autocomplete/index.js +0 -2
- package/esm2022/autocomplete/index.js.map +0 -1
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.js +0 -765
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.js.map +0 -1
- package/esm2022/autocomplete/malva-ui-core-autocomplete.js +0 -5
- package/esm2022/autocomplete/malva-ui-core-autocomplete.js.map +0 -1
- package/esm2022/avatar/index.js +0 -3
- package/esm2022/avatar/index.js.map +0 -1
- package/esm2022/avatar/lib/avatar/avatar.js +0 -192
- package/esm2022/avatar/lib/avatar/avatar.js.map +0 -1
- package/esm2022/avatar/lib/color-from-text.pipe.js +0 -39
- package/esm2022/avatar/lib/color-from-text.pipe.js.map +0 -1
- package/esm2022/avatar/malva-ui-core-avatar.js +0 -5
- package/esm2022/avatar/malva-ui-core-avatar.js.map +0 -1
- package/esm2022/avatar-group/index.js +0 -2
- package/esm2022/avatar-group/index.js.map +0 -1
- package/esm2022/avatar-group/lib/avatar-group/avatar-group.js +0 -217
- package/esm2022/avatar-group/lib/avatar-group/avatar-group.js.map +0 -1
- package/esm2022/avatar-group/malva-ui-core-avatar-group.js +0 -5
- package/esm2022/avatar-group/malva-ui-core-avatar-group.js.map +0 -1
- package/esm2022/badge/index.js +0 -3
- package/esm2022/badge/index.js.map +0 -1
- package/esm2022/badge/lib/badge/badge.js +0 -71
- package/esm2022/badge/lib/badge/badge.js.map +0 -1
- package/esm2022/badge/lib/badge-icon.js +0 -47
- package/esm2022/badge/lib/badge-icon.js.map +0 -1
- package/esm2022/badge/malva-ui-core-badge.js +0 -5
- package/esm2022/badge/malva-ui-core-badge.js.map +0 -1
- package/esm2022/bottom-nav/index.js +0 -2
- package/esm2022/bottom-nav/index.js.map +0 -1
- package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js +0 -155
- package/esm2022/bottom-nav/lib/bottom-nav/bottom-nav.js.map +0 -1
- package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js +0 -5
- package/esm2022/bottom-nav/malva-ui-core-bottom-nav.js.map +0 -1
- package/esm2022/breadcrumb/index.js +0 -6
- package/esm2022/breadcrumb/index.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js +0 -43
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item-host.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js +0 -110
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-item.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js +0 -38
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-separator.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js +0 -284
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.js.map +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js +0 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.types.js.map +0 -1
- package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js +0 -5
- package/esm2022/breadcrumb/malva-ui-core-breadcrumb.js.map +0 -1
- package/esm2022/button/index.js +0 -8
- package/esm2022/button/index.js.map +0 -1
- package/esm2022/button/lib/button/button.js +0 -137
- package/esm2022/button/lib/button/button.js.map +0 -1
- package/esm2022/button/lib/button-close/button-close.js +0 -52
- package/esm2022/button/lib/button-close/button-close.js.map +0 -1
- package/esm2022/button/lib/button-group/button-group.js +0 -44
- package/esm2022/button/lib/button-group/button-group.js.map +0 -1
- package/esm2022/button/lib/button-split/button-split.js +0 -44
- package/esm2022/button/lib/button-split/button-split.js.map +0 -1
- package/esm2022/button/lib/button-toggle/button-toggle.js +0 -94
- package/esm2022/button/lib/button-toggle/button-toggle.js.map +0 -1
- package/esm2022/button/lib/button-variant.token.js +0 -4
- package/esm2022/button/lib/button-variant.token.js.map +0 -1
- package/esm2022/button/lib/button.directives.js +0 -37
- package/esm2022/button/lib/button.directives.js.map +0 -1
- package/esm2022/button/lib/button.types.js +0 -1
- package/esm2022/button/lib/button.types.js.map +0 -1
- package/esm2022/button/malva-ui-core-button.js +0 -5
- package/esm2022/button/malva-ui-core-button.js.map +0 -1
- package/esm2022/calendar/index.js +0 -4
- package/esm2022/calendar/index.js.map +0 -1
- package/esm2022/calendar/lib/calendar/calendar.js +0 -672
- package/esm2022/calendar/lib/calendar/calendar.js.map +0 -1
- package/esm2022/calendar/lib/date-provider/date-adapter.js +0 -111
- package/esm2022/calendar/lib/date-provider/date-adapter.js.map +0 -1
- package/esm2022/calendar/lib/date-provider/native-date-adapter.js +0 -151
- package/esm2022/calendar/lib/date-provider/native-date-adapter.js.map +0 -1
- package/esm2022/calendar/malva-ui-core-calendar.js +0 -5
- package/esm2022/calendar/malva-ui-core-calendar.js.map +0 -1
- package/esm2022/card/index.js +0 -6
- package/esm2022/card/index.js.map +0 -1
- package/esm2022/card/lib/card/card.js +0 -54
- package/esm2022/card/lib/card/card.js.map +0 -1
- package/esm2022/card/lib/card-actions-def.js +0 -27
- package/esm2022/card/lib/card-actions-def.js.map +0 -1
- package/esm2022/card/lib/card-footer-def.js +0 -32
- package/esm2022/card/lib/card-footer-def.js.map +0 -1
- package/esm2022/card/lib/card-header-def.js +0 -27
- package/esm2022/card/lib/card-header-def.js.map +0 -1
- package/esm2022/card/lib/card-subheader-def.js +0 -33
- package/esm2022/card/lib/card-subheader-def.js.map +0 -1
- package/esm2022/card/malva-ui-core-card.js +0 -5
- package/esm2022/card/malva-ui-core-card.js.map +0 -1
- package/esm2022/chat/index.js +0 -10
- package/esm2022/chat/index.js.map +0 -1
- package/esm2022/chat/lib/chat/chat.js +0 -326
- package/esm2022/chat/lib/chat/chat.js.map +0 -1
- package/esm2022/chat/lib/chat-audio/chat-audio.js +0 -110
- package/esm2022/chat/lib/chat-audio/chat-audio.js.map +0 -1
- package/esm2022/chat/lib/chat-audio/chat-audio.service.js +0 -28
- package/esm2022/chat/lib/chat-audio/chat-audio.service.js.map +0 -1
- package/esm2022/chat/lib/chat-date/chat-date.js +0 -46
- package/esm2022/chat/lib/chat-date/chat-date.js.map +0 -1
- package/esm2022/chat/lib/chat-format.js +0 -11
- package/esm2022/chat/lib/chat-format.js.map +0 -1
- package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js +0 -53
- package/esm2022/chat/lib/chat-media-grid/chat-media-grid.js.map +0 -1
- package/esm2022/chat/lib/chat-message/chat-message.js +0 -86
- package/esm2022/chat/lib/chat-message/chat-message.js.map +0 -1
- package/esm2022/chat/lib/chat-render-list.js +0 -55
- package/esm2022/chat/lib/chat-render-list.js.map +0 -1
- package/esm2022/chat/lib/chat-tokens.js +0 -9
- package/esm2022/chat/lib/chat-tokens.js.map +0 -1
- package/esm2022/chat/lib/chat-typing/chat-typing.js +0 -50
- package/esm2022/chat/lib/chat-typing/chat-typing.js.map +0 -1
- package/esm2022/chat/lib/chat.types.js +0 -1
- package/esm2022/chat/lib/chat.types.js.map +0 -1
- package/esm2022/chat/lib/defs/chat-author-def.js +0 -27
- package/esm2022/chat/lib/defs/chat-author-def.js.map +0 -1
- package/esm2022/chat/lib/defs/chat-date-def.js +0 -24
- package/esm2022/chat/lib/defs/chat-date-def.js.map +0 -1
- package/esm2022/chat/lib/defs/chat-message-def.js +0 -30
- package/esm2022/chat/lib/defs/chat-message-def.js.map +0 -1
- package/esm2022/chat/malva-ui-core-chat.js +0 -5
- package/esm2022/chat/malva-ui-core-chat.js.map +0 -1
- package/esm2022/checkbox/index.js +0 -4
- package/esm2022/checkbox/index.js.map +0 -1
- package/esm2022/checkbox/lib/checkbox/checkbox.js +0 -201
- package/esm2022/checkbox/lib/checkbox/checkbox.js.map +0 -1
- package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js +0 -68
- package/esm2022/checkbox/lib/checkbox-group/checkbox-group.js.map +0 -1
- package/esm2022/checkbox/lib/checkbox-group-token.js +0 -3
- package/esm2022/checkbox/lib/checkbox-group-token.js.map +0 -1
- package/esm2022/checkbox/malva-ui-core-checkbox.js +0 -5
- package/esm2022/checkbox/malva-ui-core-checkbox.js.map +0 -1
- package/esm2022/chip/index.js +0 -3
- package/esm2022/chip/index.js.map +0 -1
- package/esm2022/chip/lib/chip/chip.directives.js +0 -32
- package/esm2022/chip/lib/chip/chip.directives.js.map +0 -1
- package/esm2022/chip/lib/chip/chip.js +0 -140
- package/esm2022/chip/lib/chip/chip.js.map +0 -1
- package/esm2022/chip/malva-ui-core-chip.js +0 -5
- package/esm2022/chip/malva-ui-core-chip.js.map +0 -1
- package/esm2022/color-picker/index.js +0 -4
- package/esm2022/color-picker/index.js.map +0 -1
- package/esm2022/color-picker/lib/color-picker/color-picker.js +0 -530
- package/esm2022/color-picker/lib/color-picker/color-picker.js.map +0 -1
- package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js +0 -419
- package/esm2022/color-picker/lib/color-picker-popup/color-picker-popup.js.map +0 -1
- package/esm2022/color-picker/lib/color-utils/color-utils.js +0 -256
- package/esm2022/color-picker/lib/color-utils/color-utils.js.map +0 -1
- package/esm2022/color-picker/malva-ui-core-color-picker.js +0 -5
- package/esm2022/color-picker/malva-ui-core-color-picker.js.map +0 -1
- package/esm2022/combobox/index.js +0 -3
- package/esm2022/combobox/index.js.map +0 -1
- package/esm2022/combobox/lib/combobox/combobox.js +0 -911
- package/esm2022/combobox/lib/combobox/combobox.js.map +0 -1
- package/esm2022/combobox/lib/combobox-template.directives.js +0 -24
- package/esm2022/combobox/lib/combobox-template.directives.js.map +0 -1
- package/esm2022/combobox/malva-ui-core-combobox.js +0 -5
- package/esm2022/combobox/malva-ui-core-combobox.js.map +0 -1
- package/esm2022/copy-to-clipboard/index.js +0 -2
- package/esm2022/copy-to-clipboard/index.js.map +0 -1
- package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js +0 -201
- package/esm2022/copy-to-clipboard/lib/copy-to-clipboard/copy-to-clipboard.js.map +0 -1
- package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js +0 -5
- package/esm2022/copy-to-clipboard/malva-ui-core-copy-to-clipboard.js.map +0 -1
- package/esm2022/data-table/index.js +0 -9
- package/esm2022/data-table/index.js.map +0 -1
- package/esm2022/data-table/lib/data-source.js +0 -6
- package/esm2022/data-table/lib/data-source.js.map +0 -1
- package/esm2022/data-table/lib/data-table/data-table-layout.js +0 -84
- package/esm2022/data-table/lib/data-table/data-table-layout.js.map +0 -1
- package/esm2022/data-table/lib/data-table/data-table.js +0 -1846
- package/esm2022/data-table/lib/data-table/data-table.js.map +0 -1
- package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js +0 -37
- package/esm2022/data-table/lib/data-table/services/data-table-column-visibility.service.js.map +0 -1
- package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js +0 -63
- package/esm2022/data-table/lib/data-table/services/data-table-editing.service.js.map +0 -1
- package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js +0 -68
- package/esm2022/data-table/lib/data-table/services/data-table-pinning.service.js.map +0 -1
- package/esm2022/data-table/lib/data-table-cell.js +0 -46
- package/esm2022/data-table/lib/data-table-cell.js.map +0 -1
- package/esm2022/data-table/lib/data-table-edit-cell.js +0 -46
- package/esm2022/data-table/lib/data-table-edit-cell.js.map +0 -1
- package/esm2022/data-table/lib/data-table-error.js +0 -37
- package/esm2022/data-table/lib/data-table-error.js.map +0 -1
- package/esm2022/data-table/lib/data-table-footer.js +0 -33
- package/esm2022/data-table/lib/data-table-footer.js.map +0 -1
- package/esm2022/data-table/lib/data-table-no-data.js +0 -26
- package/esm2022/data-table/lib/data-table-no-data.js.map +0 -1
- package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js +0 -224
- package/esm2022/data-table/lib/filter-dropdown/filter-dropdown.js.map +0 -1
- package/esm2022/data-table/lib/types.js +0 -1
- package/esm2022/data-table/lib/types.js.map +0 -1
- package/esm2022/data-table/malva-ui-core-data-table.js +0 -5
- package/esm2022/data-table/malva-ui-core-data-table.js.map +0 -1
- package/esm2022/date-range-picker/index.js +0 -2
- package/esm2022/date-range-picker/index.js.map +0 -1
- package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js +0 -269
- package/esm2022/date-range-picker/lib/date-range-picker/date-range-picker.js.map +0 -1
- package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js +0 -5
- package/esm2022/date-range-picker/malva-ui-core-date-range-picker.js.map +0 -1
- package/esm2022/day-picker/index.js +0 -2
- package/esm2022/day-picker/index.js.map +0 -1
- package/esm2022/day-picker/lib/day-picker/day-picker.js +0 -124
- package/esm2022/day-picker/lib/day-picker/day-picker.js.map +0 -1
- package/esm2022/day-picker/malva-ui-core-day-picker.js +0 -5
- package/esm2022/day-picker/malva-ui-core-day-picker.js.map +0 -1
- package/esm2022/dialog/index.js +0 -12
- package/esm2022/dialog/index.js.map +0 -1
- package/esm2022/dialog/lib/confirm-dialog-options.js +0 -1
- package/esm2022/dialog/lib/confirm-dialog-options.js.map +0 -1
- package/esm2022/dialog/lib/confirm-dialog.js +0 -155
- package/esm2022/dialog/lib/confirm-dialog.js.map +0 -1
- package/esm2022/dialog/lib/dialog/dialog.js +0 -40
- package/esm2022/dialog/lib/dialog/dialog.js.map +0 -1
- package/esm2022/dialog/lib/dialog-body.js +0 -33
- package/esm2022/dialog/lib/dialog-body.js.map +0 -1
- package/esm2022/dialog/lib/dialog-close.js +0 -45
- package/esm2022/dialog/lib/dialog-close.js.map +0 -1
- package/esm2022/dialog/lib/dialog-config.js +0 -23
- package/esm2022/dialog/lib/dialog-config.js.map +0 -1
- package/esm2022/dialog/lib/dialog-container.js +0 -69
- package/esm2022/dialog/lib/dialog-container.js.map +0 -1
- package/esm2022/dialog/lib/dialog-footer.js +0 -29
- package/esm2022/dialog/lib/dialog-footer.js.map +0 -1
- package/esm2022/dialog/lib/dialog-header.js +0 -181
- package/esm2022/dialog/lib/dialog-header.js.map +0 -1
- package/esm2022/dialog/lib/dialog-ref.js +0 -167
- package/esm2022/dialog/lib/dialog-ref.js.map +0 -1
- package/esm2022/dialog/lib/dialog-template.js +0 -136
- package/esm2022/dialog/lib/dialog-template.js.map +0 -1
- package/esm2022/dialog/lib/dialog-text-content.js +0 -59
- package/esm2022/dialog/lib/dialog-text-content.js.map +0 -1
- package/esm2022/dialog/lib/dialog.service.js +0 -205
- package/esm2022/dialog/lib/dialog.service.js.map +0 -1
- package/esm2022/dialog/lib/generate-routable-dialog-route.js +0 -59
- package/esm2022/dialog/lib/generate-routable-dialog-route.js.map +0 -1
- package/esm2022/dialog/lib/inject-dialog-ref.js +0 -16
- package/esm2022/dialog/lib/inject-dialog-ref.js.map +0 -1
- package/esm2022/dialog/lib/routable-dialog.js +0 -91
- package/esm2022/dialog/lib/routable-dialog.js.map +0 -1
- package/esm2022/dialog/malva-ui-core-dialog.js +0 -5
- package/esm2022/dialog/malva-ui-core-dialog.js.map +0 -1
- package/esm2022/divider/index.js +0 -2
- package/esm2022/divider/index.js.map +0 -1
- package/esm2022/divider/lib/divider/divider.js +0 -73
- package/esm2022/divider/lib/divider/divider.js.map +0 -1
- package/esm2022/divider/malva-ui-core-divider.js +0 -5
- package/esm2022/divider/malva-ui-core-divider.js.map +0 -1
- package/esm2022/drawer/index.js +0 -12
- package/esm2022/drawer/index.js.map +0 -1
- package/esm2022/drawer/lib/drawer/drawer.js +0 -180
- package/esm2022/drawer/lib/drawer/drawer.js.map +0 -1
- package/esm2022/drawer/lib/drawer-body.js +0 -32
- package/esm2022/drawer/lib/drawer-body.js.map +0 -1
- package/esm2022/drawer/lib/drawer-content.js +0 -14
- package/esm2022/drawer/lib/drawer-content.js.map +0 -1
- package/esm2022/drawer/lib/drawer-footer.js +0 -14
- package/esm2022/drawer/lib/drawer-footer.js.map +0 -1
- package/esm2022/drawer/lib/drawer-header.js +0 -14
- package/esm2022/drawer/lib/drawer-header.js.map +0 -1
- package/esm2022/drawer/lib/drawer-ref.js +0 -31
- package/esm2022/drawer/lib/drawer-ref.js.map +0 -1
- package/esm2022/drawer/lib/drawer-resize.js +0 -243
- package/esm2022/drawer/lib/drawer-resize.js.map +0 -1
- package/esm2022/drawer/lib/drawer-section/drawer-section.js +0 -26
- package/esm2022/drawer/lib/drawer-section/drawer-section.js.map +0 -1
- package/esm2022/drawer/lib/drawer-sections/drawer-sections.js +0 -58
- package/esm2022/drawer/lib/drawer-sections/drawer-sections.js.map +0 -1
- package/esm2022/drawer/lib/drawer-sections.service.js +0 -83
- package/esm2022/drawer/lib/drawer-sections.service.js.map +0 -1
- package/esm2022/drawer/lib/drawer.service.js +0 -86
- package/esm2022/drawer/lib/drawer.service.js.map +0 -1
- package/esm2022/drawer/lib/generate-routable-drawer-route.js +0 -52
- package/esm2022/drawer/lib/generate-routable-drawer-route.js.map +0 -1
- package/esm2022/drawer/lib/routable-drawer.js +0 -91
- package/esm2022/drawer/lib/routable-drawer.js.map +0 -1
- package/esm2022/drawer/malva-ui-core-drawer.js +0 -5
- package/esm2022/drawer/malva-ui-core-drawer.js.map +0 -1
- package/esm2022/dropdown/index.js +0 -10
- package/esm2022/dropdown/index.js.map +0 -1
- package/esm2022/dropdown/lib/active-descendant.js +0 -92
- package/esm2022/dropdown/lib/active-descendant.js.map +0 -1
- package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js +0 -295
- package/esm2022/dropdown/lib/dropdown-panel/dropdown-panel.js.map +0 -1
- package/esm2022/dropdown/lib/highlight-match.pipe.js +0 -36
- package/esm2022/dropdown/lib/highlight-match.pipe.js.map +0 -1
- package/esm2022/dropdown/lib/option-matcher.js +0 -124
- package/esm2022/dropdown/lib/option-matcher.js.map +0 -1
- package/esm2022/dropdown/lib/options-adapter.js +0 -356
- package/esm2022/dropdown/lib/options-adapter.js.map +0 -1
- package/esm2022/dropdown/lib/options-result.js +0 -11
- package/esm2022/dropdown/lib/options-result.js.map +0 -1
- package/esm2022/dropdown/lib/reconciliation.js +0 -32
- package/esm2022/dropdown/lib/reconciliation.js.map +0 -1
- package/esm2022/dropdown/lib/select-data-source.js +0 -21
- package/esm2022/dropdown/lib/select-data-source.js.map +0 -1
- package/esm2022/dropdown/lib/select-option.js +0 -25
- package/esm2022/dropdown/lib/select-option.js.map +0 -1
- package/esm2022/dropdown/malva-ui-core-dropdown.js +0 -5
- package/esm2022/dropdown/malva-ui-core-dropdown.js.map +0 -1
- package/esm2022/empty-state/index.js +0 -2
- package/esm2022/empty-state/index.js.map +0 -1
- package/esm2022/empty-state/lib/empty-state/empty-state.js +0 -43
- package/esm2022/empty-state/lib/empty-state/empty-state.js.map +0 -1
- package/esm2022/empty-state/malva-ui-core-empty-state.js +0 -5
- package/esm2022/empty-state/malva-ui-core-empty-state.js.map +0 -1
- package/esm2022/expand/index.js +0 -3
- package/esm2022/expand/index.js.map +0 -1
- package/esm2022/expand/lib/expand/expand-content.js +0 -33
- package/esm2022/expand/lib/expand/expand-content.js.map +0 -1
- package/esm2022/expand/lib/expand/expand.js +0 -93
- package/esm2022/expand/lib/expand/expand.js.map +0 -1
- package/esm2022/expand/malva-ui-core-expand.js +0 -5
- package/esm2022/expand/malva-ui-core-expand.js.map +0 -1
- package/esm2022/file-upload/index.js +0 -5
- package/esm2022/file-upload/index.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload/file-upload.js +0 -324
- package/esm2022/file-upload/lib/file-upload/file-upload.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload/file-upload.types.js +0 -1
- package/esm2022/file-upload/lib/file-upload/file-upload.types.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload-action.js +0 -65
- package/esm2022/file-upload/lib/file-upload-action.js.map +0 -1
- package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js +0 -55
- package/esm2022/file-upload/lib/file-upload-item/file-upload-item.js.map +0 -1
- package/esm2022/file-upload/malva-ui-core-file-upload.js +0 -5
- package/esm2022/file-upload/malva-ui-core-file-upload.js.map +0 -1
- package/esm2022/filter/index.js +0 -4
- package/esm2022/filter/index.js.map +0 -1
- package/esm2022/filter/lib/filter/filter.js +0 -552
- package/esm2022/filter/lib/filter/filter.js.map +0 -1
- package/esm2022/filter/lib/filter.types.js +0 -1
- package/esm2022/filter/lib/filter.types.js.map +0 -1
- package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js +0 -518
- package/esm2022/filter/lib/smart-filter-bar/smart-filter-bar.js.map +0 -1
- package/esm2022/filter/malva-ui-core-filter.js +0 -5
- package/esm2022/filter/malva-ui-core-filter.js.map +0 -1
- package/esm2022/form/index.js +0 -7
- package/esm2022/form/index.js.map +0 -1
- package/esm2022/form/lib/fieldset/fieldset.js +0 -101
- package/esm2022/form/lib/fieldset/fieldset.js.map +0 -1
- package/esm2022/form/lib/fieldset-span.js +0 -49
- package/esm2022/form/lib/fieldset-span.js.map +0 -1
- package/esm2022/form/lib/form/form.js +0 -60
- package/esm2022/form/lib/form/form.js.map +0 -1
- package/esm2022/form/lib/form-actions.js +0 -34
- package/esm2022/form/lib/form-actions.js.map +0 -1
- package/esm2022/form/lib/form-gap.js +0 -15
- package/esm2022/form/lib/form-gap.js.map +0 -1
- package/esm2022/form/lib/form-header.js +0 -27
- package/esm2022/form/lib/form-header.js.map +0 -1
- package/esm2022/form/lib/form.types.js +0 -1
- package/esm2022/form/lib/form.types.js.map +0 -1
- package/esm2022/form/malva-ui-core-form.js +0 -5
- package/esm2022/form/malva-ui-core-form.js.map +0 -1
- package/esm2022/form-utils/index.js +0 -16
- package/esm2022/form-utils/index.js.map +0 -1
- package/esm2022/form-utils/lib/aria-value-bridge.js +0 -57
- package/esm2022/form-utils/lib/aria-value-bridge.js.map +0 -1
- package/esm2022/form-utils/lib/description/description.js +0 -24
- package/esm2022/form-utils/lib/description/description.js.map +0 -1
- package/esm2022/form-utils/lib/focusable-group-base.js +0 -87
- package/esm2022/form-utils/lib/focusable-group-base.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js +0 -192
- package/esm2022/form-utils/lib/form-control-base/signal-form-control-base.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-sides.js +0 -34
- package/esm2022/form-utils/lib/form-control-sides.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js +0 -14
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper-control.js.map +0 -1
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js +0 -47
- package/esm2022/form-utils/lib/form-control-wrapper/form-control-wrapper.js.map +0 -1
- package/esm2022/form-utils/lib/form-field/form-field.js +0 -245
- package/esm2022/form-utils/lib/form-field/form-field.js.map +0 -1
- package/esm2022/form-utils/lib/hint/hint.js +0 -11
- package/esm2022/form-utils/lib/hint/hint.js.map +0 -1
- package/esm2022/form-utils/lib/label/label.js +0 -55
- package/esm2022/form-utils/lib/label/label.js.map +0 -1
- package/esm2022/form-utils/lib/message/message.js +0 -20
- package/esm2022/form-utils/lib/message/message.js.map +0 -1
- package/esm2022/form-utils/lib/models/error-display-strategy.js +0 -1
- package/esm2022/form-utils/lib/models/error-display-strategy.js.map +0 -1
- package/esm2022/form-utils/lib/models/form-control-connector.js +0 -3
- package/esm2022/form-utils/lib/models/form-control-connector.js.map +0 -1
- package/esm2022/form-utils/lib/models/form-state.js +0 -1
- package/esm2022/form-utils/lib/models/form-state.js.map +0 -1
- package/esm2022/form-utils/lib/selection.service.js +0 -81
- package/esm2022/form-utils/lib/selection.service.js.map +0 -1
- package/esm2022/form-utils/malva-ui-core-form-utils.js +0 -5
- package/esm2022/form-utils/malva-ui-core-form-utils.js.map +0 -1
- package/esm2022/form-utils/testing/index.js +0 -2
- package/esm2022/form-utils/testing/index.js.map +0 -1
- package/esm2022/form-utils/testing/lib/forms-binding-matrix.js +0 -32
- package/esm2022/form-utils/testing/lib/forms-binding-matrix.js.map +0 -1
- package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js +0 -5
- package/esm2022/form-utils/testing/malva-ui-core-form-utils-testing.js.map +0 -1
- package/esm2022/index.js +0 -70
- package/esm2022/index.js.map +0 -1
- package/esm2022/input/index.js +0 -4
- package/esm2022/input/index.js.map +0 -1
- package/esm2022/input/lib/input/input-native.js +0 -49
- package/esm2022/input/lib/input/input-native.js.map +0 -1
- package/esm2022/input/lib/input/input-value-accessor.js +0 -4
- package/esm2022/input/lib/input/input-value-accessor.js.map +0 -1
- package/esm2022/input/lib/input/input.js +0 -277
- package/esm2022/input/lib/input/input.js.map +0 -1
- package/esm2022/input/lib/input/password-strength.js +0 -46
- package/esm2022/input/lib/input/password-strength.js.map +0 -1
- package/esm2022/input/malva-ui-core-input.js +0 -5
- package/esm2022/input/malva-ui-core-input.js.map +0 -1
- package/esm2022/kbd/index.js +0 -2
- package/esm2022/kbd/index.js.map +0 -1
- package/esm2022/kbd/lib/kbd/kbd.js +0 -124
- package/esm2022/kbd/lib/kbd/kbd.js.map +0 -1
- package/esm2022/kbd/malva-ui-core-kbd.js +0 -5
- package/esm2022/kbd/malva-ui-core-kbd.js.map +0 -1
- package/esm2022/layout/index.js +0 -5
- package/esm2022/layout/index.js.map +0 -1
- package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js +0 -14
- package/esm2022/layout/lib/layout/directives/MlvLayoutSide.js.map +0 -1
- package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js +0 -14
- package/esm2022/layout/lib/layout/directives/MlvLayoutTop.js.map +0 -1
- package/esm2022/layout/lib/layout/layout.js +0 -43
- package/esm2022/layout/lib/layout/layout.js.map +0 -1
- package/esm2022/layout/lib/layout/services/theme.service.js +0 -121
- package/esm2022/layout/lib/layout/services/theme.service.js.map +0 -1
- package/esm2022/layout/malva-ui-core-layout.js +0 -5
- package/esm2022/layout/malva-ui-core-layout.js.map +0 -1
- package/esm2022/link/index.js +0 -3
- package/esm2022/link/index.js.map +0 -1
- package/esm2022/link/lib/link/link.directives.js +0 -24
- package/esm2022/link/lib/link/link.directives.js.map +0 -1
- package/esm2022/link/lib/link/link.js +0 -61
- package/esm2022/link/lib/link/link.js.map +0 -1
- package/esm2022/link/malva-ui-core-link.js +0 -5
- package/esm2022/link/malva-ui-core-link.js.map +0 -1
- package/esm2022/list/index.js +0 -14
- package/esm2022/list/index.js.map +0 -1
- package/esm2022/list/lib/list/list.js +0 -28
- package/esm2022/list/lib/list/list.js.map +0 -1
- package/esm2022/list/lib/list-item/list-item.js +0 -125
- package/esm2022/list/lib/list-item/list-item.js.map +0 -1
- package/esm2022/list/lib/list-item-actions.js +0 -23
- package/esm2022/list/lib/list-item-actions.js.map +0 -1
- package/esm2022/list/lib/list-item-byline.js +0 -13
- package/esm2022/list/lib/list-item-byline.js.map +0 -1
- package/esm2022/list/lib/list-item-group/list-item-group.js +0 -25
- package/esm2022/list/lib/list-item-group/list-item-group.js.map +0 -1
- package/esm2022/list/lib/list-item-link/list-item-link.js +0 -20
- package/esm2022/list/lib/list-item-link/list-item-link.js.map +0 -1
- package/esm2022/list/lib/list-item-media.js +0 -13
- package/esm2022/list/lib/list-item-media.js.map +0 -1
- package/esm2022/list/lib/list-item-meta.js +0 -13
- package/esm2022/list/lib/list-item-meta.js.map +0 -1
- package/esm2022/list/lib/list-item-prefix.js +0 -13
- package/esm2022/list/lib/list-item-prefix.js.map +0 -1
- package/esm2022/list/lib/list-item-suffix.js +0 -13
- package/esm2022/list/lib/list-item-suffix.js.map +0 -1
- package/esm2022/list/lib/list-item-template.js +0 -14
- package/esm2022/list/lib/list-item-template.js.map +0 -1
- package/esm2022/list/lib/list-item-title.js +0 -13
- package/esm2022/list/lib/list-item-title.js.map +0 -1
- package/esm2022/list/lib/list-selectable.js +0 -116
- package/esm2022/list/lib/list-selectable.js.map +0 -1
- package/esm2022/list/malva-ui-core-list.js +0 -5
- package/esm2022/list/malva-ui-core-list.js.map +0 -1
- package/esm2022/loader/index.js +0 -2
- package/esm2022/loader/index.js.map +0 -1
- package/esm2022/loader/lib/loader/loader.js +0 -134
- package/esm2022/loader/lib/loader/loader.js.map +0 -1
- package/esm2022/loader/malva-ui-core-loader.js +0 -5
- package/esm2022/loader/malva-ui-core-loader.js.map +0 -1
- package/esm2022/malva-ui-core.js +0 -5
- package/esm2022/malva-ui-core.js.map +0 -1
- package/esm2022/menu/index.js +0 -10
- package/esm2022/menu/index.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-group-label.js +0 -35
- package/esm2022/menu/lib/menu/menu-group-label.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-group.js +0 -44
- package/esm2022/menu/lib/menu/menu-group.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-item.js +0 -117
- package/esm2022/menu/lib/menu/menu-item.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-separator.js +0 -41
- package/esm2022/menu/lib/menu/menu-separator.js.map +0 -1
- package/esm2022/menu/lib/menu/menu-trigger.js +0 -653
- package/esm2022/menu/lib/menu/menu-trigger.js.map +0 -1
- package/esm2022/menu/lib/menu/menu.js +0 -308
- package/esm2022/menu/lib/menu/menu.js.map +0 -1
- package/esm2022/menu/lib/menu/menu.types.js +0 -4
- package/esm2022/menu/lib/menu/menu.types.js.map +0 -1
- package/esm2022/menu/lib/menu/menubar.js +0 -257
- package/esm2022/menu/lib/menu/menubar.js.map +0 -1
- package/esm2022/menu/lib/menu/menubar.types.js +0 -4
- package/esm2022/menu/lib/menu/menubar.types.js.map +0 -1
- package/esm2022/menu/lib/menu/submenu-aim.js +0 -30
- package/esm2022/menu/lib/menu/submenu-aim.js.map +0 -1
- package/esm2022/menu/malva-ui-core-menu.js +0 -5
- package/esm2022/menu/malva-ui-core-menu.js.map +0 -1
- package/esm2022/notification/index.js +0 -5
- package/esm2022/notification/index.js.map +0 -1
- package/esm2022/notification/lib/notification-item/notification-item.js +0 -65
- package/esm2022/notification/lib/notification-item/notification-item.js.map +0 -1
- package/esm2022/notification/lib/notification-ref.js +0 -13
- package/esm2022/notification/lib/notification-ref.js.map +0 -1
- package/esm2022/notification/lib/notification.service.js +0 -118
- package/esm2022/notification/lib/notification.service.js.map +0 -1
- package/esm2022/notification/lib/notification.types.js +0 -6
- package/esm2022/notification/lib/notification.types.js.map +0 -1
- package/esm2022/notification/malva-ui-core-notification.js +0 -5
- package/esm2022/notification/malva-ui-core-notification.js.map +0 -1
- package/esm2022/number-input/index.js +0 -2
- package/esm2022/number-input/index.js.map +0 -1
- package/esm2022/number-input/lib/number-input/number-input.js +0 -395
- package/esm2022/number-input/lib/number-input/number-input.js.map +0 -1
- package/esm2022/number-input/malva-ui-core-number-input.js +0 -5
- package/esm2022/number-input/malva-ui-core-number-input.js.map +0 -1
- package/esm2022/page/index.js +0 -15
- package/esm2022/page/index.js.map +0 -1
- package/esm2022/page/lib/page/page-scroll.token.js +0 -9
- package/esm2022/page/lib/page/page-scroll.token.js.map +0 -1
- package/esm2022/page/lib/page/page-snap-controller.js +0 -170
- package/esm2022/page/lib/page/page-snap-controller.js.map +0 -1
- package/esm2022/page/lib/page/page-snap.directive.js +0 -65
- package/esm2022/page/lib/page/page-snap.directive.js.map +0 -1
- package/esm2022/page/lib/page/page.js +0 -173
- package/esm2022/page/lib/page/page.js.map +0 -1
- package/esm2022/page/lib/page-content/page-aside.js +0 -13
- package/esm2022/page/lib/page-content/page-aside.js.map +0 -1
- package/esm2022/page/lib/page-content/page-content.js +0 -72
- package/esm2022/page/lib/page-content/page-content.js.map +0 -1
- package/esm2022/page/lib/page-dock/page-dock.js +0 -128
- package/esm2022/page/lib/page-dock/page-dock.js.map +0 -1
- package/esm2022/page/lib/page-dock/page-dock.slots.js +0 -39
- package/esm2022/page/lib/page-dock/page-dock.slots.js.map +0 -1
- package/esm2022/page/lib/page-header/page-header.directives.js +0 -88
- package/esm2022/page/lib/page-header/page-header.directives.js.map +0 -1
- package/esm2022/page/lib/page-header/page-header.js +0 -124
- package/esm2022/page/lib/page-header/page-header.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell-color.js +0 -193
- package/esm2022/page/lib/page-shell/page-shell-color.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell-css-color.js +0 -207
- package/esm2022/page/lib/page-shell/page-shell-css-color.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell.js +0 -131
- package/esm2022/page/lib/page-shell/page-shell.js.map +0 -1
- package/esm2022/page/lib/page-shell/page-shell.slots.js +0 -41
- package/esm2022/page/lib/page-shell/page-shell.slots.js.map +0 -1
- package/esm2022/page/lib/page-summary/page-summary-item.js +0 -26
- package/esm2022/page/lib/page-summary/page-summary-item.js.map +0 -1
- package/esm2022/page/lib/page-summary/page-summary.js +0 -87
- package/esm2022/page/lib/page-summary/page-summary.js.map +0 -1
- package/esm2022/page/malva-ui-core-page.js +0 -5
- package/esm2022/page/malva-ui-core-page.js.map +0 -1
- package/esm2022/pagination/index.js +0 -5
- package/esm2022/pagination/index.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.directives.js +0 -58
- package/esm2022/pagination/lib/pagination/pagination.directives.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.js +0 -293
- package/esm2022/pagination/lib/pagination/pagination.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.model.js +0 -1
- package/esm2022/pagination/lib/pagination/pagination.model.js.map +0 -1
- package/esm2022/pagination/lib/pagination/pagination.service.js +0 -108
- package/esm2022/pagination/lib/pagination/pagination.service.js.map +0 -1
- package/esm2022/pagination/malva-ui-core-pagination.js +0 -5
- package/esm2022/pagination/malva-ui-core-pagination.js.map +0 -1
- package/esm2022/pin-input/index.js +0 -3
- package/esm2022/pin-input/index.js.map +0 -1
- package/esm2022/pin-input/lib/pin-input/pin-input-separator.js +0 -31
- package/esm2022/pin-input/lib/pin-input/pin-input-separator.js.map +0 -1
- package/esm2022/pin-input/lib/pin-input/pin-input.js +0 -365
- package/esm2022/pin-input/lib/pin-input/pin-input.js.map +0 -1
- package/esm2022/pin-input/malva-ui-core-pin-input.js +0 -5
- package/esm2022/pin-input/malva-ui-core-pin-input.js.map +0 -1
- package/esm2022/popup/index.js +0 -10
- package/esm2022/popup/index.js.map +0 -1
- package/esm2022/popup/lib/popup/popup.js +0 -500
- package/esm2022/popup/lib/popup/popup.js.map +0 -1
- package/esm2022/popup/lib/popup-container/popup-container.js +0 -169
- package/esm2022/popup/lib/popup-container/popup-container.js.map +0 -1
- package/esm2022/popup/lib/popup-container/popup-container.token.js +0 -9
- package/esm2022/popup/lib/popup-container/popup-container.token.js.map +0 -1
- package/esm2022/popup/lib/popup-content.js +0 -14
- package/esm2022/popup/lib/popup-content.js.map +0 -1
- package/esm2022/popup/lib/popup-header-content.js +0 -26
- package/esm2022/popup/lib/popup-header-content.js.map +0 -1
- package/esm2022/popup/lib/popup-pinned-content.js +0 -25
- package/esm2022/popup/lib/popup-pinned-content.js.map +0 -1
- package/esm2022/popup/lib/popup-positions.js +0 -252
- package/esm2022/popup/lib/popup-positions.js.map +0 -1
- package/esm2022/popup/lib/popup-trigger/popup-trigger.js +0 -308
- package/esm2022/popup/lib/popup-trigger/popup-trigger.js.map +0 -1
- package/esm2022/popup/lib/popup.service.js +0 -188
- package/esm2022/popup/lib/popup.service.js.map +0 -1
- package/esm2022/popup/malva-ui-core-popup.js +0 -5
- package/esm2022/popup/malva-ui-core-popup.js.map +0 -1
- package/esm2022/progress/index.js +0 -2
- package/esm2022/progress/index.js.map +0 -1
- package/esm2022/progress/lib/progress/progress.js +0 -102
- package/esm2022/progress/lib/progress/progress.js.map +0 -1
- package/esm2022/progress/malva-ui-core-progress.js +0 -5
- package/esm2022/progress/malva-ui-core-progress.js.map +0 -1
- package/esm2022/radio/index.js +0 -3
- package/esm2022/radio/index.js.map +0 -1
- package/esm2022/radio/lib/radio/radio.js +0 -134
- package/esm2022/radio/lib/radio/radio.js.map +0 -1
- package/esm2022/radio/lib/radio-group/radio-group.js +0 -176
- package/esm2022/radio/lib/radio-group/radio-group.js.map +0 -1
- package/esm2022/radio/lib/radio-group-token.js +0 -3
- package/esm2022/radio/lib/radio-group-token.js.map +0 -1
- package/esm2022/radio/malva-ui-core-radio.js +0 -5
- package/esm2022/radio/malva-ui-core-radio.js.map +0 -1
- package/esm2022/rating/index.js +0 -2
- package/esm2022/rating/index.js.map +0 -1
- package/esm2022/rating/lib/rating/rating.js +0 -208
- package/esm2022/rating/lib/rating/rating.js.map +0 -1
- package/esm2022/rating/malva-ui-core-rating.js +0 -5
- package/esm2022/rating/malva-ui-core-rating.js.map +0 -1
- package/esm2022/scrollbar/index.js +0 -2
- package/esm2022/scrollbar/index.js.map +0 -1
- package/esm2022/scrollbar/lib/scrollbar/scrollbar.js +0 -388
- package/esm2022/scrollbar/lib/scrollbar/scrollbar.js.map +0 -1
- package/esm2022/scrollbar/malva-ui-core-scrollbar.js +0 -5
- package/esm2022/scrollbar/malva-ui-core-scrollbar.js.map +0 -1
- package/esm2022/search-field/index.js +0 -3
- package/esm2022/search-field/index.js.map +0 -1
- package/esm2022/search-field/lib/search-field/search-field.js +0 -535
- package/esm2022/search-field/lib/search-field/search-field.js.map +0 -1
- package/esm2022/search-field/lib/search-field/search-overlay-content.js +0 -35
- package/esm2022/search-field/lib/search-field/search-overlay-content.js.map +0 -1
- package/esm2022/search-field/malva-ui-core-search-field.js +0 -5
- package/esm2022/search-field/malva-ui-core-search-field.js.map +0 -1
- package/esm2022/segmented/index.js +0 -5
- package/esm2022/segmented/index.js.map +0 -1
- package/esm2022/segmented/lib/segmented/segmented.js +0 -248
- package/esm2022/segmented/lib/segmented/segmented.js.map +0 -1
- package/esm2022/segmented/lib/segmented-item/segmented-item.js +0 -194
- package/esm2022/segmented/lib/segmented-item/segmented-item.js.map +0 -1
- package/esm2022/segmented/lib/segmented-token.js +0 -4
- package/esm2022/segmented/lib/segmented-token.js.map +0 -1
- package/esm2022/segmented/lib/segmented.types.js +0 -1
- package/esm2022/segmented/lib/segmented.types.js.map +0 -1
- package/esm2022/segmented/malva-ui-core-segmented.js +0 -5
- package/esm2022/segmented/malva-ui-core-segmented.js.map +0 -1
- package/esm2022/select/index.js +0 -4
- package/esm2022/select/index.js.map +0 -1
- package/esm2022/select/lib/select/select.js +0 -685
- package/esm2022/select/lib/select/select.js.map +0 -1
- package/esm2022/select/lib/select-option.js +0 -2
- package/esm2022/select/lib/select-option.js.map +0 -1
- package/esm2022/select/lib/select-template.directives.js +0 -34
- package/esm2022/select/lib/select-template.directives.js.map +0 -1
- package/esm2022/select/malva-ui-core-select.js +0 -5
- package/esm2022/select/malva-ui-core-select.js.map +0 -1
- package/esm2022/sidebar/index.js +0 -16
- package/esm2022/sidebar/index.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar/sidebar.js +0 -251
- package/esm2022/sidebar/lib/sidebar/sidebar.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-content.js +0 -37
- package/esm2022/sidebar/lib/sidebar-content.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-context.js +0 -3
- package/esm2022/sidebar/lib/sidebar-context.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-footer.js +0 -20
- package/esm2022/sidebar/lib/sidebar-footer.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js +0 -341
- package/esm2022/sidebar/lib/sidebar-group/sidebar-group.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-header.js +0 -20
- package/esm2022/sidebar/lib/sidebar-header.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js +0 -216
- package/esm2022/sidebar/lib/sidebar-item/sidebar-item.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-item-host.js +0 -39
- package/esm2022/sidebar/lib/sidebar-item-host.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-item-icon.js +0 -14
- package/esm2022/sidebar/lib/sidebar-item-icon.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-mode.js +0 -1
- package/esm2022/sidebar/lib/sidebar-mode.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js +0 -202
- package/esm2022/sidebar/lib/sidebar-rail/sidebar-rail.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js +0 -159
- package/esm2022/sidebar/lib/sidebar-trigger/sidebar-trigger.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js +0 -35
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js +0 -107
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.js.map +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js +0 -1
- package/esm2022/sidebar/lib/sidebar-workspace/sidebar-workspace.types.js.map +0 -1
- package/esm2022/sidebar/malva-ui-core-sidebar.js +0 -5
- package/esm2022/sidebar/malva-ui-core-sidebar.js.map +0 -1
- package/esm2022/skeleton/index.js +0 -2
- package/esm2022/skeleton/index.js.map +0 -1
- package/esm2022/skeleton/lib/skeleton/skeleton.js +0 -78
- package/esm2022/skeleton/lib/skeleton/skeleton.js.map +0 -1
- package/esm2022/skeleton/malva-ui-core-skeleton.js +0 -5
- package/esm2022/skeleton/malva-ui-core-skeleton.js.map +0 -1
- package/esm2022/slider/index.js +0 -3
- package/esm2022/slider/index.js.map +0 -1
- package/esm2022/slider/lib/slider/slider-tooltip-def.js +0 -31
- package/esm2022/slider/lib/slider/slider-tooltip-def.js.map +0 -1
- package/esm2022/slider/lib/slider/slider.js +0 -468
- package/esm2022/slider/lib/slider/slider.js.map +0 -1
- package/esm2022/slider/malva-ui-core-slider.js +0 -5
- package/esm2022/slider/malva-ui-core-slider.js.map +0 -1
- package/esm2022/split-pane/index.js +0 -4
- package/esm2022/split-pane/index.js.map +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane-panel.js +0 -49
- package/esm2022/split-pane/lib/split-pane/split-pane-panel.js.map +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane.js +0 -290
- package/esm2022/split-pane/lib/split-pane/split-pane.js.map +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane.types.js +0 -1
- package/esm2022/split-pane/lib/split-pane/split-pane.types.js.map +0 -1
- package/esm2022/split-pane/malva-ui-core-split-pane.js +0 -5
- package/esm2022/split-pane/malva-ui-core-split-pane.js.map +0 -1
- package/esm2022/status-indicator/index.js +0 -2
- package/esm2022/status-indicator/index.js.map +0 -1
- package/esm2022/status-indicator/lib/status-indicator/status-indicator.js +0 -71
- package/esm2022/status-indicator/lib/status-indicator/status-indicator.js.map +0 -1
- package/esm2022/status-indicator/malva-ui-core-status-indicator.js +0 -5
- package/esm2022/status-indicator/malva-ui-core-status-indicator.js.map +0 -1
- package/esm2022/stepper/index.js +0 -5
- package/esm2022/stepper/index.js.map +0 -1
- package/esm2022/stepper/lib/stepper/step-header.js +0 -46
- package/esm2022/stepper/lib/stepper/step-header.js.map +0 -1
- package/esm2022/stepper/lib/stepper/step.js +0 -65
- package/esm2022/stepper/lib/stepper/step.js.map +0 -1
- package/esm2022/stepper/lib/stepper/stepper-token.js +0 -4
- package/esm2022/stepper/lib/stepper/stepper-token.js.map +0 -1
- package/esm2022/stepper/lib/stepper/stepper.js +0 -216
- package/esm2022/stepper/lib/stepper/stepper.js.map +0 -1
- package/esm2022/stepper/lib/stepper/stepper.types.js +0 -1
- package/esm2022/stepper/lib/stepper/stepper.types.js.map +0 -1
- package/esm2022/stepper/malva-ui-core-stepper.js +0 -5
- package/esm2022/stepper/malva-ui-core-stepper.js.map +0 -1
- package/esm2022/switch/index.js +0 -3
- package/esm2022/switch/index.js.map +0 -1
- package/esm2022/switch/lib/switch/switch.js +0 -190
- package/esm2022/switch/lib/switch/switch.js.map +0 -1
- package/esm2022/switch/lib/switch-group/switch-group.js +0 -68
- package/esm2022/switch/lib/switch-group/switch-group.js.map +0 -1
- package/esm2022/switch/lib/switch-group-token.js +0 -3
- package/esm2022/switch/lib/switch-group-token.js.map +0 -1
- package/esm2022/switch/malva-ui-core-switch.js +0 -5
- package/esm2022/switch/malva-ui-core-switch.js.map +0 -1
- package/esm2022/tabs/index.js +0 -9
- package/esm2022/tabs/index.js.map +0 -1
- package/esm2022/tabs/lib/tab/tab.js +0 -72
- package/esm2022/tabs/lib/tab/tab.js.map +0 -1
- package/esm2022/tabs/lib/tab-content/tab-content.js +0 -19
- package/esm2022/tabs/lib/tab-content/tab-content.js.map +0 -1
- package/esm2022/tabs/lib/tab-content-def.js +0 -14
- package/esm2022/tabs/lib/tab-content-def.js.map +0 -1
- package/esm2022/tabs/lib/tab-def.js +0 -17
- package/esm2022/tabs/lib/tab-def.js.map +0 -1
- package/esm2022/tabs/lib/tab-group-token.js +0 -3
- package/esm2022/tabs/lib/tab-group-token.js.map +0 -1
- package/esm2022/tabs/lib/tab-item/tab-item.js +0 -44
- package/esm2022/tabs/lib/tab-item/tab-item.js.map +0 -1
- package/esm2022/tabs/lib/tabs/tabs.js +0 -542
- package/esm2022/tabs/lib/tabs/tabs.js.map +0 -1
- package/esm2022/tabs/lib/tabs.service.js +0 -83
- package/esm2022/tabs/lib/tabs.service.js.map +0 -1
- package/esm2022/tabs/malva-ui-core-tabs.js +0 -5
- package/esm2022/tabs/malva-ui-core-tabs.js.map +0 -1
- package/esm2022/textarea/index.js +0 -2
- package/esm2022/textarea/index.js.map +0 -1
- package/esm2022/textarea/lib/textarea/textarea.js +0 -194
- package/esm2022/textarea/lib/textarea/textarea.js.map +0 -1
- package/esm2022/textarea/malva-ui-core-textarea.js +0 -5
- package/esm2022/textarea/malva-ui-core-textarea.js.map +0 -1
- package/esm2022/tile/index.js +0 -3
- package/esm2022/tile/index.js.map +0 -1
- package/esm2022/tile/lib/tile/tile.js +0 -39
- package/esm2022/tile/lib/tile/tile.js.map +0 -1
- package/esm2022/tile/lib/tile-header.js +0 -14
- package/esm2022/tile/lib/tile-header.js.map +0 -1
- package/esm2022/tile/malva-ui-core-tile.js +0 -5
- package/esm2022/tile/malva-ui-core-tile.js.map +0 -1
- package/esm2022/time-picker/index.js +0 -2
- package/esm2022/time-picker/index.js.map +0 -1
- package/esm2022/time-picker/lib/time-picker/time-picker.js +0 -310
- package/esm2022/time-picker/lib/time-picker/time-picker.js.map +0 -1
- package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js +0 -216
- package/esm2022/time-picker/lib/time-picker-column/time-picker-column.js.map +0 -1
- package/esm2022/time-picker/malva-ui-core-time-picker.js +0 -5
- package/esm2022/time-picker/malva-ui-core-time-picker.js.map +0 -1
- package/esm2022/timeline/index.js +0 -6
- package/esm2022/timeline/index.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline-item-icon.js +0 -31
- package/esm2022/timeline/lib/timeline/timeline-item-icon.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline-item-meta.js +0 -31
- package/esm2022/timeline/lib/timeline/timeline-item-meta.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline-item.js +0 -69
- package/esm2022/timeline/lib/timeline/timeline-item.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline.js +0 -36
- package/esm2022/timeline/lib/timeline/timeline.js.map +0 -1
- package/esm2022/timeline/lib/timeline/timeline.types.js +0 -1
- package/esm2022/timeline/lib/timeline/timeline.types.js.map +0 -1
- package/esm2022/timeline/malva-ui-core-timeline.js +0 -5
- package/esm2022/timeline/malva-ui-core-timeline.js.map +0 -1
- package/esm2022/title/index.js +0 -2
- package/esm2022/title/index.js.map +0 -1
- package/esm2022/title/lib/title/title.js +0 -171
- package/esm2022/title/lib/title/title.js.map +0 -1
- package/esm2022/title/malva-ui-core-title.js +0 -5
- package/esm2022/title/malva-ui-core-title.js.map +0 -1
- package/esm2022/toast/index.js +0 -13
- package/esm2022/toast/index.js.map +0 -1
- package/esm2022/toast/lib/abstract-toast-container.js +0 -50
- package/esm2022/toast/lib/abstract-toast-container.js.map +0 -1
- package/esm2022/toast/lib/abstract-toast-item.js +0 -75
- package/esm2022/toast/lib/abstract-toast-item.js.map +0 -1
- package/esm2022/toast/lib/abstract-toast.service.js +0 -176
- package/esm2022/toast/lib/abstract-toast.service.js.map +0 -1
- package/esm2022/toast/lib/toast-container/toast-container.js +0 -61
- package/esm2022/toast/lib/toast-container/toast-container.js.map +0 -1
- package/esm2022/toast/lib/toast-item/toast-item.js +0 -62
- package/esm2022/toast/lib/toast-item/toast-item.js.map +0 -1
- package/esm2022/toast/lib/toast-ref.js +0 -54
- package/esm2022/toast/lib/toast-ref.js.map +0 -1
- package/esm2022/toast/lib/toast-timer.js +0 -37
- package/esm2022/toast/lib/toast-timer.js.map +0 -1
- package/esm2022/toast/lib/toast.directives.js +0 -76
- package/esm2022/toast/lib/toast.directives.js.map +0 -1
- package/esm2022/toast/lib/toast.service.js +0 -127
- package/esm2022/toast/lib/toast.service.js.map +0 -1
- package/esm2022/toast/lib/toast.types.js +0 -39
- package/esm2022/toast/lib/toast.types.js.map +0 -1
- package/esm2022/toast/malva-ui-core-toast.js +0 -5
- package/esm2022/toast/malva-ui-core-toast.js.map +0 -1
- package/esm2022/tokenizer/index.js +0 -4
- package/esm2022/tokenizer/index.js.map +0 -1
- package/esm2022/tokenizer/lib/token/token.js +0 -123
- package/esm2022/tokenizer/lib/token/token.js.map +0 -1
- package/esm2022/tokenizer/lib/token-template.js +0 -23
- package/esm2022/tokenizer/lib/token-template.js.map +0 -1
- package/esm2022/tokenizer/lib/tokenizer/tokenizer.js +0 -324
- package/esm2022/tokenizer/lib/tokenizer/tokenizer.js.map +0 -1
- package/esm2022/tokenizer/malva-ui-core-tokenizer.js +0 -5
- package/esm2022/tokenizer/malva-ui-core-tokenizer.js.map +0 -1
- package/esm2022/toolbar/index.js +0 -4
- package/esm2022/toolbar/index.js.map +0 -1
- package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js +0 -13
- package/esm2022/toolbar/lib/toolbar/toolbar-spacer.js.map +0 -1
- package/esm2022/toolbar/lib/toolbar/toolbar-widget.js +0 -106
- package/esm2022/toolbar/lib/toolbar/toolbar-widget.js.map +0 -1
- package/esm2022/toolbar/lib/toolbar/toolbar.js +0 -19
- package/esm2022/toolbar/lib/toolbar/toolbar.js.map +0 -1
- package/esm2022/toolbar/malva-ui-core-toolbar.js +0 -5
- package/esm2022/toolbar/malva-ui-core-toolbar.js.map +0 -1
- package/esm2022/tooltip/index.js +0 -4
- package/esm2022/tooltip/index.js.map +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip-panel.js +0 -69
- package/esm2022/tooltip/lib/tooltip/tooltip-panel.js.map +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.js +0 -352
- package/esm2022/tooltip/lib/tooltip/tooltip.js.map +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.types.js +0 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.types.js.map +0 -1
- package/esm2022/tooltip/malva-ui-core-tooltip.js +0 -5
- package/esm2022/tooltip/malva-ui-core-tooltip.js.map +0 -1
- package/esm2022/tree/index.js +0 -5
- package/esm2022/tree/index.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-context.js +0 -7
- package/esm2022/tree/lib/tree/tree-context.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-node-def.js +0 -34
- package/esm2022/tree/lib/tree/tree-node-def.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-node.js +0 -1
- package/esm2022/tree/lib/tree/tree-node.js.map +0 -1
- package/esm2022/tree/lib/tree/tree-subtree.js +0 -107
- package/esm2022/tree/lib/tree/tree-subtree.js.map +0 -1
- package/esm2022/tree/lib/tree/tree.js +0 -362
- package/esm2022/tree/lib/tree/tree.js.map +0 -1
- package/esm2022/tree/malva-ui-core-tree.js +0 -5
- package/esm2022/tree/malva-ui-core-tree.js.map +0 -1
- package/expand/index.d.ts +0 -2
- package/expand/lib/expand/expand-content.d.ts +0 -26
- package/expand/lib/expand/expand.d.ts +0 -74
- package/expand/malva-ui-core-expand.d.ts +0 -5
- package/file-upload/index.d.ts +0 -4
- package/file-upload/lib/file-upload/file-upload.d.ts +0 -138
- package/file-upload/lib/file-upload/file-upload.types.d.ts +0 -42
- package/file-upload/lib/file-upload-action.d.ts +0 -53
- package/file-upload/lib/file-upload-item/file-upload-item.d.ts +0 -30
- package/file-upload/malva-ui-core-file-upload.d.ts +0 -5
- package/filter/index.d.ts +0 -3
- package/filter/lib/filter/filter.d.ts +0 -156
- package/filter/lib/filter.types.d.ts +0 -75
- package/filter/lib/smart-filter-bar/smart-filter-bar.d.ts +0 -153
- package/filter/malva-ui-core-filter.d.ts +0 -5
- package/form/index.d.ts +0 -6
- package/form/lib/fieldset/fieldset.d.ts +0 -58
- package/form/lib/fieldset-span.d.ts +0 -28
- package/form/lib/form/form.d.ts +0 -37
- package/form/lib/form-actions.d.ts +0 -20
- package/form/lib/form-gap.d.ts +0 -5
- package/form/lib/form-header.d.ts +0 -18
- package/form/lib/form.types.d.ts +0 -13
- package/form/malva-ui-core-form.d.ts +0 -5
- package/form-utils/index.d.ts +0 -15
- package/form-utils/lib/aria-value-bridge.d.ts +0 -45
- package/form-utils/lib/description/description.d.ts +0 -16
- package/form-utils/lib/focusable-group-base.d.ts +0 -76
- package/form-utils/lib/form-control-base/signal-form-control-base.d.ts +0 -159
- package/form-utils/lib/form-control-sides.d.ts +0 -20
- package/form-utils/lib/form-control-wrapper/form-control-wrapper-control.d.ts +0 -6
- package/form-utils/lib/form-control-wrapper/form-control-wrapper.d.ts +0 -20
- package/form-utils/lib/form-field/form-field.d.ts +0 -68
- package/form-utils/lib/hint/hint.d.ts +0 -5
- package/form-utils/lib/label/label.d.ts +0 -22
- package/form-utils/lib/message/message.d.ts +0 -7
- package/form-utils/lib/models/error-display-strategy.d.ts +0 -1
- package/form-utils/lib/models/form-control-connector.d.ts +0 -41
- package/form-utils/lib/models/form-state.d.ts +0 -1
- package/form-utils/lib/selection.service.d.ts +0 -27
- package/form-utils/malva-ui-core-form-utils.d.ts +0 -5
- package/form-utils/testing/index.d.ts +0 -1
- package/form-utils/testing/lib/forms-binding-matrix.d.ts +0 -47
- package/form-utils/testing/malva-ui-core-form-utils-testing.d.ts +0 -5
- package/index.d.ts +0 -69
- package/input/index.d.ts +0 -3
- package/input/lib/input/input-native.d.ts +0 -36
- package/input/lib/input/input-value-accessor.d.ts +0 -11
- package/input/lib/input/input.d.ts +0 -189
- package/input/lib/input/password-strength.d.ts +0 -34
- package/input/malva-ui-core-input.d.ts +0 -5
- package/kbd/index.d.ts +0 -1
- package/kbd/lib/kbd/kbd.d.ts +0 -52
- package/kbd/malva-ui-core-kbd.d.ts +0 -5
- package/layout/index.d.ts +0 -4
- package/layout/lib/layout/directives/MlvLayoutSide.d.ts +0 -6
- package/layout/lib/layout/directives/MlvLayoutTop.d.ts +0 -6
- package/layout/lib/layout/layout.d.ts +0 -20
- package/layout/lib/layout/services/theme.service.d.ts +0 -33
- package/layout/malva-ui-core-layout.d.ts +0 -5
- package/link/index.d.ts +0 -2
- package/link/lib/link/link.d.ts +0 -15
- package/link/lib/link/link.directives.d.ts +0 -10
- package/link/malva-ui-core-link.d.ts +0 -5
- package/list/index.d.ts +0 -13
- package/list/lib/list/list.d.ts +0 -25
- package/list/lib/list-item/list-item.d.ts +0 -67
- package/list/lib/list-item-actions.d.ts +0 -12
- package/list/lib/list-item-byline.d.ts +0 -5
- package/list/lib/list-item-group/list-item-group.d.ts +0 -11
- package/list/lib/list-item-link/list-item-link.d.ts +0 -8
- package/list/lib/list-item-media.d.ts +0 -5
- package/list/lib/list-item-meta.d.ts +0 -5
- package/list/lib/list-item-prefix.d.ts +0 -5
- package/list/lib/list-item-suffix.d.ts +0 -5
- package/list/lib/list-item-template.d.ts +0 -10
- package/list/lib/list-item-title.d.ts +0 -5
- package/list/lib/list-selectable.d.ts +0 -73
- package/list/malva-ui-core-list.d.ts +0 -5
- package/loader/index.d.ts +0 -1
- package/loader/lib/loader/loader.d.ts +0 -84
- package/loader/malva-ui-core-loader.d.ts +0 -5
- package/malva-ui-core.d.ts +0 -5
- package/menu/index.d.ts +0 -9
- package/menu/lib/menu/menu-group-label.d.ts +0 -22
- package/menu/lib/menu/menu-group.d.ts +0 -27
- package/menu/lib/menu/menu-item.d.ts +0 -76
- package/menu/lib/menu/menu-separator.d.ts +0 -18
- package/menu/lib/menu/menu-trigger.d.ts +0 -255
- package/menu/lib/menu/menu.d.ts +0 -149
- package/menu/lib/menu/menu.types.d.ts +0 -13
- package/menu/lib/menu/menubar.d.ts +0 -131
- package/menu/lib/menu/menubar.types.d.ts +0 -82
- package/menu/lib/menu/submenu-aim.d.ts +0 -10
- package/menu/malva-ui-core-menu.d.ts +0 -5
- package/notification/index.d.ts +0 -4
- package/notification/lib/notification-item/notification-item.d.ts +0 -20
- package/notification/lib/notification-ref.d.ts +0 -12
- package/notification/lib/notification.service.d.ts +0 -43
- package/notification/lib/notification.types.d.ts +0 -52
- package/notification/malva-ui-core-notification.d.ts +0 -5
- package/number-input/index.d.ts +0 -1
- package/number-input/lib/number-input/number-input.d.ts +0 -162
- package/number-input/malva-ui-core-number-input.d.ts +0 -5
- package/page/index.d.ts +0 -14
- package/page/lib/page/page-scroll.token.d.ts +0 -19
- package/page/lib/page/page-snap-controller.d.ts +0 -87
- package/page/lib/page/page-snap.directive.d.ts +0 -40
- package/page/lib/page/page.d.ts +0 -74
- package/page/lib/page-content/page-aside.d.ts +0 -7
- package/page/lib/page-content/page-content.d.ts +0 -37
- package/page/lib/page-dock/page-dock.d.ts +0 -50
- package/page/lib/page-dock/page-dock.slots.d.ts +0 -16
- package/page/lib/page-header/page-header.d.ts +0 -77
- package/page/lib/page-header/page-header.directives.d.ts +0 -50
- package/page/lib/page-shell/page-shell-color.d.ts +0 -48
- package/page/lib/page-shell/page-shell-css-color.d.ts +0 -20
- package/page/lib/page-shell/page-shell.d.ts +0 -44
- package/page/lib/page-shell/page-shell.slots.d.ts +0 -16
- package/page/lib/page-summary/page-summary-item.d.ts +0 -11
- package/page/lib/page-summary/page-summary.d.ts +0 -36
- package/page/malva-ui-core-page.d.ts +0 -5
- package/pagination/index.d.ts +0 -4
- package/pagination/lib/pagination/pagination.d.ts +0 -182
- package/pagination/lib/pagination/pagination.directives.d.ts +0 -44
- package/pagination/lib/pagination/pagination.model.d.ts +0 -6
- package/pagination/lib/pagination/pagination.service.d.ts +0 -26
- package/pagination/malva-ui-core-pagination.d.ts +0 -5
- package/pin-input/index.d.ts +0 -2
- package/pin-input/lib/pin-input/pin-input-separator.d.ts +0 -24
- package/pin-input/lib/pin-input/pin-input.d.ts +0 -176
- package/pin-input/malva-ui-core-pin-input.d.ts +0 -5
- package/popup/index.d.ts +0 -9
- package/popup/lib/popup/popup.d.ts +0 -343
- package/popup/lib/popup-container/popup-container.d.ts +0 -61
- package/popup/lib/popup-container/popup-container.token.d.ts +0 -34
- package/popup/lib/popup-content.d.ts +0 -6
- package/popup/lib/popup-header-content.d.ts +0 -18
- package/popup/lib/popup-pinned-content.d.ts +0 -17
- package/popup/lib/popup-positions.d.ts +0 -105
- package/popup/lib/popup-trigger/popup-trigger.d.ts +0 -102
- package/popup/lib/popup.service.d.ts +0 -159
- package/popup/malva-ui-core-popup.d.ts +0 -5
- package/progress/index.d.ts +0 -1
- package/progress/lib/progress/progress.d.ts +0 -69
- package/progress/malva-ui-core-progress.d.ts +0 -5
- package/radio/index.d.ts +0 -2
- package/radio/lib/radio/radio.d.ts +0 -87
- package/radio/lib/radio-group/radio-group.d.ts +0 -35
- package/radio/lib/radio-group-token.d.ts +0 -7
- package/radio/malva-ui-core-radio.d.ts +0 -5
- package/rating/index.d.ts +0 -1
- package/rating/lib/rating/rating.d.ts +0 -100
- package/rating/malva-ui-core-rating.d.ts +0 -5
- package/scrollbar/index.d.ts +0 -1
- package/scrollbar/lib/scrollbar/scrollbar.d.ts +0 -166
- package/scrollbar/malva-ui-core-scrollbar.d.ts +0 -5
- package/search-field/index.d.ts +0 -2
- package/search-field/lib/search-field/search-field.d.ts +0 -347
- package/search-field/lib/search-field/search-overlay-content.d.ts +0 -59
- package/search-field/malva-ui-core-search-field.d.ts +0 -5
- package/segmented/index.d.ts +0 -4
- package/segmented/lib/segmented/segmented.d.ts +0 -80
- package/segmented/lib/segmented-item/segmented-item.d.ts +0 -89
- package/segmented/lib/segmented-token.d.ts +0 -22
- package/segmented/lib/segmented.types.d.ts +0 -9
- package/segmented/malva-ui-core-segmented.d.ts +0 -5
- package/select/index.d.ts +0 -3
- package/select/lib/select/select.d.ts +0 -379
- package/select/lib/select-option.d.ts +0 -1
- package/select/lib/select-template.directives.d.ts +0 -14
- package/select/malva-ui-core-select.d.ts +0 -5
- package/sidebar/index.d.ts +0 -15
- package/sidebar/lib/sidebar/sidebar.d.ts +0 -134
- package/sidebar/lib/sidebar-content.d.ts +0 -11
- package/sidebar/lib/sidebar-context.d.ts +0 -23
- package/sidebar/lib/sidebar-footer.d.ts +0 -9
- package/sidebar/lib/sidebar-group/sidebar-group.d.ts +0 -127
- package/sidebar/lib/sidebar-header.d.ts +0 -9
- package/sidebar/lib/sidebar-item/sidebar-item.d.ts +0 -104
- package/sidebar/lib/sidebar-item-host.d.ts +0 -18
- package/sidebar/lib/sidebar-item-icon.d.ts +0 -6
- package/sidebar/lib/sidebar-mode.d.ts +0 -2
- package/sidebar/lib/sidebar-rail/sidebar-rail.d.ts +0 -54
- package/sidebar/lib/sidebar-trigger/sidebar-trigger.d.ts +0 -67
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.d.ts +0 -54
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.directives.d.ts +0 -19
- package/sidebar/lib/sidebar-workspace/sidebar-workspace.types.d.ts +0 -20
- package/sidebar/malva-ui-core-sidebar.d.ts +0 -5
- package/skeleton/index.d.ts +0 -1
- package/skeleton/lib/skeleton/skeleton.d.ts +0 -60
- package/skeleton/malva-ui-core-skeleton.d.ts +0 -5
- package/slider/index.d.ts +0 -2
- package/slider/lib/slider/slider-tooltip-def.d.ts +0 -39
- package/slider/lib/slider/slider.d.ts +0 -171
- package/slider/malva-ui-core-slider.d.ts +0 -5
- package/split-pane/index.d.ts +0 -3
- package/split-pane/lib/split-pane/split-pane-panel.d.ts +0 -34
- package/split-pane/lib/split-pane/split-pane.d.ts +0 -98
- package/split-pane/lib/split-pane/split-pane.types.d.ts +0 -7
- package/split-pane/malva-ui-core-split-pane.d.ts +0 -5
- package/status-indicator/index.d.ts +0 -1
- package/status-indicator/lib/status-indicator/status-indicator.d.ts +0 -61
- package/status-indicator/malva-ui-core-status-indicator.d.ts +0 -5
- package/stepper/index.d.ts +0 -4
- package/stepper/lib/stepper/step-header.d.ts +0 -34
- package/stepper/lib/stepper/step.d.ts +0 -51
- package/stepper/lib/stepper/stepper-token.d.ts +0 -13
- package/stepper/lib/stepper/stepper.d.ts +0 -98
- package/stepper/lib/stepper/stepper.types.d.ts +0 -4
- package/stepper/malva-ui-core-stepper.d.ts +0 -5
- package/switch/index.d.ts +0 -2
- package/switch/lib/switch/switch.d.ts +0 -118
- package/switch/lib/switch-group/switch-group.d.ts +0 -24
- package/switch/lib/switch-group-token.d.ts +0 -6
- package/switch/malva-ui-core-switch.d.ts +0 -5
- package/tabs/index.d.ts +0 -8
- package/tabs/lib/tab/tab.d.ts +0 -46
- package/tabs/lib/tab-content/tab-content.d.ts +0 -11
- package/tabs/lib/tab-content-def.d.ts +0 -6
- package/tabs/lib/tab-def.d.ts +0 -11
- package/tabs/lib/tab-group-token.d.ts +0 -10
- package/tabs/lib/tab-item/tab-item.d.ts +0 -28
- package/tabs/lib/tabs/tabs.d.ts +0 -202
- package/tabs/lib/tabs.service.d.ts +0 -24
- package/tabs/malva-ui-core-tabs.d.ts +0 -5
- package/textarea/index.d.ts +0 -1
- package/textarea/lib/textarea/textarea.d.ts +0 -77
- package/textarea/malva-ui-core-textarea.d.ts +0 -5
- package/tile/index.d.ts +0 -2
- package/tile/lib/tile/tile.d.ts +0 -20
- package/tile/lib/tile-header.d.ts +0 -6
- package/tile/malva-ui-core-tile.d.ts +0 -5
- package/time-picker/index.d.ts +0 -1
- package/time-picker/lib/time-picker/time-picker.d.ts +0 -135
- package/time-picker/lib/time-picker-column/time-picker-column.d.ts +0 -111
- package/time-picker/malva-ui-core-time-picker.d.ts +0 -5
- package/timeline/index.d.ts +0 -5
- package/timeline/lib/timeline/timeline-item-icon.d.ts +0 -24
- package/timeline/lib/timeline/timeline-item-meta.d.ts +0 -24
- package/timeline/lib/timeline/timeline-item.d.ts +0 -52
- package/timeline/lib/timeline/timeline.d.ts +0 -27
- package/timeline/lib/timeline/timeline.types.d.ts +0 -18
- package/timeline/malva-ui-core-timeline.d.ts +0 -5
- package/title/index.d.ts +0 -1
- package/title/lib/title/title.d.ts +0 -63
- package/title/malva-ui-core-title.d.ts +0 -5
- package/toast/index.d.ts +0 -10
- package/toast/lib/abstract-toast-container.d.ts +0 -29
- package/toast/lib/abstract-toast-item.d.ts +0 -44
- package/toast/lib/abstract-toast.service.d.ts +0 -75
- package/toast/lib/toast-container/toast-container.d.ts +0 -23
- package/toast/lib/toast-item/toast-item.d.ts +0 -25
- package/toast/lib/toast-ref.d.ts +0 -33
- package/toast/lib/toast-timer.d.ts +0 -24
- package/toast/lib/toast.directives.d.ts +0 -13
- package/toast/lib/toast.service.d.ts +0 -41
- package/toast/lib/toast.types.d.ts +0 -139
- package/toast/malva-ui-core-toast.d.ts +0 -5
- package/tokenizer/index.d.ts +0 -3
- package/tokenizer/lib/token/token.d.ts +0 -60
- package/tokenizer/lib/token-template.d.ts +0 -29
- package/tokenizer/lib/tokenizer/tokenizer.d.ts +0 -109
- package/tokenizer/malva-ui-core-tokenizer.d.ts +0 -5
- package/toolbar/index.d.ts +0 -3
- package/toolbar/lib/toolbar/toolbar-spacer.d.ts +0 -5
- package/toolbar/lib/toolbar/toolbar-widget.d.ts +0 -75
- package/toolbar/lib/toolbar/toolbar.d.ts +0 -8
- package/toolbar/malva-ui-core-toolbar.d.ts +0 -5
- package/tooltip/index.d.ts +0 -3
- package/tooltip/lib/tooltip/tooltip-panel.d.ts +0 -26
- package/tooltip/lib/tooltip/tooltip.d.ts +0 -148
- package/tooltip/lib/tooltip/tooltip.types.d.ts +0 -17
- package/tooltip/malva-ui-core-tooltip.d.ts +0 -5
- package/tree/index.d.ts +0 -4
- package/tree/lib/tree/tree-context.d.ts +0 -62
- package/tree/lib/tree/tree-node-def.d.ts +0 -33
- package/tree/lib/tree/tree-node.d.ts +0 -45
- package/tree/lib/tree/tree-subtree.d.ts +0 -63
- package/tree/lib/tree/tree.d.ts +0 -156
- package/tree/malva-ui-core-tree.d.ts +0 -5
|
@@ -0,0 +1,825 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, input, output, inject, signal, computed, ChangeDetectionStrategy, ViewEncapsulation, Component, Injectable, DestroyRef, TemplateRef, Directive, contentChild, contentChildren, viewChild, effect, afterRenderEffect } from '@angular/core';
|
|
3
|
+
import { NgTemplateOutlet, DatePipe, formatDate } from '@angular/common';
|
|
4
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
5
|
+
import { MlvResizeObserverService } from '@malva-ui/cdk/utils';
|
|
6
|
+
import * as i1 from '@malva-ui/cdk/density';
|
|
7
|
+
import { MLV_DENSITY_ELEMENT, MlvDensityDirective } from '@malva-ui/cdk/density';
|
|
8
|
+
import { MLV_CHAT_I18N, MlvTranslatePipe } from '@malva-ui/i18n';
|
|
9
|
+
import { MlvAvatar, MlvColorFromTextPipe } from '@malva-ui/core/avatar';
|
|
10
|
+
import { MlvLoader } from '@malva-ui/core/loader';
|
|
11
|
+
import { MlvSkeleton } from '@malva-ui/core/skeleton';
|
|
12
|
+
import { LucidePlay, LucidePause, LucideCheck, LucideCheckCheck, LucideCircleAlert, LucideClock, LucideCornerUpLeft, LucideMusic } from '@lucide/angular';
|
|
13
|
+
import { MlvProgress } from '@malva-ui/core/progress';
|
|
14
|
+
import { MlvButton } from '@malva-ui/core/button';
|
|
15
|
+
import { MlvSlider } from '@malva-ui/core/slider';
|
|
16
|
+
import { MlvScrollbar } from '@malva-ui/core/scrollbar';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Users map (id → user) provided by `mlv-chat` so bubbles can resolve author
|
|
20
|
+
* display names (reply quotes). Optional — standalone bubbles render without it.
|
|
21
|
+
*/
|
|
22
|
+
const MLV_CHAT_USERS = new InjectionToken('MLV_CHAT_USERS');
|
|
23
|
+
/** Custom message-type templates (type → def) provided by `mlv-chat`. */
|
|
24
|
+
const MLV_CHAT_MESSAGE_DEFS = new InjectionToken('MLV_CHAT_MESSAGE_DEFS');
|
|
25
|
+
|
|
26
|
+
/** Normalizes the {@link MlvChatMessageData.timestamp} union to a Date. */
|
|
27
|
+
function toChatDate(timestamp) {
|
|
28
|
+
return timestamp instanceof Date ? timestamp : new Date(timestamp);
|
|
29
|
+
}
|
|
30
|
+
/** True when both dates fall on the same calendar day (local time). */
|
|
31
|
+
function isSameChatDay(a, b) {
|
|
32
|
+
return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Flattens an oldest→newest message array into date separators + author groups.
|
|
36
|
+
* A group breaks on author change, on a gap larger than `groupWindowMinutes`,
|
|
37
|
+
* and always at a calendar-day boundary.
|
|
38
|
+
*
|
|
39
|
+
* @param messages Messages ordered oldest → newest.
|
|
40
|
+
* @param selfId Current user id; groups authored by it are flagged `own`.
|
|
41
|
+
* @param groupWindowMinutes Maximum gap between consecutive messages of one group.
|
|
42
|
+
* @param dateSeparators Whether `kind: 'date'` items are emitted at day boundaries.
|
|
43
|
+
*/
|
|
44
|
+
function buildChatRenderList(messages, selfId, groupWindowMinutes, dateSeparators) {
|
|
45
|
+
const items = [];
|
|
46
|
+
let pending = [];
|
|
47
|
+
let prevDate = null;
|
|
48
|
+
const flush = () => {
|
|
49
|
+
if (!pending.length)
|
|
50
|
+
return;
|
|
51
|
+
const rendered = pending.map((message, i) => ({
|
|
52
|
+
message,
|
|
53
|
+
position: pending.length === 1 ? 'single' : i === 0 ? 'first' : i === pending.length - 1 ? 'last' : 'middle',
|
|
54
|
+
}));
|
|
55
|
+
items.push({
|
|
56
|
+
kind: 'group',
|
|
57
|
+
id: `group-${pending[0].id}`,
|
|
58
|
+
authorId: pending[0].authorId,
|
|
59
|
+
own: pending[0].authorId === selfId,
|
|
60
|
+
messages: rendered,
|
|
61
|
+
});
|
|
62
|
+
pending = [];
|
|
63
|
+
};
|
|
64
|
+
for (const message of messages) {
|
|
65
|
+
const date = toChatDate(message.timestamp);
|
|
66
|
+
const dayBreak = prevDate === null || !isSameChatDay(prevDate, date);
|
|
67
|
+
const gapBreak = prevDate !== null && date.getTime() - prevDate.getTime() > groupWindowMinutes * 60_000;
|
|
68
|
+
const authorBreak = pending.length > 0 && pending[0].authorId !== message.authorId;
|
|
69
|
+
if (dayBreak || gapBreak || authorBreak)
|
|
70
|
+
flush();
|
|
71
|
+
if (dayBreak && dateSeparators) {
|
|
72
|
+
items.push({ kind: 'date', id: `date-${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`, date });
|
|
73
|
+
}
|
|
74
|
+
pending.push(message);
|
|
75
|
+
prevDate = date;
|
|
76
|
+
}
|
|
77
|
+
flush();
|
|
78
|
+
return items;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Formats a duration in seconds as `m:ss` (e.g. 75 → '1:15').
|
|
83
|
+
* Negative or non-finite input renders as '0:00'.
|
|
84
|
+
*/
|
|
85
|
+
function formatChatDuration(seconds) {
|
|
86
|
+
const total = Number.isFinite(seconds) && seconds > 0 ? Math.floor(seconds) : 0;
|
|
87
|
+
const minutes = Math.floor(total / 60);
|
|
88
|
+
const rest = total % 60;
|
|
89
|
+
return `${minutes}:${rest.toString().padStart(2, '0')}`;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Internal renderer for the image/gif/video attachments of a chat message.
|
|
94
|
+
* Not exported from the package barrel — `mlv-chat-message` owns it.
|
|
95
|
+
*/
|
|
96
|
+
class MlvChatMediaGrid {
|
|
97
|
+
/** Visual attachments to render; audio entries must be filtered out by the caller. */
|
|
98
|
+
attachments = input.required(/* @ts-ignore */
|
|
99
|
+
...(ngDevMode ? [{ debugName: "attachments" }] : /* istanbul ignore next */ []));
|
|
100
|
+
/** Condensed rendering inside a reply quote: a single small thumbnail. */
|
|
101
|
+
quote = input(false, { ...(ngDevMode ? { debugName: "quote" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
102
|
+
/** Emits the attachment whose cell was activated. */
|
|
103
|
+
mediaClick = output();
|
|
104
|
+
/** @internal Chat i18n strings. */
|
|
105
|
+
_i18n = inject(MLV_CHAT_I18N);
|
|
106
|
+
/** @internal Ids of images whose load event fired, so their skeleton is removed. */
|
|
107
|
+
_loaded = signal(new Set(), /* @ts-ignore */
|
|
108
|
+
...(ngDevMode ? [{ debugName: "_loaded" }] : /* istanbul ignore next */ []));
|
|
109
|
+
/** @internal Cells rendered to the DOM: one in quote mode, otherwise the first four. */
|
|
110
|
+
_visible = computed(() => this.attachments().slice(0, this.quote() ? 1 : 4), /* @ts-ignore */
|
|
111
|
+
...(ngDevMode ? [{ debugName: "_visible" }] : /* istanbul ignore next */ []));
|
|
112
|
+
/** @internal Count of attachments hidden behind the +N overlay. */
|
|
113
|
+
_extra = computed(() => this.quote() ? 0 : Math.max(0, this.attachments().length - 4), /* @ts-ignore */
|
|
114
|
+
...(ngDevMode ? [{ debugName: "_extra" }] : /* istanbul ignore next */ []));
|
|
115
|
+
/** @internal Formats a duration in seconds as `m:ss` for the video chip. */
|
|
116
|
+
_formatDuration = formatChatDuration;
|
|
117
|
+
/** @internal True while an attachment carries upload progress, so the overlay shows. */
|
|
118
|
+
_isUploading(attachment) {
|
|
119
|
+
return attachment.uploadProgress !== undefined && attachment.uploadProgress !== null;
|
|
120
|
+
}
|
|
121
|
+
/** @internal Marks an image as loaded so its skeleton placeholder is removed. */
|
|
122
|
+
_onLoad(id) {
|
|
123
|
+
this._loaded.update((set) => new Set(set).add(id));
|
|
124
|
+
}
|
|
125
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatMediaGrid, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
126
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvChatMediaGrid, isStandalone: true, selector: "mlv-chat-media-grid", inputs: { attachments: { classPropertyName: "attachments", publicName: "attachments", isSignal: true, isRequired: true, transformFunction: null }, quote: { classPropertyName: "quote", publicName: "quote", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mediaClick: "mediaClick" }, host: { properties: { "class.mlv-chat-media-grid--single": "_visible().length === 1", "class.mlv-chat-media-grid--quote": "quote()" }, classAttribute: "mlv-chat-media-grid" }, ngImport: i0, template: "@for (att of _visible(); track att.id; let last = $last) {\n <button\n type=\"button\"\n class=\"mlv-chat-media-grid__cell\"\n [class.mlv-chat-media-grid__cell--uploading]=\"_isUploading(att)\"\n [style.aspect-ratio]=\"att.width && att.height ? att.width + ' / ' + att.height : null\"\n [attr.aria-label]=\"\n last && _extra() > 0\n ? (_i18n().moreMedia | mlvTranslate: { count: _extra() })\n : (att.alt ?? _i18n().imageFallbackAlt)\n \"\n (click)=\"mediaClick.emit(att)\"\n >\n @switch (att.kind) {\n @case ('gif') {\n <video [src]=\"att.src\" [autoplay]=\"true\" [muted]=\"true\" [loop]=\"true\" playsinline></video>\n }\n @case ('video') {\n @if (att.poster) {\n <img [src]=\"att.poster\" [alt]=\"att.alt ?? ''\" loading=\"lazy\" />\n } @else {\n <video [src]=\"att.src\" preload=\"metadata\" [muted]=\"true\" playsinline></video>\n }\n <span class=\"mlv-chat-media-grid__play\">\n <svg lucidePlay [size]=\"20\" aria-hidden=\"true\" />\n </span>\n @if (att.duration) {\n <span class=\"mlv-chat-media-grid__duration\">{{ _formatDuration(att.duration) }}</span>\n }\n }\n @default {\n @if (!_loaded().has(att.id)) {\n <mlv-skeleton class=\"mlv-chat-media-grid__placeholder\" width=\"100%\" height=\"100%\" />\n }\n <img [src]=\"att.src\" [alt]=\"att.alt ?? ''\" loading=\"lazy\" (load)=\"_onLoad(att.id)\" />\n }\n }\n @if (_isUploading(att)) {\n <span class=\"mlv-chat-media-grid__upload\">\n <mlv-progress shape=\"circle\" size=\"s\" [value]=\"att.uploadProgress ?? 0\" />\n </span>\n }\n @if (last && _extra() > 0) {\n <span class=\"mlv-chat-media-grid__more\" aria-hidden=\"true\">+{{ _extra() }}</span>\n }\n </button>\n}\n", styles: ["@layer mlv.components{.mlv-chat-media-grid{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-s-size)}.mlv-chat-media-grid *{box-sizing:border-box}.mlv-chat-media-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.125rem;max-width:20rem;border-radius:var(--mlv-radius-m);overflow:hidden}.mlv-chat-media-grid--single{grid-template-columns:1fr}.mlv-chat-media-grid--quote{max-width:2.5rem;gap:0}.mlv-chat-media-grid__cell{position:relative;display:block;padding:0;border:none;background:none;cursor:pointer;min-height:4rem;overflow:hidden}.mlv-chat-media-grid__cell img,.mlv-chat-media-grid__cell video{display:block;width:100%;height:100%;object-fit:cover}.mlv-chat-media-grid__cell:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-chat-media-grid__cell--uploading img,.mlv-chat-media-grid__cell--uploading video{opacity:var(--mlv-disabled-opacity)}.mlv-chat-media-grid--quote .mlv-chat-media-grid__cell{width:2.5rem;height:2.5rem;min-height:0}.mlv-chat-media-grid__placeholder{position:absolute;inset:0}.mlv-chat-media-grid__play,.mlv-chat-media-grid__upload{position:absolute;inset-block-start:50%;inset-inline-start:50%;transform:translate(-50%,-50%);display:inline-flex;align-items:center;justify-content:center}.mlv-chat-media-grid__play{inline-size:2.5rem;block-size:2.5rem;border-radius:var(--mlv-radius-full);background-color:var(--mlv-background-overlay);color:var(--mlv-text-inverse)}.mlv-chat-media-grid__duration{position:absolute;inset-block-end:.25rem;inset-inline-end:.25rem;padding:.0625rem .25rem;border-radius:var(--mlv-radius-badge);background-color:var(--mlv-background-overlay);color:var(--mlv-text-inverse)}.mlv-chat-media-grid__more{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-color:var(--mlv-background-overlay);color:var(--mlv-text-inverse);font-size:var(--mlv-typography-body-l-size)}}\n"], dependencies: [{ kind: "component", type: LucidePlay, selector: "svg[lucidePlay]" }, { kind: "component", type: MlvProgress, selector: "mlv-progress", inputs: ["shape", "value", "size", "tone", "showPercentage", "ariaLabel"] }, { kind: "component", type: MlvSkeleton, selector: "mlv-skeleton", inputs: ["variant", "width", "height", "animated", "animationDuration"] }, { kind: "pipe", type: MlvTranslatePipe, name: "mlvTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
127
|
+
}
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatMediaGrid, decorators: [{
|
|
129
|
+
type: Component,
|
|
130
|
+
args: [{ selector: 'mlv-chat-media-grid', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LucidePlay, MlvProgress, MlvSkeleton, MlvTranslatePipe], host: {
|
|
131
|
+
class: 'mlv-chat-media-grid',
|
|
132
|
+
'[class.mlv-chat-media-grid--single]': '_visible().length === 1',
|
|
133
|
+
'[class.mlv-chat-media-grid--quote]': 'quote()',
|
|
134
|
+
}, template: "@for (att of _visible(); track att.id; let last = $last) {\n <button\n type=\"button\"\n class=\"mlv-chat-media-grid__cell\"\n [class.mlv-chat-media-grid__cell--uploading]=\"_isUploading(att)\"\n [style.aspect-ratio]=\"att.width && att.height ? att.width + ' / ' + att.height : null\"\n [attr.aria-label]=\"\n last && _extra() > 0\n ? (_i18n().moreMedia | mlvTranslate: { count: _extra() })\n : (att.alt ?? _i18n().imageFallbackAlt)\n \"\n (click)=\"mediaClick.emit(att)\"\n >\n @switch (att.kind) {\n @case ('gif') {\n <video [src]=\"att.src\" [autoplay]=\"true\" [muted]=\"true\" [loop]=\"true\" playsinline></video>\n }\n @case ('video') {\n @if (att.poster) {\n <img [src]=\"att.poster\" [alt]=\"att.alt ?? ''\" loading=\"lazy\" />\n } @else {\n <video [src]=\"att.src\" preload=\"metadata\" [muted]=\"true\" playsinline></video>\n }\n <span class=\"mlv-chat-media-grid__play\">\n <svg lucidePlay [size]=\"20\" aria-hidden=\"true\" />\n </span>\n @if (att.duration) {\n <span class=\"mlv-chat-media-grid__duration\">{{ _formatDuration(att.duration) }}</span>\n }\n }\n @default {\n @if (!_loaded().has(att.id)) {\n <mlv-skeleton class=\"mlv-chat-media-grid__placeholder\" width=\"100%\" height=\"100%\" />\n }\n <img [src]=\"att.src\" [alt]=\"att.alt ?? ''\" loading=\"lazy\" (load)=\"_onLoad(att.id)\" />\n }\n }\n @if (_isUploading(att)) {\n <span class=\"mlv-chat-media-grid__upload\">\n <mlv-progress shape=\"circle\" size=\"s\" [value]=\"att.uploadProgress ?? 0\" />\n </span>\n }\n @if (last && _extra() > 0) {\n <span class=\"mlv-chat-media-grid__more\" aria-hidden=\"true\">+{{ _extra() }}</span>\n }\n </button>\n}\n", styles: ["@layer mlv.components{.mlv-chat-media-grid{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-s-size)}.mlv-chat-media-grid *{box-sizing:border-box}.mlv-chat-media-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.125rem;max-width:20rem;border-radius:var(--mlv-radius-m);overflow:hidden}.mlv-chat-media-grid--single{grid-template-columns:1fr}.mlv-chat-media-grid--quote{max-width:2.5rem;gap:0}.mlv-chat-media-grid__cell{position:relative;display:block;padding:0;border:none;background:none;cursor:pointer;min-height:4rem;overflow:hidden}.mlv-chat-media-grid__cell img,.mlv-chat-media-grid__cell video{display:block;width:100%;height:100%;object-fit:cover}.mlv-chat-media-grid__cell:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:calc(var(--mlv-focus-ring-offset) * -1)}.mlv-chat-media-grid__cell--uploading img,.mlv-chat-media-grid__cell--uploading video{opacity:var(--mlv-disabled-opacity)}.mlv-chat-media-grid--quote .mlv-chat-media-grid__cell{width:2.5rem;height:2.5rem;min-height:0}.mlv-chat-media-grid__placeholder{position:absolute;inset:0}.mlv-chat-media-grid__play,.mlv-chat-media-grid__upload{position:absolute;inset-block-start:50%;inset-inline-start:50%;transform:translate(-50%,-50%);display:inline-flex;align-items:center;justify-content:center}.mlv-chat-media-grid__play{inline-size:2.5rem;block-size:2.5rem;border-radius:var(--mlv-radius-full);background-color:var(--mlv-background-overlay);color:var(--mlv-text-inverse)}.mlv-chat-media-grid__duration{position:absolute;inset-block-end:.25rem;inset-inline-end:.25rem;padding:.0625rem .25rem;border-radius:var(--mlv-radius-badge);background-color:var(--mlv-background-overlay);color:var(--mlv-text-inverse)}.mlv-chat-media-grid__more{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-color:var(--mlv-background-overlay);color:var(--mlv-text-inverse);font-size:var(--mlv-typography-body-l-size)}}\n"] }]
|
|
135
|
+
}], propDecorators: { attachments: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachments", required: true }] }], quote: [{ type: i0.Input, args: [{ isSignal: true, alias: "quote", required: false }] }], mediaClick: [{ type: i0.Output, args: ["mediaClick"] }] } });
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Coordinates one-at-a-time playback across the audio bubbles of a single
|
|
139
|
+
* `mlv-chat`. Provided by the container, never `providedIn: 'root'` — two
|
|
140
|
+
* chats on one page keep independent playback.
|
|
141
|
+
*/
|
|
142
|
+
class MlvChatAudioService {
|
|
143
|
+
/** @private The player currently allowed to play. */
|
|
144
|
+
_current = null;
|
|
145
|
+
/** Registers `player` as the active one, pausing the previously active player. */
|
|
146
|
+
requestPlay(player) {
|
|
147
|
+
if (this._current && this._current !== player)
|
|
148
|
+
this._current.pause();
|
|
149
|
+
this._current = player;
|
|
150
|
+
}
|
|
151
|
+
/** Clears the active slot when a player pauses or ends on its own. */
|
|
152
|
+
release(player) {
|
|
153
|
+
if (this._current === player)
|
|
154
|
+
this._current = null;
|
|
155
|
+
}
|
|
156
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatAudioService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
157
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatAudioService });
|
|
158
|
+
}
|
|
159
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatAudioService, decorators: [{
|
|
160
|
+
type: Injectable
|
|
161
|
+
}] });
|
|
162
|
+
|
|
163
|
+
/** Creates the `HTMLAudioElement` a player drives; overridable in tests. */
|
|
164
|
+
const MLV_CHAT_AUDIO_FACTORY = new InjectionToken('MLV_CHAT_AUDIO_FACTORY', { providedIn: 'root', factory: () => (src) => new Audio(src) });
|
|
165
|
+
/**
|
|
166
|
+
* Internal player for an audio attachment: play/pause, a seek slider, and the
|
|
167
|
+
* elapsed/total time. Playback is exclusive per `mlv-chat` when the container
|
|
168
|
+
* provides {@link MlvChatAudioService}.
|
|
169
|
+
*/
|
|
170
|
+
class MlvChatAudio {
|
|
171
|
+
/** The audio attachment to play. */
|
|
172
|
+
attachment = input.required(/* @ts-ignore */
|
|
173
|
+
...(ngDevMode ? [{ debugName: "attachment" }] : /* istanbul ignore next */ []));
|
|
174
|
+
/** @internal Chat i18n strings. */
|
|
175
|
+
_i18n = inject(MLV_CHAT_I18N);
|
|
176
|
+
/** @private Creates the underlying audio element on first playback. */
|
|
177
|
+
_audioFactory = inject(MLV_CHAT_AUDIO_FACTORY);
|
|
178
|
+
/** @private Container-scoped playback coordinator; null for a standalone player. */
|
|
179
|
+
_playback = inject(MlvChatAudioService, { optional: true });
|
|
180
|
+
/** @private Lazily created audio element; null until the first play. */
|
|
181
|
+
_audio = null;
|
|
182
|
+
/** @internal True while the element is playing. */
|
|
183
|
+
_playing = signal(false, /* @ts-ignore */
|
|
184
|
+
...(ngDevMode ? [{ debugName: "_playing" }] : /* istanbul ignore next */ []));
|
|
185
|
+
/** @internal Playback position in seconds. */
|
|
186
|
+
_currentTime = signal(0, /* @ts-ignore */
|
|
187
|
+
...(ngDevMode ? [{ debugName: "_currentTime" }] : /* istanbul ignore next */ []));
|
|
188
|
+
/** @private Duration reported by the element once metadata has loaded. */
|
|
189
|
+
_metadataDuration = signal(null, /* @ts-ignore */
|
|
190
|
+
...(ngDevMode ? [{ debugName: "_metadataDuration" }] : /* istanbul ignore next */ []));
|
|
191
|
+
/** @internal Total duration: element metadata wins over the declared value. */
|
|
192
|
+
_duration = computed(() => this._metadataDuration() ?? this.attachment().duration ?? 0, /* @ts-ignore */
|
|
193
|
+
...(ngDevMode ? [{ debugName: "_duration" }] : /* istanbul ignore next */ []));
|
|
194
|
+
/** @internal True while the attachment is still uploading; playback is blocked. */
|
|
195
|
+
_uploading = computed(() => {
|
|
196
|
+
const progress = this.attachment().uploadProgress;
|
|
197
|
+
return progress !== undefined && progress !== null;
|
|
198
|
+
}, /* @ts-ignore */
|
|
199
|
+
...(ngDevMode ? [{ debugName: "_uploading" }] : /* istanbul ignore next */ []));
|
|
200
|
+
/** @internal Formats seconds as `m:ss` for the elapsed/total readout. */
|
|
201
|
+
_formatDuration = formatChatDuration;
|
|
202
|
+
constructor() {
|
|
203
|
+
inject(DestroyRef).onDestroy(() => {
|
|
204
|
+
this._audio?.pause();
|
|
205
|
+
this._playback?.release(this);
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/** Pauses playback. Called by the container coordinator when another player starts. */
|
|
209
|
+
pause() {
|
|
210
|
+
this._audio?.pause();
|
|
211
|
+
this._playing.set(false);
|
|
212
|
+
}
|
|
213
|
+
/** @internal Toggles between play and pause. */
|
|
214
|
+
_toggle() {
|
|
215
|
+
if (this._playing()) {
|
|
216
|
+
this.pause();
|
|
217
|
+
this._playback?.release(this);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const audio = this._ensureAudio();
|
|
221
|
+
this._playback?.requestPlay(this);
|
|
222
|
+
void audio.play();
|
|
223
|
+
this._playing.set(true);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* @internal Seeks to the given position in seconds. The slider emits the shared
|
|
227
|
+
* `MlvSliderValue` union; only the scalar form is used here (no range thumbs).
|
|
228
|
+
*/
|
|
229
|
+
_seek(value) {
|
|
230
|
+
const seconds = Array.isArray(value) ? value[0] : value;
|
|
231
|
+
this._currentTime.set(seconds);
|
|
232
|
+
if (this._audio)
|
|
233
|
+
this._audio.currentTime = seconds;
|
|
234
|
+
}
|
|
235
|
+
/** @private Creates the audio element and wires its listeners on first use. */
|
|
236
|
+
_ensureAudio() {
|
|
237
|
+
if (this._audio)
|
|
238
|
+
return this._audio;
|
|
239
|
+
const audio = this._audioFactory(this.attachment().src);
|
|
240
|
+
audio.addEventListener('timeupdate', () => this._currentTime.set(audio.currentTime));
|
|
241
|
+
audio.addEventListener('loadedmetadata', () => {
|
|
242
|
+
if (Number.isFinite(audio.duration))
|
|
243
|
+
this._metadataDuration.set(audio.duration);
|
|
244
|
+
});
|
|
245
|
+
audio.addEventListener('ended', () => {
|
|
246
|
+
this._playing.set(false);
|
|
247
|
+
this._currentTime.set(0);
|
|
248
|
+
this._playback?.release(this);
|
|
249
|
+
});
|
|
250
|
+
this._audio = audio;
|
|
251
|
+
return audio;
|
|
252
|
+
}
|
|
253
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatAudio, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
254
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvChatAudio, isStandalone: true, selector: "mlv-chat-audio", inputs: { attachment: { classPropertyName: "attachment", publicName: "attachment", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.mlv-chat-audio--uploading": "_uploading()" }, classAttribute: "mlv-chat-audio" }, ngImport: i0, template: "<button\n mlvButton\n type=\"button\"\n class=\"mlv-chat-audio__toggle\"\n shape=\"circle\"\n [disabled]=\"_uploading()\"\n [attr.aria-label]=\"_playing() ? _i18n().pauseAudio : _i18n().playAudio\"\n (click)=\"_toggle()\"\n>\n @if (_playing()) {\n <svg lucidePause [size]=\"16\" aria-hidden=\"true\" />\n } @else {\n <svg lucidePlay [size]=\"16\" aria-hidden=\"true\" />\n }\n</button>\n@if (_uploading()) {\n<span class=\"mlv-chat-audio__upload\">\n <mlv-progress size=\"s\" [value]=\"attachment().uploadProgress ?? 0\" />\n</span>\n} @else {\n<mlv-slider\n class=\"mlv-chat-audio__seek\"\n [min]=\"0\"\n [max]=\"_duration()\"\n [value]=\"_currentTime()\"\n [label]=\"_i18n().playAudio\"\n (valueChange)=\"_seek($event)\"\n/>\n}\n<span class=\"mlv-chat-audio__time\">\n {{ _formatDuration(_currentTime()) }} / {{ _formatDuration(_duration()) }}\n</span>\n", styles: ["@layer mlv.components{.mlv-chat-audio{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-s-size)}.mlv-chat-audio *{box-sizing:border-box}.mlv-chat-audio{display:flex;align-items:center;gap:.5rem;min-inline-size:12rem}.mlv-chat-audio__seek,.mlv-chat-audio__upload{flex:1;min-inline-size:4rem}.mlv-chat-audio__time{font-variant-numeric:tabular-nums;white-space:nowrap;opacity:.7}}\n"], dependencies: [{ kind: "component", type: LucidePause, selector: "svg[lucidePause]" }, { kind: "component", type: LucidePlay, selector: "svg[lucidePlay]" }, { kind: "component", type: MlvButton, selector: "button[mlvButton], a[mlvButton]", inputs: ["variant", "shape", "disabled", "loading", "selected"] }, { kind: "component", type: MlvProgress, selector: "mlv-progress", inputs: ["shape", "value", "size", "tone", "showPercentage", "ariaLabel"] }, { kind: "component", type: MlvSlider, selector: "mlv-slider", inputs: ["orientation", "min", "max", "step", "showTicks", "range", "tooltip", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
255
|
+
}
|
|
256
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatAudio, decorators: [{
|
|
257
|
+
type: Component,
|
|
258
|
+
args: [{ selector: 'mlv-chat-audio', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LucidePause, LucidePlay, MlvButton, MlvProgress, MlvSlider], host: {
|
|
259
|
+
class: 'mlv-chat-audio',
|
|
260
|
+
'[class.mlv-chat-audio--uploading]': '_uploading()',
|
|
261
|
+
}, template: "<button\n mlvButton\n type=\"button\"\n class=\"mlv-chat-audio__toggle\"\n shape=\"circle\"\n [disabled]=\"_uploading()\"\n [attr.aria-label]=\"_playing() ? _i18n().pauseAudio : _i18n().playAudio\"\n (click)=\"_toggle()\"\n>\n @if (_playing()) {\n <svg lucidePause [size]=\"16\" aria-hidden=\"true\" />\n } @else {\n <svg lucidePlay [size]=\"16\" aria-hidden=\"true\" />\n }\n</button>\n@if (_uploading()) {\n<span class=\"mlv-chat-audio__upload\">\n <mlv-progress size=\"s\" [value]=\"attachment().uploadProgress ?? 0\" />\n</span>\n} @else {\n<mlv-slider\n class=\"mlv-chat-audio__seek\"\n [min]=\"0\"\n [max]=\"_duration()\"\n [value]=\"_currentTime()\"\n [label]=\"_i18n().playAudio\"\n (valueChange)=\"_seek($event)\"\n/>\n}\n<span class=\"mlv-chat-audio__time\">\n {{ _formatDuration(_currentTime()) }} / {{ _formatDuration(_duration()) }}\n</span>\n", styles: ["@layer mlv.components{.mlv-chat-audio{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-s-size)}.mlv-chat-audio *{box-sizing:border-box}.mlv-chat-audio{display:flex;align-items:center;gap:.5rem;min-inline-size:12rem}.mlv-chat-audio__seek,.mlv-chat-audio__upload{flex:1;min-inline-size:4rem}.mlv-chat-audio__time{font-variant-numeric:tabular-nums;white-space:nowrap;opacity:.7}}\n"] }]
|
|
262
|
+
}], ctorParameters: () => [], propDecorators: { attachment: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachment", required: true }] }] } });
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* A single chat bubble. Normally rendered internally by `mlv-chat`, but usable
|
|
266
|
+
* standalone. Renders text, reply quotes, delivery status ticks, and the meta
|
|
267
|
+
* row; media/audio attachments are rendered by internal sub-components.
|
|
268
|
+
*/
|
|
269
|
+
class MlvChatMessage {
|
|
270
|
+
/** The message to render. */
|
|
271
|
+
message = input.required(/* @ts-ignore */
|
|
272
|
+
...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
|
|
273
|
+
/** True when authored by the current user (right-aligned, accent bubble, status ticks). */
|
|
274
|
+
own = input(false, { ...(ngDevMode ? { debugName: "own" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
275
|
+
/** Position inside the consecutive-author group; drives corner-tail radii. */
|
|
276
|
+
groupPosition = input('single', /* @ts-ignore */
|
|
277
|
+
...(ngDevMode ? [{ debugName: "groupPosition" }] : /* istanbul ignore next */ []));
|
|
278
|
+
/** Condensed quote rendering (inside a reply block): clamped text, no meta row. */
|
|
279
|
+
quote = input(false, { ...(ngDevMode ? { debugName: "quote" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
280
|
+
/** Emits when the retry button of a failed own message is activated. */
|
|
281
|
+
retry = output();
|
|
282
|
+
/** Emits the clicked media attachment (image/video cell). */
|
|
283
|
+
mediaClick = output();
|
|
284
|
+
/** Emits the embedded replied-to message when the quote block is activated. */
|
|
285
|
+
replyClick = output();
|
|
286
|
+
/** @internal Chat i18n strings. */
|
|
287
|
+
_i18n = inject(MLV_CHAT_I18N);
|
|
288
|
+
/** @private Users map provided by the surrounding `mlv-chat`; null when standalone. */
|
|
289
|
+
_users = inject(MLV_CHAT_USERS, { optional: true });
|
|
290
|
+
/** @internal Custom message-type templates provided by the surrounding `mlv-chat`. */
|
|
291
|
+
_defs = inject(MLV_CHAT_MESSAGE_DEFS, { optional: true });
|
|
292
|
+
/** @internal Normalized timestamp for the DatePipe. */
|
|
293
|
+
_date = computed(() => toChatDate(this.message().timestamp), /* @ts-ignore */
|
|
294
|
+
...(ngDevMode ? [{ debugName: "_date" }] : /* istanbul ignore next */ []));
|
|
295
|
+
/** @internal Image/gif/video attachments, rendered by the media grid. */
|
|
296
|
+
_mediaAttachments = computed(() => (this.message().attachments ?? []).filter((a) => a.kind !== 'audio'), /* @ts-ignore */
|
|
297
|
+
...(ngDevMode ? [{ debugName: "_mediaAttachments" }] : /* istanbul ignore next */ []));
|
|
298
|
+
/** @internal Audio attachments, each rendered by its own player. */
|
|
299
|
+
_audioAttachments = computed(() => (this.message().attachments ?? []).filter((a) => a.kind === 'audio'), /* @ts-ignore */
|
|
300
|
+
...(ngDevMode ? [{ debugName: "_audioAttachments" }] : /* istanbul ignore next */ []));
|
|
301
|
+
/** @internal Formats seconds as `m:ss` for the condensed audio chip in quote mode. */
|
|
302
|
+
_formatDuration = formatChatDuration;
|
|
303
|
+
/** @internal Template for this message's custom type, if registered. */
|
|
304
|
+
_typeTemplate = computed(() => {
|
|
305
|
+
const type = this.message().type;
|
|
306
|
+
return type ? (this._defs?.().get(type)?.templateRef ?? null) : null;
|
|
307
|
+
}, /* @ts-ignore */
|
|
308
|
+
...(ngDevMode ? [{ debugName: "_typeTemplate" }] : /* istanbul ignore next */ []));
|
|
309
|
+
/** @internal Resolves an author display name from the container-provided users map. */
|
|
310
|
+
_userName(id) {
|
|
311
|
+
return this._users?.().get(id)?.name ?? '';
|
|
312
|
+
}
|
|
313
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatMessage, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
314
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvChatMessage, isStandalone: true, selector: "mlv-chat-message", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, own: { classPropertyName: "own", publicName: "own", isSignal: true, isRequired: false, transformFunction: null }, groupPosition: { classPropertyName: "groupPosition", publicName: "groupPosition", isSignal: true, isRequired: false, transformFunction: null }, quote: { classPropertyName: "quote", publicName: "quote", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { retry: "retry", mediaClick: "mediaClick", replyClick: "replyClick" }, host: { properties: { "class.mlv-chat-message--own": "own()", "class.mlv-chat-message--other": "!own()", "class": "\"mlv-chat-message--pos-\" + groupPosition()", "class.mlv-chat-message--failed": "message().status === \"failed\"", "class.mlv-chat-message--quote": "quote()" }, classAttribute: "mlv-chat-message" }, ngImport: i0, template: "@if (_typeTemplate(); as tpl) {\n<ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: message(),\n isOwn: own(),\n groupPosition: groupPosition(),\n quote: quote(),\n }\"\n/>\n} @else { @if (quote()) {\n<span class=\"mlv-chat-message__quote-author\"\n >{{ _userName(message().authorId) }}</span\n>\n@if (message().replyTo) {\n<svg\n class=\"mlv-chat-message__reply-marker\"\n lucideCornerUpLeft\n [size]=\"12\"\n aria-hidden=\"true\"\n/>\n} } @else if (message().replyTo; as reply) {\n<button\n type=\"button\"\n class=\"mlv-chat-message__reply\"\n (click)=\"replyClick.emit(reply)\"\n>\n <mlv-chat-message [message]=\"reply\" quote />\n</button>\n} @if (_mediaAttachments().length) {\n<mlv-chat-media-grid\n [attachments]=\"_mediaAttachments()\"\n [quote]=\"quote()\"\n (mediaClick)=\"mediaClick.emit($event)\"\n/>\n} @if (quote()) { @if (_audioAttachments()[0]; as audio) {\n<span class=\"mlv-chat-message__quote-audio\">\n <svg lucideMusic [size]=\"12\" aria-hidden=\"true\" />\n {{ _formatDuration(audio.duration ?? 0) }}\n</span>\n} } @else { @for (audio of _audioAttachments(); track audio.id) {\n<mlv-chat-audio [attachment]=\"audio\" />\n} } @if (message().text; as text) {\n<span class=\"mlv-chat-message__text\">{{ text }}</span>\n} } @if (!quote()) {\n<span class=\"mlv-chat-message__meta\">\n @if (own() && message().status === 'failed') {\n <button type=\"button\" class=\"mlv-chat-message__retry\" (click)=\"retry.emit()\">\n <svg lucideCircleAlert [size]=\"14\" aria-hidden=\"true\" />\n {{ _i18n().retry }}\n </button>\n }\n <time class=\"mlv-chat-message__time\" [attr.datetime]=\"_date().toISOString()\">\n {{ _date() | date: 'shortTime' }}\n </time>\n @if (own() && message().status; as status) { @switch (status) { @case\n ('sending') {\n <svg\n class=\"mlv-chat-message__status mlv-chat-message__status--sending\"\n lucideClock\n [size]=\"14\"\n aria-hidden=\"true\"\n />\n } @case ('sent') {\n <svg\n class=\"mlv-chat-message__status mlv-chat-message__status--sent\"\n lucideCheck\n [size]=\"14\"\n aria-hidden=\"true\"\n />\n } @case ('delivered') {\n <svg\n class=\"mlv-chat-message__status mlv-chat-message__status--delivered\"\n lucideCheckCheck\n [size]=\"14\"\n aria-hidden=\"true\"\n />\n } @case ('read') {\n <svg\n class=\"mlv-chat-message__status mlv-chat-message__status--read\"\n lucideCheckCheck\n [size]=\"14\"\n aria-hidden=\"true\"\n />\n } } }\n</span>\n}\n", styles: ["@charset \"UTF-8\";@layer mlv.components{.mlv-chat-message{box-sizing:border-box;padding:.5rem .75rem;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-m-size)}.mlv-chat-message *{box-sizing:border-box}.mlv-chat-message{--mlv-chat-message-bg: var(--mlv-background-neutral-1);--mlv-chat-message-color: var(--mlv-text-primary);--mlv-chat-message-radius: var(--mlv-radius-l);--mlv-chat-message-tail-radius: var(--mlv-radius-xs);display:inline-flex;flex-direction:column;gap:.25rem;width:fit-content;max-width:100%;background-color:var(--mlv-chat-message-bg);color:var(--mlv-chat-message-color);border-radius:var(--mlv-chat-message-radius);overflow-wrap:anywhere}.mlv-chat-message--own{--mlv-chat-message-bg: var(--mlv-background-accent-1);--mlv-chat-message-color: var(--mlv-text-primary-on-accent-1)}.mlv-chat-message__reply{--mlv-chat-quote-fg: var(--mlv-chat-message-color);--mlv-chat-quote-accent: var(--mlv-background-accent-1);--mlv-chat-quote-author: var(--mlv-text-action);--mlv-chat-quote-surface: color-mix( in srgb, var(--mlv-chat-message-color) 8%, transparent );--mlv-chat-quote-surface-hover: color-mix( in srgb, var(--mlv-chat-message-color) 14%, transparent );display:flex;width:100%;margin:0;border:0;border-radius:var(--mlv-radius-s);padding:0;background-color:var(--mlv-chat-quote-surface);color:inherit;font:inherit;text-align:start;cursor:pointer;overflow:hidden;transition:background-color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-chat-message__reply:hover{background-color:var(--mlv-chat-quote-surface-hover)}.mlv-chat-message__reply:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:var(--mlv-focus-ring-offset)}.mlv-chat-message--own .mlv-chat-message__reply{--mlv-chat-quote-accent: var(--mlv-text-primary-on-accent-1);--mlv-chat-quote-author: var(--mlv-text-primary-on-accent-1);--mlv-border-focus: var(--mlv-text-primary-on-accent-1)}.mlv-chat-message--other.mlv-chat-message--pos-first{border-end-start-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--other.mlv-chat-message--pos-middle{border-start-start-radius:var(--mlv-chat-message-tail-radius);border-end-start-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--other.mlv-chat-message--pos-last{border-start-start-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--own.mlv-chat-message--pos-first{border-end-end-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--own.mlv-chat-message--pos-middle{border-start-end-radius:var(--mlv-chat-message-tail-radius);border-end-end-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--own.mlv-chat-message--pos-last{border-start-end-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--failed{--mlv-chat-message-bg: var(--mlv-background-danger-1-pale);--mlv-chat-message-color: var(--mlv-text-negative)}.mlv-chat-message__text{white-space:pre-wrap;text-wrap:pretty;color:var(--mlv-chat-message-color);font-size:inherit}.mlv-chat-message__meta{display:inline-flex;align-items:center;gap:.25rem;align-self:flex-end;font-size:var(--mlv-typography-body-s-size);color:var(--mlv-chat-message-color);opacity:.7}.mlv-chat-message__time,.mlv-chat-message__status{color:var(--mlv-chat-message-color);font-size:inherit}.mlv-chat-message__status--read{color:var(--mlv-chat-message-color);opacity:1}.mlv-chat-message__retry{display:inline-flex;align-items:center;gap:.25rem;background:none;border:none;color:var(--mlv-text-negative);cursor:pointer;font-size:var(--mlv-typography-body-s-size);padding:0}.mlv-chat-message__retry:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:var(--mlv-focus-ring-offset)}.mlv-chat-message--quote{--mlv-chat-message-bg: transparent;--mlv-chat-message-color: var(--mlv-chat-quote-fg, var(--mlv-text-primary));flex:1 1 auto;gap:.125rem;min-width:0;border-inline-start:.1875rem solid var(--mlv-chat-quote-accent, var(--mlv-background-accent-1));border-radius:0;padding:var(--mlv-spacing-1) var(--mlv-spacing-2);font-size:var(--mlv-typography-body-s-size)}.mlv-chat-message--quote .mlv-chat-message__text{display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;opacity:.85}.mlv-chat-message__quote-author{display:inline-flex;align-items:center;gap:var(--mlv-spacing-1);color:var(--mlv-chat-quote-author, var(--mlv-text-action));font-weight:var(--mlv-font-weight-semibold)}.mlv-chat-message__reply-marker{flex:none;color:var(--mlv-chat-quote-author, var(--mlv-text-action));opacity:.7}.mlv-chat-message__quote-audio{display:inline-flex;align-items:center;gap:var(--mlv-spacing-1);color:var(--mlv-chat-quote-fg, var(--mlv-text-primary));opacity:.85}@media(prefers-reduced-motion:reduce){.mlv-chat-message,.mlv-chat-message *,.mlv-chat-message:before,.mlv-chat-message:after,[class^=mlv-chat-message__],[class*=\" mlv-chat-message__\"],[class^=mlv-chat-message--],[class*=\" mlv-chat-message--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"], dependencies: [{ kind: "component", type: MlvChatMessage, selector: "mlv-chat-message", inputs: ["message", "own", "groupPosition", "quote"], outputs: ["retry", "mediaClick", "replyClick"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LucideCheck, selector: "svg[lucideCheck]" }, { kind: "component", type: LucideCheckCheck, selector: "svg[lucideCheckCheck]" }, { kind: "component", type: LucideCircleAlert, selector: "svg[lucideCircleAlert], svg[lucideAlertCircle]" }, { kind: "component", type: LucideClock, selector: "svg[lucideClock]" }, { kind: "component", type: LucideCornerUpLeft, selector: "svg[lucideCornerUpLeft]" }, { kind: "component", type: LucideMusic, selector: "svg[lucideMusic]" }, { kind: "component", type: MlvChatMediaGrid, selector: "mlv-chat-media-grid", inputs: ["attachments", "quote"], outputs: ["mediaClick"] }, { kind: "component", type: MlvChatAudio, selector: "mlv-chat-audio", inputs: ["attachment"] }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
315
|
+
}
|
|
316
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatMessage, decorators: [{
|
|
317
|
+
type: Component,
|
|
318
|
+
args: [{ selector: 'mlv-chat-message', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
319
|
+
DatePipe,
|
|
320
|
+
NgTemplateOutlet,
|
|
321
|
+
LucideCheck,
|
|
322
|
+
LucideCheckCheck,
|
|
323
|
+
LucideCircleAlert,
|
|
324
|
+
LucideClock,
|
|
325
|
+
LucideCornerUpLeft,
|
|
326
|
+
LucideMusic,
|
|
327
|
+
MlvChatMediaGrid,
|
|
328
|
+
MlvChatAudio,
|
|
329
|
+
], host: {
|
|
330
|
+
class: 'mlv-chat-message',
|
|
331
|
+
'[class.mlv-chat-message--own]': 'own()',
|
|
332
|
+
'[class.mlv-chat-message--other]': '!own()',
|
|
333
|
+
'[class]': '"mlv-chat-message--pos-" + groupPosition()',
|
|
334
|
+
'[class.mlv-chat-message--failed]': 'message().status === "failed"',
|
|
335
|
+
'[class.mlv-chat-message--quote]': 'quote()',
|
|
336
|
+
}, template: "@if (_typeTemplate(); as tpl) {\n<ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: message(),\n isOwn: own(),\n groupPosition: groupPosition(),\n quote: quote(),\n }\"\n/>\n} @else { @if (quote()) {\n<span class=\"mlv-chat-message__quote-author\"\n >{{ _userName(message().authorId) }}</span\n>\n@if (message().replyTo) {\n<svg\n class=\"mlv-chat-message__reply-marker\"\n lucideCornerUpLeft\n [size]=\"12\"\n aria-hidden=\"true\"\n/>\n} } @else if (message().replyTo; as reply) {\n<button\n type=\"button\"\n class=\"mlv-chat-message__reply\"\n (click)=\"replyClick.emit(reply)\"\n>\n <mlv-chat-message [message]=\"reply\" quote />\n</button>\n} @if (_mediaAttachments().length) {\n<mlv-chat-media-grid\n [attachments]=\"_mediaAttachments()\"\n [quote]=\"quote()\"\n (mediaClick)=\"mediaClick.emit($event)\"\n/>\n} @if (quote()) { @if (_audioAttachments()[0]; as audio) {\n<span class=\"mlv-chat-message__quote-audio\">\n <svg lucideMusic [size]=\"12\" aria-hidden=\"true\" />\n {{ _formatDuration(audio.duration ?? 0) }}\n</span>\n} } @else { @for (audio of _audioAttachments(); track audio.id) {\n<mlv-chat-audio [attachment]=\"audio\" />\n} } @if (message().text; as text) {\n<span class=\"mlv-chat-message__text\">{{ text }}</span>\n} } @if (!quote()) {\n<span class=\"mlv-chat-message__meta\">\n @if (own() && message().status === 'failed') {\n <button type=\"button\" class=\"mlv-chat-message__retry\" (click)=\"retry.emit()\">\n <svg lucideCircleAlert [size]=\"14\" aria-hidden=\"true\" />\n {{ _i18n().retry }}\n </button>\n }\n <time class=\"mlv-chat-message__time\" [attr.datetime]=\"_date().toISOString()\">\n {{ _date() | date: 'shortTime' }}\n </time>\n @if (own() && message().status; as status) { @switch (status) { @case\n ('sending') {\n <svg\n class=\"mlv-chat-message__status mlv-chat-message__status--sending\"\n lucideClock\n [size]=\"14\"\n aria-hidden=\"true\"\n />\n } @case ('sent') {\n <svg\n class=\"mlv-chat-message__status mlv-chat-message__status--sent\"\n lucideCheck\n [size]=\"14\"\n aria-hidden=\"true\"\n />\n } @case ('delivered') {\n <svg\n class=\"mlv-chat-message__status mlv-chat-message__status--delivered\"\n lucideCheckCheck\n [size]=\"14\"\n aria-hidden=\"true\"\n />\n } @case ('read') {\n <svg\n class=\"mlv-chat-message__status mlv-chat-message__status--read\"\n lucideCheckCheck\n [size]=\"14\"\n aria-hidden=\"true\"\n />\n } } }\n</span>\n}\n", styles: ["@charset \"UTF-8\";@layer mlv.components{.mlv-chat-message{box-sizing:border-box;padding:.5rem .75rem;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-m-size)}.mlv-chat-message *{box-sizing:border-box}.mlv-chat-message{--mlv-chat-message-bg: var(--mlv-background-neutral-1);--mlv-chat-message-color: var(--mlv-text-primary);--mlv-chat-message-radius: var(--mlv-radius-l);--mlv-chat-message-tail-radius: var(--mlv-radius-xs);display:inline-flex;flex-direction:column;gap:.25rem;width:fit-content;max-width:100%;background-color:var(--mlv-chat-message-bg);color:var(--mlv-chat-message-color);border-radius:var(--mlv-chat-message-radius);overflow-wrap:anywhere}.mlv-chat-message--own{--mlv-chat-message-bg: var(--mlv-background-accent-1);--mlv-chat-message-color: var(--mlv-text-primary-on-accent-1)}.mlv-chat-message__reply{--mlv-chat-quote-fg: var(--mlv-chat-message-color);--mlv-chat-quote-accent: var(--mlv-background-accent-1);--mlv-chat-quote-author: var(--mlv-text-action);--mlv-chat-quote-surface: color-mix( in srgb, var(--mlv-chat-message-color) 8%, transparent );--mlv-chat-quote-surface-hover: color-mix( in srgb, var(--mlv-chat-message-color) 14%, transparent );display:flex;width:100%;margin:0;border:0;border-radius:var(--mlv-radius-s);padding:0;background-color:var(--mlv-chat-quote-surface);color:inherit;font:inherit;text-align:start;cursor:pointer;overflow:hidden;transition:background-color var(--mlv-duration-fast) var(--mlv-ease-default)}.mlv-chat-message__reply:hover{background-color:var(--mlv-chat-quote-surface-hover)}.mlv-chat-message__reply:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:var(--mlv-focus-ring-offset)}.mlv-chat-message--own .mlv-chat-message__reply{--mlv-chat-quote-accent: var(--mlv-text-primary-on-accent-1);--mlv-chat-quote-author: var(--mlv-text-primary-on-accent-1);--mlv-border-focus: var(--mlv-text-primary-on-accent-1)}.mlv-chat-message--other.mlv-chat-message--pos-first{border-end-start-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--other.mlv-chat-message--pos-middle{border-start-start-radius:var(--mlv-chat-message-tail-radius);border-end-start-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--other.mlv-chat-message--pos-last{border-start-start-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--own.mlv-chat-message--pos-first{border-end-end-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--own.mlv-chat-message--pos-middle{border-start-end-radius:var(--mlv-chat-message-tail-radius);border-end-end-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--own.mlv-chat-message--pos-last{border-start-end-radius:var(--mlv-chat-message-tail-radius)}.mlv-chat-message--failed{--mlv-chat-message-bg: var(--mlv-background-danger-1-pale);--mlv-chat-message-color: var(--mlv-text-negative)}.mlv-chat-message__text{white-space:pre-wrap;text-wrap:pretty;color:var(--mlv-chat-message-color);font-size:inherit}.mlv-chat-message__meta{display:inline-flex;align-items:center;gap:.25rem;align-self:flex-end;font-size:var(--mlv-typography-body-s-size);color:var(--mlv-chat-message-color);opacity:.7}.mlv-chat-message__time,.mlv-chat-message__status{color:var(--mlv-chat-message-color);font-size:inherit}.mlv-chat-message__status--read{color:var(--mlv-chat-message-color);opacity:1}.mlv-chat-message__retry{display:inline-flex;align-items:center;gap:.25rem;background:none;border:none;color:var(--mlv-text-negative);cursor:pointer;font-size:var(--mlv-typography-body-s-size);padding:0}.mlv-chat-message__retry:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:var(--mlv-focus-ring-offset)}.mlv-chat-message--quote{--mlv-chat-message-bg: transparent;--mlv-chat-message-color: var(--mlv-chat-quote-fg, var(--mlv-text-primary));flex:1 1 auto;gap:.125rem;min-width:0;border-inline-start:.1875rem solid var(--mlv-chat-quote-accent, var(--mlv-background-accent-1));border-radius:0;padding:var(--mlv-spacing-1) var(--mlv-spacing-2);font-size:var(--mlv-typography-body-s-size)}.mlv-chat-message--quote .mlv-chat-message__text{display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;opacity:.85}.mlv-chat-message__quote-author{display:inline-flex;align-items:center;gap:var(--mlv-spacing-1);color:var(--mlv-chat-quote-author, var(--mlv-text-action));font-weight:var(--mlv-font-weight-semibold)}.mlv-chat-message__reply-marker{flex:none;color:var(--mlv-chat-quote-author, var(--mlv-text-action));opacity:.7}.mlv-chat-message__quote-audio{display:inline-flex;align-items:center;gap:var(--mlv-spacing-1);color:var(--mlv-chat-quote-fg, var(--mlv-text-primary));opacity:.85}@media(prefers-reduced-motion:reduce){.mlv-chat-message,.mlv-chat-message *,.mlv-chat-message:before,.mlv-chat-message:after,[class^=mlv-chat-message__],[class*=\" mlv-chat-message__\"],[class^=mlv-chat-message--],[class*=\" mlv-chat-message--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"] }]
|
|
337
|
+
}], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }], own: [{ type: i0.Input, args: [{ isSignal: true, alias: "own", required: false }] }], groupPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupPosition", required: false }] }], quote: [{ type: i0.Input, args: [{ isSignal: true, alias: "quote", required: false }] }], retry: [{ type: i0.Output, args: ["retry"] }], mediaClick: [{ type: i0.Output, args: ["mediaClick"] }], replyClick: [{ type: i0.Output, args: ["replyClick"] }] } });
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* Internal default renderer of a date separator. Shows Today/Yesterday for the
|
|
341
|
+
* two most recent days and a formatted date otherwise. Consumers override the
|
|
342
|
+
* whole slot with `[mlvChatDateDef]`.
|
|
343
|
+
*/
|
|
344
|
+
class MlvChatDate {
|
|
345
|
+
/** Start of the calendar day this separator introduces. */
|
|
346
|
+
date = input.required(/* @ts-ignore */
|
|
347
|
+
...(ngDevMode ? [{ debugName: "date" }] : /* istanbul ignore next */ []));
|
|
348
|
+
/** @internal Chat i18n strings. */
|
|
349
|
+
_i18n = inject(MLV_CHAT_I18N);
|
|
350
|
+
/** @internal Relative label, or null when the template should format the date. */
|
|
351
|
+
_label = computed(() => {
|
|
352
|
+
const date = this.date();
|
|
353
|
+
const now = new Date();
|
|
354
|
+
if (isSameChatDay(date, now))
|
|
355
|
+
return this._i18n().today;
|
|
356
|
+
const yesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);
|
|
357
|
+
return isSameChatDay(date, yesterday) ? this._i18n().yesterday : null;
|
|
358
|
+
}, /* @ts-ignore */
|
|
359
|
+
...(ngDevMode ? [{ debugName: "_label" }] : /* istanbul ignore next */ []));
|
|
360
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatDate, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
361
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvChatDate, isStandalone: true, selector: "mlv-chat-date", inputs: { date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "mlv-chat-date" }, ngImport: i0, template: `
|
|
362
|
+
@if (_label(); as label) {
|
|
363
|
+
{{ label }}
|
|
364
|
+
} @else {
|
|
365
|
+
{{ date() | date: 'mediumDate' }}
|
|
366
|
+
}
|
|
367
|
+
`, isInline: true, styles: ["@layer mlv.components{.mlv-chat-date{box-sizing:border-box;padding:.125rem .625rem;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-s-size)}.mlv-chat-date *{box-sizing:border-box}.mlv-chat-date{display:inline-block;border-radius:var(--mlv-radius-full);background-color:var(--mlv-background-neutral-1);color:var(--mlv-text-secondary)}}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
368
|
+
}
|
|
369
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatDate, decorators: [{
|
|
370
|
+
type: Component,
|
|
371
|
+
args: [{ selector: 'mlv-chat-date', template: `
|
|
372
|
+
@if (_label(); as label) {
|
|
373
|
+
{{ label }}
|
|
374
|
+
} @else {
|
|
375
|
+
{{ date() | date: 'mediumDate' }}
|
|
376
|
+
}
|
|
377
|
+
`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [DatePipe], host: { class: 'mlv-chat-date' }, styles: ["@layer mlv.components{.mlv-chat-date{box-sizing:border-box;padding:.125rem .625rem;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-s-size)}.mlv-chat-date *{box-sizing:border-box}.mlv-chat-date{display:inline-block;border-radius:var(--mlv-radius-full);background-color:var(--mlv-background-neutral-1);color:var(--mlv-text-secondary)}}\n"] }]
|
|
378
|
+
}], propDecorators: { date: [{ type: i0.Input, args: [{ isSignal: true, alias: "date", required: true }] }] } });
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Internal three-dot typing bubble. Rendered by `mlv-chat` at the bottom of the
|
|
382
|
+
* transcript while `typingUsers` is non-empty.
|
|
383
|
+
*/
|
|
384
|
+
class MlvChatTyping {
|
|
385
|
+
/** Users currently composing a message. */
|
|
386
|
+
users = input([], /* @ts-ignore */
|
|
387
|
+
...(ngDevMode ? [{ debugName: "users" }] : /* istanbul ignore next */ []));
|
|
388
|
+
/** @internal Chat i18n strings. */
|
|
389
|
+
_i18n = inject(MLV_CHAT_I18N);
|
|
390
|
+
/** @internal Accessible label naming the typing users when they are known. */
|
|
391
|
+
_ariaLabel = computed(() => {
|
|
392
|
+
const names = this.users()
|
|
393
|
+
.map((u) => u.name)
|
|
394
|
+
.filter(Boolean);
|
|
395
|
+
return names.length ? names.join(', ') : null;
|
|
396
|
+
}, /* @ts-ignore */
|
|
397
|
+
...(ngDevMode ? [{ debugName: "_ariaLabel" }] : /* istanbul ignore next */ []));
|
|
398
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatTyping, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
399
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: MlvChatTyping, isStandalone: true, selector: "mlv-chat-typing", inputs: { users: { classPropertyName: "users", publicName: "users", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-label": "_ariaLabel()" }, classAttribute: "mlv-chat-typing" }, ngImport: i0, template: `
|
|
400
|
+
<span class="mlv-chat-typing__dots" aria-hidden="true">
|
|
401
|
+
<span class="mlv-chat-typing__dot"></span>
|
|
402
|
+
<span class="mlv-chat-typing__dot"></span>
|
|
403
|
+
<span class="mlv-chat-typing__dot"></span>
|
|
404
|
+
</span>
|
|
405
|
+
<span class="mlv-chat-typing__label">
|
|
406
|
+
{{ _i18n().typing | mlvTranslate: { count: users().length } }}
|
|
407
|
+
</span>
|
|
408
|
+
`, isInline: true, styles: ["@layer mlv.components{.mlv-chat-typing{box-sizing:border-box;padding:.375rem .75rem;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-s-size)}.mlv-chat-typing *{box-sizing:border-box}.mlv-chat-typing{display:inline-flex;align-items:center;gap:.5rem;border-radius:var(--mlv-radius-l);background-color:var(--mlv-background-neutral-1);color:var(--mlv-text-secondary)}.mlv-chat-typing__dots{display:inline-flex;gap:.1875rem}.mlv-chat-typing__dot{inline-size:.375rem;block-size:.375rem;border-radius:var(--mlv-radius-full);background-color:currentcolor;animation:mlv-chat-typing-bounce var(--mlv-duration-slower) var(--mlv-ease-in-out) infinite}.mlv-chat-typing__dot:nth-child(2){animation-delay:var(--mlv-duration-fast)}.mlv-chat-typing__dot:nth-child(3){animation-delay:var(--mlv-duration-normal)}@keyframes mlv-chat-typing-bounce{0%,60%,to{opacity:.35;transform:translateY(0)}30%{opacity:1;transform:translateY(-.1875rem)}}@media(prefers-reduced-motion:reduce){.mlv-chat-typing,.mlv-chat-typing *,.mlv-chat-typing:before,.mlv-chat-typing:after,[class^=mlv-chat-typing__],[class*=\" mlv-chat-typing__\"],[class^=mlv-chat-typing--],[class*=\" mlv-chat-typing--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"], dependencies: [{ kind: "pipe", type: MlvTranslatePipe, name: "mlvTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
409
|
+
}
|
|
410
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatTyping, decorators: [{
|
|
411
|
+
type: Component,
|
|
412
|
+
args: [{ selector: 'mlv-chat-typing', template: `
|
|
413
|
+
<span class="mlv-chat-typing__dots" aria-hidden="true">
|
|
414
|
+
<span class="mlv-chat-typing__dot"></span>
|
|
415
|
+
<span class="mlv-chat-typing__dot"></span>
|
|
416
|
+
<span class="mlv-chat-typing__dot"></span>
|
|
417
|
+
</span>
|
|
418
|
+
<span class="mlv-chat-typing__label">
|
|
419
|
+
{{ _i18n().typing | mlvTranslate: { count: users().length } }}
|
|
420
|
+
</span>
|
|
421
|
+
`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MlvTranslatePipe], host: {
|
|
422
|
+
class: 'mlv-chat-typing',
|
|
423
|
+
'[attr.aria-label]': '_ariaLabel()',
|
|
424
|
+
}, styles: ["@layer mlv.components{.mlv-chat-typing{box-sizing:border-box;padding:.375rem .75rem;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-s-size)}.mlv-chat-typing *{box-sizing:border-box}.mlv-chat-typing{display:inline-flex;align-items:center;gap:.5rem;border-radius:var(--mlv-radius-l);background-color:var(--mlv-background-neutral-1);color:var(--mlv-text-secondary)}.mlv-chat-typing__dots{display:inline-flex;gap:.1875rem}.mlv-chat-typing__dot{inline-size:.375rem;block-size:.375rem;border-radius:var(--mlv-radius-full);background-color:currentcolor;animation:mlv-chat-typing-bounce var(--mlv-duration-slower) var(--mlv-ease-in-out) infinite}.mlv-chat-typing__dot:nth-child(2){animation-delay:var(--mlv-duration-fast)}.mlv-chat-typing__dot:nth-child(3){animation-delay:var(--mlv-duration-normal)}@keyframes mlv-chat-typing-bounce{0%,60%,to{opacity:.35;transform:translateY(0)}30%{opacity:1;transform:translateY(-.1875rem)}}@media(prefers-reduced-motion:reduce){.mlv-chat-typing,.mlv-chat-typing *,.mlv-chat-typing:before,.mlv-chat-typing:after,[class^=mlv-chat-typing__],[class*=\" mlv-chat-typing__\"],[class^=mlv-chat-typing--],[class*=\" mlv-chat-typing--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"] }]
|
|
425
|
+
}], propDecorators: { users: [{ type: i0.Input, args: [{ isSignal: true, alias: "users", required: false }] }] } });
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Replaces the default author name shown above a group of other-authored
|
|
429
|
+
* messages — for example to render an avatar plus a role badge.
|
|
430
|
+
*
|
|
431
|
+
* @example
|
|
432
|
+
* <ng-template mlvChatAuthorDef let-user>
|
|
433
|
+
* <mlv-avatar size="xs" [name]="user.name" [src]="user.avatarSrc ?? null" />
|
|
434
|
+
* {{ user.name }}
|
|
435
|
+
* </ng-template>
|
|
436
|
+
*/
|
|
437
|
+
class MlvChatAuthorDef {
|
|
438
|
+
/** The template rendered in the author slot. */
|
|
439
|
+
templateRef = inject(TemplateRef);
|
|
440
|
+
/** Type guard giving template variables their concrete types. */
|
|
441
|
+
static ngTemplateContextGuard(_dir, _ctx) {
|
|
442
|
+
return true;
|
|
443
|
+
}
|
|
444
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatAuthorDef, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
445
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvChatAuthorDef, isStandalone: true, selector: "[mlvChatAuthorDef]", ngImport: i0 });
|
|
446
|
+
}
|
|
447
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatAuthorDef, decorators: [{
|
|
448
|
+
type: Directive,
|
|
449
|
+
args: [{ selector: '[mlvChatAuthorDef]' }]
|
|
450
|
+
}] });
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Replaces the default Today/Yesterday/date pill rendered between messages of
|
|
454
|
+
* different calendar days.
|
|
455
|
+
*
|
|
456
|
+
* @example
|
|
457
|
+
* <ng-template mlvChatDateDef let-date>{{ date | date: 'fullDate' }}</ng-template>
|
|
458
|
+
*/
|
|
459
|
+
class MlvChatDateDef {
|
|
460
|
+
/** The template rendered for each date separator. */
|
|
461
|
+
templateRef = inject(TemplateRef);
|
|
462
|
+
/** Type guard giving template variables their concrete types. */
|
|
463
|
+
static ngTemplateContextGuard(_dir, _ctx) {
|
|
464
|
+
return true;
|
|
465
|
+
}
|
|
466
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatDateDef, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
467
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: MlvChatDateDef, isStandalone: true, selector: "[mlvChatDateDef]", ngImport: i0 });
|
|
468
|
+
}
|
|
469
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatDateDef, decorators: [{
|
|
470
|
+
type: Directive,
|
|
471
|
+
args: [{ selector: '[mlvChatDateDef]' }]
|
|
472
|
+
}] });
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Marks an `<ng-template>` as the renderer for chat messages whose `type`
|
|
476
|
+
* matches `mlvChatMessageDefType`. The template replaces the bubble body;
|
|
477
|
+
* alignment, meta row, and animations stay owned by the chat.
|
|
478
|
+
*
|
|
479
|
+
* @example
|
|
480
|
+
* <ng-template mlvChatMessageDef mlvChatMessageDefType="poll" let-message let-isOwn="isOwn">
|
|
481
|
+
* <app-poll [poll]="message.data" />
|
|
482
|
+
* </ng-template>
|
|
483
|
+
*/
|
|
484
|
+
class MlvChatMessageDef {
|
|
485
|
+
/** The message `type` this template renders. Templates without a type are ignored. */
|
|
486
|
+
mlvChatMessageDefType = input('', /* @ts-ignore */
|
|
487
|
+
...(ngDevMode ? [{ debugName: "mlvChatMessageDefType" }] : /* istanbul ignore next */ []));
|
|
488
|
+
/** The template rendered for matching messages. */
|
|
489
|
+
templateRef = inject(TemplateRef);
|
|
490
|
+
/** Type guard giving template variables their concrete types. */
|
|
491
|
+
static ngTemplateContextGuard(_dir, _ctx) {
|
|
492
|
+
return true;
|
|
493
|
+
}
|
|
494
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatMessageDef, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
495
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: MlvChatMessageDef, isStandalone: true, selector: "[mlvChatMessageDef]", inputs: { mlvChatMessageDefType: { classPropertyName: "mlvChatMessageDefType", publicName: "mlvChatMessageDefType", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
496
|
+
}
|
|
497
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChatMessageDef, decorators: [{
|
|
498
|
+
type: Directive,
|
|
499
|
+
args: [{ selector: '[mlvChatMessageDef]' }]
|
|
500
|
+
}], propDecorators: { mlvChatMessageDefType: [{ type: i0.Input, args: [{ isSignal: true, alias: "mlvChatMessageDefType", required: false }] }] } });
|
|
501
|
+
|
|
502
|
+
/** Skeleton rows rendered while the first page loads. */
|
|
503
|
+
const SKELETON_ROWS = [
|
|
504
|
+
{ own: false, width: '55%' },
|
|
505
|
+
{ own: false, width: '35%' },
|
|
506
|
+
{ own: true, width: '45%' },
|
|
507
|
+
{ own: false, width: '65%' },
|
|
508
|
+
{ own: true, width: '30%' },
|
|
509
|
+
{ own: false, width: '50%' },
|
|
510
|
+
];
|
|
511
|
+
/**
|
|
512
|
+
* Scrollable chat surface. Renders an oldest→newest `messages` array as author
|
|
513
|
+
* groups with date separators, delivery statuses, replies, media, and audio.
|
|
514
|
+
* Grouping is computed internally — consumers only supply flat data.
|
|
515
|
+
*/
|
|
516
|
+
class MlvChat {
|
|
517
|
+
/** @private Distance from the bottom under which the view counts as pinned. */
|
|
518
|
+
static _PIN_THRESHOLD = 48;
|
|
519
|
+
/** @private Distance from the top under which the window grows / `loadOlder` fires. */
|
|
520
|
+
static _TOP_THRESHOLD = 150;
|
|
521
|
+
/** @private Number of messages the render window grows by per step. */
|
|
522
|
+
static _WINDOW_STEP = 50;
|
|
523
|
+
/** Messages ordered oldest → newest. */
|
|
524
|
+
messages = input.required(/* @ts-ignore */
|
|
525
|
+
...(ngDevMode ? [{ debugName: "messages" }] : /* istanbul ignore next */ []));
|
|
526
|
+
/** Id of the current user; messages authored by it render as own messages. */
|
|
527
|
+
selfId = input.required(/* @ts-ignore */
|
|
528
|
+
...(ngDevMode ? [{ debugName: "selfId" }] : /* istanbul ignore next */ []));
|
|
529
|
+
/** Known participants, used for avatars and author names. */
|
|
530
|
+
users = input([], /* @ts-ignore */
|
|
531
|
+
...(ngDevMode ? [{ debugName: "users" }] : /* istanbul ignore next */ []));
|
|
532
|
+
/** Renders skeleton bubbles instead of content while the first page loads. */
|
|
533
|
+
loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
534
|
+
/** Shows the top loader while an older page is being fetched. */
|
|
535
|
+
loadingOlder = input(false, { ...(ngDevMode ? { debugName: "loadingOlder" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
536
|
+
/** Whether more history exists; gates the `loadOlder` output. */
|
|
537
|
+
hasOlder = input(false, { ...(ngDevMode ? { debugName: "hasOlder" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
538
|
+
/** Ids of users currently composing a message. */
|
|
539
|
+
typingUsers = input([], /* @ts-ignore */
|
|
540
|
+
...(ngDevMode ? [{ debugName: "typingUsers" }] : /* istanbul ignore next */ []));
|
|
541
|
+
/** Maximum gap in minutes between messages of one author group. */
|
|
542
|
+
groupWindow = input(5, /* @ts-ignore */
|
|
543
|
+
...(ngDevMode ? [{ debugName: "groupWindow" }] : /* istanbul ignore next */ []));
|
|
544
|
+
/** Author slot visibility; `'auto'` shows it once more than two users are known. */
|
|
545
|
+
showAuthors = input('auto', /* @ts-ignore */
|
|
546
|
+
...(ngDevMode ? [{ debugName: "showAuthors" }] : /* istanbul ignore next */ []));
|
|
547
|
+
/** Whether calendar-day separators are rendered. */
|
|
548
|
+
dateSeparators = input(true, { ...(ngDevMode ? { debugName: "dateSeparators" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
549
|
+
/** Number of newest messages kept in the DOM. */
|
|
550
|
+
windowSize = input(150, /* @ts-ignore */
|
|
551
|
+
...(ngDevMode ? [{ debugName: "windowSize" }] : /* istanbul ignore next */ []));
|
|
552
|
+
/** Emits when the user scrolls past the oldest rendered message and more history exists. */
|
|
553
|
+
loadOlder = output();
|
|
554
|
+
/** Emits the failed message whose retry action was activated. */
|
|
555
|
+
retry = output();
|
|
556
|
+
/** Emits the message and attachment of an activated media cell. */
|
|
557
|
+
mediaClick = output();
|
|
558
|
+
/** Emits the message and its embedded original when a reply quote is activated. */
|
|
559
|
+
replyClick = output();
|
|
560
|
+
/** @internal Chat i18n strings. */
|
|
561
|
+
_i18n = inject(MLV_CHAT_I18N);
|
|
562
|
+
/** @internal Author slot template, when a consumer provides one. */
|
|
563
|
+
authorDef = contentChild(MlvChatAuthorDef, /* @ts-ignore */
|
|
564
|
+
...(ngDevMode ? [{ debugName: "authorDef" }] : /* istanbul ignore next */ []));
|
|
565
|
+
/** @internal Date separator template, when a consumer provides one. */
|
|
566
|
+
dateDef = contentChild(MlvChatDateDef, /* @ts-ignore */
|
|
567
|
+
...(ngDevMode ? [{ debugName: "dateDef" }] : /* istanbul ignore next */ []));
|
|
568
|
+
/** @private Custom message-type templates projected by the consumer. */
|
|
569
|
+
_messageDefs = contentChildren(MlvChatMessageDef, /* @ts-ignore */
|
|
570
|
+
...(ngDevMode ? [{ debugName: "_messageDefs" }] : /* istanbul ignore next */ []));
|
|
571
|
+
/** @internal id → user map, provided to bubbles through `MLV_CHAT_USERS`. */
|
|
572
|
+
_usersMap = computed(() => new Map(this.users().map((u) => [u.id, u])), /* @ts-ignore */
|
|
573
|
+
...(ngDevMode ? [{ debugName: "_usersMap" }] : /* istanbul ignore next */ []));
|
|
574
|
+
/** @internal type → def map, provided to bubbles through `MLV_CHAT_MESSAGE_DEFS`. */
|
|
575
|
+
_defsMap = computed(() => new Map(this._messageDefs()
|
|
576
|
+
.filter((def) => def.mlvChatMessageDefType())
|
|
577
|
+
.map((def) => [def.mlvChatMessageDefType(), def])), /* @ts-ignore */
|
|
578
|
+
...(ngDevMode ? [{ debugName: "_defsMap" }] : /* istanbul ignore next */ []));
|
|
579
|
+
/** @internal Number of newest messages currently rendered; grown by the scroll engine. */
|
|
580
|
+
_renderCount = signal(150, /* @ts-ignore */
|
|
581
|
+
...(ngDevMode ? [{ debugName: "_renderCount" }] : /* istanbul ignore next */ []));
|
|
582
|
+
/** @internal Newest slice of `messages` kept in the DOM. */
|
|
583
|
+
_windowed = computed(() => this.messages().slice(-this._renderCount()), /* @ts-ignore */
|
|
584
|
+
...(ngDevMode ? [{ debugName: "_windowed" }] : /* istanbul ignore next */ []));
|
|
585
|
+
/** @internal Flattened author groups and date separators of the render window. */
|
|
586
|
+
_renderItems = computed(() => buildChatRenderList(this._windowed(), this.selfId(), this.groupWindow(), this.dateSeparators()), /* @ts-ignore */
|
|
587
|
+
...(ngDevMode ? [{ debugName: "_renderItems" }] : /* istanbul ignore next */ []));
|
|
588
|
+
/** @internal Whether the author slot renders above other-authored groups. */
|
|
589
|
+
_authorsVisible = computed(() => {
|
|
590
|
+
const mode = this.showAuthors();
|
|
591
|
+
return mode === 'auto' ? this.users().length > 2 : mode;
|
|
592
|
+
}, /* @ts-ignore */
|
|
593
|
+
...(ngDevMode ? [{ debugName: "_authorsVisible" }] : /* istanbul ignore next */ []));
|
|
594
|
+
/** @internal Typing users resolved against the known participants. */
|
|
595
|
+
_typingUserObjects = computed(() => this.typingUsers()
|
|
596
|
+
.map((id) => this._usersMap().get(id))
|
|
597
|
+
.filter((user) => !!user), /* @ts-ignore */
|
|
598
|
+
...(ngDevMode ? [{ debugName: "_typingUserObjects" }] : /* istanbul ignore next */ []));
|
|
599
|
+
/** @internal Placeholder rows rendered while `loading` is set. */
|
|
600
|
+
_skeletonRows = SKELETON_ROWS;
|
|
601
|
+
/** @internal The scroll container; measured by the scroll engine. */
|
|
602
|
+
_viewport = viewChild(MlvScrollbar, /* @ts-ignore */
|
|
603
|
+
...(ngDevMode ? [{ debugName: "_viewport" }] : /* istanbul ignore next */ []));
|
|
604
|
+
/** @private Inner content wrapper; its height changes drive re-pinning. */
|
|
605
|
+
_content = viewChild('content', /* @ts-ignore */
|
|
606
|
+
...(ngDevMode ? [{ debugName: "_content" }] : /* istanbul ignore next */ []));
|
|
607
|
+
/** @private Shared resize observer used to follow content height changes. */
|
|
608
|
+
_resizeObserver = inject(MlvResizeObserverService);
|
|
609
|
+
/** @internal True while the view sits at (or near) the newest message. */
|
|
610
|
+
_pinned = signal(true, /* @ts-ignore */
|
|
611
|
+
...(ngDevMode ? [{ debugName: "_pinned" }] : /* istanbul ignore next */ []));
|
|
612
|
+
/** @internal Messages appended while unpinned; drives the new-messages pill. */
|
|
613
|
+
_newCount = signal(0, /* @ts-ignore */
|
|
614
|
+
...(ngDevMode ? [{ debugName: "_newCount" }] : /* istanbul ignore next */ []));
|
|
615
|
+
/** @internal Ids of messages that arrived live, so only those animate in. */
|
|
616
|
+
_liveIds = signal(new Set(), /* @ts-ignore */
|
|
617
|
+
...(ngDevMode ? [{ debugName: "_liveIds" }] : /* istanbul ignore next */ []));
|
|
618
|
+
/** @private First/last ids of the previous `messages` value, to classify changes. */
|
|
619
|
+
_edgeIds = {
|
|
620
|
+
first: null,
|
|
621
|
+
last: null,
|
|
622
|
+
};
|
|
623
|
+
/** @private Distance from the viewport bottom captured before a prepend renders. */
|
|
624
|
+
_pendingCompensation = null;
|
|
625
|
+
constructor() {
|
|
626
|
+
// The window starts at the configured size; the scroll engine grows it as
|
|
627
|
+
// the user scrolls up and trims it back once they return to the bottom.
|
|
628
|
+
effect(() => this._renderCount.set(this.windowSize()));
|
|
629
|
+
effect(() => {
|
|
630
|
+
const list = this.messages();
|
|
631
|
+
const first = list[0]?.id ?? null;
|
|
632
|
+
const last = list[list.length - 1]?.id ?? null;
|
|
633
|
+
const previous = this._edgeIds;
|
|
634
|
+
this._edgeIds = { first, last };
|
|
635
|
+
if (previous.last === null)
|
|
636
|
+
return;
|
|
637
|
+
const appended = last !== null && last !== previous.last;
|
|
638
|
+
const prepended = first !== null && first !== previous.first && last === previous.last;
|
|
639
|
+
if (prepended)
|
|
640
|
+
this._captureCompensation();
|
|
641
|
+
if (appended) {
|
|
642
|
+
this._markLiveMessages(list, previous.last);
|
|
643
|
+
if (this._pinned())
|
|
644
|
+
this._scrollToBottom('smooth');
|
|
645
|
+
else
|
|
646
|
+
this._newCount.update((count) => count + 1);
|
|
647
|
+
}
|
|
648
|
+
});
|
|
649
|
+
afterRenderEffect(() => {
|
|
650
|
+
// Re-runs whenever the rendered content changes.
|
|
651
|
+
this._renderItems();
|
|
652
|
+
this.loading();
|
|
653
|
+
if (this._applyCompensation())
|
|
654
|
+
return;
|
|
655
|
+
if (this._pinned())
|
|
656
|
+
this._stickToBottom();
|
|
657
|
+
});
|
|
658
|
+
// Renders alone are not enough: media can load late and `content-visibility`
|
|
659
|
+
// reveals height without a change-detection pass. Following the content box
|
|
660
|
+
// keeps the newest message in view in all of those cases.
|
|
661
|
+
effect((onCleanup) => {
|
|
662
|
+
const content = this._content()?.nativeElement;
|
|
663
|
+
if (!content)
|
|
664
|
+
return;
|
|
665
|
+
const subscription = this._resizeObserver
|
|
666
|
+
.observe(content)
|
|
667
|
+
.subscribe(() => {
|
|
668
|
+
if (this._pendingCompensation === null && this._pinned())
|
|
669
|
+
this._stickToBottom();
|
|
670
|
+
});
|
|
671
|
+
onCleanup(() => subscription.unsubscribe());
|
|
672
|
+
});
|
|
673
|
+
}
|
|
674
|
+
/** @internal Re-reads the viewport metrics after a scroll event. */
|
|
675
|
+
_onScroll() {
|
|
676
|
+
const viewport = this._viewport()?.viewportElement;
|
|
677
|
+
if (!viewport)
|
|
678
|
+
return;
|
|
679
|
+
this._evaluateScroll(viewport.scrollTop, viewport.scrollHeight, viewport.clientHeight);
|
|
680
|
+
}
|
|
681
|
+
/**
|
|
682
|
+
* @internal Updates pinning and top-edge behavior from raw scroll metrics.
|
|
683
|
+
* Split from `_onScroll` so the logic is testable without layout.
|
|
684
|
+
*/
|
|
685
|
+
_evaluateScroll(scrollTop, scrollHeight, clientHeight) {
|
|
686
|
+
const bottomDistance = scrollHeight - scrollTop - clientHeight;
|
|
687
|
+
const pinned = bottomDistance < MlvChat._PIN_THRESHOLD;
|
|
688
|
+
if (pinned && !this._pinned()) {
|
|
689
|
+
this._newCount.set(0);
|
|
690
|
+
// Trimming is invisible while the view is anchored to the newest message.
|
|
691
|
+
this._renderCount.set(this.windowSize());
|
|
692
|
+
}
|
|
693
|
+
this._pinned.set(pinned);
|
|
694
|
+
if (scrollTop < MlvChat._TOP_THRESHOLD)
|
|
695
|
+
this._growWindow();
|
|
696
|
+
}
|
|
697
|
+
/** @internal Grows the render window, or asks for an older page once it is exhausted. */
|
|
698
|
+
_growWindow() {
|
|
699
|
+
const total = this.messages().length;
|
|
700
|
+
if (this._renderCount() < total) {
|
|
701
|
+
this._captureCompensation();
|
|
702
|
+
this._renderCount.update((count) => Math.min(count + MlvChat._WINDOW_STEP, total));
|
|
703
|
+
return;
|
|
704
|
+
}
|
|
705
|
+
if (this.hasOlder() && !this.loadingOlder())
|
|
706
|
+
this.loadOlder.emit();
|
|
707
|
+
}
|
|
708
|
+
/** @internal Scrolls to the newest message and clears the pill counter. */
|
|
709
|
+
_scrollToBottom(behavior = 'smooth') {
|
|
710
|
+
const viewport = this._viewport()?.viewportElement;
|
|
711
|
+
this._newCount.set(0);
|
|
712
|
+
this._pinned.set(true);
|
|
713
|
+
if (!viewport)
|
|
714
|
+
return;
|
|
715
|
+
viewport.scrollTo?.({ top: viewport.scrollHeight, behavior });
|
|
716
|
+
}
|
|
717
|
+
/**
|
|
718
|
+
* @private Records every message newer than the previous last id so only
|
|
719
|
+
* live arrivals animate in — initial load, window growth, and prepended
|
|
720
|
+
* history render instantly.
|
|
721
|
+
*/
|
|
722
|
+
_markLiveMessages(list, previousLast) {
|
|
723
|
+
const previousIndex = list.findIndex((message) => message.id === previousLast);
|
|
724
|
+
const fresh = list.slice(previousIndex + 1).map((message) => message.id);
|
|
725
|
+
if (!fresh.length)
|
|
726
|
+
return;
|
|
727
|
+
this._liveIds.update((ids) => {
|
|
728
|
+
const next = new Set(ids);
|
|
729
|
+
for (const id of fresh)
|
|
730
|
+
next.add(id);
|
|
731
|
+
return next;
|
|
732
|
+
});
|
|
733
|
+
}
|
|
734
|
+
/** @private Records the distance from the bottom so a prepend keeps the view still. */
|
|
735
|
+
_captureCompensation() {
|
|
736
|
+
const viewport = this._viewport()?.viewportElement;
|
|
737
|
+
if (viewport)
|
|
738
|
+
this._pendingCompensation = viewport.scrollHeight - viewport.scrollTop;
|
|
739
|
+
}
|
|
740
|
+
/**
|
|
741
|
+
* @private Restores the captured distance once the taller content has rendered.
|
|
742
|
+
* Returns true when a compensation was applied, so the caller skips pinning.
|
|
743
|
+
*/
|
|
744
|
+
_applyCompensation() {
|
|
745
|
+
const pending = this._pendingCompensation;
|
|
746
|
+
if (pending === null)
|
|
747
|
+
return false;
|
|
748
|
+
this._pendingCompensation = null;
|
|
749
|
+
const viewport = this._viewport()?.viewportElement;
|
|
750
|
+
if (viewport)
|
|
751
|
+
viewport.scrollTop = viewport.scrollHeight - pending;
|
|
752
|
+
return true;
|
|
753
|
+
}
|
|
754
|
+
/** @private Jumps the viewport to the newest message without animation. */
|
|
755
|
+
_stickToBottom() {
|
|
756
|
+
const viewport = this._viewport()?.viewportElement;
|
|
757
|
+
if (viewport)
|
|
758
|
+
viewport.scrollTop = viewport.scrollHeight;
|
|
759
|
+
}
|
|
760
|
+
/** @internal Composes the accessible label of one message article. */
|
|
761
|
+
_messageLabel(message, own) {
|
|
762
|
+
const author = own
|
|
763
|
+
? (this._usersMap().get(this.selfId())?.name ?? '')
|
|
764
|
+
: (this._usersMap().get(message.authorId)?.name ?? '');
|
|
765
|
+
const time = formatDate(toChatDate(message.timestamp), 'shortTime', 'en-US');
|
|
766
|
+
const status = own && message.status ? this._statusLabel(message.status) : '';
|
|
767
|
+
return [author, time, status].filter(Boolean).join(', ');
|
|
768
|
+
}
|
|
769
|
+
/** @private Maps a delivery status to its translated label. */
|
|
770
|
+
_statusLabel(status) {
|
|
771
|
+
const i18n = this._i18n();
|
|
772
|
+
switch (status) {
|
|
773
|
+
case 'sending':
|
|
774
|
+
return i18n.statusSending;
|
|
775
|
+
case 'sent':
|
|
776
|
+
return i18n.statusSent;
|
|
777
|
+
case 'delivered':
|
|
778
|
+
return i18n.statusDelivered;
|
|
779
|
+
case 'read':
|
|
780
|
+
return i18n.statusRead;
|
|
781
|
+
case 'failed':
|
|
782
|
+
return i18n.statusFailed;
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChat, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
786
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MlvChat, isStandalone: true, selector: "mlv-chat", inputs: { messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: true, transformFunction: null }, selfId: { classPropertyName: "selfId", publicName: "selfId", isSignal: true, isRequired: true, transformFunction: null }, users: { classPropertyName: "users", publicName: "users", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingOlder: { classPropertyName: "loadingOlder", publicName: "loadingOlder", isSignal: true, isRequired: false, transformFunction: null }, hasOlder: { classPropertyName: "hasOlder", publicName: "hasOlder", isSignal: true, isRequired: false, transformFunction: null }, typingUsers: { classPropertyName: "typingUsers", publicName: "typingUsers", isSignal: true, isRequired: false, transformFunction: null }, groupWindow: { classPropertyName: "groupWindow", publicName: "groupWindow", isSignal: true, isRequired: false, transformFunction: null }, showAuthors: { classPropertyName: "showAuthors", publicName: "showAuthors", isSignal: true, isRequired: false, transformFunction: null }, dateSeparators: { classPropertyName: "dateSeparators", publicName: "dateSeparators", isSignal: true, isRequired: false, transformFunction: null }, windowSize: { classPropertyName: "windowSize", publicName: "windowSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loadOlder: "loadOlder", retry: "retry", mediaClick: "mediaClick", replyClick: "replyClick" }, host: { classAttribute: "mlv-chat" }, providers: [
|
|
787
|
+
MlvChatAudioService,
|
|
788
|
+
{ provide: MLV_DENSITY_ELEMENT, useValue: 'chat' },
|
|
789
|
+
{ provide: MLV_CHAT_USERS, useFactory: () => inject(MlvChat)._usersMap },
|
|
790
|
+
{
|
|
791
|
+
provide: MLV_CHAT_MESSAGE_DEFS,
|
|
792
|
+
useFactory: () => inject(MlvChat)._defsMap,
|
|
793
|
+
},
|
|
794
|
+
], queries: [{ propertyName: "authorDef", first: true, predicate: MlvChatAuthorDef, descendants: true, isSignal: true }, { propertyName: "dateDef", first: true, predicate: MlvChatDateDef, descendants: true, isSignal: true }, { propertyName: "_messageDefs", predicate: MlvChatMessageDef, isSignal: true }], viewQueries: [{ propertyName: "_viewport", first: true, predicate: MlvScrollbar, descendants: true, isSignal: true }, { propertyName: "_content", first: true, predicate: ["content"], descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.MlvDensityDirective, inputs: ["mlvDensity", "mlvDensity"] }], ngImport: i0, template: "<mlv-scrollbar\n #viewport\n class=\"mlv-chat__viewport\"\n role=\"log\"\n [attr.aria-label]=\"_i18n().chatLabel\"\n tabindex=\"0\"\n (scroll)=\"_onScroll()\"\n>\n <div #content class=\"mlv-chat__content\">\n @if (loading()) { @for (row of _skeletonRows; track $index) {\n <div class=\"mlv-chat__skeleton\" [class.mlv-chat__skeleton--own]=\"row.own\">\n <mlv-skeleton variant=\"rectangle\" [width]=\"row.width\" height=\"2.25rem\" />\n </div>\n } } @else { @if (loadingOlder()) {\n <div class=\"mlv-chat__older-loader\">\n <mlv-loader\n variant=\"circle\"\n [indeterminate]=\"true\"\n [size]=\"20\"\n [strokeWidth]=\"2\"\n />\n <span class=\"cdk-visually-hidden\">{{ _i18n().loadingOlder }}</span>\n </div>\n } @for (item of _renderItems(); track item.id) { @switch (item.kind) { @case\n ('date') {\n <div class=\"mlv-chat__date\">\n @if (dateDef(); as def) {\n <ng-container\n [ngTemplateOutlet]=\"def.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.date }\"\n />\n } @else {\n <mlv-chat-date [date]=\"item.date\" />\n }\n </div>\n } @case ('group') {\n <div class=\"mlv-chat__group\" [class.mlv-chat__group--own]=\"item.own\">\n @if (!item.own && _authorsVisible()) {\n <div class=\"mlv-chat__author\">\n @if (authorDef(); as def) {\n <ng-container\n [ngTemplateOutlet]=\"def.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: _usersMap().get(item.authorId),\n isOwn: item.own,\n firstMessage: item.messages[0].message,\n }\"\n />\n } @else { {{ _usersMap().get(item.authorId)?.name }} }\n </div>\n }\n <div class=\"mlv-chat__group-body\">\n @if (!item.own) {\n <mlv-avatar\n class=\"mlv-chat__avatar\"\n size=\"s\"\n [src]=\"_usersMap().get(item.authorId)?.avatarSrc ?? null\"\n [name]=\"_usersMap().get(item.authorId)?.name ?? ''\"\n [color]=\"(_usersMap().get(item.authorId)?.name ?? '') | mlvColorFromText\"\n />\n }\n <div class=\"mlv-chat__bubbles\">\n @for (rendered of item.messages; track rendered.message.id) {\n <article\n class=\"mlv-chat__item\"\n [class.mlv-chat__item--enter]=\"_liveIds().has(rendered.message.id)\"\n animate.leave=\"mlv-chat__item--leave\"\n [attr.aria-label]=\"_messageLabel(rendered.message, item.own)\"\n >\n <mlv-chat-message\n [message]=\"rendered.message\"\n [own]=\"item.own\"\n [groupPosition]=\"rendered.position\"\n (retry)=\"retry.emit(rendered.message)\"\n (mediaClick)=\"mediaClick.emit({ message: rendered.message, attachment: $event })\"\n (replyClick)=\"replyClick.emit({ message: rendered.message, replyTo: $event })\"\n />\n </article>\n }\n </div>\n </div>\n </div>\n } } } @if (_typingUserObjects().length) {\n <mlv-chat-typing class=\"mlv-chat__typing\" [users]=\"_typingUserObjects()\" />\n } }\n </div>\n</mlv-scrollbar>\n@if (!_pinned() && _newCount() > 0) {\n<button\n type=\"button\"\n class=\"mlv-chat__pill\"\n (click)=\"_scrollToBottom('smooth')\"\n>\n {{ _i18n().newMessages | mlvTranslate: { count: _newCount() } }}\n</button>\n}\n", styles: ["@layer mlv.components{@keyframes mlv-chat-item-enter{0%{opacity:0;transform:translateY(.5rem);grid-template-rows:0fr}to{opacity:1;transform:translateY(0);grid-template-rows:1fr}}@keyframes mlv-chat-item-leave-fade{to{opacity:0}}@keyframes mlv-chat-item-leave-collapse{to{grid-template-rows:0fr}}.mlv-chat{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-m-size)}.mlv-chat *{box-sizing:border-box}.mlv-chat{--mlv-chat-gap: .5rem;--mlv-chat-padding: var(--mlv-padding-m);--mlv-chat-bubble-gap: .125rem;position:relative;display:flex;flex-direction:column;min-block-size:0}.mlv-chat__viewport{flex:1;display:flex;flex-direction:column;padding:var(--mlv-chat-padding);overflow-y:auto;overflow-anchor:auto}.mlv-chat__content{display:flex;flex-direction:column;gap:var(--mlv-chat-gap);margin-block-start:auto}.mlv-chat__group{display:flex;flex-direction:column;gap:.125rem;content-visibility:auto;contain-intrinsic-size:auto 3.5rem}.mlv-chat__group--own{align-items:flex-end}.mlv-chat__group-body{display:flex;align-items:flex-end;gap:.5rem;max-inline-size:100%}.mlv-chat__avatar{position:sticky;inset-block-end:0;align-self:flex-end;flex-shrink:0}.mlv-chat__group--own .mlv-chat__group-body{flex-direction:row-reverse}.mlv-chat__bubbles{display:flex;flex-direction:column;gap:var(--mlv-chat-bubble-gap);max-inline-size:75%;min-inline-size:0}.mlv-chat__group--own .mlv-chat__bubbles{align-items:flex-end}.mlv-chat__item{display:grid;grid-template-rows:1fr;min-inline-size:0;will-change:transform,opacity,grid-template-rows}.mlv-chat__item>*{min-block-size:0;overflow:hidden}.mlv-chat__item--enter{animation:mlv-chat-item-enter var(--mlv-duration-slow) var(--mlv-ease-out-strong) both}.mlv-chat__item--leave{animation:mlv-chat-item-leave-fade var(--mlv-duration-fast) var(--mlv-ease-out-strong) forwards,mlv-chat-item-leave-collapse var(--mlv-duration-normal) var(--mlv-ease-out-strong) forwards}.mlv-chat__group--own .mlv-chat__item{justify-items:end}.mlv-chat__author{font-size:var(--mlv-typography-body-s-size);color:var(--mlv-text-secondary);margin-inline-start:2.25rem}.mlv-chat__date{align-self:center;font-size:inherit}.mlv-chat__older-loader{display:flex;justify-content:center;padding-block:.5rem}.mlv-chat__skeleton{display:flex}.mlv-chat__skeleton mlv-skeleton{border-radius:var(--mlv-radius-l)}.mlv-chat__skeleton--own{justify-content:flex-end}.mlv-chat__typing{align-self:flex-start}.mlv-chat-typing__label{font-size:var(--mlv-typography-body-m-size)}.mlv-chat__pill{position:absolute;inset-block-end:1rem;inset-inline:0;inline-size:fit-content;margin-inline:auto;padding:.375rem .75rem;border:none;border-radius:var(--mlv-radius-full);background-color:var(--mlv-background-raised);color:var(--mlv-text-action);box-shadow:var(--mlv-shadow-floating);font-size:var(--mlv-typography-body-s-size);cursor:pointer}.mlv-chat__pill:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:var(--mlv-focus-ring-offset)}[class*=--tight] .mlv-chat:not([class*=--compact],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-chat[class*=--tight]{--mlv-chat-gap: .25rem;--mlv-chat-padding: var(--mlv-padding-xs);--mlv-chat-bubble-gap: .0625rem}[class*=--compact] .mlv-chat:not([class*=--tight],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-chat[class*=--compact]{--mlv-chat-gap: .375rem;--mlv-chat-padding: var(--mlv-padding-s)}[class*=--spacious] .mlv-chat:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--airy]),.mlv-chat[class*=--spacious]{--mlv-chat-gap: .75rem;--mlv-chat-padding: var(--mlv-padding-l);--mlv-chat-bubble-gap: .25rem}[class*=--airy] .mlv-chat:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--spacious]),.mlv-chat[class*=--airy]{--mlv-chat-gap: 1rem;--mlv-chat-padding: var(--mlv-padding-xl);--mlv-chat-bubble-gap: .375rem}@media(prefers-reduced-motion:reduce){.mlv-chat,.mlv-chat *,.mlv-chat:before,.mlv-chat:after,[class^=mlv-chat__],[class*=\" mlv-chat__\"],[class^=mlv-chat--],[class*=\" mlv-chat--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MlvAvatar, selector: "mlv-avatar", inputs: ["size", "shape", "src", "name", "initials", "color", "label"] }, { kind: "component", type: MlvLoader, selector: "mlv-loader", inputs: ["variant", "tone", "value", "max", "indeterminate", "size", "strokeWidth", "ariaLabel", "showHint", "color", "trackColor", "glow"] }, { kind: "component", type: MlvSkeleton, selector: "mlv-skeleton", inputs: ["variant", "width", "height", "animated", "animationDuration"] }, { kind: "component", type: MlvChatMessage, selector: "mlv-chat-message", inputs: ["message", "own", "groupPosition", "quote"], outputs: ["retry", "mediaClick", "replyClick"] }, { kind: "component", type: MlvChatDate, selector: "mlv-chat-date", inputs: ["date"] }, { kind: "component", type: MlvChatTyping, selector: "mlv-chat-typing", inputs: ["users"] }, { kind: "component", type: MlvScrollbar, selector: "mlv-scrollbar", inputs: ["orientation", "scrollbarSize", "disabled", "ariaLabel", "viewportTabIndex"] }, { kind: "pipe", type: MlvTranslatePipe, name: "mlvTranslate" }, { kind: "pipe", type: MlvColorFromTextPipe, name: "mlvColorFromText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
795
|
+
}
|
|
796
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MlvChat, decorators: [{
|
|
797
|
+
type: Component,
|
|
798
|
+
args: [{ selector: 'mlv-chat', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
799
|
+
NgTemplateOutlet,
|
|
800
|
+
MlvTranslatePipe,
|
|
801
|
+
MlvAvatar,
|
|
802
|
+
MlvColorFromTextPipe,
|
|
803
|
+
MlvLoader,
|
|
804
|
+
MlvSkeleton,
|
|
805
|
+
MlvChatMessage,
|
|
806
|
+
MlvChatDate,
|
|
807
|
+
MlvChatTyping,
|
|
808
|
+
MlvScrollbar,
|
|
809
|
+
], providers: [
|
|
810
|
+
MlvChatAudioService,
|
|
811
|
+
{ provide: MLV_DENSITY_ELEMENT, useValue: 'chat' },
|
|
812
|
+
{ provide: MLV_CHAT_USERS, useFactory: () => inject(MlvChat)._usersMap },
|
|
813
|
+
{
|
|
814
|
+
provide: MLV_CHAT_MESSAGE_DEFS,
|
|
815
|
+
useFactory: () => inject(MlvChat)._defsMap,
|
|
816
|
+
},
|
|
817
|
+
], hostDirectives: [{ directive: MlvDensityDirective, inputs: ['mlvDensity'] }], host: { class: 'mlv-chat' }, template: "<mlv-scrollbar\n #viewport\n class=\"mlv-chat__viewport\"\n role=\"log\"\n [attr.aria-label]=\"_i18n().chatLabel\"\n tabindex=\"0\"\n (scroll)=\"_onScroll()\"\n>\n <div #content class=\"mlv-chat__content\">\n @if (loading()) { @for (row of _skeletonRows; track $index) {\n <div class=\"mlv-chat__skeleton\" [class.mlv-chat__skeleton--own]=\"row.own\">\n <mlv-skeleton variant=\"rectangle\" [width]=\"row.width\" height=\"2.25rem\" />\n </div>\n } } @else { @if (loadingOlder()) {\n <div class=\"mlv-chat__older-loader\">\n <mlv-loader\n variant=\"circle\"\n [indeterminate]=\"true\"\n [size]=\"20\"\n [strokeWidth]=\"2\"\n />\n <span class=\"cdk-visually-hidden\">{{ _i18n().loadingOlder }}</span>\n </div>\n } @for (item of _renderItems(); track item.id) { @switch (item.kind) { @case\n ('date') {\n <div class=\"mlv-chat__date\">\n @if (dateDef(); as def) {\n <ng-container\n [ngTemplateOutlet]=\"def.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.date }\"\n />\n } @else {\n <mlv-chat-date [date]=\"item.date\" />\n }\n </div>\n } @case ('group') {\n <div class=\"mlv-chat__group\" [class.mlv-chat__group--own]=\"item.own\">\n @if (!item.own && _authorsVisible()) {\n <div class=\"mlv-chat__author\">\n @if (authorDef(); as def) {\n <ng-container\n [ngTemplateOutlet]=\"def.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: _usersMap().get(item.authorId),\n isOwn: item.own,\n firstMessage: item.messages[0].message,\n }\"\n />\n } @else { {{ _usersMap().get(item.authorId)?.name }} }\n </div>\n }\n <div class=\"mlv-chat__group-body\">\n @if (!item.own) {\n <mlv-avatar\n class=\"mlv-chat__avatar\"\n size=\"s\"\n [src]=\"_usersMap().get(item.authorId)?.avatarSrc ?? null\"\n [name]=\"_usersMap().get(item.authorId)?.name ?? ''\"\n [color]=\"(_usersMap().get(item.authorId)?.name ?? '') | mlvColorFromText\"\n />\n }\n <div class=\"mlv-chat__bubbles\">\n @for (rendered of item.messages; track rendered.message.id) {\n <article\n class=\"mlv-chat__item\"\n [class.mlv-chat__item--enter]=\"_liveIds().has(rendered.message.id)\"\n animate.leave=\"mlv-chat__item--leave\"\n [attr.aria-label]=\"_messageLabel(rendered.message, item.own)\"\n >\n <mlv-chat-message\n [message]=\"rendered.message\"\n [own]=\"item.own\"\n [groupPosition]=\"rendered.position\"\n (retry)=\"retry.emit(rendered.message)\"\n (mediaClick)=\"mediaClick.emit({ message: rendered.message, attachment: $event })\"\n (replyClick)=\"replyClick.emit({ message: rendered.message, replyTo: $event })\"\n />\n </article>\n }\n </div>\n </div>\n </div>\n } } } @if (_typingUserObjects().length) {\n <mlv-chat-typing class=\"mlv-chat__typing\" [users]=\"_typingUserObjects()\" />\n } }\n </div>\n</mlv-scrollbar>\n@if (!_pinned() && _newCount() > 0) {\n<button\n type=\"button\"\n class=\"mlv-chat__pill\"\n (click)=\"_scrollToBottom('smooth')\"\n>\n {{ _i18n().newMessages | mlvTranslate: { count: _newCount() } }}\n</button>\n}\n", styles: ["@layer mlv.components{@keyframes mlv-chat-item-enter{0%{opacity:0;transform:translateY(.5rem);grid-template-rows:0fr}to{opacity:1;transform:translateY(0);grid-template-rows:1fr}}@keyframes mlv-chat-item-leave-fade{to{opacity:0}}@keyframes mlv-chat-item-leave-collapse{to{grid-template-rows:0fr}}.mlv-chat{box-sizing:border-box;padding:0;margin:0;font-family:var(--mlv-typography-family-text);font-size:var(--mlv-typography-body-m-size)}.mlv-chat *{box-sizing:border-box}.mlv-chat{--mlv-chat-gap: .5rem;--mlv-chat-padding: var(--mlv-padding-m);--mlv-chat-bubble-gap: .125rem;position:relative;display:flex;flex-direction:column;min-block-size:0}.mlv-chat__viewport{flex:1;display:flex;flex-direction:column;padding:var(--mlv-chat-padding);overflow-y:auto;overflow-anchor:auto}.mlv-chat__content{display:flex;flex-direction:column;gap:var(--mlv-chat-gap);margin-block-start:auto}.mlv-chat__group{display:flex;flex-direction:column;gap:.125rem;content-visibility:auto;contain-intrinsic-size:auto 3.5rem}.mlv-chat__group--own{align-items:flex-end}.mlv-chat__group-body{display:flex;align-items:flex-end;gap:.5rem;max-inline-size:100%}.mlv-chat__avatar{position:sticky;inset-block-end:0;align-self:flex-end;flex-shrink:0}.mlv-chat__group--own .mlv-chat__group-body{flex-direction:row-reverse}.mlv-chat__bubbles{display:flex;flex-direction:column;gap:var(--mlv-chat-bubble-gap);max-inline-size:75%;min-inline-size:0}.mlv-chat__group--own .mlv-chat__bubbles{align-items:flex-end}.mlv-chat__item{display:grid;grid-template-rows:1fr;min-inline-size:0;will-change:transform,opacity,grid-template-rows}.mlv-chat__item>*{min-block-size:0;overflow:hidden}.mlv-chat__item--enter{animation:mlv-chat-item-enter var(--mlv-duration-slow) var(--mlv-ease-out-strong) both}.mlv-chat__item--leave{animation:mlv-chat-item-leave-fade var(--mlv-duration-fast) var(--mlv-ease-out-strong) forwards,mlv-chat-item-leave-collapse var(--mlv-duration-normal) var(--mlv-ease-out-strong) forwards}.mlv-chat__group--own .mlv-chat__item{justify-items:end}.mlv-chat__author{font-size:var(--mlv-typography-body-s-size);color:var(--mlv-text-secondary);margin-inline-start:2.25rem}.mlv-chat__date{align-self:center;font-size:inherit}.mlv-chat__older-loader{display:flex;justify-content:center;padding-block:.5rem}.mlv-chat__skeleton{display:flex}.mlv-chat__skeleton mlv-skeleton{border-radius:var(--mlv-radius-l)}.mlv-chat__skeleton--own{justify-content:flex-end}.mlv-chat__typing{align-self:flex-start}.mlv-chat-typing__label{font-size:var(--mlv-typography-body-m-size)}.mlv-chat__pill{position:absolute;inset-block-end:1rem;inset-inline:0;inline-size:fit-content;margin-inline:auto;padding:.375rem .75rem;border:none;border-radius:var(--mlv-radius-full);background-color:var(--mlv-background-raised);color:var(--mlv-text-action);box-shadow:var(--mlv-shadow-floating);font-size:var(--mlv-typography-body-s-size);cursor:pointer}.mlv-chat__pill:focus-visible{outline:var(--mlv-stroke-width-medium) solid var(--mlv-border-focus);outline-offset:var(--mlv-focus-ring-offset)}[class*=--tight] .mlv-chat:not([class*=--compact],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-chat[class*=--tight]{--mlv-chat-gap: .25rem;--mlv-chat-padding: var(--mlv-padding-xs);--mlv-chat-bubble-gap: .0625rem}[class*=--compact] .mlv-chat:not([class*=--tight],[class*=--comfortable],[class*=--spacious],[class*=--airy]),.mlv-chat[class*=--compact]{--mlv-chat-gap: .375rem;--mlv-chat-padding: var(--mlv-padding-s)}[class*=--spacious] .mlv-chat:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--airy]),.mlv-chat[class*=--spacious]{--mlv-chat-gap: .75rem;--mlv-chat-padding: var(--mlv-padding-l);--mlv-chat-bubble-gap: .25rem}[class*=--airy] .mlv-chat:not([class*=--tight],[class*=--compact],[class*=--comfortable],[class*=--spacious]),.mlv-chat[class*=--airy]{--mlv-chat-gap: 1rem;--mlv-chat-padding: var(--mlv-padding-xl);--mlv-chat-bubble-gap: .375rem}@media(prefers-reduced-motion:reduce){.mlv-chat,.mlv-chat *,.mlv-chat:before,.mlv-chat:after,[class^=mlv-chat__],[class*=\" mlv-chat__\"],[class^=mlv-chat--],[class*=\" mlv-chat--\"]{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:var(--mlv-duration-instant)!important}}}\n"] }]
|
|
818
|
+
}], ctorParameters: () => [], propDecorators: { messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: true }] }], selfId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selfId", required: true }] }], users: [{ type: i0.Input, args: [{ isSignal: true, alias: "users", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], loadingOlder: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingOlder", required: false }] }], hasOlder: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasOlder", required: false }] }], typingUsers: [{ type: i0.Input, args: [{ isSignal: true, alias: "typingUsers", required: false }] }], groupWindow: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupWindow", required: false }] }], showAuthors: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAuthors", required: false }] }], dateSeparators: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateSeparators", required: false }] }], windowSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "windowSize", required: false }] }], loadOlder: [{ type: i0.Output, args: ["loadOlder"] }], retry: [{ type: i0.Output, args: ["retry"] }], mediaClick: [{ type: i0.Output, args: ["mediaClick"] }], replyClick: [{ type: i0.Output, args: ["replyClick"] }], authorDef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvChatAuthorDef), { isSignal: true }] }], dateDef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MlvChatDateDef), { isSignal: true }] }], _messageDefs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => MlvChatMessageDef), { isSignal: true }] }], _viewport: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MlvScrollbar), { isSignal: true }] }], _content: [{ type: i0.ViewChild, args: ['content', { isSignal: true }] }] } });
|
|
819
|
+
|
|
820
|
+
/**
|
|
821
|
+
* Generated bundle index. Do not edit.
|
|
822
|
+
*/
|
|
823
|
+
|
|
824
|
+
export { MLV_CHAT_MESSAGE_DEFS, MLV_CHAT_USERS, MlvChat, MlvChatAuthorDef, MlvChatDateDef, MlvChatMessage, MlvChatMessageDef, buildChatRenderList, formatChatDuration, isSameChatDay, toChatDate };
|
|
825
|
+
//# sourceMappingURL=malva-ui-core-chat.mjs.map
|