@slotted/angular 0.1.0-beta.7 → 0.1.0-beta.9
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/docs/calendar.json +1 -1
- package/docs/code-block.json +92 -92
- package/docs/code-block.md +69 -69
- package/docs/currency-field.json +7 -0
- package/docs/currency-field.md +1 -0
- package/docs/data-grid.examples.md +1 -1
- package/docs/data-grid.json +21 -4
- package/docs/data-grid.md +1 -1
- package/docs/data-grid.props.md +5 -3
- package/docs/dialog.examples.md +138 -136
- package/docs/dialog.json +8 -8
- package/docs/filter-bar.json +118 -118
- package/docs/filter-bar.md +79 -79
- package/docs/guidelines/async-feedback.md +10 -0
- package/docs/guidelines/composition.md +11 -7
- package/docs/guidelines/index.md +6 -1
- package/docs/guidelines/list-pages.md +30 -0
- package/docs/guidelines/overviews.md +10 -0
- package/docs/markdown.json +79 -79
- package/docs/markdown.md +65 -65
- package/docs/page-header.json +1 -1
- package/docs/skills/compose-screen/SKILL.md +22 -10
- package/docs/skills/review-screen/SKILL.md +6 -0
- package/docs/skills/waiting-states/SKILL.md +4 -1
- package/docs/tags-input.json +28 -2
- package/docs/tags-input.md +4 -1
- package/docs/timeline.json +131 -131
- package/docs/timeline.md +123 -123
- package/fesm2022/slotted-angular-accordion.mjs +4 -2
- package/fesm2022/slotted-angular-accordion.mjs.map +1 -1
- package/fesm2022/slotted-angular-action-bar.mjs +21 -10
- package/fesm2022/slotted-angular-action-bar.mjs.map +1 -1
- package/fesm2022/slotted-angular-action-sheet.mjs +42 -29
- package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -1
- package/fesm2022/slotted-angular-alert.mjs +17 -11
- package/fesm2022/slotted-angular-alert.mjs.map +1 -1
- package/fesm2022/slotted-angular-app-shell.mjs +52 -40
- 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 +9 -6
- 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 +53 -25
- package/fesm2022/slotted-angular-button.mjs.map +1 -1
- package/fesm2022/slotted-angular-calendar.mjs +82 -30
- 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 +158 -64
- package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
- package/fesm2022/slotted-angular-chart.mjs +4 -2
- 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 +13 -8
- 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 +77 -31
- package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
- package/fesm2022/slotted-angular-command-palette.mjs +150 -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 +98 -32
- package/fesm2022/slotted-angular-currency-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-dashboard-grid.mjs +127 -44
- package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-data-grid.mjs +309 -104
- 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 +40 -14
- package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-picker.mjs +19 -9
- package/fesm2022/slotted-angular-date-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-range-picker.mjs +41 -16
- 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 +37 -23
- package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-range-picker.mjs +111 -42
- 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 +29 -18
- package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -1
- package/fesm2022/slotted-angular-dialog.mjs +61 -28
- 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 +38 -26
- package/fesm2022/slotted-angular-drawer.mjs.map +1 -1
- package/fesm2022/slotted-angular-entity-picker.mjs +195 -67
- package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-event-calendar.mjs +259 -102
- 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 +104 -43
- 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 +167 -99
- package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
- package/fesm2022/slotted-angular-inline-message.mjs +10 -8
- 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 +14 -10
- 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 +41 -27
- 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 +28 -15
- package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -1
- package/fesm2022/slotted-angular-message.mjs +113 -51
- package/fesm2022/slotted-angular-message.mjs.map +1 -1
- package/fesm2022/slotted-angular-multi-select.mjs +133 -57
- 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 +107 -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 +72 -42
- package/fesm2022/slotted-angular-page-header.mjs.map +1 -1
- package/fesm2022/slotted-angular-page.mjs +18 -9
- 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 +25 -18
- package/fesm2022/slotted-angular-popover.mjs.map +1 -1
- package/fesm2022/slotted-angular-progress-indicator.mjs +122 -30
- package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -1
- package/fesm2022/slotted-angular-prompt-composer.mjs +24 -18
- 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 +9 -5
- package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -1
- package/fesm2022/slotted-angular-section.mjs +34 -15
- package/fesm2022/slotted-angular-section.mjs.map +1 -1
- package/fesm2022/slotted-angular-segmented-control.mjs +15 -9
- package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -1
- package/fesm2022/slotted-angular-select.mjs +135 -53
- 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 +29 -13
- package/fesm2022/slotted-angular-sparkline.mjs.map +1 -1
- package/fesm2022/slotted-angular-split-button.mjs +25 -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 +135 -72
- package/fesm2022/slotted-angular-table.mjs.map +1 -1
- package/fesm2022/slotted-angular-tabs.mjs +31 -14
- 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 +49 -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 +28 -14
- package/fesm2022/slotted-angular-time-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-range-picker.mjs +109 -40
- package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-timeline.mjs +135 -64
- package/fesm2022/slotted-angular-timeline.mjs.map +1 -1
- package/fesm2022/slotted-angular-toast.mjs +42 -31
- package/fesm2022/slotted-angular-toast.mjs.map +1 -1
- package/fesm2022/slotted-angular-toggle-group.mjs +10 -6
- 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 +21 -10
- package/fesm2022/slotted-angular-toolbar.mjs.map +1 -1
- package/fesm2022/slotted-angular-tooltip.mjs +8 -5
- 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 +46 -21
- 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 +74 -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.map +1 -1
- package/types/slotted-angular-action-sheet.d.ts.map +1 -1
- package/types/slotted-angular-alert.d.ts +1 -1
- package/types/slotted-angular-alert.d.ts.map +1 -1
- 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.map +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.map +1 -1
- package/types/slotted-angular-button.d.ts.map +1 -1
- package/types/slotted-angular-calendar.d.ts +2 -0
- 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.map +1 -1
- package/types/slotted-angular-checkbox-group.d.ts.map +1 -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 +1 -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 +39 -13
- 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 +26 -2
- 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.map +1 -1
- package/types/slotted-angular-date-picker.d.ts.map +1 -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.map +1 -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 +2 -1
- 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.map +1 -1
- package/types/slotted-angular-entity-picker.d.ts.map +1 -1
- 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 +1 -1
- 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 +1 -1
- 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.map +1 -1
- 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.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.map +1 -1
- package/types/slotted-angular-multi-select.d.ts +1 -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.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 +1 -1
- 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.map +1 -1
- 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.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.map +1 -1
- package/types/slotted-angular-segmented-control.d.ts.map +1 -1
- package/types/slotted-angular-select.d.ts +1 -1
- 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.map +1 -1
- 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.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.map +1 -1
- package/types/slotted-angular-tabs.d.ts.map +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-time-field.d.ts.map +1 -1
- package/types/slotted-angular-time-picker.d.ts.map +1 -1
- package/types/slotted-angular-time-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-timeline.d.ts.map +1 -1
- package/types/slotted-angular-toast.d.ts +2 -2
- package/types/slotted-angular-toast.d.ts.map +1 -1
- package/types/slotted-angular-toggle-group.d.ts.map +1 -1
- package/types/slotted-angular-toggle.d.ts.map +1 -1
- 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.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-notification-center.mjs","sources":["../../notification-center/src/notification-center-defaults.ts","../../notification-center/src/notification-control.ts","../../notification-center/src/notification-center.ts","../../notification-center/src/slotted-angular-notification-center.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\nimport type { TimestampValue } from '@slotted/core/timeline';\n\n/** The popover's step and the page's. */\nexport type NotificationCenterSize = 'sm' | 'md';\n\n/** The rank of the header's heading; group labels take the rank below. */\nexport type NotificationCenterLevel = '2' | '3' | '4';\n\n/** How more is loaded: never, on a button, or when the end scrolls into view. */\nexport type NotificationCenterGrowing = 'none' | 'button' | 'scroll';\n\n/** Whether keys that arrive while the reader reads are held behind `fresh`. */\nexport type NotificationCenterArrivals = 'hold' | 'show';\n\n/** How the item's time is written. */\nexport type NotificationCenterTimeFormat = 'relative' | 'absolute';\n\n/** Which of the family's two item controls are drawn. */\nexport type NotificationCenterControls = 'both' | 'read' | 'dismiss' | 'none';\n\n/** The item's tone: the family's visual and the wash an unread item stands on. */\nexport type NotificationCenterTone = 'accent' | 'secondary' | 'success' | 'warning' | 'danger';\n\n/** Why the view moved. */\nexport type NotificationCenterViewReason = 'pointer' | 'keyboard' | 'programmatic';\n\n/** Why an item was pressed, marked or removed. */\nexport type NotificationCenterPressReason = 'pointer' | 'keyboard';\n\n/** Why a read change was asked for: the two presses, or the instance. */\nexport type NotificationCenterReadReason = NotificationCenterPressReason | 'programmatic';\n\n/** Why more was asked for: the two presses, or the end scrolling into view. */\nexport type NotificationCenterLoadReason = NotificationCenterPressReason | 'scroll';\n\n/** A request the family makes that carries no value of its own: a reason, the event, a refusal. */\nexport interface NotificationCenterRequest<Reason extends string> {\n readonly reason: Reason;\n readonly event?: Event | undefined;\n readonly cancelled: boolean;\n /** Refuses the request. The family does nothing further with it. */\n cancel(): void;\n}\n\n/** What `readRequest` asks: these keys become this. */\nexport interface NotificationCenterReadRequest extends NotificationCenterRequest<NotificationCenterReadReason> {\n readonly keys: readonly string[];\n readonly read: boolean;\n}\n\n/** What `removeRequest` and `openRequest` name. */\nexport interface NotificationCenterItemRequest extends NotificationCenterRequest<NotificationCenterPressReason> {\n readonly key: string;\n}\n\n/** What `revealRequest` carries: how many were held. */\nexport interface NotificationCenterRevealRequest extends NotificationCenterRequest<NotificationCenterReadReason> {\n readonly count: number;\n}\n\n/** One notification as the consumer's store holds it. */\nexport interface NotificationItem {\n /** Identifies the item across renders; what every request names. */\n key: string;\n /** The words that name it: a link when `href`, text otherwise. */\n title: string;\n /** The body, clamped at three lines by the stylesheet. */\n description?: string | undefined;\n /** When it happened: a plain date-time or an ISO instant. */\n time: TimestampValue;\n /** Whether the reader has seen it. The consumer's fact; the family asks to change it. */\n read: boolean;\n /** Where the title goes. */\n href?: string | undefined;\n /** The visual's glyph and the unread wash. Accent when unstated. */\n tone?: NotificationCenterTone | undefined;\n /** Whatever the consumer's templates need: an avatar's initials, a record. */\n data?: unknown;\n}\n\n/** One entry of the views strip. */\nexport interface NotificationView {\n value: string;\n label: string;\n /** A count drawn as a chip after the label. */\n count?: number | undefined;\n}\n\n/** What an application sets once for every centre under it. */\nexport interface NotificationCenterDefaults {\n arrivals: NotificationCenterArrivals;\n controls: NotificationCenterControls;\n growing: NotificationCenterGrowing;\n level: NotificationCenterLevel;\n size: NotificationCenterSize;\n timeFormat: NotificationCenterTimeFormat;\n timeZone?: string | undefined;\n}\n\nconst FALLBACK: NotificationCenterDefaults = {\n arrivals: 'hold',\n controls: 'both',\n growing: 'none',\n level: '2',\n size: 'md',\n timeFormat: 'relative',\n};\n\nexport const NOTIFICATION_CENTER_DEFAULTS = new InjectionToken<NotificationCenterDefaults>(\n 'slotted notification-center defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once how its notifications read — the size, the\n * rank, how more loads, whether arrivals are held, how time is written, the\n * time zone — rather than repeating them on every screen. A centre that states\n * any of them itself still wins. Its words and locale come from the language\n * in force (`provideSlotted`).\n */\nexport function provideNotificationCenterDefaults(defaults: Partial<NotificationCenterDefaults>) {\n return {\n provide: NOTIFICATION_CENTER_DEFAULTS,\n useFactory: (): NotificationCenterDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectNotificationCenterDefaults(): NotificationCenterDefaults {\n return inject(NOTIFICATION_CENTER_DEFAULTS);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SlNotificationCenterIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-notification-center-${this.count}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n provideTooltipDefaults,\n SlTooltip,\n SlTooltipContent,\n SlTooltipLayer,\n} from '@slotted/angular/tooltip';\n\n/**\n * One of the family's own controls on an item — mark read or unread, and\n * dismiss — and the tooltip it opens with the words its accessible name\n * carries: on hover, and on keyboard focus. Two glyphs with no words beside\n * them are two controls nobody can tell apart until they are named, and\n * `aria-label` names them only to a screen reader. The construction is the\n * one `top-navigation` gives its icon-only controls: `SlTooltip` is a host\n * directive holding the state and the delays, and the control dispatches the\n * pointer and the focus to it.\n *\n * On touch a hover never comes, so a press held on the control opens the hint\n * the way the platform's own long press names a thing.\n */\n@Component({\n selector: 'button[slNotificationControl]',\n standalone: true,\n imports: [SlTooltipLayer, SlTooltipContent],\n /* The glyph is the item's to choose, so it is projected. */\n template: `<ng-content /><ng-template slTooltipLayer>\n <div slTooltipContent>{{ text() }}</div>\n </ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n hostDirectives: [SlTooltip],\n providers: [provideTooltipDefaults({ openOn: 'hover', side: 'bottom' })],\n host: {\n type: 'button',\n '[attr.aria-label]': 'text()',\n '[attr.aria-describedby]': 'describedBy()',\n '(pointerenter)': 'onPointerEnter($event)',\n '(pointerleave)': 'onPointerLeave($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointerup)': 'onPointerUp()',\n '(pointercancel)': 'onPointerUp()',\n '(focus)': 'onFocus($event)',\n '(blur)': 'onBlur($event)',\n },\n})\nexport class SlNotificationControl {\n /** The words the control is named by, and the tooltip repeats. */\n readonly text = input.required<string>();\n\n private readonly tooltip = inject(SlTooltip);\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n\n constructor() {\n this.tooltip.triggerNode.set(this.native);\n inject(DestroyRef).onDestroy(() => this.tooltip.triggerNode.set(null));\n }\n\n protected readonly describedBy = computed(() =>\n this.tooltip.isOpen() ? this.tooltip.contentId : null,\n );\n\n protected onPointerEnter(event: PointerEvent) {\n if (event.pointerType === 'touch') return;\n this.tooltip.openAfterDelay(event);\n }\n\n protected onPointerLeave(event: PointerEvent) {\n this.tooltip.closeAfterDelay(event);\n }\n\n protected onPointerDown(event: PointerEvent) {\n if (event.pointerType === 'touch') this.tooltip.pressAndHold(event);\n else if (this.tooltip.isOpen()) this.tooltip.toggle(false, 'pointer', event);\n }\n\n protected onPointerUp() {\n this.tooltip.cancelPending();\n }\n\n protected onFocus(event: FocusEvent) {\n if (!this.native.matches(':focus-visible')) return;\n this.tooltip.toggle(true, 'keyboard', event);\n }\n\n protected onBlur(event: FocusEvent) {\n if (this.tooltip.isOpen()) this.tooltip.toggle(false, 'blur', event);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n model,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport type { GlyphName } from '@slotted/angular/icon';\nimport { SlButton } from '@slotted/angular/button';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlSkeleton, SlSkeletonText } from '@slotted/angular/skeleton';\nimport { SlTab, SlTabList, SlTabs } from '@slotted/angular/tabs';\nimport { tabbables } from '@slotted/core/focus';\nimport {\n notificationCenterMessages,\n type NotificationCenterMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport { feedFocusTarget, formatTimestamp, setSizeOf } from '@slotted/core/timeline';\nimport type { FormattedTimestamp } from '@slotted/core/timeline';\n\nimport {\n injectNotificationCenterDefaults,\n SlNotificationCenterIdFactory,\n type NotificationCenterArrivals,\n type NotificationCenterControls,\n type NotificationCenterGrowing,\n type NotificationCenterItemRequest,\n type NotificationCenterLevel,\n type NotificationCenterLoadReason,\n type NotificationCenterPressReason,\n type NotificationCenterReadReason,\n type NotificationCenterReadRequest,\n type NotificationCenterRequest,\n type NotificationCenterRevealRequest,\n type NotificationCenterSize,\n type NotificationCenterTimeFormat,\n type NotificationCenterTone,\n type NotificationCenterViewReason,\n type NotificationItem,\n type NotificationView,\n} from './notification-center-defaults';\nimport { SlNotificationControl } from './notification-control';\n\n/** How many skeleton rows stand in while nothing has arrived. */\nconst WAITING_ROWS = [0, 1, 2];\n\n/**\n * The family's own visual for an item with a tone and no visual of its own,\n * as the contract's `toneGlyph` names it: every glyph a circle.\n */\nconst TONE_GLYPH: Record<NotificationCenterTone, GlyphName> = {\n accent: 'circle-info',\n secondary: 'bell',\n success: 'circle-check',\n warning: 'circle-alert',\n danger: 'circle-x',\n};\n\n/** What an item template is handed. */\nexport interface NotificationItemContext {\n $implicit: NotificationItem;\n /** Its position in the feed, from one. */\n position: number;\n /** The tone the family resolved for it. */\n tone: NotificationCenterTone;\n /** The formatted time: the machine value and the words. */\n time: FormattedTimestamp;\n /** The ids the family wrote, for `aria-labelledby` and `aria-describedby`. */\n ids: { title: string; description: string };\n}\n\n/** An identifier a key can be part of: word characters and hyphens stay, the rest is spelled out. */\nfunction escapeKey(key: string): string {\n return key.replace(/[^\\w-]/g, (character) => `-${character.charCodeAt(0).toString(16)}-`);\n}\n\nfunction createRequest<Reason extends string>(\n reason: Reason,\n event: Event | undefined,\n): NotificationCenterRequest<Reason> {\n let cancelled = false;\n return {\n reason,\n event,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n };\n}\n\n/** A click with no coordinates is a key. */\nfunction pressReason(event: Event): NotificationCenterPressReason {\n return (event as MouseEvent).detail === 0 ? 'keyboard' : 'pointer';\n}\n\ninterface Group {\n label: string;\n items: NotificationItem[];\n}\n\n/** The items filed under their labels, in the order the labels first appear. */\nfunction groupItems(\n items: readonly NotificationItem[],\n groupBy: (item: NotificationItem) => string,\n): Group[] {\n const groups: Group[] = [];\n const byLabel = new Map<string, Group>();\n for (const item of items) {\n const label = groupBy(item);\n let group = byLabel.get(label);\n if (group === undefined) {\n group = { label, items: [] };\n byLabel.set(label, group);\n groups.push(group);\n }\n group.items.push(item);\n }\n return groups;\n}\n\n/**\n * Substitutes an item's content — the words between the visual and the\n * controls; the article, its wiring and its controls stay the family's.\n *\n * ```html\n * <ng-template slNotificationItem let-item let-time=\"time\" let-ids=\"ids\">\n * <span data-part=\"title\" [id]=\"ids.title\">{{ item.title }}</span>\n * </ng-template>\n * ```\n */\n@Directive({ selector: 'ng-template[slNotificationItem]', standalone: true })\nexport class SlNotificationItem {\n readonly template = inject(TemplateRef<NotificationItemContext>);\n}\n\n/**\n * The visual of an item: an avatar, an icon. Absent, an item with a tone\n * gets the family's glyph; one without gets no visual.\n */\n@Directive({ selector: 'ng-template[slNotificationVisual]', standalone: true })\nexport class SlNotificationVisual {\n readonly template = inject(TemplateRef<NotificationItemContext>);\n}\n\n/** The consumer's controls for an item, under its body. */\n@Directive({ selector: 'ng-template[slNotificationActions]', standalone: true })\nexport class SlNotificationActions {\n readonly template = inject(TemplateRef<NotificationItemContext>);\n}\n\n/**\n * The persistent list of what happened while the reader was not looking.\n *\n * **It holds none of the facts.** `items` is the consumer's array: whether an\n * item is read, whether it exists, how many there are. Marking, removing,\n * opening, revealing and loading are outputs with a reason, and the store\n * answers by changing the array.\n *\n * **One value moves: the view.** `[(view)]` for the value, `(viewRequest)`\n * for the request that carries the reason and can be cancelled; the\n * built-in `all` and `unread` when the consumer states no views. The strip\n * is `tabs` holding its list alone; the feed is its one panel.\n *\n * **Arrivals are held while the reader reads.** Under `arrivals=\"hold\"` a\n * key the family has not shown, arriving while focus is inside the feed or\n * the feed's scroller is past its start, waits behind `fresh` with a polite\n * announcement; otherwise it shows at once.\n *\n * **The feed is the APG pattern.** `role=\"feed\"`, an `article` per item with\n * its position and the set's size, `PageDown` and `PageUp` between articles,\n * `Control+End` and `Control+Home` out of the feed, `Delete` to ask for a\n * removal, and `aria-busy` while a page is on its way.\n */\n@Component({\n selector: '[slNotificationCenter]',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlGlyph,\n SlIcon,\n SlNotificationControl,\n SlSkeleton,\n SlSkeletonText,\n SlTab,\n SlTabList,\n SlTabs,\n ],\n template: `\n <div data-part=\"header\">\n @switch (levelValue()) {\n @case ('3') {\n <h3 data-part=\"title\" [id]=\"titleId\">\n {{ t('title') }}\n @if (unread() > 0) {\n <span data-part=\"count\">{{ unread() }}</span>\n }\n </h3>\n }\n @case ('4') {\n <h4 data-part=\"title\" [id]=\"titleId\">\n {{ t('title') }}\n @if (unread() > 0) {\n <span data-part=\"count\">{{ unread() }}</span>\n }\n </h4>\n }\n @default {\n <h2 data-part=\"title\" [id]=\"titleId\">\n {{ t('title') }}\n @if (unread() > 0) {\n <span data-part=\"count\">{{ unread() }}</span>\n }\n </h2>\n }\n }\n <span data-part=\"mark-all\">\n <button\n slButton\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n type=\"button\"\n [disabled]=\"unread() === 0\"\n (click)=\"markAll($event)\"\n >\n {{ t('markAll') }}\n </button>\n </span>\n <ng-content select=\"[slNotificationCenterActions]\" />\n </div>\n @if (viewList().length > 1) {\n <div data-part=\"views\">\n <div\n slTabs\n track=\"none\"\n [size]=\"sizeValue()\"\n [value]=\"currentView()\"\n (valueChange)=\"forwardView($event)\"\n >\n <div slTabList [attr.aria-label]=\"t('views')\">\n @for (entry of viewList(); track entry.value) {\n <div slTab [value]=\"entry.value\" [controls]=\"feedId\">\n {{ entry.label }}\n @if (entry.count !== undefined && entry.count > 0) {\n &ngsp;<span data-part=\"count\">{{ entry.count }}</span>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n @if (held().length > 0) {\n <button #fresh data-part=\"fresh\" type=\"button\" (click)=\"reveal(pressReason($event), $event)\">\n {{ t('fresh', { count: held().length }) }}\n </button>\n }\n <div\n #feed\n data-part=\"feed\"\n role=\"feed\"\n [id]=\"feedId\"\n [attr.aria-labelledby]=\"titleId\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n (keydown)=\"onFeedKeydown($event)\"\n >\n @if (waiting()) {\n @for (row of waitingRows; track row) {\n <div data-part=\"item\" aria-hidden=\"true\">\n <span data-part=\"visual\"><span slSkeleton shape=\"circle\" size=\"sm\"></span></span>\n <div data-part=\"content\"><span slSkeletonText [lines]=\"2\"></span></div>\n </div>\n }\n } @else if (groupBy() === undefined) {\n @for (item of visibleItems(); track item.key; let index = $index) {\n <ng-container\n [ngTemplateOutlet]=\"article\"\n [ngTemplateOutletContext]=\"{ $implicit: item, position: index + 1 }\"\n />\n }\n } @else {\n @for (group of groups(); track group.label; let offset = $index) {\n <div data-part=\"group\">\n @switch (levelValue()) {\n @case ('3') {\n <h4 data-part=\"group-label\">{{ group.label }}</h4>\n }\n @case ('4') {\n <h5 data-part=\"group-label\">{{ group.label }}</h5>\n }\n @default {\n <h3 data-part=\"group-label\">{{ group.label }}</h3>\n }\n }\n @for (item of group.items; track item.key; let index = $index) {\n <ng-container\n [ngTemplateOutlet]=\"article\"\n [ngTemplateOutletContext]=\"{ $implicit: item, position: positionOf(group, index) }\"\n />\n }\n </div>\n }\n }\n </div>\n @if (showEmpty()) {\n <div data-part=\"empty\">\n <ng-content select=\"[slNotificationCenterEmpty]\">{{ emptyWords() }}</ng-content>\n </div>\n } @else if (growingValue() !== 'none') {\n @if (loading()) {\n <div #more aria-live=\"polite\" data-part=\"more\">{{ t('loading') }}</div>\n } @else if (growingValue() === 'button') {\n <button #more data-part=\"more\" type=\"button\" (click)=\"loadMore($event)\">\n {{ t('loadMore') }}\n </button>\n } @else {\n <div #more data-part=\"more\"></div>\n }\n }\n <ng-content select=\"[slNotificationCenterFooter]\" />\n\n <ng-template #article let-item let-position=\"position\">\n @let context = contextOf(item, position);\n <article\n data-part=\"item\"\n tabindex=\"0\"\n [attr.data-key]=\"item.key\"\n [attr.data-tone]=\"context.tone\"\n [attr.data-read]=\"item.read ? '' : null\"\n [attr.aria-labelledby]=\"context.ids.title\"\n [attr.aria-describedby]=\"item.description ? context.ids.description : null\"\n [attr.aria-posinset]=\"position\"\n [attr.aria-setsize]=\"setSize()\"\n >\n @if (visualTemplate(); as visual) {\n <span data-part=\"visual\" [attr.data-tone]=\"item.tone ?? null\">\n <ng-container\n [ngTemplateOutlet]=\"visual.template\"\n [ngTemplateOutletContext]=\"context\"\n />\n </span>\n } @else if (item.tone !== undefined) {\n <span data-part=\"visual\" [attr.data-tone]=\"item.tone\"\n ><span slIcon data-tone-glyph=\"\"><svg slGlyph [name]=\"toneGlyph(item.tone)\"></svg></span\n ></span>\n }\n <div data-part=\"content\">\n @if (itemTemplate(); as own) {\n <ng-container [ngTemplateOutlet]=\"own.template\" [ngTemplateOutletContext]=\"context\" />\n } @else {\n @if (item.href === undefined) {\n <span data-part=\"title\" [id]=\"context.ids.title\">{{ item.title }}</span>\n } @else {\n <a\n data-part=\"title\"\n [id]=\"context.ids.title\"\n [attr.href]=\"item.href\"\n (click)=\"open(item.key, $event)\"\n >{{ item.title }}</a\n >\n }\n @if (item.description) {\n <p data-part=\"description\" [id]=\"context.ids.description\">{{ item.description }}</p>\n }\n <time\n data-part=\"time\"\n [attr.datetime]=\"context.time.dateTime\"\n [attr.title]=\"context.time.title\"\n >{{ context.time.text }}</time\n >\n @if (actionsTemplate(); as actions) {\n <div data-part=\"actions\">\n <ng-container\n [ngTemplateOutlet]=\"actions.template\"\n [ngTemplateOutletContext]=\"context\"\n />\n </div>\n }\n }\n </div>\n @if (controlsValue() !== 'none') {\n <div data-part=\"controls\">\n @if (controlsValue() !== 'dismiss') {\n <button\n slNotificationControl\n data-part=\"read-toggle\"\n [text]=\"item.read ? t('markUnread') : t('markRead')\"\n (click)=\"requestRead([item.key], !item.read, pressReason($event), $event)\"\n >\n <span slIcon><svg slGlyph [name]=\"item.read ? 'dot' : 'check'\"></svg></span>\n </button>\n }\n @if (controlsValue() !== 'read') {\n <button\n slNotificationControl\n data-part=\"dismiss\"\n [text]=\"t('dismiss')\"\n (click)=\"remove(item.key, pressReason($event), $event)\"\n >\n <span slIcon><svg slGlyph name=\"x\"></svg></span>\n </button>\n }\n </div>\n }\n </article>\n </ng-template>\n `,\n styleUrl: '../../../styles/src/notification-center/notification-center.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'slNotificationCenter',\n host: {\n 'data-ui': 'notification-center',\n 'data-part': 'root',\n '[attr.data-size]': 'sizeValue()',\n '[attr.data-level]': 'levelValue()',\n '[attr.data-growing]': 'growingValue()',\n '[attr.data-arrivals]': 'arrivalsValue()',\n '[attr.data-time-format]': 'timeFormatValue()',\n '[attr.data-controls]': 'controlsValue()',\n '[attr.data-view]': 'currentView()',\n '[attr.data-loading]': \"loading() ? '' : null\",\n '[attr.aria-labelledby]': 'labelledBy()',\n },\n})\nexport class SlNotificationCenter {\n /** The consumer's array. The family holds none of its facts. */\n readonly items = input.required<readonly NotificationItem[]>();\n /** The strip's entries. Unstated, the built-in `all` and `unread`; one entry draws no strip. */\n readonly views = input<readonly NotificationView[] | undefined>(undefined);\n readonly size = input<NotificationCenterSize | undefined>(undefined);\n readonly level = input<NotificationCenterLevel | undefined>(undefined);\n readonly growing = input<NotificationCenterGrowing | undefined>(undefined);\n readonly arrivals = input<NotificationCenterArrivals | undefined>(undefined);\n readonly timeFormat = input<NotificationCenterTimeFormat | undefined>(undefined);\n readonly controls = input<NotificationCenterControls | undefined>(undefined);\n /** For the time; defaults to the language in force (`provideSlotted`). */\n readonly locale = input<string | undefined>(undefined);\n readonly timeZone = input<string | undefined>(undefined);\n /** The instant a relative time is measured from. State it for a stable server render. */\n readonly now = input<number | undefined>(undefined);\n /** `aria-busy` on the feed; skeleton rows while nothing is loaded, the waiting row under growing otherwise. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** How many items exist in all, for `aria-setsize`. */\n readonly count = input<number | undefined>(undefined);\n /** Groups the feed: the label an item is filed under, in the order the items give. */\n readonly groupBy = input<((item: NotificationItem) => string) | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * heading, the controls, the views, the empty pages and the announcements.\n */\n readonly messages = input<PartialMessages<NotificationCenterMessages> | undefined>(undefined);\n /** The view an unbound centre starts on, read once. */\n readonly defaultView = input<string | undefined>(undefined);\n /** The current view. Two-way, so a template may bind it directly. */\n readonly view = model<string | undefined>(undefined);\n\n /** One output for one move of the view, carrying the reason; cancellable. */\n readonly viewRequest = output<ChangeRequest<string | undefined>>();\n /** The keys and the value the family asks for. The store answers by changing `items`. */\n readonly readRequest = output<NotificationCenterReadRequest>();\n /** Asked before an item is removed. The family removes nothing. */\n readonly removeRequest = output<NotificationCenterItemRequest>();\n /** Asked before a title link navigates. Cancelling keeps the reader here. */\n readonly openRequest = output<NotificationCenterItemRequest>();\n /** Asked before held arrivals are shown, with their count. */\n readonly revealRequest = output<NotificationCenterRevealRequest>();\n /** Asked when the reader presses the more control, or scrolls to it. */\n readonly loadMoreRequest = output<NotificationCenterRequest<NotificationCenterLoadReason>>();\n /** A fact for the bell: the unread count among the items, whenever it changes. */\n readonly unreadChange = output<number>();\n\n private readonly defaults = injectNotificationCenterDefaults();\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n private readonly writtenLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n private readonly writtenLabelledBy = inject(new HostAttributeToken('aria-labelledby'), {\n optional: true,\n });\n private readonly feedElement = viewChild<ElementRef<HTMLElement>>('feed');\n private readonly freshElement = viewChild<ElementRef<HTMLButtonElement>>('fresh');\n private readonly moreElement = viewChild<ElementRef<HTMLElement>>('more');\n protected readonly itemTemplate = contentChild(SlNotificationItem);\n protected readonly visualTemplate = contentChild(SlNotificationVisual);\n /**\n * The tone's glyph, for an item with no visual of its own. `data-tone-glyph`\n * tells the sheet the glyph is the family's, not the consumer's.\n */\n protected toneGlyph(tone: NotificationCenterTone): GlyphName {\n return TONE_GLYPH[tone];\n }\n protected readonly actionsTemplate = contentChild(SlNotificationActions);\n\n readonly id = inject(SlNotificationCenterIdFactory).next();\n readonly titleId = `${this.id}-title`;\n readonly feedId = `${this.id}-feed`;\n protected readonly waitingRows = WAITING_ROWS;\n\n readonly sizeValue = computed(() => this.size() ?? this.defaults.size);\n readonly levelValue = computed(() => this.level() ?? this.defaults.level);\n readonly growingValue = computed(() => this.growing() ?? this.defaults.growing);\n readonly arrivalsValue = computed(() => this.arrivals() ?? this.defaults.arrivals);\n readonly timeFormatValue = computed(() => this.timeFormat() ?? this.defaults.timeFormat);\n readonly controlsValue = computed(() => this.controls() ?? this.defaults.controls);\n private readonly runtimeLocale = injectLocale();\n readonly localeValue = computed(() => this.locale() ?? this.runtimeLocale());\n readonly timeZoneValue = computed(() => this.timeZone() ?? this.defaults.timeZone);\n /** The family's words in the language in force, with this centre's `messages` laid over them. */\n readonly t = injectMessages(notificationCenterMessages, this.messages);\n\n /** The unread count among every item, held or shown. */\n readonly unread = computed(() => this.items().filter((item) => !item.read).length);\n readonly viewList = computed<readonly NotificationView[]>(\n () =>\n this.views() ?? [\n { label: this.t('all'), value: 'all' },\n { count: this.unread(), label: this.t('unreadView'), value: 'unread' },\n ],\n );\n /** The view: the model, then defaultView, then the first entry. */\n readonly currentView = computed(\n () => this.view() ?? this.defaultView() ?? this.viewList()[0]?.value ?? 'all',\n );\n\n /** The keys the family has shown; a key outside it and outside `held` has just arrived. */\n private readonly shown = signal<ReadonlySet<string>>(new Set());\n /** The keys held behind `fresh`, in the order they arrived. */\n readonly held = signal<readonly string[]>([]);\n private pendingFocus: string | null = null;\n\n readonly shownItems = computed(() => {\n if (this.arrivalsValue() !== 'hold') return this.items();\n const shown = this.shown();\n return this.items().filter((item) => shown.has(item.key));\n });\n readonly visibleItems = computed(() =>\n this.currentView() === 'unread'\n ? this.shownItems().filter((item) => !item.read)\n : this.shownItems(),\n );\n protected readonly groups = computed(() => {\n const groupBy = this.groupBy();\n return groupBy === undefined ? [] : groupItems(this.visibleItems(), groupBy);\n });\n readonly setSize = computed(() =>\n setSizeOf({\n count: this.count(),\n growing: this.growingValue(),\n loaded: this.visibleItems().length,\n }),\n );\n protected readonly waiting = computed(() => this.loading() && this.visibleItems().length === 0);\n protected readonly showEmpty = computed(\n () => !this.waiting() && this.visibleItems().length === 0,\n );\n protected readonly emptyWords = computed(() =>\n this.currentView() === 'unread' ? this.t('caughtUp') : this.t('empty'),\n );\n protected readonly labelledBy = computed(() =>\n this.writtenLabel !== null || this.writtenLabelledBy !== null\n ? this.writtenLabelledBy\n : this.titleId,\n );\n\n constructor() {\n /*\n * A key the family has not shown is either held or shown. Keys that\n * left the array leave both sets. The first array is shown whole: nobody\n * was reading before there was anything to read.\n */\n let first = true;\n effect(() => {\n const keys = new Set(this.items().map((item) => item.key));\n const shown = untracked(() => this.shown());\n const held = untracked(() => this.held());\n const fresh = [...keys].filter((key) => !shown.has(key) && !held.includes(key));\n const kept = held.filter((key) => keys.has(key));\n const holding = untracked(() => this.arrivalsValue()) === 'hold';\n if (fresh.length > 0 && holding && !first && untracked(() => this.reading())) {\n this.held.set([...kept, ...fresh]);\n } else {\n if (fresh.length > 0) this.shown.set(new Set([...shown, ...fresh]));\n if (kept.length !== held.length) this.held.set(kept);\n }\n first = false;\n });\n\n /** Held arrivals are announced once per change of the count, politely. */\n effect(() => {\n const count = this.held().length;\n if (count === 0) return;\n getLiveAnnouncer().announce(untracked(() => this.t('fresh', { count })));\n });\n\n /** The unread count is a fact for the bell, reported on the first read and on every change. */\n let reported: number | null = null;\n effect(() => {\n const count = this.unread();\n if (reported === count) return;\n const initial = reported === null;\n reported = count;\n this.unreadChange.emit(count);\n if (!initial) getLiveAnnouncer().announce(untracked(() => this.t('unread', { count })));\n });\n\n /** A keyboard reveal moves focus to the first revealed article once it is in the DOM. */\n afterRenderEffect(() => {\n this.visibleItems();\n const key = this.pendingFocus;\n if (key === null) return;\n this.pendingFocus = null;\n this.native.querySelector<HTMLElement>(`article[data-key=\"${CSS.escape(key)}\"]`)?.focus();\n });\n\n /**\n * `growing=\"scroll\"` asks when the end of the loaded list enters the\n * scrollport. Only where the observer exists.\n */\n effect((onCleanup) => {\n const more = this.moreElement()?.nativeElement;\n if (this.growingValue() !== 'scroll' || more === undefined || this.loading()) return;\n if (typeof IntersectionObserver === 'undefined') return;\n const observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n this.loadMoreRequest.emit(createRequest('scroll', undefined));\n }\n });\n observer.observe(more);\n onCleanup(() => observer.disconnect());\n });\n }\n\n /** Whether the reader is reading: focus in the feed, or the feed's scroller past its start. */\n private reading(): boolean {\n const feed = this.feedElement()?.nativeElement;\n if (feed === undefined) return false;\n const active = feed.ownerDocument.activeElement;\n if (active !== null && feed.contains(active)) return true;\n let node = feed.parentElement;\n while (node !== null) {\n if (node.scrollTop > 0) return true;\n node = node.parentElement;\n }\n return false;\n }\n\n protected pressReason(event: Event): NotificationCenterPressReason {\n return pressReason(event);\n }\n\n protected contextOf(item: NotificationItem, position: number): NotificationItemContext {\n const escaped = escapeKey(item.key);\n return {\n $implicit: item,\n ids: { description: `${this.id}-${escaped}-d`, title: `${this.id}-${escaped}-t` },\n position,\n time: formatTimestamp(item.time, {\n format: this.timeFormatValue(),\n locale: this.localeValue(),\n now: this.now(),\n timeZone: this.timeZoneValue(),\n }),\n tone: item.tone ?? 'accent',\n };\n }\n\n protected positionOf(group: Group, index: number): number {\n let before = 0;\n for (const candidate of this.groups()) {\n if (candidate === group) break;\n before += candidate.items.length;\n }\n return before + index + 1;\n }\n\n /** Asks to move the view, carrying the reason and the originating event. */\n selectView(next: string, reason: NotificationCenterViewReason, source?: Event) {\n if (next === this.currentView()) return;\n let cancelled = false;\n const state = createControllable<string | undefined>({\n initial: this.currentView(),\n onRequest: (request) => {\n this.viewRequest.emit(request);\n cancelled = request.cancelled;\n },\n });\n const moved = state.request(next, reason, source);\n if (cancelled || !moved) return;\n this.view.set(next);\n }\n\n protected forwardView(request: ChangeRequest<string | undefined>) {\n if (request.value === undefined) return;\n this.selectView(\n request.value,\n request.reason as NotificationCenterViewReason,\n request.source as Event | undefined,\n );\n }\n\n /** Asks to mark these keys read or unread. */\n requestRead(\n keys: readonly string[],\n read: boolean,\n reason: NotificationCenterReadReason,\n event?: Event,\n ) {\n if (keys.length === 0) return;\n this.readRequest.emit(Object.assign(createRequest(reason, event), { keys, read }));\n }\n\n protected markAll(event: Event) {\n this.requestRead(this.unreadShownKeys(), true, pressReason(event), event);\n }\n\n /** Asks to mark every unread shown item read, with the reason `programmatic`. */\n markAllRead() {\n this.requestRead(this.unreadShownKeys(), true, 'programmatic');\n }\n\n private unreadShownKeys(): string[] {\n return this.shownItems()\n .filter((item) => !item.read)\n .map((item) => item.key);\n }\n\n protected remove(key: string, reason: NotificationCenterPressReason, event?: Event): boolean {\n const request = Object.assign(createRequest(reason, event), { key });\n this.removeRequest.emit(request);\n return !request.cancelled;\n }\n\n protected open(key: string, event: Event) {\n const request = Object.assign(createRequest(pressReason(event), event), { key });\n this.openRequest.emit(request);\n if (request.cancelled) event.preventDefault();\n }\n\n /** Shows the held arrivals; a keyboard press moves focus to the first of them. */\n reveal(reason: NotificationCenterReadReason = 'programmatic', event?: Event) {\n const held = this.held();\n if (held.length === 0) return;\n const request = Object.assign(createRequest(reason, event), { count: held.length });\n this.revealRequest.emit(request);\n if (request.cancelled) return;\n if (reason === 'keyboard') this.pendingFocus = held[0] ?? null;\n this.shown.set(new Set([...this.shown(), ...held]));\n this.held.set([]);\n }\n\n protected loadMore(event: Event) {\n this.loadMoreRequest.emit(createRequest(pressReason(event), event));\n }\n\n /** Moves focus to the first article, or to `fresh` when arrivals are held. */\n focus() {\n (this.freshElement()?.nativeElement ?? this.articles()[0])?.focus();\n }\n\n private articles(): HTMLElement[] {\n const feed = this.feedElement()?.nativeElement;\n return feed === undefined\n ? []\n : [...feed.querySelectorAll<HTMLElement>('article[data-part=\"item\"]')];\n }\n\n protected onFeedKeydown(raw: Event) {\n const event = raw as KeyboardEvent;\n if (event.defaultPrevented) return;\n const feed = this.feedElement()?.nativeElement;\n if (feed === undefined) return;\n const all = this.articles();\n const from = all.findIndex((article) => article.contains(event.target as Node));\n if (from === -1) return;\n\n if (event.key === 'Delete' && event.target === all[from] && !event.repeat) {\n const article = all[from] as HTMLElement;\n if (!this.remove(article.dataset['key'] ?? '', 'keyboard', event)) return;\n event.preventDefault();\n const next = all[from + 1] ?? all[from - 1];\n if (next !== undefined) {\n next.focus();\n } else {\n (this.freshElement()?.nativeElement ?? tabbables(this.native)[0])?.focus();\n }\n return;\n }\n\n const target = feedFocusTarget({\n count: all.length,\n ctrlKey: event.ctrlKey,\n from,\n key: event.key,\n metaKey: event.metaKey,\n });\n if (target === null) return;\n const fresh = this.freshElement()?.nativeElement;\n if (target === from && event.key === 'PageUp' && fresh !== undefined) {\n event.preventDefault();\n fresh.focus();\n return;\n }\n event.preventDefault();\n if (typeof target === 'number') {\n all[target]?.focus();\n return;\n }\n const page = tabbables(feed.ownerDocument.body);\n const outside =\n target === 'after'\n ? page.find(\n (candidate) =>\n feed.compareDocumentPosition(candidate) & Node.DOCUMENT_POSITION_FOLLOWING &&\n !feed.contains(candidate),\n )\n : [...page]\n .reverse()\n .find(\n (candidate) =>\n feed.compareDocumentPosition(candidate) & Node.DOCUMENT_POSITION_PRECEDING &&\n !feed.contains(candidate),\n );\n outside?.focus();\n }\n}\n\n/** The consumer's own controls in the header, after mark-all: a preferences link, a menu. */\n@Directive({\n selector: '[slNotificationCenterActions]',\n standalone: true,\n host: { 'data-part': 'actions' },\n})\nexport class SlNotificationCenterActions {}\n\n/** The consumer's link from the popover to the page. */\n@Directive({\n selector: '[slNotificationCenterFooter]',\n standalone: true,\n host: { 'data-part': 'footer' },\n})\nexport class SlNotificationCenterFooter {}\n\n/** The empty page: a result-state, projected in place of the family's words. */\n@Directive({ selector: '[slNotificationCenterEmpty]', standalone: true })\nexport class SlNotificationCenterEmpty {}\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-notification-center.mjs","sources":["../../notification-center/src/notification-center-defaults.ts","../../notification-center/src/notification-control.ts","../../notification-center/src/notification-center.ts","../../notification-center/src/slotted-angular-notification-center.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\nimport type { TimestampValue } from '@slotted/core/timeline';\n\n/** The popover's step and the page's. */\nexport type NotificationCenterSize = 'sm' | 'md';\n\n/** The rank of the header's heading; group labels take the rank below. */\nexport type NotificationCenterLevel = '2' | '3' | '4';\n\n/** How more is loaded: never, on a button, or when the end scrolls into view. */\nexport type NotificationCenterGrowing = 'none' | 'button' | 'scroll';\n\n/** Whether keys that arrive while the reader reads are held behind `fresh`. */\nexport type NotificationCenterArrivals = 'hold' | 'show';\n\n/** How the item's time is written. */\nexport type NotificationCenterTimeFormat = 'relative' | 'absolute';\n\n/** Which of the family's two item controls are drawn. */\nexport type NotificationCenterControls = 'both' | 'read' | 'dismiss' | 'none';\n\n/** The item's tone: the family's visual and the wash an unread item stands on. */\nexport type NotificationCenterTone = 'accent' | 'secondary' | 'success' | 'warning' | 'danger';\n\n/** Why the view moved. */\nexport type NotificationCenterViewReason = 'pointer' | 'keyboard' | 'programmatic';\n\n/** Why an item was pressed, marked or removed. */\nexport type NotificationCenterPressReason = 'pointer' | 'keyboard';\n\n/** Why a read change was asked for: the two presses, or the instance. */\nexport type NotificationCenterReadReason = NotificationCenterPressReason | 'programmatic';\n\n/** Why more was asked for: the two presses, or the end scrolling into view. */\nexport type NotificationCenterLoadReason = NotificationCenterPressReason | 'scroll';\n\n/** A request the family makes that carries no value of its own: a reason, the event, a refusal. */\nexport interface NotificationCenterRequest<Reason extends string> {\n readonly reason: Reason;\n readonly event?: Event | undefined;\n readonly cancelled: boolean;\n /** Refuses the request. The family does nothing further with it. */\n cancel(): void;\n}\n\n/** What `readRequest` asks: these keys become this. */\nexport interface NotificationCenterReadRequest extends NotificationCenterRequest<NotificationCenterReadReason> {\n readonly keys: readonly string[];\n readonly read: boolean;\n}\n\n/** What `removeRequest` and `openRequest` name. */\nexport interface NotificationCenterItemRequest extends NotificationCenterRequest<NotificationCenterPressReason> {\n readonly key: string;\n}\n\n/** What `revealRequest` carries: how many were held. */\nexport interface NotificationCenterRevealRequest extends NotificationCenterRequest<NotificationCenterReadReason> {\n readonly count: number;\n}\n\n/** One notification as the consumer's store holds it. */\nexport interface NotificationItem {\n /** Identifies the item across renders; what every request names. */\n key: string;\n /** The words that name it: a link when `href`, text otherwise. */\n title: string;\n /** The body, clamped at three lines by the stylesheet. */\n description?: string | undefined;\n /** When it happened: a plain date-time or an ISO instant. */\n time: TimestampValue;\n /** Whether the reader has seen it. The consumer's fact; the family asks to change it. */\n read: boolean;\n /** Where the title goes. */\n href?: string | undefined;\n /** The visual's glyph and the unread wash. Accent when unstated. */\n tone?: NotificationCenterTone | undefined;\n /** Whatever the consumer's templates need: an avatar's initials, a record. */\n data?: unknown;\n}\n\n/** One entry of the views strip. */\nexport interface NotificationView {\n value: string;\n label: string;\n /** A count drawn as a chip after the label. */\n count?: number | undefined;\n}\n\n/** What an application sets once for every centre under it. */\nexport interface NotificationCenterDefaults {\n arrivals: NotificationCenterArrivals;\n controls: NotificationCenterControls;\n growing: NotificationCenterGrowing;\n level: NotificationCenterLevel;\n size: NotificationCenterSize;\n timeFormat: NotificationCenterTimeFormat;\n timeZone?: string | undefined;\n}\n\nconst FALLBACK: NotificationCenterDefaults = {\n arrivals: 'hold',\n controls: 'both',\n growing: 'none',\n level: '2',\n size: 'md',\n timeFormat: 'relative',\n};\n\nexport const NOTIFICATION_CENTER_DEFAULTS = new InjectionToken<NotificationCenterDefaults>(\n 'slotted notification-center defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once how its notifications read — the size, the\n * rank, how more loads, whether arrivals are held, how time is written, the\n * time zone — rather than repeating them on every screen. A centre that states\n * any of them itself still wins. Its words and locale come from the language\n * in force (`provideSlotted`).\n */\nexport function provideNotificationCenterDefaults(defaults: Partial<NotificationCenterDefaults>) {\n return {\n provide: NOTIFICATION_CENTER_DEFAULTS,\n useFactory: (): NotificationCenterDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectNotificationCenterDefaults(): NotificationCenterDefaults {\n return inject(NOTIFICATION_CENTER_DEFAULTS);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SlNotificationCenterIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-notification-center-${this.count}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n provideTooltipDefaults,\n SlTooltip,\n SlTooltipContent,\n SlTooltipLayer,\n} from '@slotted/angular/tooltip';\n\n/**\n * One of the family's own controls on an item — mark read or unread, and\n * dismiss — and the tooltip it opens with the words its accessible name\n * carries: on hover, and on keyboard focus. Two glyphs with no words beside\n * them are two controls nobody can tell apart until they are named, and\n * `aria-label` names them only to a screen reader. The construction is the\n * one `top-navigation` gives its icon-only controls: `SlTooltip` is a host\n * directive holding the state and the delays, and the control dispatches the\n * pointer and the focus to it.\n *\n * On touch a hover never comes, so a press held on the control opens the hint\n * the way the platform's own long press names a thing.\n */\n@Component({\n selector: 'button[slNotificationControl]',\n standalone: true,\n imports: [SlTooltipLayer, SlTooltipContent],\n /* The glyph is the item's to choose, so it is projected. */\n template: `<ng-content /><ng-template slTooltipLayer>\n <div slTooltipContent>{{ text() }}</div>\n </ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n hostDirectives: [SlTooltip],\n providers: [provideTooltipDefaults({ openOn: 'hover', side: 'bottom' })],\n host: {\n type: 'button',\n '[attr.aria-label]': 'text()',\n '[attr.aria-describedby]': 'describedBy()',\n '(pointerenter)': 'onPointerEnter($event)',\n '(pointerleave)': 'onPointerLeave($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointerup)': 'onPointerUp()',\n '(pointercancel)': 'onPointerUp()',\n '(focus)': 'onFocus($event)',\n '(blur)': 'onBlur($event)',\n },\n})\nexport class SlNotificationControl {\n /** The words the control is named by, and the tooltip repeats. */\n readonly text = input.required<string>();\n\n private readonly tooltip = inject(SlTooltip);\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n\n constructor() {\n this.tooltip.triggerNode.set(this.native);\n inject(DestroyRef).onDestroy(() => this.tooltip.triggerNode.set(null));\n }\n\n protected readonly describedBy = computed(() =>\n this.tooltip.isOpen() ? this.tooltip.contentId : null,\n );\n\n protected onPointerEnter(event: PointerEvent) {\n if (event.pointerType === 'touch') return;\n this.tooltip.openAfterDelay(event);\n }\n\n protected onPointerLeave(event: PointerEvent) {\n this.tooltip.closeAfterDelay(event);\n }\n\n protected onPointerDown(event: PointerEvent) {\n if (event.pointerType === 'touch') this.tooltip.pressAndHold(event);\n else if (this.tooltip.isOpen()) this.tooltip.toggle(false, 'pointer', event);\n }\n\n protected onPointerUp() {\n this.tooltip.cancelPending();\n }\n\n protected onFocus(event: FocusEvent) {\n if (!this.native.matches(':focus-visible')) return;\n this.tooltip.toggle(true, 'keyboard', event);\n }\n\n protected onBlur(event: FocusEvent) {\n if (this.tooltip.isOpen()) this.tooltip.toggle(false, 'blur', event);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n model,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport type { GlyphName } from '@slotted/angular/icon';\nimport { SlButton } from '@slotted/angular/button';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlSkeleton, SlSkeletonText } from '@slotted/angular/skeleton';\nimport { SlTab, SlTabList, SlTabs } from '@slotted/angular/tabs';\nimport { tabbables } from '@slotted/core/focus';\nimport {\n notificationCenterMessages,\n type NotificationCenterMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport { feedFocusTarget, formatTimestamp, setSizeOf } from '@slotted/core/timeline';\nimport type { FormattedTimestamp } from '@slotted/core/timeline';\n\nimport {\n injectNotificationCenterDefaults,\n SlNotificationCenterIdFactory,\n type NotificationCenterArrivals,\n type NotificationCenterControls,\n type NotificationCenterGrowing,\n type NotificationCenterItemRequest,\n type NotificationCenterLevel,\n type NotificationCenterLoadReason,\n type NotificationCenterPressReason,\n type NotificationCenterReadReason,\n type NotificationCenterReadRequest,\n type NotificationCenterRequest,\n type NotificationCenterRevealRequest,\n type NotificationCenterSize,\n type NotificationCenterTimeFormat,\n type NotificationCenterTone,\n type NotificationCenterViewReason,\n type NotificationItem,\n type NotificationView,\n} from './notification-center-defaults';\nimport { SlNotificationControl } from './notification-control';\n\n/** How many skeleton rows stand in while nothing has arrived. */\nconst WAITING_ROWS = [0, 1, 2];\n\n/**\n * The family's own visual for an item with a tone and no visual of its own,\n * as the contract's `toneGlyph` names it: every glyph a circle.\n */\nconst TONE_GLYPH: Record<NotificationCenterTone, GlyphName> = {\n accent: 'circle-info',\n secondary: 'bell',\n success: 'circle-check',\n warning: 'circle-alert',\n danger: 'circle-x',\n};\n\n/** What an item template is handed. */\nexport interface NotificationItemContext {\n $implicit: NotificationItem;\n /** Its position in the feed, from one. */\n position: number;\n /** The tone the family resolved for it. */\n tone: NotificationCenterTone;\n /** The formatted time: the machine value and the words. */\n time: FormattedTimestamp;\n /** The ids the family wrote, for `aria-labelledby` and `aria-describedby`. */\n ids: { title: string; description: string };\n}\n\n/** An identifier a key can be part of: word characters and hyphens stay, the rest is spelled out. */\nfunction escapeKey(key: string): string {\n return key.replace(/[^\\w-]/g, (character) => `-${character.charCodeAt(0).toString(16)}-`);\n}\n\nfunction createRequest<Reason extends string>(\n reason: Reason,\n event: Event | undefined,\n): NotificationCenterRequest<Reason> {\n let cancelled = false;\n return {\n reason,\n event,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n };\n}\n\n/** A click with no coordinates is a key. */\nfunction pressReason(event: Event): NotificationCenterPressReason {\n return (event as MouseEvent).detail === 0 ? 'keyboard' : 'pointer';\n}\n\ninterface Group {\n label: string;\n items: NotificationItem[];\n}\n\n/** The items filed under their labels, in the order the labels first appear. */\nfunction groupItems(\n items: readonly NotificationItem[],\n groupBy: (item: NotificationItem) => string,\n): Group[] {\n const groups: Group[] = [];\n const byLabel = new Map<string, Group>();\n for (const item of items) {\n const label = groupBy(item);\n let group = byLabel.get(label);\n if (group === undefined) {\n group = { label, items: [] };\n byLabel.set(label, group);\n groups.push(group);\n }\n group.items.push(item);\n }\n return groups;\n}\n\n/**\n * Substitutes an item's content — the words between the visual and the\n * controls; the article, its wiring and its controls stay the family's.\n *\n * ```html\n * <ng-template slNotificationItem let-item let-time=\"time\" let-ids=\"ids\">\n * <span data-part=\"title\" [id]=\"ids.title\">{{ item.title }}</span>\n * </ng-template>\n * ```\n */\n@Directive({ selector: 'ng-template[slNotificationItem]', standalone: true })\nexport class SlNotificationItem {\n readonly template = inject(TemplateRef<NotificationItemContext>);\n}\n\n/**\n * The visual of an item: an avatar, an icon. Absent, an item with a tone\n * gets the family's glyph; one without gets no visual.\n */\n@Directive({ selector: 'ng-template[slNotificationVisual]', standalone: true })\nexport class SlNotificationVisual {\n readonly template = inject(TemplateRef<NotificationItemContext>);\n}\n\n/** The consumer's controls for an item, under its body. */\n@Directive({ selector: 'ng-template[slNotificationActions]', standalone: true })\nexport class SlNotificationActions {\n readonly template = inject(TemplateRef<NotificationItemContext>);\n}\n\n/**\n * The persistent list of what happened while the reader was not looking.\n *\n * **It holds none of the facts.** `items` is the consumer's array: whether an\n * item is read, whether it exists, how many there are. Marking, removing,\n * opening, revealing and loading are outputs with a reason, and the store\n * answers by changing the array.\n *\n * **One value moves: the view.** `[(view)]` for the value, `(viewRequest)`\n * for the request that carries the reason and can be cancelled; the\n * built-in `all` and `unread` when the consumer states no views. The strip\n * is `tabs` holding its list alone; the feed is its one panel.\n *\n * **Arrivals are held while the reader reads.** Under `arrivals=\"hold\"` a\n * key the family has not shown, arriving while focus is inside the feed or\n * the feed's scroller is past its start, waits behind `fresh` with a polite\n * announcement; otherwise it shows at once.\n *\n * **The feed is the APG pattern.** `role=\"feed\"`, an `article` per item with\n * its position and the set's size, `PageDown` and `PageUp` between articles,\n * `Control+End` and `Control+Home` out of the feed, `Delete` to ask for a\n * removal, and `aria-busy` while a page is on its way.\n */\n@Component({\n selector: '[slNotificationCenter]',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlGlyph,\n SlIcon,\n SlNotificationControl,\n SlSkeleton,\n SlSkeletonText,\n SlTab,\n SlTabList,\n SlTabs,\n ],\n template: `\n <div data-part=\"header\" data-part-header=\"\">\n @switch (levelValue()) {\n @case ('3') {\n <h3 data-part=\"title\" data-part-title=\"\" [id]=\"titleId\">\n {{ t('title') }}\n @if (unread() > 0) {\n <span data-part=\"count\" data-part-count=\"\">{{ unread() }}</span>\n }\n </h3>\n }\n @case ('4') {\n <h4 data-part=\"title\" data-part-title=\"\" [id]=\"titleId\">\n {{ t('title') }}\n @if (unread() > 0) {\n <span data-part=\"count\" data-part-count=\"\">{{ unread() }}</span>\n }\n </h4>\n }\n @default {\n <h2 data-part=\"title\" data-part-title=\"\" [id]=\"titleId\">\n {{ t('title') }}\n @if (unread() > 0) {\n <span data-part=\"count\" data-part-count=\"\">{{ unread() }}</span>\n }\n </h2>\n }\n }\n <span data-part=\"mark-all\" data-part-mark-all=\"\">\n <button\n slButton\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n type=\"button\"\n [disabled]=\"unread() === 0\"\n (click)=\"markAll($event)\"\n >\n {{ t('markAll') }}\n </button>\n </span>\n <ng-content select=\"[slNotificationCenterActions]\" />\n </div>\n @if (viewList().length > 1) {\n <div data-part=\"views\" data-part-views=\"\">\n <div\n slTabs\n track=\"none\"\n [size]=\"sizeValue()\"\n [value]=\"currentView()\"\n (valueChange)=\"forwardView($event)\"\n >\n <div slTabList [attr.aria-label]=\"t('views')\">\n @for (entry of viewList(); track entry.value) {\n <div slTab [value]=\"entry.value\" [controls]=\"feedId\">\n {{ entry.label }}\n @if (entry.count !== undefined && entry.count > 0) {\n &ngsp;<span data-part=\"count\" data-part-count=\"\">{{ entry.count }}</span>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n @if (held().length > 0) {\n <button\n #fresh\n data-part=\"fresh\"\n data-part-fresh=\"\"\n type=\"button\"\n (click)=\"reveal(pressReason($event), $event)\"\n >\n {{ t('fresh', { count: held().length }) }}\n </button>\n }\n <div\n #feed\n data-part=\"feed\"\n data-part-feed=\"\"\n role=\"feed\"\n [id]=\"feedId\"\n [attr.aria-labelledby]=\"titleId\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n (keydown)=\"onFeedKeydown($event)\"\n >\n @if (waiting()) {\n @for (row of waitingRows; track row) {\n <div data-part=\"item\" data-part-item=\"\" aria-hidden=\"true\">\n <span data-part=\"visual\" data-part-visual=\"\"\n ><span slSkeleton shape=\"circle\" size=\"sm\"></span\n ></span>\n <div data-part=\"content\" data-part-content=\"\">\n <span slSkeletonText [lines]=\"2\"></span>\n </div>\n </div>\n }\n } @else if (groupBy() === undefined) {\n @for (item of visibleItems(); track item.key; let index = $index) {\n <ng-container\n [ngTemplateOutlet]=\"article\"\n [ngTemplateOutletContext]=\"{ $implicit: item, position: index + 1 }\"\n />\n }\n } @else {\n @for (group of groups(); track group.label; let offset = $index) {\n <div data-part=\"group\" data-part-group=\"\">\n @switch (levelValue()) {\n @case ('3') {\n <h4 data-part=\"group-label\" data-part-group-label=\"\">{{ group.label }}</h4>\n }\n @case ('4') {\n <h5 data-part=\"group-label\" data-part-group-label=\"\">{{ group.label }}</h5>\n }\n @default {\n <h3 data-part=\"group-label\" data-part-group-label=\"\">{{ group.label }}</h3>\n }\n }\n @for (item of group.items; track item.key; let index = $index) {\n <ng-container\n [ngTemplateOutlet]=\"article\"\n [ngTemplateOutletContext]=\"{ $implicit: item, position: positionOf(group, index) }\"\n />\n }\n </div>\n }\n }\n </div>\n @if (showEmpty()) {\n <div data-part=\"empty\" data-part-empty=\"\">\n <ng-content select=\"[slNotificationCenterEmpty]\">{{ emptyWords() }}</ng-content>\n </div>\n } @else if (growingValue() !== 'none') {\n @if (loading()) {\n <div #more aria-live=\"polite\" data-part=\"more\" data-part-more=\"\">{{ t('loading') }}</div>\n } @else if (growingValue() === 'button') {\n <button #more data-part=\"more\" data-part-more=\"\" type=\"button\" (click)=\"loadMore($event)\">\n {{ t('loadMore') }}\n </button>\n } @else {\n <div #more data-part=\"more\" data-part-more=\"\"></div>\n }\n }\n <ng-content select=\"[slNotificationCenterFooter]\" />\n\n <ng-template #article let-item let-position=\"position\">\n @let context = contextOf(item, position);\n <article\n data-part=\"item\"\n data-part-item=\"\"\n tabindex=\"0\"\n [attr.data-key]=\"item.key\"\n [attr.data-tone]=\"context.tone\"\n [attr.data-read]=\"item.read ? '' : null\"\n [attr.aria-labelledby]=\"context.ids.title\"\n [attr.aria-describedby]=\"item.description ? context.ids.description : null\"\n [attr.aria-posinset]=\"position\"\n [attr.aria-setsize]=\"setSize()\"\n >\n @if (visualTemplate(); as visual) {\n <span data-part=\"visual\" data-part-visual=\"\" [attr.data-tone]=\"item.tone ?? null\">\n <ng-container\n [ngTemplateOutlet]=\"visual.template\"\n [ngTemplateOutletContext]=\"context\"\n />\n </span>\n } @else if (item.tone !== undefined) {\n <span data-part=\"visual\" data-part-visual=\"\" [attr.data-tone]=\"item.tone\"\n ><span slIcon data-tone-glyph=\"\"><svg slGlyph [name]=\"toneGlyph(item.tone)\"></svg></span\n ></span>\n }\n <div data-part=\"content\" data-part-content=\"\">\n @if (itemTemplate(); as own) {\n <ng-container [ngTemplateOutlet]=\"own.template\" [ngTemplateOutletContext]=\"context\" />\n } @else {\n @if (item.href === undefined) {\n <span data-part=\"title\" data-part-title=\"\" [id]=\"context.ids.title\">{{\n item.title\n }}</span>\n } @else {\n <a\n data-part=\"title\"\n data-part-title=\"\"\n [id]=\"context.ids.title\"\n [attr.href]=\"item.href\"\n (click)=\"open(item.key, $event)\"\n >{{ item.title }}</a\n >\n }\n @if (item.description) {\n <p data-part=\"description\" data-part-description=\"\" [id]=\"context.ids.description\">\n {{ item.description }}\n </p>\n }\n <time\n data-part=\"time\"\n data-part-time=\"\"\n [attr.datetime]=\"context.time.dateTime\"\n [attr.title]=\"context.time.title\"\n >{{ context.time.text }}</time\n >\n @if (actionsTemplate(); as actions) {\n <div data-part=\"actions\" data-part-actions=\"\">\n <ng-container\n [ngTemplateOutlet]=\"actions.template\"\n [ngTemplateOutletContext]=\"context\"\n />\n </div>\n }\n }\n </div>\n @if (controlsValue() !== 'none') {\n <div data-part=\"controls\" data-part-controls=\"\">\n @if (controlsValue() !== 'dismiss') {\n <button\n slNotificationControl\n data-part=\"read-toggle\"\n data-part-read-toggle=\"\"\n [text]=\"item.read ? t('markUnread') : t('markRead')\"\n (click)=\"requestRead([item.key], !item.read, pressReason($event), $event)\"\n >\n <span slIcon><svg slGlyph [name]=\"item.read ? 'dot' : 'check'\"></svg></span>\n </button>\n }\n @if (controlsValue() !== 'read') {\n <button\n slNotificationControl\n data-part=\"dismiss\"\n data-part-dismiss=\"\"\n [text]=\"t('dismiss')\"\n (click)=\"remove(item.key, pressReason($event), $event)\"\n >\n <span slIcon><svg slGlyph name=\"x\"></svg></span>\n </button>\n }\n </div>\n }\n </article>\n </ng-template>\n `,\n styleUrl: '../../../styles/src/notification-center/notification-center.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'slNotificationCenter',\n host: {\n 'data-ui': 'notification-center',\n 'data-ui-notification-center': '',\n 'data-part': 'root',\n 'data-part-root': '',\n '[attr.data-size]': 'sizeValue()',\n '[attr.data-level]': 'levelValue()',\n '[attr.data-growing]': 'growingValue()',\n '[attr.data-arrivals]': 'arrivalsValue()',\n '[attr.data-time-format]': 'timeFormatValue()',\n '[attr.data-controls]': 'controlsValue()',\n '[attr.data-view]': 'currentView()',\n '[attr.data-loading]': \"loading() ? '' : null\",\n '[attr.aria-labelledby]': 'labelledBy()',\n },\n})\nexport class SlNotificationCenter {\n /** The consumer's array. The family holds none of its facts. */\n readonly items = input.required<readonly NotificationItem[]>();\n /** The strip's entries. Unstated, the built-in `all` and `unread`; one entry draws no strip. */\n readonly views = input<readonly NotificationView[] | undefined>(undefined);\n readonly size = input<NotificationCenterSize | undefined>(undefined);\n readonly level = input<NotificationCenterLevel | undefined>(undefined);\n readonly growing = input<NotificationCenterGrowing | undefined>(undefined);\n readonly arrivals = input<NotificationCenterArrivals | undefined>(undefined);\n readonly timeFormat = input<NotificationCenterTimeFormat | undefined>(undefined);\n readonly controls = input<NotificationCenterControls | undefined>(undefined);\n /** For the time; defaults to the language in force (`provideSlotted`). */\n readonly locale = input<string | undefined>(undefined);\n readonly timeZone = input<string | undefined>(undefined);\n /** The instant a relative time is measured from. State it for a stable server render. */\n readonly now = input<number | undefined>(undefined);\n /** `aria-busy` on the feed; skeleton rows while nothing is loaded, the waiting row under growing otherwise. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** How many items exist in all, for `aria-setsize`. */\n readonly count = input<number | undefined>(undefined);\n /** Groups the feed: the label an item is filed under, in the order the items give. */\n readonly groupBy = input<((item: NotificationItem) => string) | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * heading, the controls, the views, the empty pages and the announcements.\n */\n readonly messages = input<PartialMessages<NotificationCenterMessages> | undefined>(undefined);\n /** The view an unbound centre starts on, read once. */\n readonly defaultView = input<string | undefined>(undefined);\n /** The current view. Two-way, so a template may bind it directly. */\n readonly view = model<string | undefined>(undefined);\n\n /** One output for one move of the view, carrying the reason; cancellable. */\n readonly viewRequest = output<ChangeRequest<string | undefined>>();\n /** The keys and the value the family asks for. The store answers by changing `items`. */\n readonly readRequest = output<NotificationCenterReadRequest>();\n /** Asked before an item is removed. The family removes nothing. */\n readonly removeRequest = output<NotificationCenterItemRequest>();\n /** Asked before a title link navigates. Cancelling keeps the reader here. */\n readonly openRequest = output<NotificationCenterItemRequest>();\n /** Asked before held arrivals are shown, with their count. */\n readonly revealRequest = output<NotificationCenterRevealRequest>();\n /** Asked when the reader presses the more control, or scrolls to it. */\n readonly loadMoreRequest = output<NotificationCenterRequest<NotificationCenterLoadReason>>();\n /** A fact for the bell: the unread count among the items, whenever it changes. */\n readonly unreadChange = output<number>();\n\n private readonly defaults = injectNotificationCenterDefaults();\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n private readonly writtenLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n private readonly writtenLabelledBy = inject(new HostAttributeToken('aria-labelledby'), {\n optional: true,\n });\n private readonly feedElement = viewChild<ElementRef<HTMLElement>>('feed');\n private readonly freshElement = viewChild<ElementRef<HTMLButtonElement>>('fresh');\n private readonly moreElement = viewChild<ElementRef<HTMLElement>>('more');\n protected readonly itemTemplate = contentChild(SlNotificationItem);\n protected readonly visualTemplate = contentChild(SlNotificationVisual);\n /**\n * The tone's glyph, for an item with no visual of its own. `data-tone-glyph`\n * tells the sheet the glyph is the family's, not the consumer's.\n */\n protected toneGlyph(tone: NotificationCenterTone): GlyphName {\n return TONE_GLYPH[tone];\n }\n protected readonly actionsTemplate = contentChild(SlNotificationActions);\n\n readonly id = inject(SlNotificationCenterIdFactory).next();\n readonly titleId = `${this.id}-title`;\n readonly feedId = `${this.id}-feed`;\n protected readonly waitingRows = WAITING_ROWS;\n\n readonly sizeValue = computed(() => this.size() ?? this.defaults.size);\n readonly levelValue = computed(() => this.level() ?? this.defaults.level);\n readonly growingValue = computed(() => this.growing() ?? this.defaults.growing);\n readonly arrivalsValue = computed(() => this.arrivals() ?? this.defaults.arrivals);\n readonly timeFormatValue = computed(() => this.timeFormat() ?? this.defaults.timeFormat);\n readonly controlsValue = computed(() => this.controls() ?? this.defaults.controls);\n private readonly runtimeLocale = injectLocale();\n readonly localeValue = computed(() => this.locale() ?? this.runtimeLocale());\n readonly timeZoneValue = computed(() => this.timeZone() ?? this.defaults.timeZone);\n /** The family's words in the language in force, with this centre's `messages` laid over them. */\n readonly t = injectMessages(notificationCenterMessages, this.messages);\n\n /** The unread count among every item, held or shown. */\n readonly unread = computed(() => this.items().filter((item) => !item.read).length);\n readonly viewList = computed<readonly NotificationView[]>(\n () =>\n this.views() ?? [\n { label: this.t('all'), value: 'all' },\n { count: this.unread(), label: this.t('unreadView'), value: 'unread' },\n ],\n );\n /** The view: the model, then defaultView, then the first entry. */\n readonly currentView = computed(\n () => this.view() ?? this.defaultView() ?? this.viewList()[0]?.value ?? 'all',\n );\n\n /** The keys the family has shown; a key outside it and outside `held` has just arrived. */\n private readonly shown = signal<ReadonlySet<string>>(new Set());\n /** The keys held behind `fresh`, in the order they arrived. */\n readonly held = signal<readonly string[]>([]);\n private pendingFocus: string | null = null;\n\n readonly shownItems = computed(() => {\n if (this.arrivalsValue() !== 'hold') return this.items();\n const shown = this.shown();\n return this.items().filter((item) => shown.has(item.key));\n });\n readonly visibleItems = computed(() =>\n this.currentView() === 'unread'\n ? this.shownItems().filter((item) => !item.read)\n : this.shownItems(),\n );\n protected readonly groups = computed(() => {\n const groupBy = this.groupBy();\n return groupBy === undefined ? [] : groupItems(this.visibleItems(), groupBy);\n });\n readonly setSize = computed(() =>\n setSizeOf({\n count: this.count(),\n growing: this.growingValue(),\n loaded: this.visibleItems().length,\n }),\n );\n protected readonly waiting = computed(() => this.loading() && this.visibleItems().length === 0);\n protected readonly showEmpty = computed(\n () => !this.waiting() && this.visibleItems().length === 0,\n );\n protected readonly emptyWords = computed(() =>\n this.currentView() === 'unread' ? this.t('caughtUp') : this.t('empty'),\n );\n protected readonly labelledBy = computed(() =>\n this.writtenLabel !== null || this.writtenLabelledBy !== null\n ? this.writtenLabelledBy\n : this.titleId,\n );\n\n constructor() {\n /*\n * A key the family has not shown is either held or shown. Keys that\n * left the array leave both sets. The first array is shown whole: nobody\n * was reading before there was anything to read.\n */\n let first = true;\n effect(() => {\n const keys = new Set(this.items().map((item) => item.key));\n const shown = untracked(() => this.shown());\n const held = untracked(() => this.held());\n const fresh = [...keys].filter((key) => !shown.has(key) && !held.includes(key));\n const kept = held.filter((key) => keys.has(key));\n const holding = untracked(() => this.arrivalsValue()) === 'hold';\n if (fresh.length > 0 && holding && !first && untracked(() => this.reading())) {\n this.held.set([...kept, ...fresh]);\n } else {\n if (fresh.length > 0) this.shown.set(new Set([...shown, ...fresh]));\n if (kept.length !== held.length) this.held.set(kept);\n }\n first = false;\n });\n\n /** Held arrivals are announced once per change of the count, politely. */\n effect(() => {\n const count = this.held().length;\n if (count === 0) return;\n getLiveAnnouncer().announce(untracked(() => this.t('fresh', { count })));\n });\n\n /** The unread count is a fact for the bell, reported on the first read and on every change. */\n let reported: number | null = null;\n effect(() => {\n const count = this.unread();\n if (reported === count) return;\n const initial = reported === null;\n reported = count;\n this.unreadChange.emit(count);\n if (!initial) getLiveAnnouncer().announce(untracked(() => this.t('unread', { count })));\n });\n\n /** A keyboard reveal moves focus to the first revealed article once it is in the DOM. */\n afterRenderEffect(() => {\n this.visibleItems();\n const key = this.pendingFocus;\n if (key === null) return;\n this.pendingFocus = null;\n this.native.querySelector<HTMLElement>(`article[data-key=\"${CSS.escape(key)}\"]`)?.focus();\n });\n\n /**\n * `growing=\"scroll\"` asks when the end of the loaded list enters the\n * scrollport. Only where the observer exists.\n */\n effect((onCleanup) => {\n const more = this.moreElement()?.nativeElement;\n if (this.growingValue() !== 'scroll' || more === undefined || this.loading()) return;\n if (typeof IntersectionObserver === 'undefined') return;\n const observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n this.loadMoreRequest.emit(createRequest('scroll', undefined));\n }\n });\n observer.observe(more);\n onCleanup(() => observer.disconnect());\n });\n }\n\n /** Whether the reader is reading: focus in the feed, or the feed's scroller past its start. */\n private reading(): boolean {\n const feed = this.feedElement()?.nativeElement;\n if (feed === undefined) return false;\n const active = feed.ownerDocument.activeElement;\n if (active !== null && feed.contains(active)) return true;\n let node = feed.parentElement;\n while (node !== null) {\n if (node.scrollTop > 0) return true;\n node = node.parentElement;\n }\n return false;\n }\n\n protected pressReason(event: Event): NotificationCenterPressReason {\n return pressReason(event);\n }\n\n protected contextOf(item: NotificationItem, position: number): NotificationItemContext {\n const escaped = escapeKey(item.key);\n return {\n $implicit: item,\n ids: { description: `${this.id}-${escaped}-d`, title: `${this.id}-${escaped}-t` },\n position,\n time: formatTimestamp(item.time, {\n format: this.timeFormatValue(),\n locale: this.localeValue(),\n now: this.now(),\n timeZone: this.timeZoneValue(),\n }),\n tone: item.tone ?? 'accent',\n };\n }\n\n protected positionOf(group: Group, index: number): number {\n let before = 0;\n for (const candidate of this.groups()) {\n if (candidate === group) break;\n before += candidate.items.length;\n }\n return before + index + 1;\n }\n\n /** Asks to move the view, carrying the reason and the originating event. */\n selectView(next: string, reason: NotificationCenterViewReason, source?: Event) {\n if (next === this.currentView()) return;\n let cancelled = false;\n const state = createControllable<string | undefined>({\n initial: this.currentView(),\n onRequest: (request) => {\n this.viewRequest.emit(request);\n cancelled = request.cancelled;\n },\n });\n const moved = state.request(next, reason, source);\n if (cancelled || !moved) return;\n this.view.set(next);\n }\n\n protected forwardView(request: ChangeRequest<string | undefined>) {\n if (request.value === undefined) return;\n this.selectView(\n request.value,\n request.reason as NotificationCenterViewReason,\n request.source as Event | undefined,\n );\n }\n\n /** Asks to mark these keys read or unread. */\n requestRead(\n keys: readonly string[],\n read: boolean,\n reason: NotificationCenterReadReason,\n event?: Event,\n ) {\n if (keys.length === 0) return;\n this.readRequest.emit(Object.assign(createRequest(reason, event), { keys, read }));\n }\n\n protected markAll(event: Event) {\n this.requestRead(this.unreadShownKeys(), true, pressReason(event), event);\n }\n\n /** Asks to mark every unread shown item read, with the reason `programmatic`. */\n markAllRead() {\n this.requestRead(this.unreadShownKeys(), true, 'programmatic');\n }\n\n private unreadShownKeys(): string[] {\n return this.shownItems()\n .filter((item) => !item.read)\n .map((item) => item.key);\n }\n\n protected remove(key: string, reason: NotificationCenterPressReason, event?: Event): boolean {\n const request = Object.assign(createRequest(reason, event), { key });\n this.removeRequest.emit(request);\n return !request.cancelled;\n }\n\n protected open(key: string, event: Event) {\n const request = Object.assign(createRequest(pressReason(event), event), { key });\n this.openRequest.emit(request);\n if (request.cancelled) event.preventDefault();\n }\n\n /** Shows the held arrivals; a keyboard press moves focus to the first of them. */\n reveal(reason: NotificationCenterReadReason = 'programmatic', event?: Event) {\n const held = this.held();\n if (held.length === 0) return;\n const request = Object.assign(createRequest(reason, event), { count: held.length });\n this.revealRequest.emit(request);\n if (request.cancelled) return;\n if (reason === 'keyboard') this.pendingFocus = held[0] ?? null;\n this.shown.set(new Set([...this.shown(), ...held]));\n this.held.set([]);\n }\n\n protected loadMore(event: Event) {\n this.loadMoreRequest.emit(createRequest(pressReason(event), event));\n }\n\n /** Moves focus to the first article, or to `fresh` when arrivals are held. */\n focus() {\n (this.freshElement()?.nativeElement ?? this.articles()[0])?.focus();\n }\n\n private articles(): HTMLElement[] {\n const feed = this.feedElement()?.nativeElement;\n return feed === undefined\n ? []\n : [...feed.querySelectorAll<HTMLElement>('article[data-part=\"item\"]')];\n }\n\n protected onFeedKeydown(raw: Event) {\n const event = raw as KeyboardEvent;\n if (event.defaultPrevented) return;\n const feed = this.feedElement()?.nativeElement;\n if (feed === undefined) return;\n const all = this.articles();\n const from = all.findIndex((article) => article.contains(event.target as Node));\n if (from === -1) return;\n\n if (event.key === 'Delete' && event.target === all[from] && !event.repeat) {\n const article = all[from] as HTMLElement;\n if (!this.remove(article.dataset['key'] ?? '', 'keyboard', event)) return;\n event.preventDefault();\n const next = all[from + 1] ?? all[from - 1];\n if (next !== undefined) {\n next.focus();\n } else {\n (this.freshElement()?.nativeElement ?? tabbables(this.native)[0])?.focus();\n }\n return;\n }\n\n const target = feedFocusTarget({\n count: all.length,\n ctrlKey: event.ctrlKey,\n from,\n key: event.key,\n metaKey: event.metaKey,\n });\n if (target === null) return;\n const fresh = this.freshElement()?.nativeElement;\n if (target === from && event.key === 'PageUp' && fresh !== undefined) {\n event.preventDefault();\n fresh.focus();\n return;\n }\n event.preventDefault();\n if (typeof target === 'number') {\n all[target]?.focus();\n return;\n }\n const page = tabbables(feed.ownerDocument.body);\n const outside =\n target === 'after'\n ? page.find(\n (candidate) =>\n feed.compareDocumentPosition(candidate) & Node.DOCUMENT_POSITION_FOLLOWING &&\n !feed.contains(candidate),\n )\n : [...page]\n .reverse()\n .find(\n (candidate) =>\n feed.compareDocumentPosition(candidate) & Node.DOCUMENT_POSITION_PRECEDING &&\n !feed.contains(candidate),\n );\n outside?.focus();\n }\n}\n\n/** The consumer's own controls in the header, after mark-all: a preferences link, a menu. */\n@Directive({\n selector: '[slNotificationCenterActions]',\n standalone: true,\n host: { 'data-part': 'actions', 'data-part-actions': '' },\n})\nexport class SlNotificationCenterActions {}\n\n/** The consumer's link from the popover to the page. */\n@Directive({\n selector: '[slNotificationCenterFooter]',\n standalone: true,\n host: { 'data-part': 'footer', 'data-part-footer': '' },\n})\nexport class SlNotificationCenterFooter {}\n\n/** The empty page: a result-state, projected in place of the family's words. */\n@Directive({ selector: '[slNotificationCenterEmpty]', standalone: true })\nexport class SlNotificationCenterEmpty {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|