@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,3 +1,4 @@
|
|
|
1
|
+
import { writeSelectorKey } from '@slotted/core/selector-key';
|
|
1
2
|
import { NgTemplateOutlet } from '@angular/common';
|
|
2
3
|
import * as i0 from '@angular/core';
|
|
3
4
|
import { Injectable, input, inject, ElementRef, afterNextRender, Directive, model, booleanAttribute, output, Injector, HostAttributeToken, viewChild, signal, computed, ViewEncapsulation, ChangeDetectionStrategy, Component, effect, untracked } from '@angular/core';
|
|
@@ -46,7 +47,7 @@ class SlSavedViewsPart {
|
|
|
46
47
|
...(ngDevMode ? [{ debugName: "slSavedViewsPart" }] : /* istanbul ignore next */ []));
|
|
47
48
|
constructor() {
|
|
48
49
|
const element = inject(ElementRef).nativeElement;
|
|
49
|
-
afterNextRender(() => element
|
|
50
|
+
afterNextRender(() => writeSelectorKey(element, 'part', this.slSavedViewsPart()));
|
|
50
51
|
}
|
|
51
52
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlSavedViewsPart, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
52
53
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlSavedViewsPart, isStandalone: true, selector: "[slSavedViewsPart]", inputs: { slSavedViewsPart: { classPropertyName: "slSavedViewsPart", publicName: "slSavedViewsPart", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
|
|
@@ -388,7 +389,7 @@ class SlSavedViews {
|
|
|
388
389
|
}, { injector: this.injector });
|
|
389
390
|
}
|
|
390
391
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlSavedViews, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
391
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlSavedViews, isStandalone: true, selector: "sl-saved-views", inputs: { current: { classPropertyName: "current", publicName: "current", isSignal: true, isRequired: true, transformFunction: null }, builtIn: { classPropertyName: "builtIn", publicName: "builtIn", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, defaultState: { classPropertyName: "defaultState", publicName: "defaultState", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, defaultOpen: { classPropertyName: "defaultOpen", publicName: "defaultOpen", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { state: "stateChange", open: "openChange", stateChangeRequest: "stateChangeRequest", openChangeRequest: "openChangeRequest", viewApply: "viewApply" }, host: { attributes: { "data-ui": "saved-views", "data-part": "root" }, properties: { "attr.role": "role", "attr.aria-label": "resolvedLabel()", "attr.data-modified": "modified() ? \"\" : null", "attr.data-open": "isOpen() ? \"\" : null" } }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["trigger"], descendants: true, isSignal: true }], exportAs: ["slSavedViews"], ngImport: i0, template: `
|
|
392
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlSavedViews, isStandalone: true, selector: "sl-saved-views", inputs: { current: { classPropertyName: "current", publicName: "current", isSignal: true, isRequired: true, transformFunction: null }, builtIn: { classPropertyName: "builtIn", publicName: "builtIn", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, defaultState: { classPropertyName: "defaultState", publicName: "defaultState", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, defaultOpen: { classPropertyName: "defaultOpen", publicName: "defaultOpen", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { state: "stateChange", open: "openChange", stateChangeRequest: "stateChangeRequest", openChangeRequest: "openChangeRequest", viewApply: "viewApply" }, host: { attributes: { "data-ui": "saved-views", "data-ui-saved-views": "", "data-part": "root", "data-part-root": "" }, properties: { "attr.role": "role", "attr.aria-label": "resolvedLabel()", "attr.data-modified": "modified() ? \"\" : null", "attr.data-open": "isOpen() ? \"\" : null" } }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["trigger"], descendants: true, isSignal: true }], exportAs: ["slSavedViews"], ngImport: i0, template: `
|
|
392
393
|
<ng-container
|
|
393
394
|
slPopover
|
|
394
395
|
initialFocus="[aria-current='true']"
|
|
@@ -400,11 +401,12 @@ class SlSavedViews {
|
|
|
400
401
|
slPopoverTrigger
|
|
401
402
|
type="button"
|
|
402
403
|
data-part="trigger"
|
|
404
|
+
data-part-trigger=""
|
|
403
405
|
[attr.title]="activeName()"
|
|
404
406
|
>
|
|
405
407
|
<span data-label>{{ activeName() }}</span>
|
|
406
408
|
@if (modified()) {
|
|
407
|
-
<span data-part="modified">{{ t('modified') }}</span>
|
|
409
|
+
<span data-part="modified" data-part-modified="">{{ t('modified') }}</span>
|
|
408
410
|
}
|
|
409
411
|
<span slIcon size="md"><svg slGlyph name="chevron-down"></svg></span>
|
|
410
412
|
</button>
|
|
@@ -413,11 +415,18 @@ class SlSavedViews {
|
|
|
413
415
|
<div slPopoverContent [attr.aria-label]="resolvedLabel()">
|
|
414
416
|
<!-- The family's identifier is on its own element rather than on
|
|
415
417
|
the popover's: slPopoverContent names its own part. -->
|
|
416
|
-
<div
|
|
417
|
-
|
|
418
|
+
<div
|
|
419
|
+
data-ui="saved-views"
|
|
420
|
+
data-ui-saved-views=""
|
|
421
|
+
data-part="panel"
|
|
422
|
+
data-part-panel=""
|
|
423
|
+
[id]="panelId"
|
|
424
|
+
>
|
|
425
|
+
<ul data-part="list" data-part-list="" role="list">
|
|
418
426
|
@for (row of rows(); track row.key) {
|
|
419
427
|
<li
|
|
420
428
|
data-part="item"
|
|
429
|
+
data-part-item=""
|
|
421
430
|
[attr.data-view]="row.key"
|
|
422
431
|
[attr.data-current]="row.current ? '' : null"
|
|
423
432
|
[attr.data-default]="row.isDefault ? '' : null"
|
|
@@ -434,6 +443,7 @@ class SlSavedViews {
|
|
|
434
443
|
@case ('delete') {
|
|
435
444
|
<div
|
|
436
445
|
data-part="confirm"
|
|
446
|
+
data-part-confirm=""
|
|
437
447
|
role="group"
|
|
438
448
|
[attr.aria-labelledby]="panelId + '-confirm-' + row.key"
|
|
439
449
|
>
|
|
@@ -465,6 +475,7 @@ class SlSavedViews {
|
|
|
465
475
|
@default {
|
|
466
476
|
<button
|
|
467
477
|
data-part="apply"
|
|
478
|
+
data-part-apply=""
|
|
468
479
|
type="button"
|
|
469
480
|
[attr.aria-current]="row.current ? 'true' : null"
|
|
470
481
|
(click)="apply(row.id, pressReason($event), $event)"
|
|
@@ -474,7 +485,7 @@ class SlSavedViews {
|
|
|
474
485
|
}
|
|
475
486
|
<span data-label>{{ row.name }}</span>
|
|
476
487
|
@if (row.isDefault) {
|
|
477
|
-
<span data-part="default-mark"
|
|
488
|
+
<span data-part="default-mark" data-part-default-mark=""
|
|
478
489
|
><span slIcon size="sm"><svg slGlyph name="pin"></svg></span
|
|
479
490
|
><span>{{ t('isDefault') }}</span></span
|
|
480
491
|
>
|
|
@@ -483,6 +494,7 @@ class SlSavedViews {
|
|
|
483
494
|
<button
|
|
484
495
|
type="button"
|
|
485
496
|
data-part="actions"
|
|
497
|
+
data-part-actions=""
|
|
486
498
|
slSavedViewsPart="actions"
|
|
487
499
|
[slMenuTriggerFor]="menu"
|
|
488
500
|
[attr.aria-label]="t('actions', { name: row.name })"
|
|
@@ -519,7 +531,7 @@ class SlSavedViews {
|
|
|
519
531
|
[ngTemplateOutletContext]="{ kind: 'create', name: '' }"
|
|
520
532
|
/>
|
|
521
533
|
}
|
|
522
|
-
<div data-part="footer">
|
|
534
|
+
<div data-part="footer" data-part-footer="">
|
|
523
535
|
<button
|
|
524
536
|
slButton
|
|
525
537
|
data-save-as
|
|
@@ -540,7 +552,7 @@ class SlSavedViews {
|
|
|
540
552
|
</ng-container>
|
|
541
553
|
|
|
542
554
|
@if (modified()) {
|
|
543
|
-
<button data-part="revert" type="button" (click)="revert($event)">
|
|
555
|
+
<button data-part="revert" data-part-revert="" type="button" (click)="revert($event)">
|
|
544
556
|
<!-- An arrow that turns back turns the other way in a right-to-left document. -->
|
|
545
557
|
<span slIcon size="sm" directional><svg slGlyph name="rotate-ccw"></svg></span>
|
|
546
558
|
{{ t('revert') }}
|
|
@@ -550,6 +562,7 @@ class SlSavedViews {
|
|
|
550
562
|
<ng-template #nameForm let-kind="kind" let-name="name">
|
|
551
563
|
<form
|
|
552
564
|
data-part="form"
|
|
565
|
+
data-part-form=""
|
|
553
566
|
novalidate
|
|
554
567
|
[attr.aria-label]="kind === 'create' ? t('saveAs') : t('renameView', { name: name })"
|
|
555
568
|
(submit)="submit($event)"
|
|
@@ -585,7 +598,7 @@ class SlSavedViews {
|
|
|
585
598
|
</div>
|
|
586
599
|
</form>
|
|
587
600
|
</ng-template>
|
|
588
|
-
`, isInline: true, styles: ["@layer slotted.components{[data-ui=saved-views]{--_text: var(--slotted-text, CanvasText);--_muted: var(--slotted-text-muted, GrayText);--_hover: var(--slotted-tone-secondary-subtle-hover, ButtonFace);--_active: var(--slotted-tone-secondary-subtle-active, ButtonFace);--_height: var(--slotted-control-height-md, 34px);--_height-sm: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_font-size: var(--slotted-control-font-size-md, 13px);--_icon-size: var(--slotted-control-icon-size-md, 16px);--_icon-size-sm: var(--slotted-control-icon-size-sm, 14px);--_radius: var(--slotted-control-radius, 4px);--_duration: var(--slotted-control-transition-duration);--_easing: var(--slotted-control-transition-easing);box-sizing:border-box;color:var(--_text);font-family:var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif);font-size:var(--_font-size);line-height:var(--slotted-line-height-md, 1.5)}[data-ui=saved-views][data-part=root]{display:inline-flex;flex-wrap:wrap;align-items:center;gap:var(--slotted-space-3, .375rem);min-inline-size:0;max-inline-size:100%}[data-ui=saved-views]>[data-part=trigger]{display:inline-flex;align-items:center;gap:var(--_gap);box-sizing:border-box;min-inline-size:0;max-inline-size:100%;min-block-size:var(--_height);margin:0;padding-block:0;padding-inline:var(--_padding-inline);border:var(--slotted-control-border-width, 1px) solid var(--slotted-control-border-color, ButtonBorder);border-radius:var(--_radius);background:var(--slotted-control-surface, Canvas);box-shadow:var(--slotted-control-shadow, none);color:var(--_text);font:inherit;font-weight:var(--slotted-font-weight-medium, 500);cursor:pointer;transition:background-color var(--_duration) var(--_easing)}[data-ui=saved-views]>[data-part=trigger]>[data-label]{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui=saved-views]>[data-part=trigger]>[data-ui=icon]{margin-inline-end:calc(var(--slotted-space-2, .25rem) * -1);color:var(--_muted);transition:rotate var(--_duration) var(--_easing)}[data-ui=saved-views][data-open]>[data-part=trigger]>[data-ui=icon]{rotate:180deg}[data-ui=saved-views]>[data-part=trigger]:hover:not(:disabled){background:var(--_hover)}[data-ui=saved-views]>[data-part=trigger]:active:not(:disabled){background:var(--_active);transition-duration:var(--slotted-duration-instant)}[data-ui=saved-views]>[data-part=trigger]>[data-part=modified]{display:inline-flex;flex:none;align-items:center;gap:var(--slotted-space-2, .25rem);color:var(--_muted);font-size:inherit;font-weight:var(--slotted-font-weight-regular, 400)}[data-ui=saved-views]>[data-part=trigger]>[data-part=modified]:before{content:\"\";flex:none;inline-size:var(--slotted-space-4, .5rem);block-size:var(--slotted-space-4, .5rem);border-radius:var(--slotted-radius-full, 9999px);background-color:var(--slotted-tone-accent-solid)}[data-ui=saved-views]>[data-part=revert]{display:inline-flex;align-items:center;gap:var(--slotted-space-3, .375rem);box-sizing:border-box;min-block-size:var(--_height);margin:0;padding-block:0;padding-inline:var(--slotted-space-4, .5rem);border:var(--slotted-control-border-width, 1px) solid transparent;border-radius:var(--_radius);background:transparent;color:var(--slotted-tone-accent-text, LinkText);font:inherit;font-weight:var(--slotted-font-weight-medium, 500);cursor:pointer;transition:background-color var(--_duration) var(--_easing)}[data-ui=saved-views]>[data-part=revert]:hover:not(:disabled){background:var(--slotted-tone-accent-subtle-hover, ButtonFace)}[data-ui=saved-views]>[data-part=revert]:active:not(:disabled){background:var(--slotted-tone-accent-subtle-active, ButtonFace);transition-duration:var(--slotted-duration-instant)}[data-ui=saved-views]>[data-part=trigger]:focus-visible,[data-ui=saved-views]>[data-part=revert]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=saved-views][data-part=panel]{display:grid;grid-template-columns:minmax(0,var(--slotted-saved-views-panel-inline-size, 18rem));gap:var(--slotted-space-4, .5rem);max-inline-size:100%;padding:var(--slotted-space-2, .25rem)}[data-ui=saved-views][data-part=panel]>[data-part=list]{display:grid;gap:var(--slotted-space-1, .125rem);margin:0;padding:0;list-style:none}[data-ui=saved-views][data-part=panel]>[data-part=list]>[data-part=item]{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:var(--slotted-space-1, .125rem);margin:0}[data-ui=saved-views][data-part=panel]>[data-part=list]>[data-part=item][data-editing]{grid-template-columns:minmax(0,1fr)}[data-ui=saved-views][data-part=panel] [data-part=apply]{display:grid;grid-template-columns:var(--_icon-size-sm) minmax(0,max-content) auto;justify-content:start;align-content:center;align-items:baseline;column-gap:var(--slotted-space-4, .5rem);box-sizing:border-box;inline-size:100%;min-block-size:var(--_height-sm);margin:0;padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--slotted-space-4, .5rem);border:0;border-radius:var(--_radius);background:transparent;color:var(--_text);font:inherit;text-align:start;cursor:pointer;transition:background-color var(--_duration) var(--_easing)}[data-ui=saved-views][data-part=panel] [data-part=apply]>[data-ui=icon]{color:var(--slotted-tone-accent-text);translate:0 calc(var(--_icon-size-sm) / 2 - (1cap + 1ex) / 4)}[data-ui=saved-views][data-part=panel] [data-part=item][data-current]>[data-part=apply]{font-weight:var(--slotted-font-weight-medium, 500)}[data-ui=saved-views][data-part=panel] [data-part=apply]>[data-label]{grid-column:2;min-inline-size:0;overflow-wrap:anywhere}[data-ui=saved-views][data-part=panel] [data-part=apply]:hover:not(:disabled),[data-ui=saved-views][data-part=panel] [data-part=actions]:hover:not(:disabled){background:var(--_hover)}[data-ui=saved-views][data-part=panel] [data-part=apply]:active:not(:disabled),[data-ui=saved-views][data-part=panel] [data-part=actions]:active:not(:disabled){background:var(--_active);transition-duration:var(--slotted-duration-instant)}[data-ui=saved-views][data-part=panel] [data-part=apply]>[data-part=default-mark]{display:flex;position:relative;inline-size:var(--_icon-size-sm);block-size:var(--_icon-size-sm);margin-inline-start:calc(var(--slotted-space-2, .25rem) - var(--slotted-space-4, .5rem));translate:0 calc(var(--_icon-size-sm) / 2 - (1cap + 1ex) / 4);color:var(--_muted)}[data-ui=saved-views][data-part=panel] [data-part=default-mark]>span:not([data-ui=icon]){position:absolute;inline-size:1px;block-size:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}[data-ui=saved-views][data-part=panel] [data-part=actions]{display:inline-grid;place-items:center;box-sizing:border-box;inline-size:var(--_height-sm);block-size:var(--_height-sm);margin:0;padding:0;border:0;border-radius:var(--_radius);background:transparent;color:var(--_muted);cursor:pointer;transition:background-color var(--_duration) var(--_easing),color var(--_duration) var(--_easing)}[data-ui=saved-views][data-part=panel] [data-part=actions][data-open],[data-ui=saved-views][data-part=panel] [data-part=actions]:hover:not(:disabled){color:var(--_text)}[data-ui=saved-views][data-part=panel] [data-part=apply]:focus-visible,[data-ui=saved-views][data-part=panel] [data-part=actions]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=saved-views][data-part=panel] [data-part=form],[data-ui=saved-views][data-part=panel] [data-part=confirm]{display:grid;gap:var(--slotted-space-4, .5rem);margin:0;padding:var(--slotted-space-4, .5rem);border-radius:var(--_radius);background:var(--slotted-surface-sunken, Canvas)}[data-ui=saved-views][data-part=panel] [data-part=confirm]>p{margin:0;overflow-wrap:anywhere}[data-ui=saved-views][data-part=panel] :is([data-part=form],[data-part=confirm])>[data-buttons]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--slotted-space-3, .375rem)}[data-ui=saved-views][data-part=panel]>[data-part=footer]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--slotted-space-3, .375rem);padding-block-start:var(--slotted-space-4, .5rem);border-block-start:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle, transparent)}@media(forced-colors:active){[data-ui=saved-views]>[data-part=trigger]>[data-part=modified]:before{forced-color-adjust:none}}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SlButton, selector: "button[slButton]", inputs: ["disabled", "focusableWhenDisabled", "fullWidth", "justify", "loading", "loadingDelay", "messages", "size", "tone", "type", "variant"], exportAs: ["slButton"] }, { kind: "component", type: SlField, selector: "[slField]", inputs: ["size", "labelPlacement", "necessity", "messages", "disabled", "invalid", "required", "readOnly"], exportAs: ["slField"] }, { kind: "directive", type: SlFieldError, selector: "[slFieldError]", exportAs: ["slFieldError"] }, { kind: "component", type: SlFieldLabel, selector: "label[slFieldLabel]", exportAs: ["slFieldLabel"] }, { kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }, { kind: "component", type: SlMenu, selector: "sl-menu", inputs: ["value", "aria-label", "aria-describedby", "open", "align", "side", "size", "width", "mount", "strategy", "sideOffset", "alignOffset", "collisionPadding", "submenuOpenDelay", "submenuCloseDelay", "typeaheadTimeout", "disabled", "loop", "typeahead", "openOnHover", "closeOnSelect", "closeOnEscape", "closeOnOutsidePress", "flip", "shift", "hideWhenDetached", "portal", "loading"], outputs: ["openChange", "openChangeRequest"], exportAs: ["slMenu"] }, { kind: "component", type: SlMenuItem, selector: "button[slMenuItem], a[slMenuItem], button[slMenuCheckboxItem], button[slMenuRadioItem]", inputs: ["disabled", "textValue", "tone", "shortcut", "closeOnSelect", "value", "checked"], outputs: ["checkedChange", "checkedChangeRequest", "select"], exportAs: ["slMenuItem"] }, { kind: "directive", type: SlMenuTrigger, selector: "[slMenuTriggerFor]", inputs: ["slMenuTriggerFor"], exportAs: ["slMenuTrigger"] }, { kind: "directive", type: SlPopover, selector: "[slPopover]", inputs: ["open", "defaultOpen", "disabled", "size", "width", "side", "align", "mount", "strategy", "messages", "initialFocus", "finalFocus", "arrow", "autoFocus", "closeOnEscape", "closeOnOutsidePress", "flip", "shift", "hideWhenDetached", "portal", "sideOffset", "alignOffset", "collisionPadding", "arrowPadding"], outputs: ["openChange", "openChangeRequest"], exportAs: ["slPopover"] }, { kind: "component", type: SlPopoverContent, selector: "[slPopoverContent]", exportAs: ["slPopoverContent"] }, { kind: "directive", type: SlPopoverLayer, selector: "ng-template[slPopoverLayer]", exportAs: ["slPopoverLayer"] }, { kind: "directive", type: SlPopoverTrigger, selector: "[slPopoverTrigger]", exportAs: ["slPopoverTrigger"] }, { kind: "directive", type: SlSavedViewsPart, selector: "[slSavedViewsPart]", inputs: ["slSavedViewsPart"] }, { kind: "component", type: SlTextField, selector: "[slTextField]", inputs: ["size", "variant", "mono", "clearable", "revealable", "copyable", "messages", "loading"], outputs: ["valueCopy"], exportAs: ["slTextField"] }, { kind: "directive", type: SlTextFieldInput, selector: "input[slTextFieldInput]", inputs: ["value", "defaultValue", "disabled", "readOnly", "invalid", "showCount", "countMax", "revealed", "defaultRevealed", "type"], outputs: ["valueChange", "revealedChange"], exportAs: ["slTextFieldInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
601
|
+
`, isInline: true, styles: ["@layer slotted.components{[data-ui-saved-views]{--_text: var(--slotted-text, CanvasText);--_muted: var(--slotted-text-muted, GrayText);--_hover: var(--slotted-tone-secondary-subtle-hover, ButtonFace);--_active: var(--slotted-tone-secondary-subtle-active, ButtonFace);--_height: var(--slotted-control-height-md, 34px);--_height-sm: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_font-size: var(--slotted-control-font-size-md, 13px);--_icon-size: var(--slotted-control-icon-size-md, 16px);--_icon-size-sm: var(--slotted-control-icon-size-sm, 14px);--_radius: var(--slotted-control-radius, 4px);--_duration: var(--slotted-control-transition-duration);--_easing: var(--slotted-control-transition-easing);box-sizing:border-box;color:var(--_text);font-family:var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif);font-size:var(--_font-size);line-height:var(--slotted-line-height-md, 1.5)}[data-ui-saved-views][data-part-root]{display:inline-flex;flex-wrap:wrap;align-items:center;gap:var(--slotted-space-3, .375rem);min-inline-size:0;max-inline-size:100%}[data-ui-saved-views]>[data-part-trigger]{display:inline-flex;align-items:center;gap:var(--_gap);box-sizing:border-box;min-inline-size:0;max-inline-size:100%;min-block-size:var(--_height);margin:0;padding-block:0;padding-inline:var(--_padding-inline);border:var(--slotted-control-border-width, 1px) solid var(--slotted-control-border-color, ButtonBorder);border-radius:var(--_radius);background:var(--slotted-control-surface, Canvas);box-shadow:var(--slotted-control-shadow, none);color:var(--_text);font:inherit;font-weight:var(--slotted-font-weight-medium, 500);cursor:pointer;transition:background-color var(--_duration) var(--_easing)}[data-ui-saved-views]>[data-part-trigger]>[data-label]{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui-saved-views]>[data-part-trigger]>[data-ui-icon]{margin-inline-end:calc(var(--slotted-space-2, .25rem) * -1);color:var(--_muted);transition:rotate var(--_duration) var(--_easing)}[data-ui-saved-views][data-open]>[data-part-trigger]>[data-ui-icon]{rotate:180deg}[data-ui-saved-views]>[data-part-trigger]:hover:not(:disabled){background:var(--_hover)}[data-ui-saved-views]>[data-part-trigger]:active:not(:disabled){background:var(--_active);transition-duration:var(--slotted-duration-instant)}[data-ui-saved-views]>[data-part-trigger]>[data-part-modified]{display:inline-flex;flex:none;align-items:center;gap:var(--slotted-space-2, .25rem);color:var(--_muted);font-size:inherit;font-weight:var(--slotted-font-weight-regular, 400)}[data-ui-saved-views]>[data-part-trigger]>[data-part-modified]:before{content:\"\";flex:none;inline-size:var(--slotted-space-4, .5rem);block-size:var(--slotted-space-4, .5rem);border-radius:var(--slotted-radius-full, 9999px);background-color:var(--slotted-tone-accent-solid)}[data-ui-saved-views]>[data-part-revert]{display:inline-flex;align-items:center;gap:var(--slotted-space-3, .375rem);box-sizing:border-box;min-block-size:var(--_height);margin:0;padding-block:0;padding-inline:var(--slotted-space-4, .5rem);border:var(--slotted-control-border-width, 1px) solid transparent;border-radius:var(--_radius);background:transparent;color:var(--slotted-tone-accent-text, LinkText);font:inherit;font-weight:var(--slotted-font-weight-medium, 500);cursor:pointer;transition:background-color var(--_duration) var(--_easing)}[data-ui-saved-views]>[data-part-revert]:hover:not(:disabled){background:var(--slotted-tone-accent-subtle-hover, ButtonFace)}[data-ui-saved-views]>[data-part-revert]:active:not(:disabled){background:var(--slotted-tone-accent-subtle-active, ButtonFace);transition-duration:var(--slotted-duration-instant)}[data-ui-saved-views]>[data-part-trigger]:focus-visible,[data-ui-saved-views]>[data-part-revert]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui-saved-views][data-part-panel]{display:grid;grid-template-columns:minmax(0,var(--slotted-saved-views-panel-inline-size, 18rem));gap:var(--slotted-space-4, .5rem);max-inline-size:100%;padding:var(--slotted-space-2, .25rem)}[data-ui-saved-views][data-part-panel]>[data-part-list]{display:grid;gap:var(--slotted-space-1, .125rem);margin:0;padding:0;list-style:none}[data-ui-saved-views][data-part-panel]>[data-part-list]>[data-part-item]{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:var(--slotted-space-1, .125rem);margin:0}[data-ui-saved-views][data-part-panel]>[data-part-list]>[data-part-item][data-editing]{grid-template-columns:minmax(0,1fr)}[data-ui-saved-views][data-part-panel] [data-part-apply]{display:grid;grid-template-columns:var(--_icon-size-sm) minmax(0,max-content) auto;justify-content:start;align-content:center;align-items:baseline;column-gap:var(--slotted-space-4, .5rem);box-sizing:border-box;inline-size:100%;min-block-size:var(--_height-sm);margin:0;padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--slotted-space-4, .5rem);border:0;border-radius:var(--_radius);background:transparent;color:var(--_text);font:inherit;text-align:start;cursor:pointer;transition:background-color var(--_duration) var(--_easing)}[data-ui-saved-views][data-part-panel] [data-part-apply]>[data-ui-icon]{color:var(--slotted-tone-accent-text);translate:0 calc(var(--_icon-size-sm) / 2 - (1cap + 1ex) / 4)}[data-ui-saved-views][data-part-panel] [data-part-item][data-current]>[data-part-apply]{font-weight:var(--slotted-font-weight-medium, 500)}[data-ui-saved-views][data-part-panel] [data-part-apply]>[data-label]{grid-column:2;min-inline-size:0;overflow-wrap:anywhere}[data-ui-saved-views][data-part-panel] [data-part-apply]:hover:not(:disabled),[data-ui-saved-views][data-part-panel] [data-part-actions]:hover:not(:disabled){background:var(--_hover)}[data-ui-saved-views][data-part-panel] [data-part-apply]:active:not(:disabled),[data-ui-saved-views][data-part-panel] [data-part-actions]:active:not(:disabled){background:var(--_active);transition-duration:var(--slotted-duration-instant)}[data-ui-saved-views][data-part-panel] [data-part-apply]>[data-part-default-mark]{display:flex;position:relative;inline-size:var(--_icon-size-sm);block-size:var(--_icon-size-sm);margin-inline-start:calc(var(--slotted-space-2, .25rem) - var(--slotted-space-4, .5rem));translate:0 calc(var(--_icon-size-sm) / 2 - (1cap + 1ex) / 4);color:var(--_muted)}[data-ui-saved-views][data-part-panel] [data-part-default-mark]>span:not([data-ui-icon]){position:absolute;inline-size:1px;block-size:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}[data-ui-saved-views][data-part-panel] [data-part-actions]{display:inline-grid;place-items:center;box-sizing:border-box;inline-size:var(--_height-sm);block-size:var(--_height-sm);margin:0;padding:0;border:0;border-radius:var(--_radius);background:transparent;color:var(--_muted);cursor:pointer;transition:background-color var(--_duration) var(--_easing),color var(--_duration) var(--_easing)}[data-ui-saved-views][data-part-panel] [data-part-actions][data-open],[data-ui-saved-views][data-part-panel] [data-part-actions]:hover:not(:disabled){color:var(--_text)}[data-ui-saved-views][data-part-panel] [data-part-apply]:focus-visible,[data-ui-saved-views][data-part-panel] [data-part-actions]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui-saved-views][data-part-panel] [data-part-form],[data-ui-saved-views][data-part-panel] [data-part-confirm]{display:grid;gap:var(--slotted-space-4, .5rem);margin:0;padding:var(--slotted-space-4, .5rem);border-radius:var(--_radius);background:var(--slotted-surface-sunken, Canvas)}[data-ui-saved-views][data-part-panel] [data-part-confirm]>p{margin:0;overflow-wrap:anywhere}[data-ui-saved-views][data-part-panel] :is([data-part-form],[data-part-confirm])>[data-buttons]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--slotted-space-3, .375rem)}[data-ui-saved-views][data-part-panel]>[data-part-footer]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--slotted-space-3, .375rem);padding-block-start:var(--slotted-space-4, .5rem);border-block-start:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle, transparent)}@media(forced-colors:active){[data-ui-saved-views]>[data-part-trigger]>[data-part-modified]:before{forced-color-adjust:none}}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SlButton, selector: "button[slButton]", inputs: ["disabled", "focusableWhenDisabled", "fullWidth", "justify", "loading", "loadingDelay", "messages", "size", "tone", "type", "variant"], exportAs: ["slButton"] }, { kind: "component", type: SlField, selector: "[slField]", inputs: ["size", "labelPlacement", "necessity", "messages", "disabled", "invalid", "required", "readOnly"], exportAs: ["slField"] }, { kind: "directive", type: SlFieldError, selector: "[slFieldError]", exportAs: ["slFieldError"] }, { kind: "component", type: SlFieldLabel, selector: "label[slFieldLabel]", exportAs: ["slFieldLabel"] }, { kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }, { kind: "component", type: SlMenu, selector: "sl-menu", inputs: ["value", "aria-label", "aria-describedby", "open", "align", "side", "size", "width", "mount", "strategy", "sideOffset", "alignOffset", "collisionPadding", "submenuOpenDelay", "submenuCloseDelay", "typeaheadTimeout", "disabled", "loop", "typeahead", "openOnHover", "closeOnSelect", "closeOnEscape", "closeOnOutsidePress", "flip", "shift", "hideWhenDetached", "portal", "loading"], outputs: ["openChange", "openChangeRequest"], exportAs: ["slMenu"] }, { kind: "component", type: SlMenuItem, selector: "button[slMenuItem], a[slMenuItem], button[slMenuCheckboxItem], button[slMenuRadioItem]", inputs: ["disabled", "textValue", "tone", "shortcut", "closeOnSelect", "value", "checked"], outputs: ["checkedChange", "checkedChangeRequest", "select"], exportAs: ["slMenuItem"] }, { kind: "directive", type: SlMenuTrigger, selector: "[slMenuTriggerFor]", inputs: ["slMenuTriggerFor"], exportAs: ["slMenuTrigger"] }, { kind: "directive", type: SlPopover, selector: "[slPopover]", inputs: ["open", "defaultOpen", "disabled", "size", "width", "side", "align", "mount", "strategy", "messages", "initialFocus", "finalFocus", "arrow", "autoFocus", "closeOnEscape", "closeOnOutsidePress", "flip", "shift", "hideWhenDetached", "portal", "sideOffset", "alignOffset", "collisionPadding", "arrowPadding"], outputs: ["openChange", "openChangeRequest"], exportAs: ["slPopover"] }, { kind: "component", type: SlPopoverContent, selector: "[slPopoverContent]", exportAs: ["slPopoverContent"] }, { kind: "directive", type: SlPopoverLayer, selector: "ng-template[slPopoverLayer]", exportAs: ["slPopoverLayer"] }, { kind: "directive", type: SlPopoverTrigger, selector: "[slPopoverTrigger]", exportAs: ["slPopoverTrigger"] }, { kind: "directive", type: SlSavedViewsPart, selector: "[slSavedViewsPart]", inputs: ["slSavedViewsPart"] }, { kind: "component", type: SlTextField, selector: "[slTextField]", inputs: ["size", "variant", "mono", "clearable", "revealable", "copyable", "messages", "loading"], outputs: ["valueCopy"], exportAs: ["slTextField"] }, { kind: "directive", type: SlTextFieldInput, selector: "input[slTextFieldInput]", inputs: ["value", "defaultValue", "disabled", "readOnly", "invalid", "showCount", "countMax", "revealed", "defaultRevealed", "type"], outputs: ["valueChange", "revealedChange"], exportAs: ["slTextFieldInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
589
602
|
}
|
|
590
603
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlSavedViews, decorators: [{
|
|
591
604
|
type: Component,
|
|
@@ -609,7 +622,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
609
622
|
SlTextFieldInput,
|
|
610
623
|
], host: {
|
|
611
624
|
'data-ui': 'saved-views',
|
|
625
|
+
'data-ui-saved-views': '',
|
|
612
626
|
'data-part': 'root',
|
|
627
|
+
'data-part-root': '',
|
|
613
628
|
'[attr.role]': 'role',
|
|
614
629
|
'[attr.aria-label]': 'resolvedLabel()',
|
|
615
630
|
'[attr.data-modified]': 'modified() ? "" : null',
|
|
@@ -626,11 +641,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
626
641
|
slPopoverTrigger
|
|
627
642
|
type="button"
|
|
628
643
|
data-part="trigger"
|
|
644
|
+
data-part-trigger=""
|
|
629
645
|
[attr.title]="activeName()"
|
|
630
646
|
>
|
|
631
647
|
<span data-label>{{ activeName() }}</span>
|
|
632
648
|
@if (modified()) {
|
|
633
|
-
<span data-part="modified">{{ t('modified') }}</span>
|
|
649
|
+
<span data-part="modified" data-part-modified="">{{ t('modified') }}</span>
|
|
634
650
|
}
|
|
635
651
|
<span slIcon size="md"><svg slGlyph name="chevron-down"></svg></span>
|
|
636
652
|
</button>
|
|
@@ -639,11 +655,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
639
655
|
<div slPopoverContent [attr.aria-label]="resolvedLabel()">
|
|
640
656
|
<!-- The family's identifier is on its own element rather than on
|
|
641
657
|
the popover's: slPopoverContent names its own part. -->
|
|
642
|
-
<div
|
|
643
|
-
|
|
658
|
+
<div
|
|
659
|
+
data-ui="saved-views"
|
|
660
|
+
data-ui-saved-views=""
|
|
661
|
+
data-part="panel"
|
|
662
|
+
data-part-panel=""
|
|
663
|
+
[id]="panelId"
|
|
664
|
+
>
|
|
665
|
+
<ul data-part="list" data-part-list="" role="list">
|
|
644
666
|
@for (row of rows(); track row.key) {
|
|
645
667
|
<li
|
|
646
668
|
data-part="item"
|
|
669
|
+
data-part-item=""
|
|
647
670
|
[attr.data-view]="row.key"
|
|
648
671
|
[attr.data-current]="row.current ? '' : null"
|
|
649
672
|
[attr.data-default]="row.isDefault ? '' : null"
|
|
@@ -660,6 +683,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
660
683
|
@case ('delete') {
|
|
661
684
|
<div
|
|
662
685
|
data-part="confirm"
|
|
686
|
+
data-part-confirm=""
|
|
663
687
|
role="group"
|
|
664
688
|
[attr.aria-labelledby]="panelId + '-confirm-' + row.key"
|
|
665
689
|
>
|
|
@@ -691,6 +715,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
691
715
|
@default {
|
|
692
716
|
<button
|
|
693
717
|
data-part="apply"
|
|
718
|
+
data-part-apply=""
|
|
694
719
|
type="button"
|
|
695
720
|
[attr.aria-current]="row.current ? 'true' : null"
|
|
696
721
|
(click)="apply(row.id, pressReason($event), $event)"
|
|
@@ -700,7 +725,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
700
725
|
}
|
|
701
726
|
<span data-label>{{ row.name }}</span>
|
|
702
727
|
@if (row.isDefault) {
|
|
703
|
-
<span data-part="default-mark"
|
|
728
|
+
<span data-part="default-mark" data-part-default-mark=""
|
|
704
729
|
><span slIcon size="sm"><svg slGlyph name="pin"></svg></span
|
|
705
730
|
><span>{{ t('isDefault') }}</span></span
|
|
706
731
|
>
|
|
@@ -709,6 +734,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
709
734
|
<button
|
|
710
735
|
type="button"
|
|
711
736
|
data-part="actions"
|
|
737
|
+
data-part-actions=""
|
|
712
738
|
slSavedViewsPart="actions"
|
|
713
739
|
[slMenuTriggerFor]="menu"
|
|
714
740
|
[attr.aria-label]="t('actions', { name: row.name })"
|
|
@@ -745,7 +771,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
745
771
|
[ngTemplateOutletContext]="{ kind: 'create', name: '' }"
|
|
746
772
|
/>
|
|
747
773
|
}
|
|
748
|
-
<div data-part="footer">
|
|
774
|
+
<div data-part="footer" data-part-footer="">
|
|
749
775
|
<button
|
|
750
776
|
slButton
|
|
751
777
|
data-save-as
|
|
@@ -766,7 +792,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
766
792
|
</ng-container>
|
|
767
793
|
|
|
768
794
|
@if (modified()) {
|
|
769
|
-
<button data-part="revert" type="button" (click)="revert($event)">
|
|
795
|
+
<button data-part="revert" data-part-revert="" type="button" (click)="revert($event)">
|
|
770
796
|
<!-- An arrow that turns back turns the other way in a right-to-left document. -->
|
|
771
797
|
<span slIcon size="sm" directional><svg slGlyph name="rotate-ccw"></svg></span>
|
|
772
798
|
{{ t('revert') }}
|
|
@@ -776,6 +802,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
776
802
|
<ng-template #nameForm let-kind="kind" let-name="name">
|
|
777
803
|
<form
|
|
778
804
|
data-part="form"
|
|
805
|
+
data-part-form=""
|
|
779
806
|
novalidate
|
|
780
807
|
[attr.aria-label]="kind === 'create' ? t('saveAs') : t('renameView', { name: name })"
|
|
781
808
|
(submit)="submit($event)"
|
|
@@ -811,7 +838,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
811
838
|
</div>
|
|
812
839
|
</form>
|
|
813
840
|
</ng-template>
|
|
814
|
-
`, styles: ["@layer slotted.components{[data-ui
|
|
841
|
+
`, styles: ["@layer slotted.components{[data-ui-saved-views]{--_text: var(--slotted-text, CanvasText);--_muted: var(--slotted-text-muted, GrayText);--_hover: var(--slotted-tone-secondary-subtle-hover, ButtonFace);--_active: var(--slotted-tone-secondary-subtle-active, ButtonFace);--_height: var(--slotted-control-height-md, 34px);--_height-sm: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_font-size: var(--slotted-control-font-size-md, 13px);--_icon-size: var(--slotted-control-icon-size-md, 16px);--_icon-size-sm: var(--slotted-control-icon-size-sm, 14px);--_radius: var(--slotted-control-radius, 4px);--_duration: var(--slotted-control-transition-duration);--_easing: var(--slotted-control-transition-easing);box-sizing:border-box;color:var(--_text);font-family:var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif);font-size:var(--_font-size);line-height:var(--slotted-line-height-md, 1.5)}[data-ui-saved-views][data-part-root]{display:inline-flex;flex-wrap:wrap;align-items:center;gap:var(--slotted-space-3, .375rem);min-inline-size:0;max-inline-size:100%}[data-ui-saved-views]>[data-part-trigger]{display:inline-flex;align-items:center;gap:var(--_gap);box-sizing:border-box;min-inline-size:0;max-inline-size:100%;min-block-size:var(--_height);margin:0;padding-block:0;padding-inline:var(--_padding-inline);border:var(--slotted-control-border-width, 1px) solid var(--slotted-control-border-color, ButtonBorder);border-radius:var(--_radius);background:var(--slotted-control-surface, Canvas);box-shadow:var(--slotted-control-shadow, none);color:var(--_text);font:inherit;font-weight:var(--slotted-font-weight-medium, 500);cursor:pointer;transition:background-color var(--_duration) var(--_easing)}[data-ui-saved-views]>[data-part-trigger]>[data-label]{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui-saved-views]>[data-part-trigger]>[data-ui-icon]{margin-inline-end:calc(var(--slotted-space-2, .25rem) * -1);color:var(--_muted);transition:rotate var(--_duration) var(--_easing)}[data-ui-saved-views][data-open]>[data-part-trigger]>[data-ui-icon]{rotate:180deg}[data-ui-saved-views]>[data-part-trigger]:hover:not(:disabled){background:var(--_hover)}[data-ui-saved-views]>[data-part-trigger]:active:not(:disabled){background:var(--_active);transition-duration:var(--slotted-duration-instant)}[data-ui-saved-views]>[data-part-trigger]>[data-part-modified]{display:inline-flex;flex:none;align-items:center;gap:var(--slotted-space-2, .25rem);color:var(--_muted);font-size:inherit;font-weight:var(--slotted-font-weight-regular, 400)}[data-ui-saved-views]>[data-part-trigger]>[data-part-modified]:before{content:\"\";flex:none;inline-size:var(--slotted-space-4, .5rem);block-size:var(--slotted-space-4, .5rem);border-radius:var(--slotted-radius-full, 9999px);background-color:var(--slotted-tone-accent-solid)}[data-ui-saved-views]>[data-part-revert]{display:inline-flex;align-items:center;gap:var(--slotted-space-3, .375rem);box-sizing:border-box;min-block-size:var(--_height);margin:0;padding-block:0;padding-inline:var(--slotted-space-4, .5rem);border:var(--slotted-control-border-width, 1px) solid transparent;border-radius:var(--_radius);background:transparent;color:var(--slotted-tone-accent-text, LinkText);font:inherit;font-weight:var(--slotted-font-weight-medium, 500);cursor:pointer;transition:background-color var(--_duration) var(--_easing)}[data-ui-saved-views]>[data-part-revert]:hover:not(:disabled){background:var(--slotted-tone-accent-subtle-hover, ButtonFace)}[data-ui-saved-views]>[data-part-revert]:active:not(:disabled){background:var(--slotted-tone-accent-subtle-active, ButtonFace);transition-duration:var(--slotted-duration-instant)}[data-ui-saved-views]>[data-part-trigger]:focus-visible,[data-ui-saved-views]>[data-part-revert]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui-saved-views][data-part-panel]{display:grid;grid-template-columns:minmax(0,var(--slotted-saved-views-panel-inline-size, 18rem));gap:var(--slotted-space-4, .5rem);max-inline-size:100%;padding:var(--slotted-space-2, .25rem)}[data-ui-saved-views][data-part-panel]>[data-part-list]{display:grid;gap:var(--slotted-space-1, .125rem);margin:0;padding:0;list-style:none}[data-ui-saved-views][data-part-panel]>[data-part-list]>[data-part-item]{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:var(--slotted-space-1, .125rem);margin:0}[data-ui-saved-views][data-part-panel]>[data-part-list]>[data-part-item][data-editing]{grid-template-columns:minmax(0,1fr)}[data-ui-saved-views][data-part-panel] [data-part-apply]{display:grid;grid-template-columns:var(--_icon-size-sm) minmax(0,max-content) auto;justify-content:start;align-content:center;align-items:baseline;column-gap:var(--slotted-space-4, .5rem);box-sizing:border-box;inline-size:100%;min-block-size:var(--_height-sm);margin:0;padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--slotted-space-4, .5rem);border:0;border-radius:var(--_radius);background:transparent;color:var(--_text);font:inherit;text-align:start;cursor:pointer;transition:background-color var(--_duration) var(--_easing)}[data-ui-saved-views][data-part-panel] [data-part-apply]>[data-ui-icon]{color:var(--slotted-tone-accent-text);translate:0 calc(var(--_icon-size-sm) / 2 - (1cap + 1ex) / 4)}[data-ui-saved-views][data-part-panel] [data-part-item][data-current]>[data-part-apply]{font-weight:var(--slotted-font-weight-medium, 500)}[data-ui-saved-views][data-part-panel] [data-part-apply]>[data-label]{grid-column:2;min-inline-size:0;overflow-wrap:anywhere}[data-ui-saved-views][data-part-panel] [data-part-apply]:hover:not(:disabled),[data-ui-saved-views][data-part-panel] [data-part-actions]:hover:not(:disabled){background:var(--_hover)}[data-ui-saved-views][data-part-panel] [data-part-apply]:active:not(:disabled),[data-ui-saved-views][data-part-panel] [data-part-actions]:active:not(:disabled){background:var(--_active);transition-duration:var(--slotted-duration-instant)}[data-ui-saved-views][data-part-panel] [data-part-apply]>[data-part-default-mark]{display:flex;position:relative;inline-size:var(--_icon-size-sm);block-size:var(--_icon-size-sm);margin-inline-start:calc(var(--slotted-space-2, .25rem) - var(--slotted-space-4, .5rem));translate:0 calc(var(--_icon-size-sm) / 2 - (1cap + 1ex) / 4);color:var(--_muted)}[data-ui-saved-views][data-part-panel] [data-part-default-mark]>span:not([data-ui-icon]){position:absolute;inline-size:1px;block-size:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}[data-ui-saved-views][data-part-panel] [data-part-actions]{display:inline-grid;place-items:center;box-sizing:border-box;inline-size:var(--_height-sm);block-size:var(--_height-sm);margin:0;padding:0;border:0;border-radius:var(--_radius);background:transparent;color:var(--_muted);cursor:pointer;transition:background-color var(--_duration) var(--_easing),color var(--_duration) var(--_easing)}[data-ui-saved-views][data-part-panel] [data-part-actions][data-open],[data-ui-saved-views][data-part-panel] [data-part-actions]:hover:not(:disabled){color:var(--_text)}[data-ui-saved-views][data-part-panel] [data-part-apply]:focus-visible,[data-ui-saved-views][data-part-panel] [data-part-actions]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui-saved-views][data-part-panel] [data-part-form],[data-ui-saved-views][data-part-panel] [data-part-confirm]{display:grid;gap:var(--slotted-space-4, .5rem);margin:0;padding:var(--slotted-space-4, .5rem);border-radius:var(--_radius);background:var(--slotted-surface-sunken, Canvas)}[data-ui-saved-views][data-part-panel] [data-part-confirm]>p{margin:0;overflow-wrap:anywhere}[data-ui-saved-views][data-part-panel] :is([data-part-form],[data-part-confirm])>[data-buttons]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--slotted-space-3, .375rem)}[data-ui-saved-views][data-part-panel]>[data-part-footer]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--slotted-space-3, .375rem);padding-block-start:var(--slotted-space-4, .5rem);border-block-start:var(--slotted-border-width-thin, 1px) solid var(--slotted-border-subtle, transparent)}@media(forced-colors:active){[data-ui-saved-views]>[data-part-trigger]>[data-part-modified]:before{forced-color-adjust:none}}}\n"] }]
|
|
815
842
|
}], propDecorators: { current: [{ type: i0.Input, args: [{ isSignal: true, alias: "current", required: true }] }], builtIn: [{ type: i0.Input, args: [{ isSignal: true, alias: "builtIn", required: true }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }, { type: i0.Output, args: ["stateChange"] }], defaultState: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultState", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], defaultOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultOpen", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], stateChangeRequest: [{ type: i0.Output, args: ["stateChangeRequest"] }], openChangeRequest: [{ type: i0.Output, args: ["openChangeRequest"] }], viewApply: [{ type: i0.Output, args: ["viewApply"] }], triggerRef: [{ type: i0.ViewChild, args: ['trigger', { isSignal: true }] }] } });
|
|
816
843
|
|
|
817
844
|
function defaultStorage() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotted-angular-saved-views.mjs","sources":["../../saved-views/src/saved-views-defaults.ts","../../saved-views/src/saved-views.ts","../../saved-views/src/persisted-saved-views.ts","../../saved-views/src/slotted-angular-saved-views.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport type { GridView, SavedViewsState } from '@slotted/core/grid';\nimport type { ChangeRequest } from '@slotted/core/state';\n\n/** What the reader did. One state object answers seven different presses. */\nexport type SavedViewsAction =\n 'apply' | 'save' | 'create' | 'rename' | 'delete' | 'default' | 'revert';\n\n/** Why the views moved. `submit` is a form; `remove` a confirmed delete. */\nexport type SavedViewsReason = 'pointer' | 'keyboard' | 'submit' | 'remove' | 'programmatic';\n\n/** Why the layer opened or closed: the popover's own reasons. */\nexport type SavedViewsOpenReason = Extract<\n ChangeRequest<boolean>['reason'],\n 'pointer' | 'keyboard' | 'escape' | 'outsidePress' | 'dismiss' | 'programmatic'\n>;\n\n/**\n * The request every change carries: the state asked for, the one it\n * replaces, the reason, what the reader did, the originating event, and a\n * refusal that stops the change before anything commits.\n */\nexport interface SavedViewsRequest {\n readonly value: SavedViewsState;\n readonly previous: SavedViewsState;\n readonly reason: SavedViewsReason;\n readonly action: SavedViewsAction;\n readonly source?: Event | undefined;\n readonly cancelled: boolean;\n /** Refuses the request. Nothing commits and no view is applied. */\n cancel(): void;\n}\n\n/** What `viewApply` emits: the view to write into the grid, and the request that caused it. */\nexport interface SavedViewApply {\n readonly view: GridView;\n readonly request: SavedViewsRequest;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SlSavedViewsIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-saved-views-${this.count}`;\n }\n}\n\nlet counter = 0;\n\n/** `crypto.randomUUID()` where the platform has it, and a counter otherwise. */\nexport function newSavedViewId(): string {\n const crypto = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (typeof crypto?.randomUUID === 'function') return crypto.randomUUID();\n counter += 1;\n return `view-${Date.now().toString(36)}-${counter}`;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n HostAttributeToken,\n inject,\n Injector,\n input,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlField, SlFieldError, SlFieldLabel } from '@slotted/angular/field';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\nimport type { MenuSelectEvent } from '@slotted/angular/menu';\nimport {\n SlPopover,\n SlPopoverContent,\n SlPopoverLayer,\n SlPopoverTrigger,\n} from '@slotted/angular/popover';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\nimport {\n BUILT_IN_VIEW_ID,\n emptySavedViews,\n isViewNameTaken,\n parseGridView,\n sameSavedView,\n savedViewText,\n serializeSavedViews,\n withActiveView,\n withDefaultView,\n withViewCreated,\n withViewDeleted,\n withViewRenamed,\n withViewSaved,\n type GridColumn,\n type GridView,\n type SavedView,\n type SavedViewsState,\n} from '@slotted/core/grid';\nimport {\n type PartialMessages,\n savedViewsMessages,\n type SavedViewsMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport type { ChangeRequest } from '@slotted/core/state';\n\nimport {\n newSavedViewId,\n SlSavedViewsIdFactory,\n type SavedViewApply,\n type SavedViewsAction,\n type SavedViewsOpenReason,\n type SavedViewsReason,\n type SavedViewsRequest,\n} from './saved-views-defaults';\n\n/** What replaces a row, or opens above the footer. */\ntype Editing =\n { kind: 'create' } | { kind: 'rename'; id: string } | { kind: 'delete'; id: string } | null;\n\n/** Where focus goes after the render a change causes. */\ntype FocusTarget =\n | { id: string; part: 'apply' | 'actions' | 'input' | 'cancel' }\n | { id: null; part: 'input' | 'save-as' | 'trigger' };\n\n/** One row of the list: the built-in view has no id and no saved view. */\ninterface Row {\n readonly id: string | null;\n readonly key: string;\n readonly name: string;\n readonly view: SavedView | null;\n readonly current: boolean;\n readonly isDefault: boolean;\n}\n\n/**\n * `slMenuTriggerFor` binds `[attr.data-part]` and resolves it to `null` on a\n * trigger that is neither a bar's item nor a submenu's; a host binding of\n * `null` removes the part the template wrote. The part is written back after\n * the first change detection, where the constant binding is not applied again.\n */\n@Directive({ selector: '[slSavedViewsPart]', standalone: true })\nexport class SlSavedViewsPart {\n readonly slSavedViewsPart = input.required<string>();\n\n constructor() {\n const element: HTMLElement = inject(ElementRef).nativeElement;\n afterNextRender(() => element.setAttribute('data-part', this.slSavedViewsPart()));\n }\n}\n\n/**\n * The named views of a grid, and the one in use: a trigger naming it, a mark\n * and a revert while the grid differs from it, and a popover listing every\n * view with its actions. The family applies nothing to a grid — it asks with\n * `stateChangeRequest` and hands the consumer the view to write through\n * `viewApply`.\n */\n@Component({\n selector: 'sl-saved-views',\n standalone: true,\n exportAs: 'slSavedViews',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrl: '../../../styles/src/saved-views/saved-views.css',\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlField,\n SlFieldError,\n SlFieldLabel,\n SlGlyph,\n SlIcon,\n SlMenu,\n SlMenuItem,\n SlMenuTrigger,\n SlPopover,\n SlPopoverContent,\n SlPopoverLayer,\n SlPopoverTrigger,\n SlSavedViewsPart,\n SlTextField,\n SlTextFieldInput,\n ],\n host: {\n 'data-ui': 'saved-views',\n 'data-part': 'root',\n '[attr.role]': 'role',\n '[attr.aria-label]': 'resolvedLabel()',\n '[attr.data-modified]': 'modified() ? \"\" : null',\n '[attr.data-open]': 'isOpen() ? \"\" : null',\n },\n template: `\n <ng-container\n slPopover\n initialFocus=\"[aria-current='true']\"\n [open]=\"isOpen()\"\n (openChangeRequest)=\"onLayerRequest($event)\"\n >\n <button\n #trigger\n slPopoverTrigger\n type=\"button\"\n data-part=\"trigger\"\n [attr.title]=\"activeName()\"\n >\n <span data-label>{{ activeName() }}</span>\n @if (modified()) {\n <span data-part=\"modified\">{{ t('modified') }}</span>\n }\n <span slIcon size=\"md\"><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n\n <ng-template slPopoverLayer>\n <div slPopoverContent [attr.aria-label]=\"resolvedLabel()\">\n <!-- The family's identifier is on its own element rather than on\n the popover's: slPopoverContent names its own part. -->\n <div data-ui=\"saved-views\" data-part=\"panel\" [id]=\"panelId\">\n <ul data-part=\"list\" role=\"list\">\n @for (row of rows(); track row.key) {\n <li\n data-part=\"item\"\n [attr.data-view]=\"row.key\"\n [attr.data-current]=\"row.current ? '' : null\"\n [attr.data-default]=\"row.isDefault ? '' : null\"\n [attr.data-built-in]=\"row.view === null ? '' : null\"\n [attr.data-editing]=\"editingKind(row) !== null ? '' : null\"\n >\n @switch (editingKind(row)) {\n @case ('rename') {\n <ng-container\n [ngTemplateOutlet]=\"nameForm\"\n [ngTemplateOutletContext]=\"{ kind: 'rename', name: row.name }\"\n />\n }\n @case ('delete') {\n <div\n data-part=\"confirm\"\n role=\"group\"\n [attr.aria-labelledby]=\"panelId + '-confirm-' + row.key\"\n >\n <p [id]=\"panelId + '-confirm-' + row.key\">\n {{ t('confirmDelete', { name: row.name }) }}\n </p>\n <div data-buttons>\n <button\n slButton\n data-cancel\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n (click)=\"cancelEditing()\"\n >\n {{ t('cancel') }}\n </button>\n <button\n slButton\n size=\"sm\"\n tone=\"danger\"\n (click)=\"confirmDelete(row.key, $event)\"\n >\n {{ t('delete') }}\n </button>\n </div>\n </div>\n }\n @default {\n <button\n data-part=\"apply\"\n type=\"button\"\n [attr.aria-current]=\"row.current ? 'true' : null\"\n (click)=\"apply(row.id, pressReason($event), $event)\"\n >\n @if (row.current) {\n <span slIcon size=\"sm\"><svg slGlyph name=\"check\"></svg></span>\n }\n <span data-label>{{ row.name }}</span>\n @if (row.isDefault) {\n <span data-part=\"default-mark\"\n ><span slIcon size=\"sm\"><svg slGlyph name=\"pin\"></svg></span\n ><span>{{ t('isDefault') }}</span></span\n >\n }\n </button>\n <button\n type=\"button\"\n data-part=\"actions\"\n slSavedViewsPart=\"actions\"\n [slMenuTriggerFor]=\"menu\"\n [attr.aria-label]=\"t('actions', { name: row.name })\"\n >\n <span slIcon size=\"md\"><svg slGlyph name=\"ellipsis\"></svg></span>\n </button>\n <sl-menu #menu>\n @if (row.view; as view) {\n <button slMenuItem (select)=\"startRename(view)\">\n {{ t('rename') }}\n </button>\n }\n <button\n slMenuItem\n [disabled]=\"row.isDefault\"\n (select)=\"setDefault(row.id, $event)\"\n >\n {{ t('setDefault') }}\n </button>\n @if (row.view; as view) {\n <button slMenuItem tone=\"danger\" (select)=\"startDelete(view)\">\n {{ t('delete') }}\n </button>\n }\n </sl-menu>\n }\n }\n </li>\n }\n </ul>\n @if (editing()?.kind === 'create') {\n <ng-container\n [ngTemplateOutlet]=\"nameForm\"\n [ngTemplateOutletContext]=\"{ kind: 'create', name: '' }\"\n />\n }\n <div data-part=\"footer\">\n <button\n slButton\n data-save-as\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n (click)=\"startCreate()\"\n >\n {{ t('saveAs') }}\n </button>\n <button slButton size=\"sm\" [disabled]=\"!canSave()\" (click)=\"save($event)\">\n {{ t('save') }}\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </ng-container>\n\n @if (modified()) {\n <button data-part=\"revert\" type=\"button\" (click)=\"revert($event)\">\n <!-- An arrow that turns back turns the other way in a right-to-left document. -->\n <span slIcon size=\"sm\" directional><svg slGlyph name=\"rotate-ccw\"></svg></span>\n {{ t('revert') }}\n </button>\n }\n\n <ng-template #nameForm let-kind=\"kind\" let-name=\"name\">\n <form\n data-part=\"form\"\n novalidate\n [attr.aria-label]=\"kind === 'create' ? t('saveAs') : t('renameView', { name: name })\"\n (submit)=\"submit($event)\"\n >\n <div slField size=\"sm\" [invalid]=\"error() !== null\">\n <label slFieldLabel>{{ t('name') }}</label>\n <div slTextField size=\"sm\">\n <input\n slTextFieldInput\n autocomplete=\"off\"\n [value]=\"draft()\"\n (valueChange)=\"onDraft($event.value)\"\n />\n </div>\n @if (error(); as reason) {\n <span slFieldError>{{ reason === 'empty' ? t('empty') : t('duplicate') }}</span>\n }\n </div>\n <div data-buttons>\n <button\n slButton\n data-cancel\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n (click)=\"cancelEditing()\"\n >\n {{ t('cancel') }}\n </button>\n <button slButton type=\"submit\" size=\"sm\">\n {{ kind === 'create' ? t('create') : t('rename') }}\n </button>\n </div>\n </form>\n </ng-template>\n `,\n})\nexport class SlSavedViews {\n /** The view the grid shows now. */\n readonly current = input.required<GridView>();\n /** The built-in view: the application's defaults. */\n readonly builtIn = input.required<GridView>();\n /** The model, so a view is serialized and compared against the columns it names. */\n readonly columns = input<readonly GridColumn<never>[] | undefined>(undefined);\n /** The views. Two-way, so a template may bind it directly; cancel the request to hold it. */\n readonly state = model<SavedViewsState | undefined>(undefined);\n /** The views an unbound instance starts from. */\n readonly defaultState = input<SavedViewsState | undefined>(undefined);\n /** Whether the layer is open. Two-way. */\n readonly open = model<boolean | undefined>(undefined);\n readonly defaultOpen = input(false, { transform: booleanAttribute });\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * group's and the panel's name (`label`), the controls, the forms and the\n * announcements. A host `aria-label` names both instead.\n */\n readonly messages = input<PartialMessages<SavedViewsMessages> | undefined>(undefined);\n\n /** Every change to the views, carrying the action and the reason; cancellable. */\n readonly stateChangeRequest = output<SavedViewsRequest>();\n /** One output for one transition of the layer. */\n readonly openChangeRequest = output<ChangeRequest<boolean>>();\n /** After apply and revert: the view to write into the grid. */\n readonly viewApply = output<SavedViewApply>();\n\n private readonly injector = inject(Injector);\n private readonly host: HTMLElement = inject(ElementRef).nativeElement;\n protected readonly role = inject(new HostAttributeToken('role'), { optional: true }) ?? 'group';\n protected readonly writtenLabel = inject(new HostAttributeToken('aria-label'), {\n optional: true,\n });\n readonly panelId = `${inject(SlSavedViewsIdFactory).next()}-panel`;\n\n private readonly triggerRef = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n\n protected readonly editing = signal<Editing>(null);\n protected readonly draft = signal('');\n protected readonly error = signal<'empty' | 'duplicate' | null>(null);\n\n /** The family's words in the language in force, with this control's `messages` laid over them. */\n readonly t = injectMessages(savedViewsMessages, this.messages);\n readonly resolvedLabel = computed(() => this.writtenLabel ?? this.t('label'));\n readonly resolvedState = computed<SavedViewsState>(\n () => this.state() ?? this.defaultState() ?? emptySavedViews(),\n );\n readonly isOpen = computed(() => this.open() ?? this.defaultOpen());\n readonly active = computed(() => {\n const state = this.resolvedState();\n return state.views.find((view) => view.id === state.activeId) ?? null;\n });\n readonly activeView = computed<GridView>(() => {\n const active = this.active();\n return active ? parseGridView(active.view, this.columns()) : this.builtIn();\n });\n readonly modified = computed(\n () => !sameSavedView(this.current(), this.activeView(), this.columns()),\n );\n readonly activeName = computed(() => this.active()?.name ?? this.t('builtIn'));\n readonly canSave = computed(() => this.active() !== null && this.modified());\n readonly rows = computed<readonly Row[]>(() => {\n const state = this.resolvedState();\n return [\n {\n id: null,\n key: BUILT_IN_VIEW_ID,\n name: this.t('builtIn'),\n view: null,\n current: state.activeId === null,\n isDefault: state.defaultId === null,\n },\n ...state.views.map((view) => ({\n id: view.id,\n key: view.id,\n name: view.name,\n view,\n current: state.activeId === view.id,\n isDefault: state.defaultId === view.id,\n })),\n ];\n });\n\n /** A click the keyboard produced has no pointer detail. */\n protected pressReason(event: MouseEvent): 'pointer' | 'keyboard' {\n return event.detail === 0 ? 'keyboard' : 'pointer';\n }\n\n protected editingKind(row: Row): 'rename' | 'delete' | null {\n const editing = this.editing();\n if (editing === null || editing.kind === 'create' || editing.id !== row.id) return null;\n return editing.kind;\n }\n\n /** Opens the layer, carrying `programmatic`. */\n show() {\n this.setOpen(true, 'programmatic');\n }\n\n /** Closes the layer, carrying `programmatic`. */\n hide() {\n this.setOpen(false, 'programmatic');\n }\n\n /** Moves focus to the trigger. */\n focus() {\n this.triggerRef().nativeElement.focus();\n }\n\n /** Applies a view by id — `null` is the built-in view — carrying the reason. */\n apply(id: string | null, reason: SavedViewsReason = 'programmatic', source?: Event) {\n const state = this.resolvedState();\n const target = id === null ? null : (state.views.find((view) => view.id === id) ?? null);\n if (id !== null && target === null) return;\n const request = this.request(withActiveView(state, id), 'apply', reason, source);\n if (request === null) return;\n const view = target ? parseGridView(target.view, this.columns()) : this.builtIn();\n this.viewApply.emit({ view, request });\n this.announce(this.t('applied', { name: target?.name ?? this.t('builtIn') }));\n this.setOpen(\n false,\n reason === 'keyboard' || reason === 'pointer' ? reason : 'programmatic',\n source,\n );\n }\n\n protected revert(event: MouseEvent) {\n const request = this.request(this.resolvedState(), 'revert', this.pressReason(event), event);\n if (request === null) return;\n this.viewApply.emit({ view: this.activeView(), request });\n this.announce(this.t('applied', { name: this.activeName() }));\n this.focusAfterRender({ id: null, part: 'trigger' });\n }\n\n protected save(event: MouseEvent) {\n const active = this.active();\n if (active === null || !this.modified()) return;\n const reason = this.pressReason(event);\n const next = withViewSaved(\n this.resolvedState(),\n active.id,\n savedViewText(this.current(), this.columns()),\n );\n if (this.request(next, 'save', reason, event) === null) return;\n this.announce(this.t('saved', { name: active.name }));\n this.setOpen(false, reason, event);\n }\n\n protected setDefault(id: string | null, event: MenuSelectEvent) {\n const state = this.resolvedState();\n const request = this.request(withDefaultView(state, id), 'default', event.reason, event.source);\n if (request === null) return;\n const name = state.views.find((view) => view.id === id)?.name ?? this.t('builtIn');\n this.announce(this.t('defaultChanged', { name }));\n }\n\n protected startCreate() {\n this.editing.set({ kind: 'create' });\n this.draft.set('');\n this.error.set(null);\n this.focusAfterRender({ id: null, part: 'input' });\n }\n\n protected startRename(view: SavedView) {\n this.editing.set({ kind: 'rename', id: view.id });\n this.draft.set(view.name);\n this.error.set(null);\n this.focusAfterRender({ id: view.id, part: 'input' });\n }\n\n protected startDelete(view: SavedView) {\n this.editing.set({ kind: 'delete', id: view.id });\n this.error.set(null);\n this.focusAfterRender({ id: view.id, part: 'cancel' });\n }\n\n /** Cancelling returns focus to the control that opened the form. */\n protected cancelEditing() {\n const was = this.editing();\n this.closeForms();\n if (was === null) return;\n this.focusAfterRender(\n was.kind === 'create' ? { id: null, part: 'save-as' } : { id: was.id, part: 'actions' },\n );\n }\n\n protected onDraft(value: string | undefined) {\n this.draft.set(value ?? '');\n this.error.set(null);\n }\n\n protected submit(event: Event) {\n event.preventDefault();\n const editing = this.editing();\n if (editing === null || editing.kind === 'delete') return;\n const state = this.resolvedState();\n const name = this.draft().trim();\n const except = editing.kind === 'rename' ? editing.id : null;\n const builtIn = this.t('builtIn').trim().toLocaleLowerCase();\n if (name === '') this.error.set('empty');\n else if (isViewNameTaken(state, name, except) || name.toLocaleLowerCase() === builtIn) {\n this.error.set('duplicate');\n }\n if (this.error() !== null) {\n this.focusAfterRender({ id: except, part: 'input' } as FocusTarget);\n return;\n }\n if (editing.kind === 'create') {\n const id = newSavedViewId();\n const next = withViewCreated(state, name, savedViewText(this.current(), this.columns()), id);\n if (this.request(next, 'create', 'submit', event) === null) return;\n this.announce(this.t('saved', { name }));\n this.closeForms();\n this.focusAfterRender({ id, part: 'apply' });\n return;\n }\n if (\n this.request(withViewRenamed(state, editing.id, name), 'rename', 'submit', event) === null\n ) {\n return;\n }\n this.announce(this.t('renamed', { name }));\n this.closeForms();\n this.focusAfterRender({ id: editing.id, part: 'apply' });\n }\n\n protected confirmDelete(id: string, event: MouseEvent) {\n const state = this.resolvedState();\n const index = state.views.findIndex((view) => view.id === id);\n const view = state.views[index];\n if (view === undefined) return;\n if (this.request(withViewDeleted(state, id), 'delete', 'remove', event) === null) return;\n this.announce(this.t('deleted', { name: view.name }));\n this.closeForms();\n this.focusAfterRender({ id: state.views[index - 1]?.id ?? BUILT_IN_VIEW_ID, part: 'apply' });\n }\n\n /**\n * The dismissable layer asks in the capture phase. The popover's own move is\n * always refused here and replayed as this family's request, so the layer\n * follows one open state; a form open inside is cancelled first and the\n * close is refused.\n */\n protected onLayerRequest(request: ChangeRequest<boolean>) {\n request.cancel();\n if (!request.value && request.reason === 'escape' && this.editing() !== null) {\n this.cancelEditing();\n return;\n }\n this.setOpen(\n request.value,\n request.reason as SavedViewsOpenReason,\n request.source as Event | undefined,\n );\n }\n\n private setOpen(next: boolean, reason: SavedViewsOpenReason, source?: Event) {\n if (next === this.isOpen()) return;\n let cancelled = false;\n const request: ChangeRequest<boolean> = {\n value: next,\n previous: !next,\n reason,\n source,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n };\n this.openChangeRequest.emit(request);\n if (cancelled) return;\n this.open.set(next);\n if (!next) this.closeForms();\n }\n\n /** Asks for a new state. Not emitted when nothing would change; refused when cancelled. */\n private request(\n next: SavedViewsState,\n action: SavedViewsAction,\n reason: SavedViewsReason,\n source?: Event,\n ): SavedViewsRequest | null {\n const previous = this.resolvedState();\n let cancelled = false;\n const request: SavedViewsRequest = {\n value: next,\n previous,\n reason,\n action,\n source,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n };\n if (serializeSavedViews(next) === serializeSavedViews(previous)) return request;\n this.stateChangeRequest.emit(request);\n if (cancelled) return null;\n this.state.set(next);\n return request;\n }\n\n private closeForms() {\n this.editing.set(null);\n this.draft.set('');\n this.error.set(null);\n }\n\n private announce(text: string) {\n getLiveAnnouncer(this.host.ownerDocument).announce(text);\n }\n\n private focusAfterRender(target: FocusTarget) {\n afterNextRender(\n () => {\n if (target.part === 'trigger') {\n this.focus();\n return;\n }\n const panel = this.host.ownerDocument.getElementById(this.panelId);\n if (panel === null) return;\n const scope =\n target.id === null\n ? panel\n : ([...panel.querySelectorAll<HTMLElement>('[data-part=\"item\"]')].find(\n (item) => item.dataset['view'] === target.id,\n ) ?? null);\n const selector = {\n apply: '[data-part=\"apply\"]',\n actions: '[data-part=\"actions\"]',\n input: target.id === null ? ':scope > [data-part=\"form\"] input' : 'input',\n cancel: '[data-cancel]',\n 'save-as': '[data-save-as]',\n }[target.part];\n scope?.querySelector<HTMLElement>(selector)?.focus();\n },\n { injector: this.injector },\n );\n }\n}\n","import { effect, signal, untracked, type Injector, type WritableSignal } from '@angular/core';\nimport {\n parseGridView,\n parseSavedViews,\n serializeSavedViews,\n withActiveView,\n type GridColumn,\n type GridView,\n type GridViewStorage,\n type SavedViewsState,\n} from '@slotted/core/grid';\n\nexport interface PersistedSavedViewsOptions {\n /** The entry the views are kept under. */\n readonly key: string;\n /** Default `window.localStorage`; `null` keeps the views in memory only. */\n readonly storage?: GridViewStorage | null | undefined;\n /** The model, so the default view a visit opens on is parsed against it. */\n readonly columns?: readonly GridColumn<never>[] | undefined;\n /** Required outside an injection context. */\n readonly injector?: Injector | undefined;\n}\n\nexport interface PersistedSavedViews {\n /** Bind with `[(state)]`. */\n readonly state: WritableSignal<SavedViewsState>;\n /**\n * The default view this visit opened on, when the store held no view in use\n * and a default: the state already names it as active, and the grid still\n * has to be given it once. `null` otherwise.\n */\n readonly openedDefault: GridView | null;\n}\n\nfunction defaultStorage(): GridViewStorage | null {\n try {\n return typeof window === 'undefined' ? null : window.localStorage;\n } catch {\n return null;\n }\n}\n\n/**\n * A reader's saved views, kept across visits: read once from the store with\n * `parseSavedViews` — which is total, so a malformed entry is no views — and\n * written with `serializeSavedViews` after every change. A store that holds\n * no view in use and a default opens the visit on the default. The store is\n * reached inside `try` both ways, as `persistedGridView` reaches it.\n */\nexport function persistedSavedViews({\n key,\n storage,\n columns,\n injector,\n}: PersistedSavedViewsOptions): PersistedSavedViews {\n const store = storage === undefined ? defaultStorage() : storage;\n let text: string | null;\n try {\n text = store?.getItem(key) ?? null;\n } catch {\n text = null;\n }\n let initial = parseSavedViews(text);\n let openedDefault: GridView | null = null;\n if (initial.activeId === null && initial.defaultId !== null) {\n const opened = initial.views.find((view) => view.id === initial.defaultId);\n initial = withActiveView(initial, initial.defaultId);\n openedDefault = opened ? parseGridView(opened.view, columns) : null;\n }\n const state = signal<SavedViewsState>(initial);\n\n /* The first run is the read; every run after is a change to write. */\n let settled = false;\n effect(\n () => {\n const current = state();\n if (!settled) {\n settled = true;\n return;\n }\n untracked(() => {\n if (!store) return;\n try {\n store.setItem(key, serializeSavedViews(current));\n } catch {\n /* The store refused; the views stay in memory. */\n }\n });\n },\n injector ? { injector } : undefined,\n );\n\n return { state, openedDefault };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slotted-angular-saved-views.mjs","sources":["../../saved-views/src/saved-views-defaults.ts","../../saved-views/src/saved-views.ts","../../saved-views/src/persisted-saved-views.ts","../../saved-views/src/slotted-angular-saved-views.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport type { GridView, SavedViewsState } from '@slotted/core/grid';\nimport type { ChangeRequest } from '@slotted/core/state';\n\n/** What the reader did. One state object answers seven different presses. */\nexport type SavedViewsAction =\n 'apply' | 'save' | 'create' | 'rename' | 'delete' | 'default' | 'revert';\n\n/** Why the views moved. `submit` is a form; `remove` a confirmed delete. */\nexport type SavedViewsReason = 'pointer' | 'keyboard' | 'submit' | 'remove' | 'programmatic';\n\n/** Why the layer opened or closed: the popover's own reasons. */\nexport type SavedViewsOpenReason = Extract<\n ChangeRequest<boolean>['reason'],\n 'pointer' | 'keyboard' | 'escape' | 'outsidePress' | 'dismiss' | 'programmatic'\n>;\n\n/**\n * The request every change carries: the state asked for, the one it\n * replaces, the reason, what the reader did, the originating event, and a\n * refusal that stops the change before anything commits.\n */\nexport interface SavedViewsRequest {\n readonly value: SavedViewsState;\n readonly previous: SavedViewsState;\n readonly reason: SavedViewsReason;\n readonly action: SavedViewsAction;\n readonly source?: Event | undefined;\n readonly cancelled: boolean;\n /** Refuses the request. Nothing commits and no view is applied. */\n cancel(): void;\n}\n\n/** What `viewApply` emits: the view to write into the grid, and the request that caused it. */\nexport interface SavedViewApply {\n readonly view: GridView;\n readonly request: SavedViewsRequest;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SlSavedViewsIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-saved-views-${this.count}`;\n }\n}\n\nlet counter = 0;\n\n/** `crypto.randomUUID()` where the platform has it, and a counter otherwise. */\nexport function newSavedViewId(): string {\n const crypto = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (typeof crypto?.randomUUID === 'function') return crypto.randomUUID();\n counter += 1;\n return `view-${Date.now().toString(36)}-${counter}`;\n}\n","import { writeSelectorKey } from '@slotted/core/selector-key';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n HostAttributeToken,\n inject,\n Injector,\n input,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlField, SlFieldError, SlFieldLabel } from '@slotted/angular/field';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\nimport type { MenuSelectEvent } from '@slotted/angular/menu';\nimport {\n SlPopover,\n SlPopoverContent,\n SlPopoverLayer,\n SlPopoverTrigger,\n} from '@slotted/angular/popover';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\nimport {\n BUILT_IN_VIEW_ID,\n emptySavedViews,\n isViewNameTaken,\n parseGridView,\n sameSavedView,\n savedViewText,\n serializeSavedViews,\n withActiveView,\n withDefaultView,\n withViewCreated,\n withViewDeleted,\n withViewRenamed,\n withViewSaved,\n type GridColumn,\n type GridView,\n type SavedView,\n type SavedViewsState,\n} from '@slotted/core/grid';\nimport {\n type PartialMessages,\n savedViewsMessages,\n type SavedViewsMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport type { ChangeRequest } from '@slotted/core/state';\n\nimport {\n newSavedViewId,\n SlSavedViewsIdFactory,\n type SavedViewApply,\n type SavedViewsAction,\n type SavedViewsOpenReason,\n type SavedViewsReason,\n type SavedViewsRequest,\n} from './saved-views-defaults';\n\n/** What replaces a row, or opens above the footer. */\ntype Editing =\n { kind: 'create' } | { kind: 'rename'; id: string } | { kind: 'delete'; id: string } | null;\n\n/** Where focus goes after the render a change causes. */\ntype FocusTarget =\n | { id: string; part: 'apply' | 'actions' | 'input' | 'cancel' }\n | { id: null; part: 'input' | 'save-as' | 'trigger' };\n\n/** One row of the list: the built-in view has no id and no saved view. */\ninterface Row {\n readonly id: string | null;\n readonly key: string;\n readonly name: string;\n readonly view: SavedView | null;\n readonly current: boolean;\n readonly isDefault: boolean;\n}\n\n/**\n * `slMenuTriggerFor` binds `[attr.data-part]` and resolves it to `null` on a\n * trigger that is neither a bar's item nor a submenu's; a host binding of\n * `null` removes the part the template wrote. The part is written back after\n * the first change detection, where the constant binding is not applied again.\n */\n@Directive({ selector: '[slSavedViewsPart]', standalone: true })\nexport class SlSavedViewsPart {\n readonly slSavedViewsPart = input.required<string>();\n\n constructor() {\n const element: HTMLElement = inject(ElementRef).nativeElement;\n afterNextRender(() => writeSelectorKey(element, 'part', this.slSavedViewsPart()));\n }\n}\n\n/**\n * The named views of a grid, and the one in use: a trigger naming it, a mark\n * and a revert while the grid differs from it, and a popover listing every\n * view with its actions. The family applies nothing to a grid — it asks with\n * `stateChangeRequest` and hands the consumer the view to write through\n * `viewApply`.\n */\n@Component({\n selector: 'sl-saved-views',\n standalone: true,\n exportAs: 'slSavedViews',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrl: '../../../styles/src/saved-views/saved-views.css',\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlField,\n SlFieldError,\n SlFieldLabel,\n SlGlyph,\n SlIcon,\n SlMenu,\n SlMenuItem,\n SlMenuTrigger,\n SlPopover,\n SlPopoverContent,\n SlPopoverLayer,\n SlPopoverTrigger,\n SlSavedViewsPart,\n SlTextField,\n SlTextFieldInput,\n ],\n host: {\n 'data-ui': 'saved-views',\n 'data-ui-saved-views': '',\n 'data-part': 'root',\n 'data-part-root': '',\n '[attr.role]': 'role',\n '[attr.aria-label]': 'resolvedLabel()',\n '[attr.data-modified]': 'modified() ? \"\" : null',\n '[attr.data-open]': 'isOpen() ? \"\" : null',\n },\n template: `\n <ng-container\n slPopover\n initialFocus=\"[aria-current='true']\"\n [open]=\"isOpen()\"\n (openChangeRequest)=\"onLayerRequest($event)\"\n >\n <button\n #trigger\n slPopoverTrigger\n type=\"button\"\n data-part=\"trigger\"\n data-part-trigger=\"\"\n [attr.title]=\"activeName()\"\n >\n <span data-label>{{ activeName() }}</span>\n @if (modified()) {\n <span data-part=\"modified\" data-part-modified=\"\">{{ t('modified') }}</span>\n }\n <span slIcon size=\"md\"><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n\n <ng-template slPopoverLayer>\n <div slPopoverContent [attr.aria-label]=\"resolvedLabel()\">\n <!-- The family's identifier is on its own element rather than on\n the popover's: slPopoverContent names its own part. -->\n <div\n data-ui=\"saved-views\"\n data-ui-saved-views=\"\"\n data-part=\"panel\"\n data-part-panel=\"\"\n [id]=\"panelId\"\n >\n <ul data-part=\"list\" data-part-list=\"\" role=\"list\">\n @for (row of rows(); track row.key) {\n <li\n data-part=\"item\"\n data-part-item=\"\"\n [attr.data-view]=\"row.key\"\n [attr.data-current]=\"row.current ? '' : null\"\n [attr.data-default]=\"row.isDefault ? '' : null\"\n [attr.data-built-in]=\"row.view === null ? '' : null\"\n [attr.data-editing]=\"editingKind(row) !== null ? '' : null\"\n >\n @switch (editingKind(row)) {\n @case ('rename') {\n <ng-container\n [ngTemplateOutlet]=\"nameForm\"\n [ngTemplateOutletContext]=\"{ kind: 'rename', name: row.name }\"\n />\n }\n @case ('delete') {\n <div\n data-part=\"confirm\"\n data-part-confirm=\"\"\n role=\"group\"\n [attr.aria-labelledby]=\"panelId + '-confirm-' + row.key\"\n >\n <p [id]=\"panelId + '-confirm-' + row.key\">\n {{ t('confirmDelete', { name: row.name }) }}\n </p>\n <div data-buttons>\n <button\n slButton\n data-cancel\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n (click)=\"cancelEditing()\"\n >\n {{ t('cancel') }}\n </button>\n <button\n slButton\n size=\"sm\"\n tone=\"danger\"\n (click)=\"confirmDelete(row.key, $event)\"\n >\n {{ t('delete') }}\n </button>\n </div>\n </div>\n }\n @default {\n <button\n data-part=\"apply\"\n data-part-apply=\"\"\n type=\"button\"\n [attr.aria-current]=\"row.current ? 'true' : null\"\n (click)=\"apply(row.id, pressReason($event), $event)\"\n >\n @if (row.current) {\n <span slIcon size=\"sm\"><svg slGlyph name=\"check\"></svg></span>\n }\n <span data-label>{{ row.name }}</span>\n @if (row.isDefault) {\n <span data-part=\"default-mark\" data-part-default-mark=\"\"\n ><span slIcon size=\"sm\"><svg slGlyph name=\"pin\"></svg></span\n ><span>{{ t('isDefault') }}</span></span\n >\n }\n </button>\n <button\n type=\"button\"\n data-part=\"actions\"\n data-part-actions=\"\"\n slSavedViewsPart=\"actions\"\n [slMenuTriggerFor]=\"menu\"\n [attr.aria-label]=\"t('actions', { name: row.name })\"\n >\n <span slIcon size=\"md\"><svg slGlyph name=\"ellipsis\"></svg></span>\n </button>\n <sl-menu #menu>\n @if (row.view; as view) {\n <button slMenuItem (select)=\"startRename(view)\">\n {{ t('rename') }}\n </button>\n }\n <button\n slMenuItem\n [disabled]=\"row.isDefault\"\n (select)=\"setDefault(row.id, $event)\"\n >\n {{ t('setDefault') }}\n </button>\n @if (row.view; as view) {\n <button slMenuItem tone=\"danger\" (select)=\"startDelete(view)\">\n {{ t('delete') }}\n </button>\n }\n </sl-menu>\n }\n }\n </li>\n }\n </ul>\n @if (editing()?.kind === 'create') {\n <ng-container\n [ngTemplateOutlet]=\"nameForm\"\n [ngTemplateOutletContext]=\"{ kind: 'create', name: '' }\"\n />\n }\n <div data-part=\"footer\" data-part-footer=\"\">\n <button\n slButton\n data-save-as\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n (click)=\"startCreate()\"\n >\n {{ t('saveAs') }}\n </button>\n <button slButton size=\"sm\" [disabled]=\"!canSave()\" (click)=\"save($event)\">\n {{ t('save') }}\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </ng-container>\n\n @if (modified()) {\n <button data-part=\"revert\" data-part-revert=\"\" type=\"button\" (click)=\"revert($event)\">\n <!-- An arrow that turns back turns the other way in a right-to-left document. -->\n <span slIcon size=\"sm\" directional><svg slGlyph name=\"rotate-ccw\"></svg></span>\n {{ t('revert') }}\n </button>\n }\n\n <ng-template #nameForm let-kind=\"kind\" let-name=\"name\">\n <form\n data-part=\"form\"\n data-part-form=\"\"\n novalidate\n [attr.aria-label]=\"kind === 'create' ? t('saveAs') : t('renameView', { name: name })\"\n (submit)=\"submit($event)\"\n >\n <div slField size=\"sm\" [invalid]=\"error() !== null\">\n <label slFieldLabel>{{ t('name') }}</label>\n <div slTextField size=\"sm\">\n <input\n slTextFieldInput\n autocomplete=\"off\"\n [value]=\"draft()\"\n (valueChange)=\"onDraft($event.value)\"\n />\n </div>\n @if (error(); as reason) {\n <span slFieldError>{{ reason === 'empty' ? t('empty') : t('duplicate') }}</span>\n }\n </div>\n <div data-buttons>\n <button\n slButton\n data-cancel\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n (click)=\"cancelEditing()\"\n >\n {{ t('cancel') }}\n </button>\n <button slButton type=\"submit\" size=\"sm\">\n {{ kind === 'create' ? t('create') : t('rename') }}\n </button>\n </div>\n </form>\n </ng-template>\n `,\n})\nexport class SlSavedViews {\n /** The view the grid shows now. */\n readonly current = input.required<GridView>();\n /** The built-in view: the application's defaults. */\n readonly builtIn = input.required<GridView>();\n /** The model, so a view is serialized and compared against the columns it names. */\n readonly columns = input<readonly GridColumn<never>[] | undefined>(undefined);\n /** The views. Two-way, so a template may bind it directly; cancel the request to hold it. */\n readonly state = model<SavedViewsState | undefined>(undefined);\n /** The views an unbound instance starts from. */\n readonly defaultState = input<SavedViewsState | undefined>(undefined);\n /** Whether the layer is open. Two-way. */\n readonly open = model<boolean | undefined>(undefined);\n readonly defaultOpen = input(false, { transform: booleanAttribute });\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * group's and the panel's name (`label`), the controls, the forms and the\n * announcements. A host `aria-label` names both instead.\n */\n readonly messages = input<PartialMessages<SavedViewsMessages> | undefined>(undefined);\n\n /** Every change to the views, carrying the action and the reason; cancellable. */\n readonly stateChangeRequest = output<SavedViewsRequest>();\n /** One output for one transition of the layer. */\n readonly openChangeRequest = output<ChangeRequest<boolean>>();\n /** After apply and revert: the view to write into the grid. */\n readonly viewApply = output<SavedViewApply>();\n\n private readonly injector = inject(Injector);\n private readonly host: HTMLElement = inject(ElementRef).nativeElement;\n protected readonly role = inject(new HostAttributeToken('role'), { optional: true }) ?? 'group';\n protected readonly writtenLabel = inject(new HostAttributeToken('aria-label'), {\n optional: true,\n });\n readonly panelId = `${inject(SlSavedViewsIdFactory).next()}-panel`;\n\n private readonly triggerRef = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n\n protected readonly editing = signal<Editing>(null);\n protected readonly draft = signal('');\n protected readonly error = signal<'empty' | 'duplicate' | null>(null);\n\n /** The family's words in the language in force, with this control's `messages` laid over them. */\n readonly t = injectMessages(savedViewsMessages, this.messages);\n readonly resolvedLabel = computed(() => this.writtenLabel ?? this.t('label'));\n readonly resolvedState = computed<SavedViewsState>(\n () => this.state() ?? this.defaultState() ?? emptySavedViews(),\n );\n readonly isOpen = computed(() => this.open() ?? this.defaultOpen());\n readonly active = computed(() => {\n const state = this.resolvedState();\n return state.views.find((view) => view.id === state.activeId) ?? null;\n });\n readonly activeView = computed<GridView>(() => {\n const active = this.active();\n return active ? parseGridView(active.view, this.columns()) : this.builtIn();\n });\n readonly modified = computed(\n () => !sameSavedView(this.current(), this.activeView(), this.columns()),\n );\n readonly activeName = computed(() => this.active()?.name ?? this.t('builtIn'));\n readonly canSave = computed(() => this.active() !== null && this.modified());\n readonly rows = computed<readonly Row[]>(() => {\n const state = this.resolvedState();\n return [\n {\n id: null,\n key: BUILT_IN_VIEW_ID,\n name: this.t('builtIn'),\n view: null,\n current: state.activeId === null,\n isDefault: state.defaultId === null,\n },\n ...state.views.map((view) => ({\n id: view.id,\n key: view.id,\n name: view.name,\n view,\n current: state.activeId === view.id,\n isDefault: state.defaultId === view.id,\n })),\n ];\n });\n\n /** A click the keyboard produced has no pointer detail. */\n protected pressReason(event: MouseEvent): 'pointer' | 'keyboard' {\n return event.detail === 0 ? 'keyboard' : 'pointer';\n }\n\n protected editingKind(row: Row): 'rename' | 'delete' | null {\n const editing = this.editing();\n if (editing === null || editing.kind === 'create' || editing.id !== row.id) return null;\n return editing.kind;\n }\n\n /** Opens the layer, carrying `programmatic`. */\n show() {\n this.setOpen(true, 'programmatic');\n }\n\n /** Closes the layer, carrying `programmatic`. */\n hide() {\n this.setOpen(false, 'programmatic');\n }\n\n /** Moves focus to the trigger. */\n focus() {\n this.triggerRef().nativeElement.focus();\n }\n\n /** Applies a view by id — `null` is the built-in view — carrying the reason. */\n apply(id: string | null, reason: SavedViewsReason = 'programmatic', source?: Event) {\n const state = this.resolvedState();\n const target = id === null ? null : (state.views.find((view) => view.id === id) ?? null);\n if (id !== null && target === null) return;\n const request = this.request(withActiveView(state, id), 'apply', reason, source);\n if (request === null) return;\n const view = target ? parseGridView(target.view, this.columns()) : this.builtIn();\n this.viewApply.emit({ view, request });\n this.announce(this.t('applied', { name: target?.name ?? this.t('builtIn') }));\n this.setOpen(\n false,\n reason === 'keyboard' || reason === 'pointer' ? reason : 'programmatic',\n source,\n );\n }\n\n protected revert(event: MouseEvent) {\n const request = this.request(this.resolvedState(), 'revert', this.pressReason(event), event);\n if (request === null) return;\n this.viewApply.emit({ view: this.activeView(), request });\n this.announce(this.t('applied', { name: this.activeName() }));\n this.focusAfterRender({ id: null, part: 'trigger' });\n }\n\n protected save(event: MouseEvent) {\n const active = this.active();\n if (active === null || !this.modified()) return;\n const reason = this.pressReason(event);\n const next = withViewSaved(\n this.resolvedState(),\n active.id,\n savedViewText(this.current(), this.columns()),\n );\n if (this.request(next, 'save', reason, event) === null) return;\n this.announce(this.t('saved', { name: active.name }));\n this.setOpen(false, reason, event);\n }\n\n protected setDefault(id: string | null, event: MenuSelectEvent) {\n const state = this.resolvedState();\n const request = this.request(withDefaultView(state, id), 'default', event.reason, event.source);\n if (request === null) return;\n const name = state.views.find((view) => view.id === id)?.name ?? this.t('builtIn');\n this.announce(this.t('defaultChanged', { name }));\n }\n\n protected startCreate() {\n this.editing.set({ kind: 'create' });\n this.draft.set('');\n this.error.set(null);\n this.focusAfterRender({ id: null, part: 'input' });\n }\n\n protected startRename(view: SavedView) {\n this.editing.set({ kind: 'rename', id: view.id });\n this.draft.set(view.name);\n this.error.set(null);\n this.focusAfterRender({ id: view.id, part: 'input' });\n }\n\n protected startDelete(view: SavedView) {\n this.editing.set({ kind: 'delete', id: view.id });\n this.error.set(null);\n this.focusAfterRender({ id: view.id, part: 'cancel' });\n }\n\n /** Cancelling returns focus to the control that opened the form. */\n protected cancelEditing() {\n const was = this.editing();\n this.closeForms();\n if (was === null) return;\n this.focusAfterRender(\n was.kind === 'create' ? { id: null, part: 'save-as' } : { id: was.id, part: 'actions' },\n );\n }\n\n protected onDraft(value: string | undefined) {\n this.draft.set(value ?? '');\n this.error.set(null);\n }\n\n protected submit(event: Event) {\n event.preventDefault();\n const editing = this.editing();\n if (editing === null || editing.kind === 'delete') return;\n const state = this.resolvedState();\n const name = this.draft().trim();\n const except = editing.kind === 'rename' ? editing.id : null;\n const builtIn = this.t('builtIn').trim().toLocaleLowerCase();\n if (name === '') this.error.set('empty');\n else if (isViewNameTaken(state, name, except) || name.toLocaleLowerCase() === builtIn) {\n this.error.set('duplicate');\n }\n if (this.error() !== null) {\n this.focusAfterRender({ id: except, part: 'input' } as FocusTarget);\n return;\n }\n if (editing.kind === 'create') {\n const id = newSavedViewId();\n const next = withViewCreated(state, name, savedViewText(this.current(), this.columns()), id);\n if (this.request(next, 'create', 'submit', event) === null) return;\n this.announce(this.t('saved', { name }));\n this.closeForms();\n this.focusAfterRender({ id, part: 'apply' });\n return;\n }\n if (\n this.request(withViewRenamed(state, editing.id, name), 'rename', 'submit', event) === null\n ) {\n return;\n }\n this.announce(this.t('renamed', { name }));\n this.closeForms();\n this.focusAfterRender({ id: editing.id, part: 'apply' });\n }\n\n protected confirmDelete(id: string, event: MouseEvent) {\n const state = this.resolvedState();\n const index = state.views.findIndex((view) => view.id === id);\n const view = state.views[index];\n if (view === undefined) return;\n if (this.request(withViewDeleted(state, id), 'delete', 'remove', event) === null) return;\n this.announce(this.t('deleted', { name: view.name }));\n this.closeForms();\n this.focusAfterRender({ id: state.views[index - 1]?.id ?? BUILT_IN_VIEW_ID, part: 'apply' });\n }\n\n /**\n * The dismissable layer asks in the capture phase. The popover's own move is\n * always refused here and replayed as this family's request, so the layer\n * follows one open state; a form open inside is cancelled first and the\n * close is refused.\n */\n protected onLayerRequest(request: ChangeRequest<boolean>) {\n request.cancel();\n if (!request.value && request.reason === 'escape' && this.editing() !== null) {\n this.cancelEditing();\n return;\n }\n this.setOpen(\n request.value,\n request.reason as SavedViewsOpenReason,\n request.source as Event | undefined,\n );\n }\n\n private setOpen(next: boolean, reason: SavedViewsOpenReason, source?: Event) {\n if (next === this.isOpen()) return;\n let cancelled = false;\n const request: ChangeRequest<boolean> = {\n value: next,\n previous: !next,\n reason,\n source,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n };\n this.openChangeRequest.emit(request);\n if (cancelled) return;\n this.open.set(next);\n if (!next) this.closeForms();\n }\n\n /** Asks for a new state. Not emitted when nothing would change; refused when cancelled. */\n private request(\n next: SavedViewsState,\n action: SavedViewsAction,\n reason: SavedViewsReason,\n source?: Event,\n ): SavedViewsRequest | null {\n const previous = this.resolvedState();\n let cancelled = false;\n const request: SavedViewsRequest = {\n value: next,\n previous,\n reason,\n action,\n source,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n };\n if (serializeSavedViews(next) === serializeSavedViews(previous)) return request;\n this.stateChangeRequest.emit(request);\n if (cancelled) return null;\n this.state.set(next);\n return request;\n }\n\n private closeForms() {\n this.editing.set(null);\n this.draft.set('');\n this.error.set(null);\n }\n\n private announce(text: string) {\n getLiveAnnouncer(this.host.ownerDocument).announce(text);\n }\n\n private focusAfterRender(target: FocusTarget) {\n afterNextRender(\n () => {\n if (target.part === 'trigger') {\n this.focus();\n return;\n }\n const panel = this.host.ownerDocument.getElementById(this.panelId);\n if (panel === null) return;\n const scope =\n target.id === null\n ? panel\n : ([...panel.querySelectorAll<HTMLElement>('[data-part=\"item\"]')].find(\n (item) => item.dataset['view'] === target.id,\n ) ?? null);\n const selector = {\n apply: '[data-part=\"apply\"]',\n actions: '[data-part=\"actions\"]',\n input: target.id === null ? ':scope > [data-part=\"form\"] input' : 'input',\n cancel: '[data-cancel]',\n 'save-as': '[data-save-as]',\n }[target.part];\n scope?.querySelector<HTMLElement>(selector)?.focus();\n },\n { injector: this.injector },\n );\n }\n}\n","import { effect, signal, untracked, type Injector, type WritableSignal } from '@angular/core';\nimport {\n parseGridView,\n parseSavedViews,\n serializeSavedViews,\n withActiveView,\n type GridColumn,\n type GridView,\n type GridViewStorage,\n type SavedViewsState,\n} from '@slotted/core/grid';\n\nexport interface PersistedSavedViewsOptions {\n /** The entry the views are kept under. */\n readonly key: string;\n /** Default `window.localStorage`; `null` keeps the views in memory only. */\n readonly storage?: GridViewStorage | null | undefined;\n /** The model, so the default view a visit opens on is parsed against it. */\n readonly columns?: readonly GridColumn<never>[] | undefined;\n /** Required outside an injection context. */\n readonly injector?: Injector | undefined;\n}\n\nexport interface PersistedSavedViews {\n /** Bind with `[(state)]`. */\n readonly state: WritableSignal<SavedViewsState>;\n /**\n * The default view this visit opened on, when the store held no view in use\n * and a default: the state already names it as active, and the grid still\n * has to be given it once. `null` otherwise.\n */\n readonly openedDefault: GridView | null;\n}\n\nfunction defaultStorage(): GridViewStorage | null {\n try {\n return typeof window === 'undefined' ? null : window.localStorage;\n } catch {\n return null;\n }\n}\n\n/**\n * A reader's saved views, kept across visits: read once from the store with\n * `parseSavedViews` — which is total, so a malformed entry is no views — and\n * written with `serializeSavedViews` after every change. A store that holds\n * no view in use and a default opens the visit on the default. The store is\n * reached inside `try` both ways, as `persistedGridView` reaches it.\n */\nexport function persistedSavedViews({\n key,\n storage,\n columns,\n injector,\n}: PersistedSavedViewsOptions): PersistedSavedViews {\n const store = storage === undefined ? defaultStorage() : storage;\n let text: string | null;\n try {\n text = store?.getItem(key) ?? null;\n } catch {\n text = null;\n }\n let initial = parseSavedViews(text);\n let openedDefault: GridView | null = null;\n if (initial.activeId === null && initial.defaultId !== null) {\n const opened = initial.views.find((view) => view.id === initial.defaultId);\n initial = withActiveView(initial, initial.defaultId);\n openedDefault = opened ? parseGridView(opened.view, columns) : null;\n }\n const state = signal<SavedViewsState>(initial);\n\n /* The first run is the read; every run after is a change to write. */\n let settled = false;\n effect(\n () => {\n const current = state();\n if (!settled) {\n settled = true;\n return;\n }\n untracked(() => {\n if (!store) return;\n try {\n store.setItem(key, serializeSavedViews(current));\n } catch {\n /* The store refused; the views stay in memory. */\n }\n });\n },\n injector ? { injector } : undefined,\n );\n\n return { state, openedDefault };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|