@slotted/angular 0.1.0-beta.1 → 0.1.0-beta.11
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/README.md +4 -0
- package/docs/AGENTS.snippet.md +12 -0
- package/docs/action-bar.json +4 -4
- package/docs/action-bar.md +3 -3
- package/docs/alert.json +7 -1
- package/docs/alert.md +3 -3
- package/docs/app-shell.examples.md +1 -1
- package/docs/app-shell.json +5 -5
- package/docs/app-shell.md +2 -2
- package/docs/avatar.json +22 -1
- package/docs/avatar.md +5 -3
- package/docs/badge.json +7 -1
- package/docs/badge.md +3 -3
- package/docs/button-group.json +2 -0
- package/docs/button-group.md +1 -1
- package/docs/button.json +51 -11
- package/docs/button.md +10 -6
- package/docs/calendar.json +8 -1
- package/docs/calendar.md +3 -2
- package/docs/cascader.json +1 -0
- package/docs/cascader.md +1 -1
- package/docs/chart.examples.md +1 -1
- package/docs/chart.json +10 -1
- package/docs/chart.md +3 -2
- package/docs/checkbox.json +7 -0
- package/docs/checkbox.md +1 -0
- package/docs/code-block.json +92 -92
- package/docs/code-block.md +69 -69
- package/docs/combobox.json +1 -0
- package/docs/combobox.md +1 -1
- package/docs/command-palette.json +1 -0
- package/docs/command-palette.md +1 -1
- package/docs/currency-field.json +40 -1
- package/docs/currency-field.md +5 -1
- package/docs/data-grid.examples.md +2 -2
- package/docs/data-grid.json +45 -7
- package/docs/data-grid.md +3 -1
- package/docs/data-grid.props.md +7 -4
- package/docs/data-list.json +2 -1
- package/docs/data-list.md +1 -1
- package/docs/date-field.json +9 -1
- package/docs/date-field.md +3 -2
- package/docs/date-picker.examples.md +36 -0
- package/docs/date-picker.json +20 -5
- package/docs/date-picker.md +5 -4
- package/docs/datetime-field.json +1 -0
- package/docs/datetime-field.md +1 -1
- package/docs/detail-panel.json +4 -2
- package/docs/detail-panel.md +8 -3
- package/docs/dialog.examples.md +158 -136
- package/docs/dialog.json +36 -11
- package/docs/dialog.md +4 -2
- package/docs/dialog.props.md +1 -1
- package/docs/drawer.json +11 -4
- package/docs/drawer.md +4 -3
- package/docs/entity-picker.json +19 -4
- package/docs/entity-picker.md +8 -6
- package/docs/event-calendar.json +7 -0
- package/docs/event-calendar.md +3 -2
- package/docs/filter-bar.json +118 -118
- package/docs/filter-bar.md +79 -79
- package/docs/form.json +2 -1
- package/docs/form.md +1 -1
- package/docs/guidelines/README.md +27 -0
- package/docs/guidelines/async-feedback.md +129 -0
- package/docs/guidelines/browsing.md +74 -0
- package/docs/guidelines/builders.md +97 -0
- package/docs/guidelines/composition.md +143 -0
- package/docs/guidelines/conversations.md +59 -0
- package/docs/guidelines/errors-and-conflicts.md +71 -0
- package/docs/guidelines/forms.md +202 -0
- package/docs/guidelines/index.md +130 -0
- package/docs/guidelines/layout-alignment.md +105 -0
- package/docs/guidelines/ledgers.md +45 -0
- package/docs/guidelines/list-pages.md +206 -0
- package/docs/guidelines/overviews.md +76 -0
- package/docs/guidelines/own-elements.md +115 -0
- package/docs/guidelines/reading-permissions.md +55 -0
- package/docs/guidelines/record-pages.md +178 -0
- package/docs/guidelines/reports.md +123 -0
- package/docs/guidelines/shell-composition.md +94 -0
- package/docs/guidelines/workspaces.md +46 -0
- package/docs/icon.json +3 -1
- package/docs/icon.md +3 -3
- package/docs/index.md +12 -0
- package/docs/inline-message.json +14 -2
- package/docs/inline-message.md +4 -3
- package/docs/list-item.json +9 -1
- package/docs/list-item.md +3 -3
- package/docs/list.json +19 -1
- package/docs/list.md +3 -1
- package/docs/markdown.json +79 -79
- package/docs/markdown.md +65 -65
- package/docs/menu.json +12 -0
- package/docs/menu.md +2 -0
- package/docs/message.json +7 -1
- package/docs/message.md +3 -3
- package/docs/multi-select.json +1 -0
- package/docs/multi-select.md +1 -1
- package/docs/notification-center.json +4 -0
- package/docs/notification-center.md +2 -2
- package/docs/number-field.json +1 -0
- package/docs/number-field.md +1 -1
- package/docs/otp-input.json +1 -0
- package/docs/otp-input.md +1 -1
- package/docs/page-header.json +22 -5
- package/docs/page-header.md +6 -4
- package/docs/page.json +2 -0
- package/docs/page.md +2 -1
- package/docs/popover.json +1 -1
- package/docs/progress-indicator.json +4 -3
- package/docs/progress-indicator.md +4 -4
- package/docs/prompt-composer.json +41 -1
- package/docs/prompt-composer.md +5 -1
- package/docs/rating.json +5 -3
- package/docs/rating.md +6 -6
- package/docs/section.json +28 -16
- package/docs/section.md +12 -10
- package/docs/segmented-control.json +36 -12
- package/docs/segmented-control.md +17 -1
- package/docs/select.json +1 -0
- package/docs/select.md +1 -1
- package/docs/side-navigation.json +1 -0
- package/docs/side-navigation.md +1 -1
- package/docs/skills/build-own-element/SKILL.md +90 -0
- package/docs/skills/compose-screen/SKILL.md +103 -0
- package/docs/skills/index.md +9 -0
- package/docs/skills/review-screen/SKILL.md +79 -0
- package/docs/skills/theme-app/SKILL.md +98 -0
- package/docs/skills/waiting-states/SKILL.md +143 -0
- package/docs/sparkline.json +5 -2
- package/docs/sparkline.md +4 -4
- package/docs/split-button.json +4 -1
- package/docs/split-button.md +3 -3
- package/docs/stat-card.json +5 -1
- package/docs/stat-card.md +3 -3
- package/docs/table.examples.md +3 -3
- package/docs/table.json +85 -3
- package/docs/table.md +12 -1
- package/docs/tabs.json +17 -7
- package/docs/tabs.md +3 -2
- package/docs/tag.json +14 -4
- package/docs/tag.md +6 -6
- package/docs/tags-input.json +29 -2
- package/docs/tags-input.md +4 -1
- package/docs/text-field.json +2 -1
- package/docs/text-field.md +2 -2
- package/docs/textarea.json +1 -0
- package/docs/textarea.md +1 -1
- package/docs/time-field.json +1 -0
- package/docs/time-field.md +1 -1
- package/docs/timeline.json +138 -132
- package/docs/timeline.md +125 -125
- package/docs/toast.json +8 -1
- package/docs/toast.md +3 -3
- package/docs/toggle-group.json +14 -3
- package/docs/toggle-group.md +3 -3
- package/docs/toggle.json +12 -3
- package/docs/toggle.md +3 -3
- package/docs/tokens.md +467 -0
- package/docs/toolbar.json +1 -1
- package/docs/toolbar.md +1 -1
- package/docs/tour.json +1 -1
- package/docs/typography.json +4 -2
- package/docs/typography.md +5 -5
- package/fesm2022/slotted-angular-accordion.mjs +4 -2
- package/fesm2022/slotted-angular-accordion.mjs.map +1 -1
- package/fesm2022/slotted-angular-action-bar.mjs +27 -12
- package/fesm2022/slotted-angular-action-bar.mjs.map +1 -1
- package/fesm2022/slotted-angular-action-sheet.mjs +48 -29
- package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -1
- package/fesm2022/slotted-angular-alert.mjs +18 -11
- package/fesm2022/slotted-angular-alert.mjs.map +1 -1
- package/fesm2022/slotted-angular-app-shell.mjs +111 -61
- package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
- package/fesm2022/slotted-angular-aspect-ratio.mjs +4 -2
- package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -1
- package/fesm2022/slotted-angular-attachment.mjs +31 -20
- package/fesm2022/slotted-angular-attachment.mjs.map +1 -1
- package/fesm2022/slotted-angular-avatar-group.mjs +9 -6
- package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-avatar.mjs +14 -7
- package/fesm2022/slotted-angular-avatar.mjs.map +1 -1
- package/fesm2022/slotted-angular-badge.mjs +14 -10
- package/fesm2022/slotted-angular-badge.mjs.map +1 -1
- package/fesm2022/slotted-angular-breadcrumb.mjs +26 -18
- package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -1
- package/fesm2022/slotted-angular-button-group.mjs +7 -4
- package/fesm2022/slotted-angular-button-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-button.mjs +120 -29
- package/fesm2022/slotted-angular-button.mjs.map +1 -1
- package/fesm2022/slotted-angular-calendar.mjs +235 -58
- package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
- package/fesm2022/slotted-angular-card.mjs +18 -16
- package/fesm2022/slotted-angular-card.mjs.map +1 -1
- package/fesm2022/slotted-angular-carousel.mjs +22 -11
- package/fesm2022/slotted-angular-carousel.mjs.map +1 -1
- package/fesm2022/slotted-angular-cascader.mjs +180 -66
- package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
- package/fesm2022/slotted-angular-chart.mjs +53 -20
- package/fesm2022/slotted-angular-chart.mjs.map +1 -1
- package/fesm2022/slotted-angular-checkbox-group.mjs +5 -3
- package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-checkbox.mjs +23 -9
- package/fesm2022/slotted-angular-checkbox.mjs.map +1 -1
- package/fesm2022/slotted-angular-code-block.mjs +29 -15
- package/fesm2022/slotted-angular-code-block.mjs.map +1 -1
- package/fesm2022/slotted-angular-collapsible.mjs +20 -15
- package/fesm2022/slotted-angular-collapsible.mjs.map +1 -1
- package/fesm2022/slotted-angular-color-picker.mjs +77 -22
- package/fesm2022/slotted-angular-color-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-column-manager.mjs +68 -31
- package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
- package/fesm2022/slotted-angular-combobox.mjs +118 -39
- package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
- package/fesm2022/slotted-angular-command-palette.mjs +162 -54
- package/fesm2022/slotted-angular-command-palette.mjs.map +1 -1
- package/fesm2022/slotted-angular-container.mjs +6 -4
- package/fesm2022/slotted-angular-container.mjs.map +1 -1
- package/fesm2022/slotted-angular-context-menu.mjs +5 -4
- package/fesm2022/slotted-angular-context-menu.mjs.map +1 -1
- package/fesm2022/slotted-angular-currency-field.mjs +149 -32
- package/fesm2022/slotted-angular-currency-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-dashboard-grid.mjs +142 -63
- package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-data-grid.mjs +480 -129
- package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-data-list.mjs +83 -50
- package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-field.mjs +74 -25
- package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-picker.mjs +112 -40
- package/fesm2022/slotted-angular-date-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-range-picker.mjs +45 -22
- package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-field.mjs +48 -16
- package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-picker.mjs +41 -29
- package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-range-picker.mjs +115 -48
- package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-description-list.mjs +33 -19
- package/fesm2022/slotted-angular-description-list.mjs.map +1 -1
- package/fesm2022/slotted-angular-detail-panel.mjs +48 -30
- package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -1
- package/fesm2022/slotted-angular-dialog.mjs +72 -30
- package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
- package/fesm2022/slotted-angular-divider.mjs +7 -5
- package/fesm2022/slotted-angular-divider.mjs.map +1 -1
- package/fesm2022/slotted-angular-drawer.mjs +91 -37
- package/fesm2022/slotted-angular-drawer.mjs.map +1 -1
- package/fesm2022/slotted-angular-entity-picker.mjs +474 -75
- package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-event-calendar.mjs +275 -108
- package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
- package/fesm2022/slotted-angular-field-group.mjs +14 -7
- package/fesm2022/slotted-angular-field-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-field.mjs +35 -15
- package/fesm2022/slotted-angular-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-filter-bar.mjs +118 -51
- package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
- package/fesm2022/slotted-angular-form.mjs +18 -10
- package/fesm2022/slotted-angular-form.mjs.map +1 -1
- package/fesm2022/slotted-angular-fullscreen.mjs +14 -8
- package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -1
- package/fesm2022/slotted-angular-grid.mjs +4 -2
- package/fesm2022/slotted-angular-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-highlight.mjs +5 -3
- package/fesm2022/slotted-angular-highlight.mjs.map +1 -1
- package/fesm2022/slotted-angular-hover-card.mjs +5 -4
- package/fesm2022/slotted-angular-hover-card.mjs.map +1 -1
- package/fesm2022/slotted-angular-icon.mjs +6 -3
- package/fesm2022/slotted-angular-icon.mjs.map +1 -1
- package/fesm2022/slotted-angular-image.mjs +13 -10
- package/fesm2022/slotted-angular-image.mjs.map +1 -1
- package/fesm2022/slotted-angular-import-export-center.mjs +175 -99
- package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
- package/fesm2022/slotted-angular-inline-message.mjs +88 -13
- package/fesm2022/slotted-angular-inline-message.mjs.map +1 -1
- package/fesm2022/slotted-angular-inline.mjs +4 -2
- package/fesm2022/slotted-angular-inline.mjs.map +1 -1
- package/fesm2022/slotted-angular-kbd.mjs +11 -7
- package/fesm2022/slotted-angular-kbd.mjs.map +1 -1
- package/fesm2022/slotted-angular-link.mjs +5 -3
- package/fesm2022/slotted-angular-link.mjs.map +1 -1
- package/fesm2022/slotted-angular-list-item.mjs +21 -18
- package/fesm2022/slotted-angular-list-item.mjs.map +1 -1
- package/fesm2022/slotted-angular-list.mjs +37 -22
- package/fesm2022/slotted-angular-list.mjs.map +1 -1
- package/fesm2022/slotted-angular-listbox.mjs +39 -21
- package/fesm2022/slotted-angular-listbox.mjs.map +1 -1
- package/fesm2022/slotted-angular-loading-overlay.mjs +59 -22
- package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -1
- package/fesm2022/slotted-angular-markdown.mjs +31 -19
- package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
- package/fesm2022/slotted-angular-menu.mjs +51 -29
- package/fesm2022/slotted-angular-menu.mjs.map +1 -1
- package/fesm2022/slotted-angular-menubar.mjs +4 -2
- package/fesm2022/slotted-angular-menubar.mjs.map +1 -1
- package/fesm2022/slotted-angular-message-scroller.mjs +34 -15
- package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -1
- package/fesm2022/slotted-angular-message.mjs +119 -51
- package/fesm2022/slotted-angular-message.mjs.map +1 -1
- package/fesm2022/slotted-angular-multi-select.mjs +195 -87
- package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
- package/fesm2022/slotted-angular-navigation-menu.mjs +34 -26
- package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -1
- package/fesm2022/slotted-angular-notification-center.mjs +108 -65
- package/fesm2022/slotted-angular-notification-center.mjs.map +1 -1
- package/fesm2022/slotted-angular-number-field.mjs +23 -11
- package/fesm2022/slotted-angular-number-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-otp-input.mjs +13 -8
- package/fesm2022/slotted-angular-otp-input.mjs.map +1 -1
- package/fesm2022/slotted-angular-page-header.mjs +90 -48
- package/fesm2022/slotted-angular-page-header.mjs.map +1 -1
- package/fesm2022/slotted-angular-page.mjs +38 -10
- package/fesm2022/slotted-angular-page.mjs.map +1 -1
- package/fesm2022/slotted-angular-pagination.mjs +35 -22
- package/fesm2022/slotted-angular-pagination.mjs.map +1 -1
- package/fesm2022/slotted-angular-popover.mjs +32 -19
- package/fesm2022/slotted-angular-popover.mjs.map +1 -1
- package/fesm2022/slotted-angular-progress-indicator.mjs +236 -52
- package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -1
- package/fesm2022/slotted-angular-prompt-composer.mjs +57 -20
- package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -1
- package/fesm2022/slotted-angular-prose.mjs +14 -11
- package/fesm2022/slotted-angular-prose.mjs.map +1 -1
- package/fesm2022/slotted-angular-radio-group.mjs +15 -9
- package/fesm2022/slotted-angular-radio-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-rating.mjs +138 -82
- package/fesm2022/slotted-angular-rating.mjs.map +1 -1
- package/fesm2022/slotted-angular-result-state.mjs +16 -12
- package/fesm2022/slotted-angular-result-state.mjs.map +1 -1
- package/fesm2022/slotted-angular-saved-views.mjs +43 -16
- package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
- package/fesm2022/slotted-angular-scroll-area.mjs +13 -5
- package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -1
- package/fesm2022/slotted-angular-section.mjs +53 -18
- package/fesm2022/slotted-angular-section.mjs.map +1 -1
- package/fesm2022/slotted-angular-segmented-control.mjs +37 -11
- package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -1
- package/fesm2022/slotted-angular-select.mjs +190 -94
- package/fesm2022/slotted-angular-select.mjs.map +1 -1
- package/fesm2022/slotted-angular-side-navigation.mjs +46 -35
- package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -1
- package/fesm2022/slotted-angular-skeleton.mjs +32 -16
- package/fesm2022/slotted-angular-skeleton.mjs.map +1 -1
- package/fesm2022/slotted-angular-slider.mjs +31 -11
- package/fesm2022/slotted-angular-slider.mjs.map +1 -1
- package/fesm2022/slotted-angular-sparkline.mjs +41 -14
- package/fesm2022/slotted-angular-sparkline.mjs.map +1 -1
- package/fesm2022/slotted-angular-split-button.mjs +37 -11
- package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
- package/fesm2022/slotted-angular-splitter.mjs +11 -9
- package/fesm2022/slotted-angular-splitter.mjs.map +1 -1
- package/fesm2022/slotted-angular-stack.mjs +4 -2
- package/fesm2022/slotted-angular-stack.mjs.map +1 -1
- package/fesm2022/slotted-angular-stat-card.mjs +35 -28
- package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
- package/fesm2022/slotted-angular-status-indicator.mjs +22 -8
- package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -1
- package/fesm2022/slotted-angular-stepper.mjs +40 -15
- package/fesm2022/slotted-angular-stepper.mjs.map +1 -1
- package/fesm2022/slotted-angular-switch.mjs +15 -10
- package/fesm2022/slotted-angular-switch.mjs.map +1 -1
- package/fesm2022/slotted-angular-table-of-contents.mjs +29 -21
- package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -1
- package/fesm2022/slotted-angular-table.mjs +243 -73
- package/fesm2022/slotted-angular-table.mjs.map +1 -1
- package/fesm2022/slotted-angular-tabs.mjs +42 -18
- package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
- package/fesm2022/slotted-angular-tag.mjs +19 -12
- package/fesm2022/slotted-angular-tag.mjs.map +1 -1
- package/fesm2022/slotted-angular-tags-input.mjs +253 -28
- package/fesm2022/slotted-angular-tags-input.mjs.map +1 -1
- package/fesm2022/slotted-angular-text-field.mjs +55 -15
- package/fesm2022/slotted-angular-text-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-textarea.mjs +5 -3
- package/fesm2022/slotted-angular-textarea.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-field.mjs +48 -14
- package/fesm2022/slotted-angular-time-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-picker.mjs +32 -20
- package/fesm2022/slotted-angular-time-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-range-picker.mjs +113 -46
- package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-timeline.mjs +147 -64
- package/fesm2022/slotted-angular-timeline.mjs.map +1 -1
- package/fesm2022/slotted-angular-toast.mjs +43 -31
- package/fesm2022/slotted-angular-toast.mjs.map +1 -1
- package/fesm2022/slotted-angular-toggle-group.mjs +25 -8
- package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-toggle.mjs +9 -4
- package/fesm2022/slotted-angular-toggle.mjs.map +1 -1
- package/fesm2022/slotted-angular-toolbar.mjs +27 -12
- package/fesm2022/slotted-angular-toolbar.mjs.map +1 -1
- package/fesm2022/slotted-angular-tooltip.mjs +15 -6
- package/fesm2022/slotted-angular-tooltip.mjs.map +1 -1
- package/fesm2022/slotted-angular-top-navigation.mjs +64 -44
- package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -1
- package/fesm2022/slotted-angular-tour.mjs +47 -22
- package/fesm2022/slotted-angular-tour.mjs.map +1 -1
- package/fesm2022/slotted-angular-transfer.mjs +69 -30
- package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
- package/fesm2022/slotted-angular-tree.mjs +80 -26
- package/fesm2022/slotted-angular-tree.mjs.map +1 -1
- package/fesm2022/slotted-angular-typography.mjs +8 -4
- package/fesm2022/slotted-angular-typography.mjs.map +1 -1
- package/fesm2022/slotted-angular-upload.mjs +125 -57
- package/fesm2022/slotted-angular-upload.mjs.map +1 -1
- package/fesm2022/slotted-angular-visually-hidden.mjs +4 -2
- package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -1
- package/fesm2022/slotted-angular-wizard.mjs +163 -65
- package/fesm2022/slotted-angular-wizard.mjs.map +1 -1
- package/package.json +3 -3
- package/types/slotted-angular-accordion.d.ts.map +1 -1
- package/types/slotted-angular-action-bar.d.ts +2 -0
- package/types/slotted-angular-action-bar.d.ts.map +1 -1
- package/types/slotted-angular-action-sheet.d.ts.map +1 -1
- package/types/slotted-angular-alert.d.ts +2 -2
- package/types/slotted-angular-alert.d.ts.map +1 -1
- package/types/slotted-angular-app-shell.d.ts +11 -3
- package/types/slotted-angular-app-shell.d.ts.map +1 -1
- package/types/slotted-angular-aspect-ratio.d.ts.map +1 -1
- package/types/slotted-angular-attachment.d.ts +1 -1
- package/types/slotted-angular-attachment.d.ts.map +1 -1
- package/types/slotted-angular-avatar-group.d.ts.map +1 -1
- package/types/slotted-angular-avatar.d.ts +11 -3
- package/types/slotted-angular-avatar.d.ts.map +1 -1
- package/types/slotted-angular-badge.d.ts +1 -1
- package/types/slotted-angular-badge.d.ts.map +1 -1
- package/types/slotted-angular-breadcrumb.d.ts.map +1 -1
- package/types/slotted-angular-button-group.d.ts +1 -1
- package/types/slotted-angular-button-group.d.ts.map +1 -1
- package/types/slotted-angular-button.d.ts +33 -13
- package/types/slotted-angular-button.d.ts.map +1 -1
- package/types/slotted-angular-calendar.d.ts +30 -2
- package/types/slotted-angular-calendar.d.ts.map +1 -1
- package/types/slotted-angular-card.d.ts.map +1 -1
- package/types/slotted-angular-carousel.d.ts.map +1 -1
- package/types/slotted-angular-cascader.d.ts.map +1 -1
- package/types/slotted-angular-chart.d.ts +10 -0
- package/types/slotted-angular-chart.d.ts.map +1 -1
- package/types/slotted-angular-checkbox-group.d.ts.map +1 -1
- package/types/slotted-angular-checkbox.d.ts +7 -1
- package/types/slotted-angular-checkbox.d.ts.map +1 -1
- package/types/slotted-angular-code-block.d.ts +1 -1
- package/types/slotted-angular-code-block.d.ts.map +1 -1
- package/types/slotted-angular-collapsible.d.ts +1 -1
- package/types/slotted-angular-collapsible.d.ts.map +1 -1
- package/types/slotted-angular-color-picker.d.ts.map +1 -1
- package/types/slotted-angular-column-manager.d.ts.map +1 -1
- package/types/slotted-angular-combobox.d.ts +5 -1
- package/types/slotted-angular-combobox.d.ts.map +1 -1
- package/types/slotted-angular-command-palette.d.ts +10 -1
- package/types/slotted-angular-command-palette.d.ts.map +1 -1
- package/types/slotted-angular-container.d.ts.map +1 -1
- package/types/slotted-angular-context-menu.d.ts.map +1 -1
- package/types/slotted-angular-currency-field.d.ts +63 -15
- package/types/slotted-angular-currency-field.d.ts.map +1 -1
- package/types/slotted-angular-dashboard-grid.d.ts.map +1 -1
- package/types/slotted-angular-data-grid.d.ts +72 -4
- package/types/slotted-angular-data-grid.d.ts.map +1 -1
- package/types/slotted-angular-data-list.d.ts.map +1 -1
- package/types/slotted-angular-date-field.d.ts +11 -1
- package/types/slotted-angular-date-field.d.ts.map +1 -1
- package/types/slotted-angular-date-picker.d.ts +38 -12
- package/types/slotted-angular-date-picker.d.ts.map +1 -1
- package/types/slotted-angular-date-range-picker.d.ts +0 -1
- package/types/slotted-angular-date-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-datetime-field.d.ts.map +1 -1
- package/types/slotted-angular-datetime-picker.d.ts +0 -1
- package/types/slotted-angular-datetime-picker.d.ts.map +1 -1
- package/types/slotted-angular-datetime-range-picker.d.ts +0 -1
- package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-description-list.d.ts.map +1 -1
- package/types/slotted-angular-detail-panel.d.ts.map +1 -1
- package/types/slotted-angular-dialog.d.ts +10 -3
- package/types/slotted-angular-dialog.d.ts.map +1 -1
- package/types/slotted-angular-divider.d.ts.map +1 -1
- package/types/slotted-angular-drawer.d.ts +12 -1
- package/types/slotted-angular-drawer.d.ts.map +1 -1
- package/types/slotted-angular-entity-picker.d.ts +63 -15
- package/types/slotted-angular-entity-picker.d.ts.map +1 -1
- package/types/slotted-angular-event-calendar.d.ts +9 -2
- package/types/slotted-angular-event-calendar.d.ts.map +1 -1
- package/types/slotted-angular-field-group.d.ts.map +1 -1
- package/types/slotted-angular-field.d.ts.map +1 -1
- package/types/slotted-angular-filter-bar.d.ts.map +1 -1
- package/types/slotted-angular-form.d.ts.map +1 -1
- package/types/slotted-angular-fullscreen.d.ts.map +1 -1
- package/types/slotted-angular-grid.d.ts.map +1 -1
- package/types/slotted-angular-highlight.d.ts.map +1 -1
- package/types/slotted-angular-hover-card.d.ts.map +1 -1
- package/types/slotted-angular-icon.d.ts +2 -2
- package/types/slotted-angular-icon.d.ts.map +1 -1
- package/types/slotted-angular-image.d.ts.map +1 -1
- package/types/slotted-angular-import-export-center.d.ts.map +1 -1
- package/types/slotted-angular-inline-message.d.ts +25 -25
- package/types/slotted-angular-inline-message.d.ts.map +1 -1
- package/types/slotted-angular-inline.d.ts.map +1 -1
- package/types/slotted-angular-kbd.d.ts.map +1 -1
- package/types/slotted-angular-link.d.ts.map +1 -1
- package/types/slotted-angular-list-item.d.ts +1 -1
- package/types/slotted-angular-list-item.d.ts.map +1 -1
- package/types/slotted-angular-list.d.ts +42 -27
- package/types/slotted-angular-list.d.ts.map +1 -1
- package/types/slotted-angular-listbox.d.ts.map +1 -1
- package/types/slotted-angular-loading-overlay.d.ts.map +1 -1
- package/types/slotted-angular-markdown.d.ts.map +1 -1
- package/types/slotted-angular-menu.d.ts +11 -2
- package/types/slotted-angular-menu.d.ts.map +1 -1
- package/types/slotted-angular-menubar.d.ts.map +1 -1
- package/types/slotted-angular-message-scroller.d.ts.map +1 -1
- package/types/slotted-angular-message.d.ts +1 -1
- package/types/slotted-angular-message.d.ts.map +1 -1
- package/types/slotted-angular-multi-select.d.ts +15 -1
- package/types/slotted-angular-multi-select.d.ts.map +1 -1
- package/types/slotted-angular-navigation-menu.d.ts.map +1 -1
- package/types/slotted-angular-notification-center.d.ts +1 -1
- package/types/slotted-angular-notification-center.d.ts.map +1 -1
- package/types/slotted-angular-number-field.d.ts.map +1 -1
- package/types/slotted-angular-otp-input.d.ts.map +1 -1
- package/types/slotted-angular-page-header.d.ts +15 -6
- package/types/slotted-angular-page-header.d.ts.map +1 -1
- package/types/slotted-angular-page.d.ts.map +1 -1
- package/types/slotted-angular-pagination.d.ts.map +1 -1
- package/types/slotted-angular-popover.d.ts.map +1 -1
- package/types/slotted-angular-progress-indicator.d.ts +8 -1
- package/types/slotted-angular-progress-indicator.d.ts.map +1 -1
- package/types/slotted-angular-prompt-composer.d.ts +11 -2
- package/types/slotted-angular-prompt-composer.d.ts.map +1 -1
- package/types/slotted-angular-prose.d.ts.map +1 -1
- package/types/slotted-angular-radio-group.d.ts.map +1 -1
- package/types/slotted-angular-rating.d.ts +1 -1
- package/types/slotted-angular-rating.d.ts.map +1 -1
- package/types/slotted-angular-result-state.d.ts.map +1 -1
- package/types/slotted-angular-saved-views.d.ts.map +1 -1
- package/types/slotted-angular-scroll-area.d.ts.map +1 -1
- package/types/slotted-angular-section.d.ts +11 -3
- package/types/slotted-angular-section.d.ts.map +1 -1
- package/types/slotted-angular-segmented-control.d.ts +15 -2
- package/types/slotted-angular-segmented-control.d.ts.map +1 -1
- package/types/slotted-angular-select.d.ts +12 -2
- package/types/slotted-angular-select.d.ts.map +1 -1
- package/types/slotted-angular-side-navigation.d.ts.map +1 -1
- package/types/slotted-angular-skeleton.d.ts.map +1 -1
- package/types/slotted-angular-slider.d.ts.map +1 -1
- package/types/slotted-angular-sparkline.d.ts +7 -1
- package/types/slotted-angular-sparkline.d.ts.map +1 -1
- package/types/slotted-angular-split-button.d.ts +2 -2
- package/types/slotted-angular-split-button.d.ts.map +1 -1
- package/types/slotted-angular-splitter.d.ts.map +1 -1
- package/types/slotted-angular-stack.d.ts.map +1 -1
- package/types/slotted-angular-stat-card.d.ts +1 -1
- package/types/slotted-angular-stat-card.d.ts.map +1 -1
- package/types/slotted-angular-status-indicator.d.ts +1 -1
- package/types/slotted-angular-status-indicator.d.ts.map +1 -1
- package/types/slotted-angular-stepper.d.ts +1 -1
- package/types/slotted-angular-stepper.d.ts.map +1 -1
- package/types/slotted-angular-switch.d.ts.map +1 -1
- package/types/slotted-angular-table-of-contents.d.ts.map +1 -1
- package/types/slotted-angular-table.d.ts +63 -6
- package/types/slotted-angular-table.d.ts.map +1 -1
- package/types/slotted-angular-tabs.d.ts +3 -4
- package/types/slotted-angular-tabs.d.ts.map +1 -1
- package/types/slotted-angular-tag.d.ts +1 -1
- package/types/slotted-angular-tag.d.ts.map +1 -1
- package/types/slotted-angular-tags-input.d.ts +33 -1
- package/types/slotted-angular-tags-input.d.ts.map +1 -1
- package/types/slotted-angular-text-field.d.ts.map +1 -1
- package/types/slotted-angular-textarea.d.ts.map +1 -1
- package/types/slotted-angular-theme.d.ts +1 -1
- package/types/slotted-angular-time-field.d.ts.map +1 -1
- package/types/slotted-angular-time-picker.d.ts +0 -1
- package/types/slotted-angular-time-picker.d.ts.map +1 -1
- package/types/slotted-angular-time-range-picker.d.ts +0 -1
- package/types/slotted-angular-time-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-timeline.d.ts +1 -1
- package/types/slotted-angular-timeline.d.ts.map +1 -1
- package/types/slotted-angular-toast.d.ts +3 -3
- package/types/slotted-angular-toast.d.ts.map +1 -1
- package/types/slotted-angular-toggle-group.d.ts +8 -2
- package/types/slotted-angular-toggle-group.d.ts.map +1 -1
- package/types/slotted-angular-toggle.d.ts +1 -1
- package/types/slotted-angular-toggle.d.ts.map +1 -1
- package/types/slotted-angular-toolbar.d.ts +2 -0
- package/types/slotted-angular-toolbar.d.ts.map +1 -1
- package/types/slotted-angular-tooltip.d.ts.map +1 -1
- package/types/slotted-angular-top-navigation.d.ts.map +1 -1
- package/types/slotted-angular-tour.d.ts.map +1 -1
- package/types/slotted-angular-transfer.d.ts.map +1 -1
- package/types/slotted-angular-tree.d.ts.map +1 -1
- package/types/slotted-angular-typography.d.ts +1 -1
- package/types/slotted-angular-typography.d.ts.map +1 -1
- package/types/slotted-angular-upload.d.ts +2 -2
- package/types/slotted-angular-upload.d.ts.map +1 -1
- package/types/slotted-angular-visually-hidden.d.ts.map +1 -1
- package/types/slotted-angular-wizard.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotted-angular-menubar.mjs","sources":["../../menubar/src/menubar-defaults.ts","../../menubar/src/menubar.ts","../../menubar/src/slotted-angular-menubar.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { MenuSize } from '@slotted/angular/menu';\n\nexport type MenubarOrientation = 'horizontal' | 'vertical';\n\nexport interface MenubarDefaults {\n disabled: boolean;\n loop: boolean;\n orientation: MenubarOrientation;\n size: MenuSize;\n typeahead: boolean;\n}\n\n/**\n * A bar is horizontal, wraps at its ends and answers typeahead — the three the\n * pattern describes. `size` is the one an application usually states, and it\n * reaches every menu the bar opens.\n */\nconst FALLBACK: MenubarDefaults = {\n disabled: false,\n loop: true,\n orientation: 'horizontal',\n size: 'md',\n typeahead: true,\n};\n\nexport const MENUBAR_DEFAULTS = new InjectionToken<MenubarDefaults>('slotted menubar defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/** The decisions an application takes once, in its bootstrap. */\nexport function provideMenubarDefaults(defaults: Partial<MenubarDefaults>) {\n return {\n provide: MENUBAR_DEFAULTS,\n useFactory: (): MenubarDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectMenubarDefaults(): MenubarDefaults {\n return inject(MENUBAR_DEFAULTS);\n}\n","import { createRovingTabindex } from '@slotted/core/focus';\nimport type { RovingTabindexHandle } from '@slotted/core/focus';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport { createTypeahead, isPrintable } from '@slotted/core/typeahead';\nimport type { TypeaheadHandle } from '@slotted/core/typeahead';\nimport { MENUBAR_SURFACE } from '@slotted/angular/menu';\nimport type { MenubarSurface, MenuOpenReason, MenuSize } from '@slotted/angular/menu';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectMenubarDefaults } from './menubar-defaults';\nimport type { MenubarOrientation } from './menubar-defaults';\n\nexport type { MenubarDefaults, MenubarOrientation } from './menubar-defaults';\n\nconst TRIGGER_SELECTOR = \"[data-part='trigger']\";\n\n/**\n * A row of triggers with one tab stop, each opening a `menu`.\n *\n * The bar holds which menu is open and nothing else: every part inside it\n * belongs to the `menu` family and is imported from `@slotted/angular/menu`.\n * The CDK's menubar and Radix's each restate the whole menu API a second time,\n * which is two copies of one machine and one place for a later capability to go\n * missing.\n */\n@Component({\n selector: 'sl-menubar',\n standalone: true,\n exportAs: 'slMenubar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrl: '../../../styles/src/menubar/menubar.css',\n template: '<ng-content />',\n host: {\n 'data-ui': 'menubar',\n 'data-part': 'root',\n role: 'menubar',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-size]': 'size()',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.aria-disabled]': 'disabled() ? true : null',\n '[attr.aria-orientation]': 'ariaOrientation()',\n '(keydown)': 'onKeyDown($event)',\n },\n providers: [{ provide: MENUBAR_SURFACE, useExisting: forwardRef(() => SlMenubar) }],\n})\nexport class SlMenubar implements MenubarSurface {\n /**\n * The menu now open, named by its own `value`. A bar has at most one, so its\n * state is that name rather than a boolean on each menu — the one model that\n * cannot represent two open menus at once.\n */\n readonly value = model<string | undefined>(undefined);\n /** One output for one transition, carrying the reason and the event. */\n readonly valueChangeRequest = output<ChangeRequest<string>>();\n\n /**\n * The inputs a consumer writes are stated as they are written and read as\n * what they resolve to: `orientation()`, `size()` and `disabled()` answer the\n * bar's actual decision, which is what a menu on the bar reads through\n * `MENUBAR_SURFACE`. The unresolved value belongs to nobody outside.\n */\n protected readonly orientationInput = input<MenubarOrientation | undefined>(undefined, {\n alias: 'orientation',\n });\n protected readonly sizeInput = input<MenuSize | undefined>(undefined, { alias: 'size' });\n protected readonly disabledInput = input(undefined, {\n alias: 'disabled',\n transform: (given: boolean | string | undefined) =>\n given === undefined ? undefined : booleanAttribute(given),\n });\n readonly loop = input(undefined, {\n transform: (given: boolean | string | undefined) =>\n given === undefined ? undefined : booleanAttribute(given),\n });\n readonly typeahead = input(undefined, {\n transform: (given: boolean | string | undefined) =>\n given === undefined ? undefined : booleanAttribute(given),\n });\n\n private readonly defaults = injectMenubarDefaults();\n private readonly element: HTMLElement = inject(ElementRef).nativeElement;\n private readonly registry = new Map<string, HTMLElement>();\n private typeaheadHandle: TypeaheadHandle | null = null;\n\n /** Where focus goes when the bar opens one of its menus. */\n readonly entry: { current: 'first' | 'last' | 'trigger' } = { current: 'first' };\n\n readonly orientation = computed(() => this.orientationInput() ?? this.defaults.orientation);\n readonly size = computed(() => this.sizeInput() ?? this.defaults.size);\n readonly disabled = computed(() => this.disabledInput() ?? this.defaults.disabled);\n readonly resolvedLoop = computed(() => this.loop() ?? this.defaults.loop);\n readonly resolvedTypeahead = computed(() => this.typeahead() ?? this.defaults.typeahead);\n\n protected readonly ariaOrientation = computed(() =>\n this.orientation() === 'vertical' ? 'vertical' : null,\n );\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n /**\n * One tab stop for the whole bar, and the trigger the reader last left.\n * Moving along a bar that already has a menu open switches menus, which\n * is what makes it a bar rather than a row of buttons.\n */\n const tabindex: RovingTabindexHandle = createRovingTabindex(this.element, {\n includeAriaDisabled: true,\n itemSelector: TRIGGER_SELECTOR,\n loop: () => this.resolvedLoop(),\n orientation: () => this.orientation(),\n onMove: (_index, trigger) => {\n if (this.value() === undefined) return;\n this.entry.current = 'trigger';\n this.move(this.nameOf(trigger), 'keyboard');\n },\n });\n\n /* A menu arriving or leaving has to reach the tab stop, and the DOM is\n the one thing the two bindings agree on. */\n const observer = new MutationObserver(() => tabindex.refresh());\n observer.observe(this.element, { childList: true, subtree: true });\n\n if (this.resolvedTypeahead()) this.typeaheadHandle = createTypeahead();\n\n destroyRef.onDestroy(() => {\n observer.disconnect();\n tabindex.destroy();\n this.typeaheadHandle?.destroy();\n });\n });\n }\n\n /** Opens the menu that answers to this name. */\n open(value: string, reason: MenuOpenReason, source?: Event) {\n this.move(value, reason, source);\n }\n\n close(reason: MenuOpenReason, source?: Event) {\n this.move(undefined, reason, source);\n }\n\n register(value: string, trigger: HTMLElement | null) {\n if (trigger === null) this.registry.delete(value);\n else this.registry.set(value, trigger);\n }\n\n /**\n * The pattern's three-step rule for the inline axis: close what is open, move\n * to the neighbouring trigger, and open its menu. Focus stays on the trigger\n * — the recommended half of the pattern's choice — so the next arrow keeps\n * moving along the bar rather than walking into a list nobody asked for.\n */\n step(direction: 1 | -1, options?: { open?: boolean }) {\n const list = this.triggers();\n if (list.length === 0) return;\n\n const active = this.element.ownerDocument.activeElement;\n const held = this.value();\n const from = list.findIndex((trigger) => trigger === active || this.nameOf(trigger) === held);\n const index = from === -1 ? 0 : from + direction;\n const wrapped = this.resolvedLoop()\n ? (index + list.length) % list.length\n : Math.min(Math.max(index, 0), list.length - 1);\n\n const next = list[wrapped];\n if (next === undefined) return;\n next.focus({ preventScroll: true });\n if (options?.open === true) {\n this.entry.current = 'trigger';\n this.move(this.nameOf(next), 'keyboard');\n }\n }\n\n private triggers(): HTMLElement[] {\n return [...this.element.querySelectorAll<HTMLElement>(TRIGGER_SELECTOR)];\n }\n\n private nameOf(trigger: HTMLElement | undefined): string | undefined {\n if (trigger === undefined) return undefined;\n for (const [name, candidate] of this.registry) if (candidate === trigger) return name;\n return undefined;\n }\n\n private move(next: string | undefined, reason: MenuOpenReason, source?: Event) {\n if (next === this.value()) return;\n\n let cancelled = false;\n const state = createControllable<string>({\n initial: this.value() ?? '',\n onRequest: (request) => {\n this.valueChangeRequest.emit(request);\n cancelled = request.cancelled;\n },\n });\n const moved = state.request(next ?? '', reason, source);\n if (cancelled) return;\n if (moved) this.value.set(next);\n }\n\n /** The pattern asks for typeahead on a menubar as well as inside a menu. */\n protected onKeyDown(event: KeyboardEvent) {\n const handle = this.typeaheadHandle;\n if (handle === null) return;\n if (event.ctrlKey || event.metaKey || event.altKey) return;\n if (!isPrintable(event.key, handle.query.length > 0)) return;\n\n const list = this.triggers();\n const from = list.findIndex((trigger) => trigger === event.target);\n const index = handle.match(\n event.key,\n list.map((trigger) => trigger.textContent?.trim() ?? ''),\n from,\n );\n if (index === -1) return;\n\n event.preventDefault();\n const trigger = list[index];\n trigger?.focus({ preventScroll: true });\n if (this.value() === undefined) return;\n this.entry.current = 'trigger';\n this.move(this.nameOf(trigger), 'keyboard');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slotted-angular-menubar.mjs","sources":["../../menubar/src/menubar-defaults.ts","../../menubar/src/menubar.ts","../../menubar/src/slotted-angular-menubar.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { MenuSize } from '@slotted/angular/menu';\n\nexport type MenubarOrientation = 'horizontal' | 'vertical';\n\nexport interface MenubarDefaults {\n disabled: boolean;\n loop: boolean;\n orientation: MenubarOrientation;\n size: MenuSize;\n typeahead: boolean;\n}\n\n/**\n * A bar is horizontal, wraps at its ends and answers typeahead — the three the\n * pattern describes. `size` is the one an application usually states, and it\n * reaches every menu the bar opens.\n */\nconst FALLBACK: MenubarDefaults = {\n disabled: false,\n loop: true,\n orientation: 'horizontal',\n size: 'md',\n typeahead: true,\n};\n\nexport const MENUBAR_DEFAULTS = new InjectionToken<MenubarDefaults>('slotted menubar defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/** The decisions an application takes once, in its bootstrap. */\nexport function provideMenubarDefaults(defaults: Partial<MenubarDefaults>) {\n return {\n provide: MENUBAR_DEFAULTS,\n useFactory: (): MenubarDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectMenubarDefaults(): MenubarDefaults {\n return inject(MENUBAR_DEFAULTS);\n}\n","import { createRovingTabindex } from '@slotted/core/focus';\nimport type { RovingTabindexHandle } from '@slotted/core/focus';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport { createTypeahead, isPrintable } from '@slotted/core/typeahead';\nimport type { TypeaheadHandle } from '@slotted/core/typeahead';\nimport { MENUBAR_SURFACE } from '@slotted/angular/menu';\nimport type { MenubarSurface, MenuOpenReason, MenuSize } from '@slotted/angular/menu';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectMenubarDefaults } from './menubar-defaults';\nimport type { MenubarOrientation } from './menubar-defaults';\n\nexport type { MenubarDefaults, MenubarOrientation } from './menubar-defaults';\n\nconst TRIGGER_SELECTOR = \"[data-part='trigger']\";\n\n/**\n * A row of triggers with one tab stop, each opening a `menu`.\n *\n * The bar holds which menu is open and nothing else: every part inside it\n * belongs to the `menu` family and is imported from `@slotted/angular/menu`.\n * The CDK's menubar and Radix's each restate the whole menu API a second time,\n * which is two copies of one machine and one place for a later capability to go\n * missing.\n */\n@Component({\n selector: 'sl-menubar',\n standalone: true,\n exportAs: 'slMenubar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrl: '../../../styles/src/menubar/menubar.css',\n template: '<ng-content />',\n host: {\n 'data-ui': 'menubar',\n 'data-ui-menubar': '',\n 'data-part': 'root',\n 'data-part-root': '',\n role: 'menubar',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-size]': 'size()',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.aria-disabled]': 'disabled() ? true : null',\n '[attr.aria-orientation]': 'ariaOrientation()',\n '(keydown)': 'onKeyDown($event)',\n },\n providers: [{ provide: MENUBAR_SURFACE, useExisting: forwardRef(() => SlMenubar) }],\n})\nexport class SlMenubar implements MenubarSurface {\n /**\n * The menu now open, named by its own `value`. A bar has at most one, so its\n * state is that name rather than a boolean on each menu — the one model that\n * cannot represent two open menus at once.\n */\n readonly value = model<string | undefined>(undefined);\n /** One output for one transition, carrying the reason and the event. */\n readonly valueChangeRequest = output<ChangeRequest<string>>();\n\n /**\n * The inputs a consumer writes are stated as they are written and read as\n * what they resolve to: `orientation()`, `size()` and `disabled()` answer the\n * bar's actual decision, which is what a menu on the bar reads through\n * `MENUBAR_SURFACE`. The unresolved value belongs to nobody outside.\n */\n protected readonly orientationInput = input<MenubarOrientation | undefined>(undefined, {\n alias: 'orientation',\n });\n protected readonly sizeInput = input<MenuSize | undefined>(undefined, { alias: 'size' });\n protected readonly disabledInput = input(undefined, {\n alias: 'disabled',\n transform: (given: boolean | string | undefined) =>\n given === undefined ? undefined : booleanAttribute(given),\n });\n readonly loop = input(undefined, {\n transform: (given: boolean | string | undefined) =>\n given === undefined ? undefined : booleanAttribute(given),\n });\n readonly typeahead = input(undefined, {\n transform: (given: boolean | string | undefined) =>\n given === undefined ? undefined : booleanAttribute(given),\n });\n\n private readonly defaults = injectMenubarDefaults();\n private readonly element: HTMLElement = inject(ElementRef).nativeElement;\n private readonly registry = new Map<string, HTMLElement>();\n private typeaheadHandle: TypeaheadHandle | null = null;\n\n /** Where focus goes when the bar opens one of its menus. */\n readonly entry: { current: 'first' | 'last' | 'trigger' } = { current: 'first' };\n\n readonly orientation = computed(() => this.orientationInput() ?? this.defaults.orientation);\n readonly size = computed(() => this.sizeInput() ?? this.defaults.size);\n readonly disabled = computed(() => this.disabledInput() ?? this.defaults.disabled);\n readonly resolvedLoop = computed(() => this.loop() ?? this.defaults.loop);\n readonly resolvedTypeahead = computed(() => this.typeahead() ?? this.defaults.typeahead);\n\n protected readonly ariaOrientation = computed(() =>\n this.orientation() === 'vertical' ? 'vertical' : null,\n );\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n /**\n * One tab stop for the whole bar, and the trigger the reader last left.\n * Moving along a bar that already has a menu open switches menus, which\n * is what makes it a bar rather than a row of buttons.\n */\n const tabindex: RovingTabindexHandle = createRovingTabindex(this.element, {\n includeAriaDisabled: true,\n itemSelector: TRIGGER_SELECTOR,\n loop: () => this.resolvedLoop(),\n orientation: () => this.orientation(),\n onMove: (_index, trigger) => {\n if (this.value() === undefined) return;\n this.entry.current = 'trigger';\n this.move(this.nameOf(trigger), 'keyboard');\n },\n });\n\n /* A menu arriving or leaving has to reach the tab stop, and the DOM is\n the one thing the two bindings agree on. */\n const observer = new MutationObserver(() => tabindex.refresh());\n observer.observe(this.element, { childList: true, subtree: true });\n\n if (this.resolvedTypeahead()) this.typeaheadHandle = createTypeahead();\n\n destroyRef.onDestroy(() => {\n observer.disconnect();\n tabindex.destroy();\n this.typeaheadHandle?.destroy();\n });\n });\n }\n\n /** Opens the menu that answers to this name. */\n open(value: string, reason: MenuOpenReason, source?: Event) {\n this.move(value, reason, source);\n }\n\n close(reason: MenuOpenReason, source?: Event) {\n this.move(undefined, reason, source);\n }\n\n register(value: string, trigger: HTMLElement | null) {\n if (trigger === null) this.registry.delete(value);\n else this.registry.set(value, trigger);\n }\n\n /**\n * The pattern's three-step rule for the inline axis: close what is open, move\n * to the neighbouring trigger, and open its menu. Focus stays on the trigger\n * — the recommended half of the pattern's choice — so the next arrow keeps\n * moving along the bar rather than walking into a list nobody asked for.\n */\n step(direction: 1 | -1, options?: { open?: boolean }) {\n const list = this.triggers();\n if (list.length === 0) return;\n\n const active = this.element.ownerDocument.activeElement;\n const held = this.value();\n const from = list.findIndex((trigger) => trigger === active || this.nameOf(trigger) === held);\n const index = from === -1 ? 0 : from + direction;\n const wrapped = this.resolvedLoop()\n ? (index + list.length) % list.length\n : Math.min(Math.max(index, 0), list.length - 1);\n\n const next = list[wrapped];\n if (next === undefined) return;\n next.focus({ preventScroll: true });\n if (options?.open === true) {\n this.entry.current = 'trigger';\n this.move(this.nameOf(next), 'keyboard');\n }\n }\n\n private triggers(): HTMLElement[] {\n return [...this.element.querySelectorAll<HTMLElement>(TRIGGER_SELECTOR)];\n }\n\n private nameOf(trigger: HTMLElement | undefined): string | undefined {\n if (trigger === undefined) return undefined;\n for (const [name, candidate] of this.registry) if (candidate === trigger) return name;\n return undefined;\n }\n\n private move(next: string | undefined, reason: MenuOpenReason, source?: Event) {\n if (next === this.value()) return;\n\n let cancelled = false;\n const state = createControllable<string>({\n initial: this.value() ?? '',\n onRequest: (request) => {\n this.valueChangeRequest.emit(request);\n cancelled = request.cancelled;\n },\n });\n const moved = state.request(next ?? '', reason, source);\n if (cancelled) return;\n if (moved) this.value.set(next);\n }\n\n /** The pattern asks for typeahead on a menubar as well as inside a menu. */\n protected onKeyDown(event: KeyboardEvent) {\n const handle = this.typeaheadHandle;\n if (handle === null) return;\n if (event.ctrlKey || event.metaKey || event.altKey) return;\n if (!isPrintable(event.key, handle.query.length > 0)) return;\n\n const list = this.triggers();\n const from = list.findIndex((trigger) => trigger === event.target);\n const index = handle.match(\n event.key,\n list.map((trigger) => trigger.textContent?.trim() ?? ''),\n from,\n );\n if (index === -1) return;\n\n event.preventDefault();\n const trigger = list[index];\n trigger?.focus({ preventScroll: true });\n if (this.value() === undefined) return;\n this.entry.current = 'trigger';\n this.move(this.nameOf(trigger), 'keyboard');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -149,11 +149,16 @@ class SlMessageScroller {
|
|
|
149
149
|
this.viewport?.focus();
|
|
150
150
|
}
|
|
151
151
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScroller, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
152
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlMessageScroller, isStandalone: true, selector: "[slMessageScroller]", inputs: { follow: { classPropertyName: "follow", publicName: "follow", isSignal: true, isRequired: false, transformFunction: null }, defaultPosition: { classPropertyName: "defaultPosition", publicName: "defaultPosition", isSignal: true, isRequired: false, transformFunction: null }, edgeThreshold: { classPropertyName: "edgeThreshold", publicName: "edgeThreshold", isSignal: true, isRequired: false, transformFunction: null }, scrollMargin: { classPropertyName: "scrollMargin", publicName: "scrollMargin", isSignal: true, isRequired: false, transformFunction: null }, peek: { classPropertyName: "peek", publicName: "peek", isSignal: true, isRequired: false, transformFunction: null }, preserveOnPrepend: { classPropertyName: "preserveOnPrepend", publicName: "preserveOnPrepend", isSignal: true, isRequired: false, transformFunction: null }, busy: { classPropertyName: "busy", publicName: "busy", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { reachStart: "reachStart", anchorChange: "anchorChange", scrollableChange: "scrollableChange" }, host: { attributes: { "data-ui": "message-scroller", "data-part": "root" } }, exportAs: ["slMessageScroller"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: ["@layer slotted.components{[data-ui=message-scroller][data-part=root]{--_inset: var(--slotted-message-scroller-padding, var(--slotted-space-6, 1rem));--_gap: var(--slotted-message-scroller-gap, calc(var(--slotted-control-gap-md, 8px) * 2.5));--_fade: var(--slotted-message-scroller-fade, var(--slotted-space-6, 1rem));display:flex;flex-direction:column;position:relative;box-sizing:border-box;block-size:100%;min-block-size:0;min-inline-size:0;overflow:hidden;color:var(--slotted-text);font-family:var(--slotted-font-family-sans, sans-serif)}[data-ui=message-scroller] [data-part=viewport]{position:relative;flex:1 1 auto;box-sizing:border-box;min-block-size:0;overflow-x:hidden;overflow-y:auto;overflow-anchor:none;overscroll-behavior:contain;scrollbar-color:var(--slotted-border-strong) transparent;scrollbar-gutter:stable;scrollbar-width:thin}[data-ui=message-scroller] [data-part=viewport][data-scrollable~=start]{-webkit-mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade));mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade))}[data-ui=message-scroller] [data-part=viewport][data-scrollable~=end]{-webkit-mask-image:linear-gradient(to top,transparent,#000 var(--_fade));mask-image:linear-gradient(to top,transparent,#000 var(--_fade))}[data-ui=message-scroller] [data-part=viewport][data-scrollable~=start][data-scrollable~=end]{-webkit-mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade),#000 calc(100% - var(--_fade)),transparent);mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade),#000 calc(100% - var(--_fade)),transparent)}[data-ui=message-scroller] [data-part=viewport][data-pending]{visibility:hidden}[data-ui=message-scroller] [data-part=viewport]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=message-scroller] [data-part=content]{display:flex;flex-direction:column;justify-content:flex-end;gap:var(--_gap);box-sizing:border-box;min-block-size:100%;padding:var(--_inset);padding-block-end:calc(var(--_inset) + var(--slotted-message-scroller-room, 0px))}[data-ui=message-scroller] [data-part=item]{min-inline-size:0;border-radius:var(--slotted-radius-md, 6px);content-visibility:auto;contain-intrinsic-size:auto 6rem;transition:opacity var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),translate var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),background-color var(--slotted-duration-long) var(--slotted-easing-standard, ease),box-shadow var(--slotted-duration-long) var(--slotted-easing-standard, ease)}@starting-style{[data-ui=message-scroller] [data-part=item]{opacity:0;translate:0 var(--slotted-space-4, .5rem)}}[data-ui=message-scroller] [data-part=item][data-current]{background-color:var(--slotted-tone-accent-subtle-hover);box-shadow:0 0 0 var(--slotted-space-3, .375rem) var(--slotted-tone-accent-subtle-hover)}[data-ui=message-scroller] :is([data-part=separator],[data-part=unread]){display:flex;align-items:center;gap:var(--slotted-space-4, .5rem);color:var(--slotted-text-muted);font-size:var(--slotted-font-size-xs, .75rem);font-weight:var(--slotted-font-weight-medium, 500);line-height:round(up,calc(var(--slotted-font-size-xs, .75rem) * var(--slotted-line-height-xs, 1.4)),1px)}[data-ui=message-scroller] :is([data-part=separator],[data-part=unread]):before,[data-ui=message-scroller] :is([data-part=separator],[data-part=unread]):after{content:\"\";flex:1 1 0;min-inline-size:var(--slotted-space-6, 1rem);border-block-start:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle)}[data-ui=message-scroller] [data-part=item]:has(>[data-part=separator][data-sticky]),[data-ui=message-scroller] [data-part=separator][data-sticky]:not([data-part=item]>*){position:sticky;inset-block-start:var(--_fade);z-index:1;content-visibility:visible}[data-ui=message-scroller] [data-part=separator][data-sticky]:before,[data-ui=message-scroller] [data-part=separator][data-sticky]:after{content:none}[data-ui=message-scroller] [data-part=separator][data-sticky]{justify-content:center}[data-ui=message-scroller] [data-part=separator][data-sticky]>*{box-shadow:var(--slotted-shadow-xs)}[data-ui=message-scroller] [data-part=separator]>*{padding-block:var(--slotted-space-1, .125rem);padding-inline:var(--slotted-space-4, .5rem);border:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle);border-radius:var(--slotted-radius-full, 9999px);background-color:var(--slotted-surface)}[data-ui=message-scroller] [data-part=unread]{color:var(--slotted-tone-accent-text)}[data-ui=message-scroller] [data-part=unread]:before,[data-ui=message-scroller] [data-part=unread]:after{border-block-start-color:var(--slotted-tone-accent-border)}[data-ui=message-scroller] [data-part=loader]{display:flex;align-items:center;justify-content:center;gap:var(--slotted-space-3, .375rem);padding-block:var(--slotted-space-2, .25rem);color:var(--slotted-text-muted);font-size:var(--slotted-control-font-size-md, 13px)}[data-ui=message-scroller] [data-part=loader]>[data-ui=spinner]{--slotted-spinner-size: var(--slotted-control-icon-size-sm, 14px)}[data-ui=message-scroller] [data-part=jump]{--_size: var(--slotted-message-scroller-jump-size, var(--slotted-control-height-md, 34px));--_ground: var(--slotted-surface-raised);--_ink: var(--slotted-text);--_shift: var(--slotted-space-4, .5rem);display:inline-flex;align-items:center;justify-content:center;gap:var(--slotted-space-2, .25rem);position:absolute;inset-block-end:var(--_inset);inset-inline-start:50%;z-index:2;box-sizing:border-box;min-inline-size:var(--_size);block-size:var(--_size);margin:0;padding:0;border:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle);border-radius:var(--slotted-radius-full, 9999px);background-color:var(--_ground);box-shadow:var(--slotted-shadow-md);color:var(--_ink);font:inherit;font-size:var(--slotted-control-font-size-md, 13px);font-weight:var(--slotted-font-weight-medium, 500);line-height:1;white-space:nowrap;cursor:pointer;translate:-50% 0;transition:opacity var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),translate var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),background-color var(--slotted-duration-short) var(--slotted-easing-standard, ease)}[data-ui=message-scroller] [data-part=jump]:dir(rtl){translate:50% 0}[data-ui=message-scroller] [data-part=jump][data-direction=start]{inset-block:var(--_inset) auto;--_shift: calc(var(--slotted-space-4, .5rem) * -1)}[data-ui=message-scroller] [data-part=jump]>[data-ui=icon]{--slotted-icon-size: var(--slotted-control-icon-size-md, 16px);rotate:-90deg}[data-ui=message-scroller] [data-part=jump][data-direction=start]>[data-ui=icon]{rotate:90deg}[data-ui=message-scroller] [data-part=jump]:has(>[data-part=jump-count]){padding-inline:var(--slotted-space-4, .5rem) var(--slotted-space-5, .75rem)}[data-ui=message-scroller] [data-part=jump-count]{font-variant-numeric:tabular-nums}[data-ui=message-scroller] [data-part=jump][data-active=false]{opacity:0;pointer-events:none;translate:-50% var(--_shift);transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit, ease-in),translate var(--slotted-duration-short) var(--slotted-easing-exit, ease-in)}[data-ui=message-scroller] [data-part=jump][data-active=false]:dir(rtl){translate:50% var(--_shift)}[data-ui=message-scroller] [data-part=jump]:hover:not(:disabled):not([data-disabled]){background-color:color-mix(in oklab,var(--_ink) var(--slotted-message-scroller-state-layer-hover, 6%),var(--_ground))}[data-ui=message-scroller] [data-part=jump]:active:not(:disabled):not([data-disabled]){background-color:color-mix(in oklab,var(--_ink) var(--slotted-message-scroller-state-layer-active, 12%),var(--_ground));translate:-50% var(--slotted-space-1, .125rem)}[data-ui=message-scroller] [data-part=jump]:active:not(:disabled):not([data-disabled]):dir(rtl){translate:50% var(--slotted-space-1, .125rem)}[data-ui=message-scroller] [data-part=jump]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color);outline-offset:var(--slotted-focus-ring-offset, 2px)}@media(forced-colors:active){[data-ui=message-scroller] [data-part=item][data-current]{outline:var(--slotted-border-width-thick, 2px) solid Highlight;outline-offset:var(--slotted-space-2, .25rem)}[data-ui=message-scroller] [data-part=viewport][data-scrollable]{-webkit-mask-image:none;mask-image:none}}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
152
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlMessageScroller, isStandalone: true, selector: "[slMessageScroller]", inputs: { follow: { classPropertyName: "follow", publicName: "follow", isSignal: true, isRequired: false, transformFunction: null }, defaultPosition: { classPropertyName: "defaultPosition", publicName: "defaultPosition", isSignal: true, isRequired: false, transformFunction: null }, edgeThreshold: { classPropertyName: "edgeThreshold", publicName: "edgeThreshold", isSignal: true, isRequired: false, transformFunction: null }, scrollMargin: { classPropertyName: "scrollMargin", publicName: "scrollMargin", isSignal: true, isRequired: false, transformFunction: null }, peek: { classPropertyName: "peek", publicName: "peek", isSignal: true, isRequired: false, transformFunction: null }, preserveOnPrepend: { classPropertyName: "preserveOnPrepend", publicName: "preserveOnPrepend", isSignal: true, isRequired: false, transformFunction: null }, busy: { classPropertyName: "busy", publicName: "busy", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { reachStart: "reachStart", anchorChange: "anchorChange", scrollableChange: "scrollableChange" }, host: { attributes: { "data-ui": "message-scroller", "data-ui-message-scroller": "", "data-part": "root", "data-part-root": "" } }, exportAs: ["slMessageScroller"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: ["@layer slotted.components{[data-ui-message-scroller][data-part-root]{--_inset: var(--slotted-message-scroller-padding, var(--slotted-space-6, 1rem));--_gap: var(--slotted-message-scroller-gap, calc(var(--slotted-control-gap-md, 8px) * 2.5));--_fade: var(--slotted-message-scroller-fade, var(--slotted-space-6, 1rem));display:flex;flex-direction:column;position:relative;box-sizing:border-box;block-size:100%;min-block-size:0;min-inline-size:0;overflow:hidden;color:var(--slotted-text);font-family:var(--slotted-font-family-sans, sans-serif)}[data-ui-message-scroller] [data-part-viewport]{position:relative;flex:1 1 auto;box-sizing:border-box;min-block-size:0;overflow-x:hidden;overflow-y:auto;overflow-anchor:none;overscroll-behavior:contain;scrollbar-color:var(--slotted-border-strong) transparent;scrollbar-gutter:stable;scrollbar-width:thin}[data-ui-message-scroller] [data-part-viewport][data-scrollable~=start]{-webkit-mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade));mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade))}[data-ui-message-scroller] [data-part-viewport][data-scrollable~=end]{-webkit-mask-image:linear-gradient(to top,transparent,#000 var(--_fade));mask-image:linear-gradient(to top,transparent,#000 var(--_fade))}[data-ui-message-scroller] [data-part-viewport][data-scrollable~=start][data-scrollable~=end]{-webkit-mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade),#000 calc(100% - var(--_fade)),transparent);mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade),#000 calc(100% - var(--_fade)),transparent)}[data-ui-message-scroller] [data-part-viewport][data-pending]{visibility:hidden}[data-ui-message-scroller] [data-part-viewport]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui-message-scroller] [data-part-content]{display:flex;flex-direction:column;justify-content:flex-end;gap:var(--_gap);box-sizing:border-box;min-block-size:100%;padding:var(--_inset);padding-block-end:calc(var(--_inset) + var(--slotted-message-scroller-room, 0px))}[data-ui-message-scroller] [data-part-item]{min-inline-size:0;border-radius:var(--slotted-radius-md, 6px);content-visibility:auto;contain-intrinsic-size:auto 6rem;transition:opacity var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),translate var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),background-color var(--slotted-duration-long) var(--slotted-easing-standard, ease),box-shadow var(--slotted-duration-long) var(--slotted-easing-standard, ease)}@starting-style{[data-ui-message-scroller] [data-part-item]{opacity:0;translate:0 var(--slotted-space-4, .5rem)}}[data-ui-message-scroller] [data-part-item][data-current]{background-color:var(--slotted-tone-accent-subtle-hover);box-shadow:0 0 0 var(--slotted-space-3, .375rem) var(--slotted-tone-accent-subtle-hover)}[data-ui-message-scroller] :is([data-part-separator],[data-part-unread]){display:flex;align-items:center;gap:var(--slotted-space-4, .5rem);color:var(--slotted-text-muted);font-size:var(--slotted-font-size-xs, .75rem);font-weight:var(--slotted-font-weight-medium, 500);line-height:round(up,calc(var(--slotted-font-size-xs, .75rem) * var(--slotted-line-height-xs, 1.4)),1px)}[data-ui-message-scroller] :is([data-part-separator],[data-part-unread]):before,[data-ui-message-scroller] :is([data-part-separator],[data-part-unread]):after{content:\"\";flex:1 1 0;min-inline-size:var(--slotted-space-6, 1rem);border-block-start:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle)}[data-ui-message-scroller] [data-part-item]:has(>[data-part-separator][data-sticky]),[data-ui-message-scroller] [data-part-separator][data-sticky]:not([data-part-item]>*){position:sticky;inset-block-start:var(--_fade);z-index:1;content-visibility:visible}[data-ui-message-scroller] [data-part-separator][data-sticky]:before,[data-ui-message-scroller] [data-part-separator][data-sticky]:after{content:none}[data-ui-message-scroller] [data-part-separator][data-sticky]{justify-content:center}[data-ui-message-scroller] [data-part-separator][data-sticky]>*{box-shadow:var(--slotted-shadow-xs)}[data-ui-message-scroller] [data-part-separator]>*{padding-block:var(--slotted-space-1, .125rem);padding-inline:var(--slotted-space-4, .5rem);border:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle);border-radius:var(--slotted-radius-full, 9999px);background-color:var(--slotted-surface)}[data-ui-message-scroller] [data-part-unread]{color:var(--slotted-tone-accent-text)}[data-ui-message-scroller] [data-part-unread]:before,[data-ui-message-scroller] [data-part-unread]:after{border-block-start-color:var(--slotted-tone-accent-border)}[data-ui-message-scroller] [data-part-loader]{display:flex;align-items:center;justify-content:center;gap:var(--slotted-space-3, .375rem);padding-block:var(--slotted-space-2, .25rem);color:var(--slotted-text-muted);font-size:var(--slotted-control-font-size-md, 13px)}[data-ui-message-scroller] [data-part-loader]>[data-ui-spinner]{--slotted-spinner-size: var(--slotted-control-icon-size-sm, 14px)}[data-ui-message-scroller] [data-part-jump]{--_size: var(--slotted-message-scroller-jump-size, var(--slotted-control-height-md, 34px));--_ground: var(--slotted-surface-raised);--_ink: var(--slotted-text);--_shift: var(--slotted-space-4, .5rem);display:inline-flex;align-items:center;justify-content:center;gap:var(--slotted-space-2, .25rem);position:absolute;inset-block-end:var(--_inset);inset-inline-start:50%;z-index:2;box-sizing:border-box;min-inline-size:var(--_size);block-size:var(--_size);margin:0;padding:0;border:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle);border-radius:var(--slotted-radius-full, 9999px);background-color:var(--_ground);box-shadow:var(--slotted-shadow-md);color:var(--_ink);font:inherit;font-size:var(--slotted-control-font-size-md, 13px);font-weight:var(--slotted-font-weight-medium, 500);line-height:1;white-space:nowrap;cursor:pointer;translate:-50% 0;transition:opacity var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),translate var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),background-color var(--slotted-duration-short) var(--slotted-easing-standard, ease)}[data-ui-message-scroller] [data-part-jump]:dir(rtl){translate:50% 0}[data-ui-message-scroller] [data-part-jump][data-direction=start]{inset-block:var(--_inset) auto;--_shift: calc(var(--slotted-space-4, .5rem) * -1)}[data-ui-message-scroller] [data-part-jump]>[data-ui-icon]{--slotted-icon-size: var(--slotted-control-icon-size-md, 16px);rotate:-90deg}[data-ui-message-scroller] [data-part-jump][data-direction=start]>[data-ui-icon]{rotate:90deg}[data-ui-message-scroller] [data-part-jump]:has(>[data-part-jump-count]){padding-inline:var(--slotted-space-4, .5rem) var(--slotted-space-5, .75rem)}[data-ui-message-scroller] [data-part-jump-count]{font-variant-numeric:tabular-nums}[data-ui-message-scroller] [data-part-jump][data-active=false]{opacity:0;pointer-events:none;translate:-50% var(--_shift);transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit, ease-in),translate var(--slotted-duration-short) var(--slotted-easing-exit, ease-in)}[data-ui-message-scroller] [data-part-jump][data-active=false]:dir(rtl){translate:50% var(--_shift)}[data-ui-message-scroller] [data-part-jump]:hover:not(:disabled):not([data-disabled]){background-color:color-mix(in oklab,var(--_ink) var(--slotted-message-scroller-state-layer-hover, 6%),var(--_ground))}[data-ui-message-scroller] [data-part-jump]:active:not(:disabled):not([data-disabled]){background-color:color-mix(in oklab,var(--_ink) var(--slotted-message-scroller-state-layer-active, 12%),var(--_ground));translate:-50% var(--slotted-space-1, .125rem)}[data-ui-message-scroller] [data-part-jump]:active:not(:disabled):not([data-disabled]):dir(rtl){translate:50% var(--slotted-space-1, .125rem)}[data-ui-message-scroller] [data-part-jump]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color);outline-offset:var(--slotted-focus-ring-offset, 2px)}@media(forced-colors:active){[data-ui-message-scroller] [data-part-item][data-current]{outline:var(--slotted-border-width-thick, 2px) solid Highlight;outline-offset:var(--slotted-space-2, .25rem)}[data-ui-message-scroller] [data-part-viewport][data-scrollable]{-webkit-mask-image:none;mask-image:none}}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
153
153
|
}
|
|
154
154
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScroller, decorators: [{
|
|
155
155
|
type: Component,
|
|
156
|
-
args: [{ selector: '[slMessageScroller]', standalone: true, exportAs: 'slMessageScroller', template: '<ng-content></ng-content>', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
156
|
+
args: [{ selector: '[slMessageScroller]', standalone: true, exportAs: 'slMessageScroller', template: '<ng-content></ng-content>', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
157
|
+
'data-ui': 'message-scroller',
|
|
158
|
+
'data-ui-message-scroller': '',
|
|
159
|
+
'data-part': 'root',
|
|
160
|
+
'data-part-root': '',
|
|
161
|
+
}, styles: ["@layer slotted.components{[data-ui-message-scroller][data-part-root]{--_inset: var(--slotted-message-scroller-padding, var(--slotted-space-6, 1rem));--_gap: var(--slotted-message-scroller-gap, calc(var(--slotted-control-gap-md, 8px) * 2.5));--_fade: var(--slotted-message-scroller-fade, var(--slotted-space-6, 1rem));display:flex;flex-direction:column;position:relative;box-sizing:border-box;block-size:100%;min-block-size:0;min-inline-size:0;overflow:hidden;color:var(--slotted-text);font-family:var(--slotted-font-family-sans, sans-serif)}[data-ui-message-scroller] [data-part-viewport]{position:relative;flex:1 1 auto;box-sizing:border-box;min-block-size:0;overflow-x:hidden;overflow-y:auto;overflow-anchor:none;overscroll-behavior:contain;scrollbar-color:var(--slotted-border-strong) transparent;scrollbar-gutter:stable;scrollbar-width:thin}[data-ui-message-scroller] [data-part-viewport][data-scrollable~=start]{-webkit-mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade));mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade))}[data-ui-message-scroller] [data-part-viewport][data-scrollable~=end]{-webkit-mask-image:linear-gradient(to top,transparent,#000 var(--_fade));mask-image:linear-gradient(to top,transparent,#000 var(--_fade))}[data-ui-message-scroller] [data-part-viewport][data-scrollable~=start][data-scrollable~=end]{-webkit-mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade),#000 calc(100% - var(--_fade)),transparent);mask-image:linear-gradient(to bottom,transparent,#000 var(--_fade),#000 calc(100% - var(--_fade)),transparent)}[data-ui-message-scroller] [data-part-viewport][data-pending]{visibility:hidden}[data-ui-message-scroller] [data-part-viewport]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui-message-scroller] [data-part-content]{display:flex;flex-direction:column;justify-content:flex-end;gap:var(--_gap);box-sizing:border-box;min-block-size:100%;padding:var(--_inset);padding-block-end:calc(var(--_inset) + var(--slotted-message-scroller-room, 0px))}[data-ui-message-scroller] [data-part-item]{min-inline-size:0;border-radius:var(--slotted-radius-md, 6px);content-visibility:auto;contain-intrinsic-size:auto 6rem;transition:opacity var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),translate var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),background-color var(--slotted-duration-long) var(--slotted-easing-standard, ease),box-shadow var(--slotted-duration-long) var(--slotted-easing-standard, ease)}@starting-style{[data-ui-message-scroller] [data-part-item]{opacity:0;translate:0 var(--slotted-space-4, .5rem)}}[data-ui-message-scroller] [data-part-item][data-current]{background-color:var(--slotted-tone-accent-subtle-hover);box-shadow:0 0 0 var(--slotted-space-3, .375rem) var(--slotted-tone-accent-subtle-hover)}[data-ui-message-scroller] :is([data-part-separator],[data-part-unread]){display:flex;align-items:center;gap:var(--slotted-space-4, .5rem);color:var(--slotted-text-muted);font-size:var(--slotted-font-size-xs, .75rem);font-weight:var(--slotted-font-weight-medium, 500);line-height:round(up,calc(var(--slotted-font-size-xs, .75rem) * var(--slotted-line-height-xs, 1.4)),1px)}[data-ui-message-scroller] :is([data-part-separator],[data-part-unread]):before,[data-ui-message-scroller] :is([data-part-separator],[data-part-unread]):after{content:\"\";flex:1 1 0;min-inline-size:var(--slotted-space-6, 1rem);border-block-start:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle)}[data-ui-message-scroller] [data-part-item]:has(>[data-part-separator][data-sticky]),[data-ui-message-scroller] [data-part-separator][data-sticky]:not([data-part-item]>*){position:sticky;inset-block-start:var(--_fade);z-index:1;content-visibility:visible}[data-ui-message-scroller] [data-part-separator][data-sticky]:before,[data-ui-message-scroller] [data-part-separator][data-sticky]:after{content:none}[data-ui-message-scroller] [data-part-separator][data-sticky]{justify-content:center}[data-ui-message-scroller] [data-part-separator][data-sticky]>*{box-shadow:var(--slotted-shadow-xs)}[data-ui-message-scroller] [data-part-separator]>*{padding-block:var(--slotted-space-1, .125rem);padding-inline:var(--slotted-space-4, .5rem);border:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle);border-radius:var(--slotted-radius-full, 9999px);background-color:var(--slotted-surface)}[data-ui-message-scroller] [data-part-unread]{color:var(--slotted-tone-accent-text)}[data-ui-message-scroller] [data-part-unread]:before,[data-ui-message-scroller] [data-part-unread]:after{border-block-start-color:var(--slotted-tone-accent-border)}[data-ui-message-scroller] [data-part-loader]{display:flex;align-items:center;justify-content:center;gap:var(--slotted-space-3, .375rem);padding-block:var(--slotted-space-2, .25rem);color:var(--slotted-text-muted);font-size:var(--slotted-control-font-size-md, 13px)}[data-ui-message-scroller] [data-part-loader]>[data-ui-spinner]{--slotted-spinner-size: var(--slotted-control-icon-size-sm, 14px)}[data-ui-message-scroller] [data-part-jump]{--_size: var(--slotted-message-scroller-jump-size, var(--slotted-control-height-md, 34px));--_ground: var(--slotted-surface-raised);--_ink: var(--slotted-text);--_shift: var(--slotted-space-4, .5rem);display:inline-flex;align-items:center;justify-content:center;gap:var(--slotted-space-2, .25rem);position:absolute;inset-block-end:var(--_inset);inset-inline-start:50%;z-index:2;box-sizing:border-box;min-inline-size:var(--_size);block-size:var(--_size);margin:0;padding:0;border:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle);border-radius:var(--slotted-radius-full, 9999px);background-color:var(--_ground);box-shadow:var(--slotted-shadow-md);color:var(--_ink);font:inherit;font-size:var(--slotted-control-font-size-md, 13px);font-weight:var(--slotted-font-weight-medium, 500);line-height:1;white-space:nowrap;cursor:pointer;translate:-50% 0;transition:opacity var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),translate var(--slotted-duration-medium) var(--slotted-easing-enter, ease-out),background-color var(--slotted-duration-short) var(--slotted-easing-standard, ease)}[data-ui-message-scroller] [data-part-jump]:dir(rtl){translate:50% 0}[data-ui-message-scroller] [data-part-jump][data-direction=start]{inset-block:var(--_inset) auto;--_shift: calc(var(--slotted-space-4, .5rem) * -1)}[data-ui-message-scroller] [data-part-jump]>[data-ui-icon]{--slotted-icon-size: var(--slotted-control-icon-size-md, 16px);rotate:-90deg}[data-ui-message-scroller] [data-part-jump][data-direction=start]>[data-ui-icon]{rotate:90deg}[data-ui-message-scroller] [data-part-jump]:has(>[data-part-jump-count]){padding-inline:var(--slotted-space-4, .5rem) var(--slotted-space-5, .75rem)}[data-ui-message-scroller] [data-part-jump-count]{font-variant-numeric:tabular-nums}[data-ui-message-scroller] [data-part-jump][data-active=false]{opacity:0;pointer-events:none;translate:-50% var(--_shift);transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit, ease-in),translate var(--slotted-duration-short) var(--slotted-easing-exit, ease-in)}[data-ui-message-scroller] [data-part-jump][data-active=false]:dir(rtl){translate:50% var(--_shift)}[data-ui-message-scroller] [data-part-jump]:hover:not(:disabled):not([data-disabled]){background-color:color-mix(in oklab,var(--_ink) var(--slotted-message-scroller-state-layer-hover, 6%),var(--_ground))}[data-ui-message-scroller] [data-part-jump]:active:not(:disabled):not([data-disabled]){background-color:color-mix(in oklab,var(--_ink) var(--slotted-message-scroller-state-layer-active, 12%),var(--_ground));translate:-50% var(--slotted-space-1, .125rem)}[data-ui-message-scroller] [data-part-jump]:active:not(:disabled):not([data-disabled]):dir(rtl){translate:50% var(--slotted-space-1, .125rem)}[data-ui-message-scroller] [data-part-jump]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color);outline-offset:var(--slotted-focus-ring-offset, 2px)}@media(forced-colors:active){[data-ui-message-scroller] [data-part-item][data-current]{outline:var(--slotted-border-width-thick, 2px) solid Highlight;outline-offset:var(--slotted-space-2, .25rem)}[data-ui-message-scroller] [data-part-viewport][data-scrollable]{-webkit-mask-image:none;mask-image:none}}}\n"] }]
|
|
157
162
|
}], ctorParameters: () => [], propDecorators: { follow: [{ type: i0.Input, args: [{ isSignal: true, alias: "follow", required: false }] }], defaultPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultPosition", required: false }] }], edgeThreshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "edgeThreshold", required: false }] }], scrollMargin: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollMargin", required: false }] }], peek: [{ type: i0.Input, args: [{ isSignal: true, alias: "peek", required: false }] }], preserveOnPrepend: [{ type: i0.Input, args: [{ isSignal: true, alias: "preserveOnPrepend", required: false }] }], busy: [{ type: i0.Input, args: [{ isSignal: true, alias: "busy", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], reachStart: [{ type: i0.Output, args: ["reachStart"] }], anchorChange: [{ type: i0.Output, args: ["anchorChange"] }], scrollableChange: [{ type: i0.Output, args: ["scrollableChange"] }] } });
|
|
158
163
|
function scroller() {
|
|
159
164
|
const owner = inject(SlMessageScroller, { optional: true });
|
|
@@ -178,7 +183,7 @@ class SlMessageScrollerViewport {
|
|
|
178
183
|
afterNextRender(() => this.owner.registerViewport(host));
|
|
179
184
|
}
|
|
180
185
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
181
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlMessageScrollerViewport, isStandalone: true, selector: "[slMessageScrollerViewport]", host: { attributes: { "data-part": "viewport", "role": "region" }, properties: { "attr.tabindex": "tabindex", "attr.aria-label": "label()" } }, ngImport: i0 });
|
|
186
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlMessageScrollerViewport, isStandalone: true, selector: "[slMessageScrollerViewport]", host: { attributes: { "data-part": "viewport", "data-part-viewport": "", "role": "region" }, properties: { "attr.tabindex": "tabindex", "attr.aria-label": "label()" } }, ngImport: i0 });
|
|
182
187
|
}
|
|
183
188
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerViewport, decorators: [{
|
|
184
189
|
type: Directive,
|
|
@@ -187,6 +192,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
187
192
|
standalone: true,
|
|
188
193
|
host: {
|
|
189
194
|
'data-part': 'viewport',
|
|
195
|
+
'data-part-viewport': '',
|
|
190
196
|
role: 'region',
|
|
191
197
|
'[attr.tabindex]': 'tabindex',
|
|
192
198
|
'[attr.aria-label]': 'label()',
|
|
@@ -201,7 +207,7 @@ class SlMessageScrollerContent {
|
|
|
201
207
|
afterNextRender(() => this.owner.registerContent(host));
|
|
202
208
|
}
|
|
203
209
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
204
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlMessageScrollerContent, isStandalone: true, selector: "[slMessageScrollerContent]", host: { attributes: { "data-part": "content", "role": "log", "aria-relevant": "additions" }, properties: { "attr.aria-busy": "owner.busy() ? 'true' : null" } }, ngImport: i0 });
|
|
210
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlMessageScrollerContent, isStandalone: true, selector: "[slMessageScrollerContent]", host: { attributes: { "data-part": "content", "data-part-content": "", "role": "log", "aria-relevant": "additions" }, properties: { "attr.aria-busy": "owner.busy() ? 'true' : null" } }, ngImport: i0 });
|
|
205
211
|
}
|
|
206
212
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerContent, decorators: [{
|
|
207
213
|
type: Directive,
|
|
@@ -210,6 +216,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
210
216
|
standalone: true,
|
|
211
217
|
host: {
|
|
212
218
|
'data-part': 'content',
|
|
219
|
+
'data-part-content': '',
|
|
213
220
|
role: 'log',
|
|
214
221
|
'aria-relevant': 'additions',
|
|
215
222
|
'[attr.aria-busy]': "owner.busy() ? 'true' : null",
|
|
@@ -222,7 +229,7 @@ class SlMessageScrollerItem {
|
|
|
222
229
|
...(ngDevMode ? [{ debugName: "messageId" }] : /* istanbul ignore next */ []));
|
|
223
230
|
anchor = input(false, { ...(ngDevMode ? { debugName: "anchor" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
224
231
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
225
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlMessageScrollerItem, isStandalone: true, selector: "[slMessageScrollerItem]", inputs: { messageId: { classPropertyName: "messageId", publicName: "messageId", isSignal: true, isRequired: false, transformFunction: null }, anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "item" }, properties: { "attr.data-message-id": "messageId() ?? null", "attr.data-anchor": "anchor() ? 'true' : null" } }, ngImport: i0 });
|
|
232
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlMessageScrollerItem, isStandalone: true, selector: "[slMessageScrollerItem]", inputs: { messageId: { classPropertyName: "messageId", publicName: "messageId", isSignal: true, isRequired: false, transformFunction: null }, anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "item", "data-part-item": "" }, properties: { "attr.data-message-id": "messageId() ?? null", "attr.data-anchor": "anchor() ? 'true' : null" } }, ngImport: i0 });
|
|
226
233
|
}
|
|
227
234
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerItem, decorators: [{
|
|
228
235
|
type: Directive,
|
|
@@ -231,6 +238,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
231
238
|
standalone: true,
|
|
232
239
|
host: {
|
|
233
240
|
'data-part': 'item',
|
|
241
|
+
'data-part-item': '',
|
|
234
242
|
'[attr.data-message-id]': 'messageId() ?? null',
|
|
235
243
|
'[attr.data-anchor]': "anchor() ? 'true' : null",
|
|
236
244
|
},
|
|
@@ -240,7 +248,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
240
248
|
class SlMessageScrollerSeparator {
|
|
241
249
|
sticky = input(false, { ...(ngDevMode ? { debugName: "sticky" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
242
250
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerSeparator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
243
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlMessageScrollerSeparator, isStandalone: true, selector: "[slMessageScrollerSeparator]", inputs: { sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "separator" }, properties: { "attr.data-sticky": "sticky() ? '' : null" } }, ngImport: i0, template: '<span><ng-content></ng-content></span>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
251
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlMessageScrollerSeparator, isStandalone: true, selector: "[slMessageScrollerSeparator]", inputs: { sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "separator", "data-part-separator": "" }, properties: { "attr.data-sticky": "sticky() ? '' : null" } }, ngImport: i0, template: '<span><ng-content></ng-content></span>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
244
252
|
}
|
|
245
253
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerSeparator, decorators: [{
|
|
246
254
|
type: Component,
|
|
@@ -250,14 +258,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
250
258
|
template: '<span><ng-content></ng-content></span>',
|
|
251
259
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
252
260
|
encapsulation: ViewEncapsulation.None,
|
|
253
|
-
host: {
|
|
261
|
+
host: {
|
|
262
|
+
'data-part': 'separator',
|
|
263
|
+
'data-part-separator': '',
|
|
264
|
+
'[attr.data-sticky]': "sticky() ? '' : null",
|
|
265
|
+
},
|
|
254
266
|
}]
|
|
255
267
|
}], propDecorators: { sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }] } });
|
|
256
268
|
/** The line above the first message the reader has not seen. */
|
|
257
269
|
class SlMessageScrollerUnread {
|
|
258
270
|
owner = scroller();
|
|
259
271
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerUnread, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
260
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.7", type: SlMessageScrollerUnread, isStandalone: true, selector: "[slMessageScrollerUnread]", host: { attributes: { "data-part": "unread" } }, ngImport: i0, template: `<span
|
|
272
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.7", type: SlMessageScrollerUnread, isStandalone: true, selector: "[slMessageScrollerUnread]", host: { attributes: { "data-part": "unread", "data-part-unread": "" } }, ngImport: i0, template: `<span
|
|
261
273
|
><ng-content>{{ owner.t('unread') }}</ng-content></span
|
|
262
274
|
>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
263
275
|
}
|
|
@@ -271,14 +283,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
271
283
|
>`,
|
|
272
284
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
273
285
|
encapsulation: ViewEncapsulation.None,
|
|
274
|
-
host: { 'data-part': 'unread' },
|
|
286
|
+
host: { 'data-part': 'unread', 'data-part-unread': '' },
|
|
275
287
|
}]
|
|
276
288
|
}] });
|
|
277
289
|
/** Older rows on their way: the shared ring and a line of text, read once as a status. */
|
|
278
290
|
class SlMessageScrollerLoader {
|
|
279
291
|
owner = scroller();
|
|
280
292
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerLoader, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
281
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.7", type: SlMessageScrollerLoader, isStandalone: true, selector: "[slMessageScrollerLoader]", host: { attributes: { "data-part": "loader", "role": "status" } }, ngImport: i0, template: `<span aria-hidden="true" data-ui="spinner"
|
|
293
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.7", type: SlMessageScrollerLoader, isStandalone: true, selector: "[slMessageScrollerLoader]", host: { attributes: { "data-part": "loader", "data-part-loader": "", "role": "status" } }, ngImport: i0, template: `<span aria-hidden="true" data-ui="spinner" data-ui-spinner=""
|
|
294
|
+
><svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
295
|
+
<circle cx="12" cy="12" r="8.875" />
|
|
296
|
+
<circle cx="12" cy="12" r="8.875" pathLength="100" /></svg></span
|
|
282
297
|
><span
|
|
283
298
|
><ng-content>{{ owner.t('loader') }}</ng-content></span
|
|
284
299
|
>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
@@ -288,13 +303,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
288
303
|
args: [{
|
|
289
304
|
selector: '[slMessageScrollerLoader]',
|
|
290
305
|
standalone: true,
|
|
291
|
-
template: `<span aria-hidden="true" data-ui="spinner"
|
|
306
|
+
template: `<span aria-hidden="true" data-ui="spinner" data-ui-spinner=""
|
|
307
|
+
><svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
308
|
+
<circle cx="12" cy="12" r="8.875" />
|
|
309
|
+
<circle cx="12" cy="12" r="8.875" pathLength="100" /></svg></span
|
|
292
310
|
><span
|
|
293
311
|
><ng-content>{{ owner.t('loader') }}</ng-content></span
|
|
294
312
|
>`,
|
|
295
313
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
296
314
|
encapsulation: ViewEncapsulation.None,
|
|
297
|
-
host: { 'data-part': 'loader', role: 'status' },
|
|
315
|
+
host: { 'data-part': 'loader', 'data-part-loader': '', role: 'status' },
|
|
298
316
|
}]
|
|
299
317
|
}] });
|
|
300
318
|
/**
|
|
@@ -340,9 +358,9 @@ class SlMessageScrollerJump {
|
|
|
340
358
|
this.owner.scrollToStart({ behavior: this.behavior() });
|
|
341
359
|
}
|
|
342
360
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerJump, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
343
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlMessageScrollerJump, isStandalone: true, selector: "button[slMessageScrollerJump]", inputs: { direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, behavior: { classPropertyName: "behavior", publicName: "behavior", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "jump", "type": "button" }, listeners: { "click": "onClick($event)" }, properties: { "attr.data-direction": "direction()", "attr.data-active": "active() ? \"true\" : \"false\"", "attr.inert": "active() ? null : ''", "attr.tabindex": "active() ? 0 : -1", "attr.aria-label": "label()" } }, ngImport: i0, template: `<span slIcon><svg slGlyph name="arrow-left"></svg></span>
|
|
361
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlMessageScrollerJump, isStandalone: true, selector: "button[slMessageScrollerJump]", inputs: { direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, behavior: { classPropertyName: "behavior", publicName: "behavior", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "jump", "data-part-jump": "", "type": "button" }, listeners: { "click": "onClick($event)" }, properties: { "attr.data-direction": "direction()", "attr.data-active": "active() ? \"true\" : \"false\"", "attr.inert": "active() ? null : ''", "attr.tabindex": "active() ? 0 : -1", "attr.aria-label": "label()" } }, ngImport: i0, template: `<span slIcon><svg slGlyph name="arrow-left"></svg></span>
|
|
344
362
|
@if (words(); as count) {
|
|
345
|
-
<span data-part="jump-count">{{ count }}</span>
|
|
363
|
+
<span data-part="jump-count" data-part-jump-count="">{{ count }}</span>
|
|
346
364
|
}`, isInline: true, dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
347
365
|
}
|
|
348
366
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMessageScrollerJump, decorators: [{
|
|
@@ -353,12 +371,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
353
371
|
imports: [SlGlyph, SlIcon],
|
|
354
372
|
template: `<span slIcon><svg slGlyph name="arrow-left"></svg></span>
|
|
355
373
|
@if (words(); as count) {
|
|
356
|
-
<span data-part="jump-count">{{ count }}</span>
|
|
374
|
+
<span data-part="jump-count" data-part-jump-count="">{{ count }}</span>
|
|
357
375
|
}`,
|
|
358
376
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
359
377
|
encapsulation: ViewEncapsulation.None,
|
|
360
378
|
host: {
|
|
361
379
|
'data-part': 'jump',
|
|
380
|
+
'data-part-jump': '',
|
|
362
381
|
type: 'button',
|
|
363
382
|
'[attr.data-direction]': 'direction()',
|
|
364
383
|
'[attr.data-active]': 'active() ? "true" : "false"',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotted-angular-message-scroller.mjs","sources":["../../message-scroller/src/message-scroller-defaults.ts","../../message-scroller/src/message-scroller.ts","../../message-scroller/src/slotted-angular-message-scroller.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { MessageScrollerPosition } from '@slotted/core/message-scroller';\n\nexport interface MessageScrollerDefaults {\n follow: boolean;\n defaultPosition: MessageScrollerPosition;\n peek: number;\n scrollMargin: number;\n}\n\nconst FALLBACK: MessageScrollerDefaults = {\n follow: false,\n defaultPosition: 'last-anchor',\n peek: 64,\n scrollMargin: 0,\n};\n\nexport const MESSAGE_SCROLLER_DEFAULTS = new InjectionToken<MessageScrollerDefaults>(\n 'slotted message-scroller defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once whether its conversations follow a reply,\n * where a saved one opens, and how much of the previous turn stays in view.\n * A scroller that states any of them wins. Its words come from the language\n * in force (`provideSlotted`).\n */\nexport function provideMessageScrollerDefaults(defaults: Partial<MessageScrollerDefaults>) {\n return {\n provide: MESSAGE_SCROLLER_DEFAULTS,\n useFactory: (): MessageScrollerDefaults => ({\n follow: defaults.follow ?? FALLBACK.follow,\n defaultPosition: defaults.defaultPosition ?? FALLBACK.defaultPosition,\n peek: defaults.peek ?? FALLBACK.peek,\n scrollMargin: defaults.scrollMargin ?? FALLBACK.scrollMargin,\n }),\n };\n}\n\nexport function injectMessageScrollerDefaults(): MessageScrollerDefaults {\n return inject(MESSAGE_SCROLLER_DEFAULTS);\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n output,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n messageScrollerMessages,\n type MessageScrollerMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport { createMessageScroller } from '@slotted/core/message-scroller';\nimport type {\n MessageScrollerEdges,\n MessageScrollerPosition,\n MessageScrollerState,\n ScrollCommandOptions,\n ScrollToMessageOptions,\n} from '@slotted/core/message-scroller';\n\nimport { injectMessageScrollerDefaults } from './message-scroller-defaults';\n\n/**\n * The region a conversation scrolls in, on the `div` the page wrote. It fills\n * a parent whose height is bounded; the viewport inside it scrolls and the\n * jump control stands over it.\n *\n * The behaviour is `@slotted/core/message-scroller`: where a saved\n * conversation opens, whether new words pull the view (`follow`), where a\n * turn the reader sends stands (`anchor` on the item), older rows arriving\n * above without moving the reader, and jumps — `scrollToMessage()` on the\n * instance (`#chat=\"slMessageScroller\"`). The engine writes the scroll state\n * on the DOM itself; the instance's `state` signal is what the jump control\n * reads.\n */\n@Component({\n selector: '[slMessageScroller]',\n standalone: true,\n exportAs: 'slMessageScroller',\n template: '<ng-content></ng-content>',\n styleUrl: '../../../styles/src/message-scroller/message-scroller.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { 'data-ui': 'message-scroller', 'data-part': 'root' },\n})\nexport class SlMessageScroller {\n readonly follow = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly defaultPosition = input<MessageScrollerPosition | undefined>(undefined);\n readonly edgeThreshold = input<number | undefined>(undefined);\n readonly scrollMargin = input<number | undefined>(undefined);\n readonly peek = input<number | undefined>(undefined);\n readonly preserveOnPrepend = input<boolean | undefined>(undefined);\n /** A reply is streaming: the log is `aria-busy` and the change is announced once each way. */\n readonly busy = input(false, { transform: booleanAttribute });\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * region's name, the jump controls, the unread line, the loader and the\n * two announcements of a streaming reply.\n */\n readonly messages = input<PartialMessages<MessageScrollerMessages> | undefined>(undefined);\n\n /** The reader reached the top — the moment to ask for older messages. */\n readonly reachStart = output<'scroll'>();\n readonly anchorChange = output<{ id: string | null; reason: 'scroll' | 'programmatic' }>();\n readonly scrollableChange = output<MessageScrollerEdges>();\n\n private readonly defaults = injectMessageScrollerDefaults();\n /** The family's words in the language in force, with this scroller's `messages` laid over them. */\n readonly t = injectMessages(messageScrollerMessages, this.messages);\n readonly resolvedPosition = computed(\n () => this.defaultPosition() ?? this.defaults.defaultPosition,\n );\n\n private readonly engine = createMessageScroller({\n defaultPosition: this.defaults.defaultPosition,\n onAnchorChange: (id, reason) => this.anchorChange.emit({ id, reason }),\n onReachStart: (reason) => this.reachStart.emit(reason),\n onScrollableChange: (edges) => this.scrollableChange.emit(edges),\n });\n\n /** The engine's state: which edges the viewport can scroll toward, the count of rows out of view. */\n readonly state = signal<MessageScrollerState>(this.engine.getState());\n\n private readonly root = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private viewport: HTMLElement | null = null;\n private content: HTMLElement | null = null;\n private disconnect: (() => void) | null = null;\n\n constructor() {\n const unsubscribe = this.engine.subscribe(() => this.state.set(this.engine.getState()));\n effect(() => {\n this.engine.update({\n defaultPosition: this.resolvedPosition(),\n edgeThreshold: this.edgeThreshold(),\n follow: this.follow() ?? this.defaults.follow,\n peek: this.peek() ?? this.defaults.peek,\n preserveOnPrepend: this.preserveOnPrepend(),\n scrollMargin: this.scrollMargin() ?? this.defaults.scrollMargin,\n });\n });\n let wasBusy: boolean | null = null;\n effect(() => {\n const busy = this.busy();\n if (wasBusy !== null && wasBusy !== busy) {\n getLiveAnnouncer().announce(untracked(() => (busy ? this.t('busy') : this.t('idle'))));\n }\n wasBusy = busy;\n });\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n this.disconnect?.();\n this.engine.destroy();\n });\n }\n\n /** @internal */ registerViewport(node: HTMLElement) {\n this.viewport = node;\n this.connect();\n }\n\n /** @internal */ registerContent(node: HTMLElement) {\n this.content = node;\n this.connect();\n }\n\n private connect() {\n if (this.viewport === null || this.content === null) return;\n this.disconnect?.();\n this.disconnect = this.engine.connect({\n content: this.content,\n root: this.root,\n viewport: this.viewport,\n });\n this.state.set(this.engine.getState());\n }\n\n scrollToMessage(id: string, options?: ScrollToMessageOptions): boolean {\n return this.engine.scrollToMessage(id, options);\n }\n\n scrollToEnd(options?: ScrollCommandOptions): boolean {\n return this.engine.scrollToEnd(options);\n }\n\n scrollToStart(options?: ScrollCommandOptions): boolean {\n return this.engine.scrollToStart(options);\n }\n\n /** Moves focus to the viewport, which scrolls from the keyboard. */\n focus() {\n this.viewport?.focus();\n }\n}\n\nfunction scroller(): SlMessageScroller {\n const owner = inject(SlMessageScroller, { optional: true });\n if (owner === null)\n throw new Error('A message-scroller part is rendered outside slMessageScroller.');\n return owner;\n}\n\n/**\n * The element that scrolls: a labelled region that takes focus, so the\n * keyboard scrolls it; hidden, laid out, until the opening position applies.\n */\n@Directive({\n selector: '[slMessageScrollerViewport]',\n standalone: true,\n host: {\n 'data-part': 'viewport',\n role: 'region',\n '[attr.tabindex]': 'tabindex',\n '[attr.aria-label]': 'label()',\n },\n})\nexport class SlMessageScrollerViewport {\n private readonly owner = scroller();\n protected readonly tabindex =\n inject(new HostAttributeToken('tabindex'), { optional: true }) ?? '0';\n private readonly written = inject(new HostAttributeToken('aria-label'), { optional: true });\n protected readonly label = computed(() => this.written ?? this.owner.t('label'));\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n if (this.owner.resolvedPosition() !== 'start') host.setAttribute('data-pending', '');\n afterNextRender(() => this.owner.registerViewport(host));\n }\n}\n\n/** The rows: a WAI-ARIA `log`; `busy` on the scroller holds arrivals back until a reply is whole. */\n@Directive({\n selector: '[slMessageScrollerContent]',\n standalone: true,\n host: {\n 'data-part': 'content',\n role: 'log',\n 'aria-relevant': 'additions',\n '[attr.aria-busy]': \"owner.busy() ? 'true' : null\",\n },\n})\nexport class SlMessageScrollerContent {\n protected readonly owner = scroller();\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n afterNextRender(() => this.owner.registerContent(host));\n }\n}\n\n/** One row — a message, a separator, a line the system writes. */\n@Directive({\n selector: '[slMessageScrollerItem]',\n standalone: true,\n host: {\n 'data-part': 'item',\n '[attr.data-message-id]': 'messageId() ?? null',\n '[attr.data-anchor]': \"anchor() ? 'true' : null\",\n },\n})\nexport class SlMessageScrollerItem {\n readonly messageId = input<string | undefined>(undefined);\n readonly anchor = input(false, { transform: booleanAttribute });\n}\n\n/** A day, or a line the system writes; `sticky` keeps it at the top while its rows are in view. */\n@Component({\n selector: '[slMessageScrollerSeparator]',\n standalone: true,\n template: '<span><ng-content></ng-content></span>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { 'data-part': 'separator', '[attr.data-sticky]': \"sticky() ? '' : null\" },\n})\nexport class SlMessageScrollerSeparator {\n readonly sticky = input(false, { transform: booleanAttribute });\n}\n\n/** The line above the first message the reader has not seen. */\n@Component({\n selector: '[slMessageScrollerUnread]',\n standalone: true,\n template: `<span\n ><ng-content>{{ owner.t('unread') }}</ng-content></span\n >`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { 'data-part': 'unread' },\n})\nexport class SlMessageScrollerUnread {\n protected readonly owner = scroller();\n}\n\n/** Older rows on their way: the shared ring and a line of text, read once as a status. */\n@Component({\n selector: '[slMessageScrollerLoader]',\n standalone: true,\n template: `<span aria-hidden=\"true\" data-ui=\"spinner\"></span\n ><span\n ><ng-content>{{ owner.t('loader') }}</ng-content></span\n >`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { 'data-part': 'loader', role: 'status' },\n})\nexport class SlMessageScrollerLoader {\n protected readonly owner = scroller();\n}\n\n/**\n * The control that takes the reader to the latest row — or, with\n * `direction=\"start\"`, to the first — on the `button` the page wrote. With\n * nowhere to go it is inert and out of the tab order; when rows arrived out\n * of view it says how many, in its name and on its face.\n */\n@Component({\n selector: 'button[slMessageScrollerJump]',\n standalone: true,\n imports: [SlGlyph, SlIcon],\n template: `<span slIcon><svg slGlyph name=\"arrow-left\"></svg></span>\n @if (words(); as count) {\n <span data-part=\"jump-count\">{{ count }}</span>\n }`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-part': 'jump',\n type: 'button',\n '[attr.data-direction]': 'direction()',\n '[attr.data-active]': 'active() ? \"true\" : \"false\"',\n '[attr.inert]': \"active() ? null : ''\",\n '[attr.tabindex]': 'active() ? 0 : -1',\n '[attr.aria-label]': 'label()',\n '(click)': 'onClick($event)',\n },\n})\nexport class SlMessageScrollerJump {\n readonly direction = input<'end' | 'start'>('end');\n readonly behavior = input<ScrollBehavior>('smooth');\n\n private readonly owner = scroller();\n private readonly ownLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n\n protected readonly active = computed(() => {\n const { scrollable } = this.owner.state();\n return this.direction() === 'end' ? scrollable.end : scrollable.start;\n });\n private readonly count = computed(() =>\n this.direction() === 'end' ? this.owner.state().newCount : 0,\n );\n protected readonly words = computed(() => {\n const count = this.count();\n return count > 0 ? this.owner.t('jumpCount', { count }) : null;\n });\n protected readonly label = computed(() => {\n if (this.ownLabel !== null) return this.ownLabel;\n if (this.direction() === 'start') return this.owner.t('jumpToStart');\n const count = this.count();\n return count > 0 ? this.owner.t('jumpToEndCount', { count }) : this.owner.t('jumpToEnd');\n });\n\n protected onClick(event: MouseEvent) {\n if (event.defaultPrevented) return;\n if (this.direction() === 'end') this.owner.scrollToEnd({ behavior: this.behavior() });\n else this.owner.scrollToStart({ behavior: this.behavior() });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slotted-angular-message-scroller.mjs","sources":["../../message-scroller/src/message-scroller-defaults.ts","../../message-scroller/src/message-scroller.ts","../../message-scroller/src/slotted-angular-message-scroller.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { MessageScrollerPosition } from '@slotted/core/message-scroller';\n\nexport interface MessageScrollerDefaults {\n follow: boolean;\n defaultPosition: MessageScrollerPosition;\n peek: number;\n scrollMargin: number;\n}\n\nconst FALLBACK: MessageScrollerDefaults = {\n follow: false,\n defaultPosition: 'last-anchor',\n peek: 64,\n scrollMargin: 0,\n};\n\nexport const MESSAGE_SCROLLER_DEFAULTS = new InjectionToken<MessageScrollerDefaults>(\n 'slotted message-scroller defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once whether its conversations follow a reply,\n * where a saved one opens, and how much of the previous turn stays in view.\n * A scroller that states any of them wins. Its words come from the language\n * in force (`provideSlotted`).\n */\nexport function provideMessageScrollerDefaults(defaults: Partial<MessageScrollerDefaults>) {\n return {\n provide: MESSAGE_SCROLLER_DEFAULTS,\n useFactory: (): MessageScrollerDefaults => ({\n follow: defaults.follow ?? FALLBACK.follow,\n defaultPosition: defaults.defaultPosition ?? FALLBACK.defaultPosition,\n peek: defaults.peek ?? FALLBACK.peek,\n scrollMargin: defaults.scrollMargin ?? FALLBACK.scrollMargin,\n }),\n };\n}\n\nexport function injectMessageScrollerDefaults(): MessageScrollerDefaults {\n return inject(MESSAGE_SCROLLER_DEFAULTS);\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n output,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n messageScrollerMessages,\n type MessageScrollerMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport { createMessageScroller } from '@slotted/core/message-scroller';\nimport type {\n MessageScrollerEdges,\n MessageScrollerPosition,\n MessageScrollerState,\n ScrollCommandOptions,\n ScrollToMessageOptions,\n} from '@slotted/core/message-scroller';\n\nimport { injectMessageScrollerDefaults } from './message-scroller-defaults';\n\n/**\n * The region a conversation scrolls in, on the `div` the page wrote. It fills\n * a parent whose height is bounded; the viewport inside it scrolls and the\n * jump control stands over it.\n *\n * The behaviour is `@slotted/core/message-scroller`: where a saved\n * conversation opens, whether new words pull the view (`follow`), where a\n * turn the reader sends stands (`anchor` on the item), older rows arriving\n * above without moving the reader, and jumps — `scrollToMessage()` on the\n * instance (`#chat=\"slMessageScroller\"`). The engine writes the scroll state\n * on the DOM itself; the instance's `state` signal is what the jump control\n * reads.\n */\n@Component({\n selector: '[slMessageScroller]',\n standalone: true,\n exportAs: 'slMessageScroller',\n template: '<ng-content></ng-content>',\n styleUrl: '../../../styles/src/message-scroller/message-scroller.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'message-scroller',\n 'data-ui-message-scroller': '',\n 'data-part': 'root',\n 'data-part-root': '',\n },\n})\nexport class SlMessageScroller {\n readonly follow = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly defaultPosition = input<MessageScrollerPosition | undefined>(undefined);\n readonly edgeThreshold = input<number | undefined>(undefined);\n readonly scrollMargin = input<number | undefined>(undefined);\n readonly peek = input<number | undefined>(undefined);\n readonly preserveOnPrepend = input<boolean | undefined>(undefined);\n /** A reply is streaming: the log is `aria-busy` and the change is announced once each way. */\n readonly busy = input(false, { transform: booleanAttribute });\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * region's name, the jump controls, the unread line, the loader and the\n * two announcements of a streaming reply.\n */\n readonly messages = input<PartialMessages<MessageScrollerMessages> | undefined>(undefined);\n\n /** The reader reached the top — the moment to ask for older messages. */\n readonly reachStart = output<'scroll'>();\n readonly anchorChange = output<{ id: string | null; reason: 'scroll' | 'programmatic' }>();\n readonly scrollableChange = output<MessageScrollerEdges>();\n\n private readonly defaults = injectMessageScrollerDefaults();\n /** The family's words in the language in force, with this scroller's `messages` laid over them. */\n readonly t = injectMessages(messageScrollerMessages, this.messages);\n readonly resolvedPosition = computed(\n () => this.defaultPosition() ?? this.defaults.defaultPosition,\n );\n\n private readonly engine = createMessageScroller({\n defaultPosition: this.defaults.defaultPosition,\n onAnchorChange: (id, reason) => this.anchorChange.emit({ id, reason }),\n onReachStart: (reason) => this.reachStart.emit(reason),\n onScrollableChange: (edges) => this.scrollableChange.emit(edges),\n });\n\n /** The engine's state: which edges the viewport can scroll toward, the count of rows out of view. */\n readonly state = signal<MessageScrollerState>(this.engine.getState());\n\n private readonly root = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private viewport: HTMLElement | null = null;\n private content: HTMLElement | null = null;\n private disconnect: (() => void) | null = null;\n\n constructor() {\n const unsubscribe = this.engine.subscribe(() => this.state.set(this.engine.getState()));\n effect(() => {\n this.engine.update({\n defaultPosition: this.resolvedPosition(),\n edgeThreshold: this.edgeThreshold(),\n follow: this.follow() ?? this.defaults.follow,\n peek: this.peek() ?? this.defaults.peek,\n preserveOnPrepend: this.preserveOnPrepend(),\n scrollMargin: this.scrollMargin() ?? this.defaults.scrollMargin,\n });\n });\n let wasBusy: boolean | null = null;\n effect(() => {\n const busy = this.busy();\n if (wasBusy !== null && wasBusy !== busy) {\n getLiveAnnouncer().announce(untracked(() => (busy ? this.t('busy') : this.t('idle'))));\n }\n wasBusy = busy;\n });\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n this.disconnect?.();\n this.engine.destroy();\n });\n }\n\n /** @internal */ registerViewport(node: HTMLElement) {\n this.viewport = node;\n this.connect();\n }\n\n /** @internal */ registerContent(node: HTMLElement) {\n this.content = node;\n this.connect();\n }\n\n private connect() {\n if (this.viewport === null || this.content === null) return;\n this.disconnect?.();\n this.disconnect = this.engine.connect({\n content: this.content,\n root: this.root,\n viewport: this.viewport,\n });\n this.state.set(this.engine.getState());\n }\n\n scrollToMessage(id: string, options?: ScrollToMessageOptions): boolean {\n return this.engine.scrollToMessage(id, options);\n }\n\n scrollToEnd(options?: ScrollCommandOptions): boolean {\n return this.engine.scrollToEnd(options);\n }\n\n scrollToStart(options?: ScrollCommandOptions): boolean {\n return this.engine.scrollToStart(options);\n }\n\n /** Moves focus to the viewport, which scrolls from the keyboard. */\n focus() {\n this.viewport?.focus();\n }\n}\n\nfunction scroller(): SlMessageScroller {\n const owner = inject(SlMessageScroller, { optional: true });\n if (owner === null)\n throw new Error('A message-scroller part is rendered outside slMessageScroller.');\n return owner;\n}\n\n/**\n * The element that scrolls: a labelled region that takes focus, so the\n * keyboard scrolls it; hidden, laid out, until the opening position applies.\n */\n@Directive({\n selector: '[slMessageScrollerViewport]',\n standalone: true,\n host: {\n 'data-part': 'viewport',\n 'data-part-viewport': '',\n role: 'region',\n '[attr.tabindex]': 'tabindex',\n '[attr.aria-label]': 'label()',\n },\n})\nexport class SlMessageScrollerViewport {\n private readonly owner = scroller();\n protected readonly tabindex =\n inject(new HostAttributeToken('tabindex'), { optional: true }) ?? '0';\n private readonly written = inject(new HostAttributeToken('aria-label'), { optional: true });\n protected readonly label = computed(() => this.written ?? this.owner.t('label'));\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n if (this.owner.resolvedPosition() !== 'start') host.setAttribute('data-pending', '');\n afterNextRender(() => this.owner.registerViewport(host));\n }\n}\n\n/** The rows: a WAI-ARIA `log`; `busy` on the scroller holds arrivals back until a reply is whole. */\n@Directive({\n selector: '[slMessageScrollerContent]',\n standalone: true,\n host: {\n 'data-part': 'content',\n 'data-part-content': '',\n role: 'log',\n 'aria-relevant': 'additions',\n '[attr.aria-busy]': \"owner.busy() ? 'true' : null\",\n },\n})\nexport class SlMessageScrollerContent {\n protected readonly owner = scroller();\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n afterNextRender(() => this.owner.registerContent(host));\n }\n}\n\n/** One row — a message, a separator, a line the system writes. */\n@Directive({\n selector: '[slMessageScrollerItem]',\n standalone: true,\n host: {\n 'data-part': 'item',\n 'data-part-item': '',\n '[attr.data-message-id]': 'messageId() ?? null',\n '[attr.data-anchor]': \"anchor() ? 'true' : null\",\n },\n})\nexport class SlMessageScrollerItem {\n readonly messageId = input<string | undefined>(undefined);\n readonly anchor = input(false, { transform: booleanAttribute });\n}\n\n/** A day, or a line the system writes; `sticky` keeps it at the top while its rows are in view. */\n@Component({\n selector: '[slMessageScrollerSeparator]',\n standalone: true,\n template: '<span><ng-content></ng-content></span>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-part': 'separator',\n 'data-part-separator': '',\n '[attr.data-sticky]': \"sticky() ? '' : null\",\n },\n})\nexport class SlMessageScrollerSeparator {\n readonly sticky = input(false, { transform: booleanAttribute });\n}\n\n/** The line above the first message the reader has not seen. */\n@Component({\n selector: '[slMessageScrollerUnread]',\n standalone: true,\n template: `<span\n ><ng-content>{{ owner.t('unread') }}</ng-content></span\n >`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { 'data-part': 'unread', 'data-part-unread': '' },\n})\nexport class SlMessageScrollerUnread {\n protected readonly owner = scroller();\n}\n\n/** Older rows on their way: the shared ring and a line of text, read once as a status. */\n@Component({\n selector: '[slMessageScrollerLoader]',\n standalone: true,\n template: `<span aria-hidden=\"true\" data-ui=\"spinner\" data-ui-spinner=\"\"\n ><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <circle cx=\"12\" cy=\"12\" r=\"8.875\" />\n <circle cx=\"12\" cy=\"12\" r=\"8.875\" pathLength=\"100\" /></svg></span\n ><span\n ><ng-content>{{ owner.t('loader') }}</ng-content></span\n >`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { 'data-part': 'loader', 'data-part-loader': '', role: 'status' },\n})\nexport class SlMessageScrollerLoader {\n protected readonly owner = scroller();\n}\n\n/**\n * The control that takes the reader to the latest row — or, with\n * `direction=\"start\"`, to the first — on the `button` the page wrote. With\n * nowhere to go it is inert and out of the tab order; when rows arrived out\n * of view it says how many, in its name and on its face.\n */\n@Component({\n selector: 'button[slMessageScrollerJump]',\n standalone: true,\n imports: [SlGlyph, SlIcon],\n template: `<span slIcon><svg slGlyph name=\"arrow-left\"></svg></span>\n @if (words(); as count) {\n <span data-part=\"jump-count\" data-part-jump-count=\"\">{{ count }}</span>\n }`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-part': 'jump',\n 'data-part-jump': '',\n type: 'button',\n '[attr.data-direction]': 'direction()',\n '[attr.data-active]': 'active() ? \"true\" : \"false\"',\n '[attr.inert]': \"active() ? null : ''\",\n '[attr.tabindex]': 'active() ? 0 : -1',\n '[attr.aria-label]': 'label()',\n '(click)': 'onClick($event)',\n },\n})\nexport class SlMessageScrollerJump {\n readonly direction = input<'end' | 'start'>('end');\n readonly behavior = input<ScrollBehavior>('smooth');\n\n private readonly owner = scroller();\n private readonly ownLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n\n protected readonly active = computed(() => {\n const { scrollable } = this.owner.state();\n return this.direction() === 'end' ? scrollable.end : scrollable.start;\n });\n private readonly count = computed(() =>\n this.direction() === 'end' ? this.owner.state().newCount : 0,\n );\n protected readonly words = computed(() => {\n const count = this.count();\n return count > 0 ? this.owner.t('jumpCount', { count }) : null;\n });\n protected readonly label = computed(() => {\n if (this.ownLabel !== null) return this.ownLabel;\n if (this.direction() === 'start') return this.owner.t('jumpToStart');\n const count = this.count();\n return count > 0 ? this.owner.t('jumpToEndCount', { count }) : this.owner.t('jumpToEnd');\n });\n\n protected onClick(event: MouseEvent) {\n if (event.defaultPrevented) return;\n if (this.direction() === 'end') this.owner.scrollToEnd({ behavior: this.behavior() });\n else this.owner.scrollToStart({ behavior: this.behavior() });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|