@slotted/angular 0.1.0-beta.8 → 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/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 +68 -26
- 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 +128 -51
- 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 +38 -12
- 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 +46 -14
- 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 +39 -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 +32 -24
- 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 +46 -12
- 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.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.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
|
@@ -68,7 +68,7 @@ class SlFormActions {
|
|
|
68
68
|
resolvedAlign = computed(() => this.align() ?? this.form?.resolvedAlign() ?? 'end', /* @ts-ignore */
|
|
69
69
|
...(ngDevMode ? [{ debugName: "resolvedAlign" }] : /* istanbul ignore next */ []));
|
|
70
70
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFormActions, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
71
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlFormActions, isStandalone: true, selector: "[slFormActions]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "form", "data-part": "actions" }, properties: { "attr.data-align": "resolvedAlign()" } }, exportAs: ["slFormActions"], ngImport: i0 });
|
|
71
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlFormActions, isStandalone: true, selector: "[slFormActions]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "form", "data-ui-form": "", "data-part": "actions", "data-part-actions": "" }, properties: { "attr.data-align": "resolvedAlign()" } }, exportAs: ["slFormActions"], ngImport: i0 });
|
|
72
72
|
}
|
|
73
73
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFormActions, decorators: [{
|
|
74
74
|
type: Directive,
|
|
@@ -79,7 +79,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
79
79
|
host: {
|
|
80
80
|
// The family's identifier on the part: its rules reach it by name, never as any descendant.
|
|
81
81
|
'data-ui': 'form',
|
|
82
|
+
'data-ui-form': '',
|
|
82
83
|
'data-part': 'actions',
|
|
84
|
+
'data-part-actions': '',
|
|
83
85
|
'[attr.data-align]': 'resolvedAlign()',
|
|
84
86
|
},
|
|
85
87
|
}]
|
|
@@ -120,26 +122,27 @@ class SlFormSummary {
|
|
|
120
122
|
target.focus();
|
|
121
123
|
}
|
|
122
124
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFormSummary, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
123
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlFormSummary, isStandalone: true, selector: "[slFormSummary]", host: { attributes: { "data-ui": "form", "data-part": "summary", "role": "alert", "tabindex": "-1" }, properties: { "attr.aria-labelledby": "form.summaryId()" } }, exportAs: ["slFormSummary"], ngImport: i0, template: `<h2 data-part="summary-title" [attr.id]="form.summaryId()">
|
|
125
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlFormSummary, isStandalone: true, selector: "[slFormSummary]", host: { attributes: { "data-ui": "form", "data-ui-form": "", "data-part": "summary", "data-part-summary": "", "role": "alert", "tabindex": "-1" }, properties: { "attr.aria-labelledby": "form.summaryId()" } }, exportAs: ["slFormSummary"], ngImport: i0, template: `<h2 data-part="summary-title" data-part-summary-title="" [attr.id]="form.summaryId()">
|
|
124
126
|
{{ form.resolvedSummaryTitle() }}
|
|
125
127
|
</h2>
|
|
126
128
|
@if (form.resolvedSummaryDescription(); as description) {
|
|
127
129
|
<p>{{ description }}</p>
|
|
128
130
|
}
|
|
129
|
-
<ul data-part="summary-list">
|
|
131
|
+
<ul data-part="summary-list" data-part-summary-list="">
|
|
130
132
|
@for (entry of form.entries(); track entry.name) {
|
|
131
133
|
@for (message of entry.messages; track message) {
|
|
132
134
|
<li>
|
|
133
135
|
@if (entry.id) {
|
|
134
136
|
<a
|
|
135
137
|
data-part="summary-item"
|
|
138
|
+
data-part-summary-item=""
|
|
136
139
|
[attr.href]="'#' + entry.id"
|
|
137
140
|
(click)="focus($event, entry.id)"
|
|
138
141
|
>
|
|
139
142
|
{{ message }}
|
|
140
143
|
</a>
|
|
141
144
|
} @else {
|
|
142
|
-
<span data-part="summary-item">{{ message }}</span>
|
|
145
|
+
<span data-part="summary-item" data-part-summary-item="">{{ message }}</span>
|
|
143
146
|
}
|
|
144
147
|
</li>
|
|
145
148
|
}
|
|
@@ -152,26 +155,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
152
155
|
selector: '[slFormSummary]',
|
|
153
156
|
standalone: true,
|
|
154
157
|
exportAs: 'slFormSummary',
|
|
155
|
-
template: `<h2 data-part="summary-title" [attr.id]="form.summaryId()">
|
|
158
|
+
template: `<h2 data-part="summary-title" data-part-summary-title="" [attr.id]="form.summaryId()">
|
|
156
159
|
{{ form.resolvedSummaryTitle() }}
|
|
157
160
|
</h2>
|
|
158
161
|
@if (form.resolvedSummaryDescription(); as description) {
|
|
159
162
|
<p>{{ description }}</p>
|
|
160
163
|
}
|
|
161
|
-
<ul data-part="summary-list">
|
|
164
|
+
<ul data-part="summary-list" data-part-summary-list="">
|
|
162
165
|
@for (entry of form.entries(); track entry.name) {
|
|
163
166
|
@for (message of entry.messages; track message) {
|
|
164
167
|
<li>
|
|
165
168
|
@if (entry.id) {
|
|
166
169
|
<a
|
|
167
170
|
data-part="summary-item"
|
|
171
|
+
data-part-summary-item=""
|
|
168
172
|
[attr.href]="'#' + entry.id"
|
|
169
173
|
(click)="focus($event, entry.id)"
|
|
170
174
|
>
|
|
171
175
|
{{ message }}
|
|
172
176
|
</a>
|
|
173
177
|
} @else {
|
|
174
|
-
<span data-part="summary-item">{{ message }}</span>
|
|
178
|
+
<span data-part="summary-item" data-part-summary-item="">{{ message }}</span>
|
|
175
179
|
}
|
|
176
180
|
</li>
|
|
177
181
|
}
|
|
@@ -182,7 +186,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
182
186
|
host: {
|
|
183
187
|
// The family's identifier on the part: its rules reach it by name, never as any descendant.
|
|
184
188
|
'data-ui': 'form',
|
|
189
|
+
'data-ui-form': '',
|
|
185
190
|
'data-part': 'summary',
|
|
191
|
+
'data-part-summary': '',
|
|
186
192
|
role: 'alert',
|
|
187
193
|
tabindex: '-1',
|
|
188
194
|
'[attr.aria-labelledby]': 'form.summaryId()',
|
|
@@ -545,10 +551,10 @@ class SlForm {
|
|
|
545
551
|
inject(DestroyRef).onDestroy(() => window.removeEventListener('beforeunload', onBeforeUnload));
|
|
546
552
|
}
|
|
547
553
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlForm, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
548
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlForm, isStandalone: true, selector: "form[slForm]", inputs: { errorsInput: { classPropertyName: "errorsInput", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, defaultErrors: { classPropertyName: "defaultErrors", publicName: "defaultErrors", isSignal: true, isRequired: false, transformFunction: null }, validate: { classPropertyName: "validate", publicName: "validate", isSignal: true, isRequired: false, transformFunction: null }, errorFocus: { classPropertyName: "errorFocus", publicName: "errorFocus", isSignal: true, isRequired: false, transformFunction: null }, summary: { classPropertyName: "summary", publicName: "summary", isSignal: true, isRequired: false, transformFunction: null }, summaryDescription: { classPropertyName: "summaryDescription", publicName: "summaryDescription", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null }, nativeValidation: { classPropertyName: "nativeValidation", publicName: "nativeValidation", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, guardUnsaved: { classPropertyName: "guardUnsaved", publicName: "guardUnsaved", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { errorsChange: "errorsChange", formSubmit: "formSubmit" }, host: { attributes: { "data-ui": "form", "data-part": "root" }, listeners: { "submit": "onSubmit($event)", "reset": "onReset()", "input": "onInput($event)", "focusout": "onFocusOut($event)" }, properties: { "attr.novalidate": "resolvedNativeValidation() ? null : ''", "attr.aria-busy": "submitting() ? 'true' : null", "attr.data-invalid": "hasAnyError() ? '' : null", "attr.data-loading": "submitting() ? '' : null", "attr.data-disabled": "disabled() ? '' : null" } }, providers: [{ provide: SlFormOwner, useExisting: forwardRef(() => SlForm) }], exportAs: ["slForm"], ngImport: i0, template: `@if (showsOwnSummary()) {
|
|
554
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlForm, isStandalone: true, selector: "form[slForm]", inputs: { errorsInput: { classPropertyName: "errorsInput", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, defaultErrors: { classPropertyName: "defaultErrors", publicName: "defaultErrors", isSignal: true, isRequired: false, transformFunction: null }, validate: { classPropertyName: "validate", publicName: "validate", isSignal: true, isRequired: false, transformFunction: null }, errorFocus: { classPropertyName: "errorFocus", publicName: "errorFocus", isSignal: true, isRequired: false, transformFunction: null }, summary: { classPropertyName: "summary", publicName: "summary", isSignal: true, isRequired: false, transformFunction: null }, summaryDescription: { classPropertyName: "summaryDescription", publicName: "summaryDescription", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null }, nativeValidation: { classPropertyName: "nativeValidation", publicName: "nativeValidation", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, guardUnsaved: { classPropertyName: "guardUnsaved", publicName: "guardUnsaved", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { errorsChange: "errorsChange", formSubmit: "formSubmit" }, host: { attributes: { "data-ui": "form", "data-ui-form": "", "data-part": "root", "data-part-root": "" }, listeners: { "submit": "onSubmit($event)", "reset": "onReset()", "input": "onInput($event)", "focusout": "onFocusOut($event)" }, properties: { "attr.novalidate": "resolvedNativeValidation() ? null : ''", "attr.aria-busy": "submitting() ? 'true' : null", "attr.data-invalid": "hasAnyError() ? '' : null", "attr.data-loading": "submitting() ? '' : null", "attr.data-disabled": "disabled() ? '' : null" } }, providers: [{ provide: SlFormOwner, useExisting: forwardRef(() => SlForm) }], exportAs: ["slForm"], ngImport: i0, template: `@if (showsOwnSummary()) {
|
|
549
555
|
<div slFormSummary></div>
|
|
550
556
|
}
|
|
551
|
-
<ng-content />`, isInline: true, styles: ["@layer slotted.components{[data-ui
|
|
557
|
+
<ng-content />`, isInline: true, styles: ["@layer slotted.components{[data-ui-form][data-part-root]{--_font-size: var(--slotted-control-font-size-md, 13px);container-name:slotted-form;container-type:inline-size;color:var(--slotted-form-color, var(--slotted-text, CanvasText));display:block;font-family:var(--slotted-control-font-family, system-ui, sans-serif);inline-size:100%;min-inline-size:0}[data-ui-form][data-part-root][data-loading]{cursor:progress}[data-ui-form][data-part-summary]{background-color:var(--slotted-form-summary-background, var(--slotted-tone-danger-surface));border:var(--slotted-control-border-width, 1px) solid var(--slotted-form-summary-border-color, var(--slotted-tone-danger-border));border-inline-start-width:var(--slotted-border-width-thick, 2px);border-radius:var(--slotted-form-summary-radius, var(--slotted-radius-md, 6px));color:var(--slotted-form-summary-color, var(--slotted-tone-danger-text));display:block;font-size:var(--_font-size);margin-block-end:var(--slotted-space-6, 1rem);padding-block:var(--slotted-space-5, .75rem);padding-inline:var(--slotted-space-6, 1rem)}[data-ui-form][data-part-summary]: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-form][data-part-summary]>[data-part-summary-title]{font-family:var( --slotted-font-family-heading, var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif) );font-size:var(--_font-size);font-weight:var(--slotted-font-weight-semibold, 600);line-height:var(--slotted-line-height-md, 1.5);margin:0}[data-ui-form][data-part-summary]>[data-part-summary-list]{display:flex;flex-direction:column;gap:var(--slotted-space-2, .25rem);line-height:var(--slotted-line-height-sm, 1.45);list-style:none;margin-block:var(--slotted-space-3, .375rem) 0;max-block-size:calc(12em * var(--slotted-line-height-sm, 1.45));overflow-y:auto;padding-block:var(--slotted-space-1, .125rem);padding-inline-start:0}[data-ui-form][data-part-summary]>[data-part-summary-list]>li>[data-part-summary-item]{color:inherit;text-decoration-line:underline;text-underline-offset:var(--slotted-space-1, .125rem)}[data-ui-form][data-part-summary]>[data-part-summary-list]>li>[data-part-summary-item]:hover:not(:disabled){text-decoration-thickness:var(--slotted-border-width-thick, 2px)}[data-ui-form][data-part-summary]>[data-part-summary-list]>li>[data-part-summary-item]:focus-visible{border-radius:var(--slotted-radius-xs, 2px);outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui-form][data-part-actions]{display:flex;flex-wrap:wrap;gap:var(--slotted-space-4, .5rem);justify-content:flex-end;margin-block-start:var(--slotted-space-8, 1.5rem)}[data-ui-form][data-part-actions][data-align=start]{justify-content:flex-start}[data-ui-form][data-part-actions][data-align=between]{justify-content:space-between}[data-ui-form][data-part-actions][data-align=stretch]>*{flex:1 1 0}@container slotted-form (max-width: 360px){[data-ui-form][data-part-actions]{flex-direction:column-reverse}[data-ui-form][data-part-actions]>*{inline-size:100%}}@media(forced-colors:active){[data-ui-form][data-part-summary]{border-color:CanvasText;border-inline-start-color:Highlight}}}\n"], dependencies: [{ kind: "component", type: SlFormSummary, selector: "[slFormSummary]", exportAs: ["slFormSummary"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
552
558
|
}
|
|
553
559
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlForm, decorators: [{
|
|
554
560
|
type: Component,
|
|
@@ -557,7 +563,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
557
563
|
}
|
|
558
564
|
<ng-content />`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [{ provide: SlFormOwner, useExisting: forwardRef(() => SlForm) }], host: {
|
|
559
565
|
'data-ui': 'form',
|
|
566
|
+
'data-ui-form': '',
|
|
560
567
|
'data-part': 'root',
|
|
568
|
+
'data-part-root': '',
|
|
561
569
|
'[attr.novalidate]': "resolvedNativeValidation() ? null : ''",
|
|
562
570
|
'[attr.aria-busy]': "submitting() ? 'true' : null",
|
|
563
571
|
'[attr.data-invalid]': "hasAnyError() ? '' : null",
|
|
@@ -567,7 +575,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
567
575
|
'(reset)': 'onReset()',
|
|
568
576
|
'(input)': 'onInput($event)',
|
|
569
577
|
'(focusout)': 'onFocusOut($event)',
|
|
570
|
-
}, styles: ["@layer slotted.components{[data-ui
|
|
578
|
+
}, styles: ["@layer slotted.components{[data-ui-form][data-part-root]{--_font-size: var(--slotted-control-font-size-md, 13px);container-name:slotted-form;container-type:inline-size;color:var(--slotted-form-color, var(--slotted-text, CanvasText));display:block;font-family:var(--slotted-control-font-family, system-ui, sans-serif);inline-size:100%;min-inline-size:0}[data-ui-form][data-part-root][data-loading]{cursor:progress}[data-ui-form][data-part-summary]{background-color:var(--slotted-form-summary-background, var(--slotted-tone-danger-surface));border:var(--slotted-control-border-width, 1px) solid var(--slotted-form-summary-border-color, var(--slotted-tone-danger-border));border-inline-start-width:var(--slotted-border-width-thick, 2px);border-radius:var(--slotted-form-summary-radius, var(--slotted-radius-md, 6px));color:var(--slotted-form-summary-color, var(--slotted-tone-danger-text));display:block;font-size:var(--_font-size);margin-block-end:var(--slotted-space-6, 1rem);padding-block:var(--slotted-space-5, .75rem);padding-inline:var(--slotted-space-6, 1rem)}[data-ui-form][data-part-summary]: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-form][data-part-summary]>[data-part-summary-title]{font-family:var( --slotted-font-family-heading, var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif) );font-size:var(--_font-size);font-weight:var(--slotted-font-weight-semibold, 600);line-height:var(--slotted-line-height-md, 1.5);margin:0}[data-ui-form][data-part-summary]>[data-part-summary-list]{display:flex;flex-direction:column;gap:var(--slotted-space-2, .25rem);line-height:var(--slotted-line-height-sm, 1.45);list-style:none;margin-block:var(--slotted-space-3, .375rem) 0;max-block-size:calc(12em * var(--slotted-line-height-sm, 1.45));overflow-y:auto;padding-block:var(--slotted-space-1, .125rem);padding-inline-start:0}[data-ui-form][data-part-summary]>[data-part-summary-list]>li>[data-part-summary-item]{color:inherit;text-decoration-line:underline;text-underline-offset:var(--slotted-space-1, .125rem)}[data-ui-form][data-part-summary]>[data-part-summary-list]>li>[data-part-summary-item]:hover:not(:disabled){text-decoration-thickness:var(--slotted-border-width-thick, 2px)}[data-ui-form][data-part-summary]>[data-part-summary-list]>li>[data-part-summary-item]:focus-visible{border-radius:var(--slotted-radius-xs, 2px);outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui-form][data-part-actions]{display:flex;flex-wrap:wrap;gap:var(--slotted-space-4, .5rem);justify-content:flex-end;margin-block-start:var(--slotted-space-8, 1.5rem)}[data-ui-form][data-part-actions][data-align=start]{justify-content:flex-start}[data-ui-form][data-part-actions][data-align=between]{justify-content:space-between}[data-ui-form][data-part-actions][data-align=stretch]>*{flex:1 1 0}@container slotted-form (max-width: 360px){[data-ui-form][data-part-actions]{flex-direction:column-reverse}[data-ui-form][data-part-actions]>*{inline-size:100%}}@media(forced-colors:active){[data-ui-form][data-part-summary]{border-color:CanvasText;border-inline-start-color:Highlight}}}\n"] }]
|
|
571
579
|
}], ctorParameters: () => [], propDecorators: { errorsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], defaultErrors: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultErrors", required: false }] }], validate: [{ type: i0.Input, args: [{ isSignal: true, alias: "validate", required: false }] }], errorFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorFocus", required: false }] }], summary: [{ type: i0.Input, args: [{ isSignal: true, alias: "summary", required: false }] }], summaryDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "summaryDescription", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], nativeValidation: [{ type: i0.Input, args: [{ isSignal: true, alias: "nativeValidation", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], guardUnsaved: [{ type: i0.Input, args: [{ isSignal: true, alias: "guardUnsaved", required: false }] }], errorsChange: [{ type: i0.Output, args: ["errorsChange"] }], formSubmit: [{ type: i0.Output, args: ["formSubmit"] }] } });
|
|
572
580
|
function nameOf(target) {
|
|
573
581
|
if (!(target instanceof HTMLElement))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotted-angular-form.mjs","sources":["../../form/src/form-defaults.ts","../../form/src/form-actions.ts","../../form/src/form.ts","../../form/src/slotted-angular-form.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { Signal } from '@angular/core';\nimport type { FormErrorEntry, FormErrors } from '@slotted/core/form';\n\n/**\n * When the form checks its own controls. `submit` is the default and\n * re-validates on every change afterwards: telling a reader an answer is wrong\n * before they have finished writing it is noise, and telling them nothing after\n * they have fixed it is worse.\n */\nexport type FormValidate = 'submit' | 'blur' | 'change' | 'none';\n\n/** Where focus goes after a submit that found something wrong. */\nexport type FormErrorFocus = 'summary' | 'control' | 'none';\n\n/** Whether the family renders the summary itself. */\nexport type FormSummaryMode = 'auto' | 'none';\n\n/** How the action row is arranged along the inline axis. */\nexport type FormActionsAlign = 'end' | 'start' | 'between' | 'stretch';\n\nexport interface FormDefaults {\n align: FormActionsAlign;\n errorFocus: FormErrorFocus;\n nativeValidation: boolean;\n summary: FormSummaryMode;\n summaryDescription: string | undefined;\n validate: FormValidate;\n}\n\nconst FALLBACK: FormDefaults = {\n align: 'end',\n errorFocus: 'summary',\n nativeValidation: false,\n summary: 'auto',\n summaryDescription: undefined,\n validate: 'submit',\n};\n\nexport const FORM_DEFAULTS = new InjectionToken<FormDefaults>('slotted form defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its forms behave: when they validate, where\n * focus goes after a failed submit, and how its action row is arranged. A form\n * that states any of them itself still wins. The summary's heading comes from\n * the language in force (`provideSlotted`).\n */\nexport function provideFormDefaults(defaults: Partial<FormDefaults>) {\n return {\n provide: FORM_DEFAULTS,\n useFactory: (): FormDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectFormDefaults(): FormDefaults {\n return inject(FORM_DEFAULTS);\n}\n\n/** One validation failure Angular reported, as the registry receives it. */\nexport interface FormErrorMessageContext {\n /** The `name` the control is submitted under, which is the key in the group. */\n name: string;\n /** The key `AbstractControl.errors` used — `required`, `minlength`, and so on. */\n key: string;\n /** Whatever the validator put beside the key. */\n detail: unknown;\n}\n\n/**\n * How a Reactive Forms validation failure the application's own validator\n * reports becomes a sentence.\n *\n * Angular's validators report a key and a shape — `{ required: true }`,\n * `{ minlength: { requiredLength: 8, actualLength: 3 } }` — and never a\n * message. The built-in keys (`required`, `email`, `min`, `max`, `minlength`,\n * `maxlength`, `pattern`) are written by the `form` catalog's `errors.*`\n * messages in the language in force; a validator the application adds names\n * its own message here, and an entry for a built-in key replaces the catalog's.\n */\nexport type FormErrorMessages = Record<string, (context: FormErrorMessageContext) => string>;\n\nexport const SL_FORM_ERROR_MESSAGES = new InjectionToken<FormErrorMessages>(\n 'slotted form error messages',\n { providedIn: 'root', factory: () => ({}) },\n);\n\n/** Names the sentences the application's own validators are written as. */\nexport function provideFormErrorMessages(messages: FormErrorMessages) {\n return { provide: SL_FORM_ERROR_MESSAGES, useValue: messages };\n}\n\nexport function injectFormErrorMessages(): FormErrorMessages {\n return inject(SL_FORM_ERROR_MESSAGES);\n}\n\n/**\n * What the summary needs from the form around it.\n *\n * It is an abstract class rather than an import so the two classes can depend\n * on each other without a cycle — the shape `field` and `text-field` already\n * have.\n */\nexport abstract class SlFormOwner {\n abstract readonly entries: Signal<readonly FormErrorEntry[]>;\n abstract readonly errors: Signal<FormErrors>;\n abstract readonly summaryId: Signal<string>;\n abstract readonly resolvedSummaryTitle: Signal<string>;\n abstract readonly resolvedSummaryDescription: Signal<string | undefined>;\n abstract readonly resolvedAlign: Signal<FormActionsAlign>;\n /** Called by whichever summary is on the page, so focus can reach the region. */\n abstract registerSummary(element: HTMLElement | null): void;\n}\n","import { computed, Directive, inject, input } from '@angular/core';\n\nimport { SlFormOwner } from './form-defaults';\nimport type { FormActionsAlign } from './form-defaults';\n\n/**\n * The row a form's actions stand in.\n *\n * `inline` can end-align a row of buttons. What it cannot do without a query\n * the consumer writes for every form is the reflow: below the form's own\n * container width every action takes the whole width, in a column, with the\n * primary one first — a reader's thumb is at the bottom of a phone and their\n * eye at the end of a row.\n */\n@Directive({\n selector: '[slFormActions]',\n standalone: true,\n exportAs: 'slFormActions',\n host: {\n // The family's identifier on the part: its rules reach it by name, never as any descendant.\n 'data-ui': 'form',\n 'data-part': 'actions',\n '[attr.data-align]': 'resolvedAlign()',\n },\n})\nexport class SlFormActions {\n /** Defaults to the form's own `align`, then to the token, then to `end`. */\n readonly align = input<FormActionsAlign | undefined>(undefined);\n\n private readonly form = inject(SlFormOwner, { optional: true });\n\n protected readonly resolvedAlign = computed(\n () => this.align() ?? this.form?.resolvedAlign() ?? 'end',\n );\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { AfterViewInit, OnInit } from '@angular/core';\nimport { ControlContainer } from '@angular/forms';\nimport type { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport {\n collectValidity,\n hasErrors,\n isDirty,\n mergeErrors,\n namedControls,\n normaliseErrors,\n orderErrors,\n withoutError,\n} from '@slotted/core/form';\nimport type { FormErrorInput, FormErrors } from '@slotted/core/form';\nimport { formMessages, type FormMessages, type PartialMessages } from '@slotted/core/i18n';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\n\nimport { injectFormDefaults, injectFormErrorMessages, SlFormOwner } from './form-defaults';\nimport type {\n FormActionsAlign,\n FormErrorFocus,\n FormSummaryMode,\n FormValidate,\n} from './form-defaults';\n\nexport type {\n FormActionsAlign,\n FormDefaults,\n FormErrorFocus,\n FormErrorMessageContext,\n FormErrorMessages,\n FormSummaryMode,\n FormValidate,\n} from './form-defaults';\n\nlet summaryCounter = 0;\n\n/**\n * The summary of everything wrong with the form: a focusable region with a\n * heading, and a link per error pointing at the control it is about.\n *\n * It is the GOV.UK error summary, item for item — \"move keyboard focus to the\n * error summary\", \"include the heading\", \"link to each of the answers that have\n * validation errors\", \"make sure the error messages in the error summary are\n * worded the same as those which appear next to the inputs\". The last one is\n * free here: one map feeds the summary and the field.\n *\n * The form renders this itself under `summary=\"auto\"`. A consumer who wants it\n * somewhere else writes `summary=\"none\"` and puts `slFormSummary` on their own\n * element.\n */\n@Component({\n selector: '[slFormSummary]',\n standalone: true,\n exportAs: 'slFormSummary',\n template: `<h2 data-part=\"summary-title\" [attr.id]=\"form.summaryId()\">\n {{ form.resolvedSummaryTitle() }}\n </h2>\n @if (form.resolvedSummaryDescription(); as description) {\n <p>{{ description }}</p>\n }\n <ul data-part=\"summary-list\">\n @for (entry of form.entries(); track entry.name) {\n @for (message of entry.messages; track message) {\n <li>\n @if (entry.id) {\n <a\n data-part=\"summary-item\"\n [attr.href]=\"'#' + entry.id\"\n (click)=\"focus($event, entry.id)\"\n >\n {{ message }}\n </a>\n } @else {\n <span data-part=\"summary-item\">{{ message }}</span>\n }\n </li>\n }\n }\n </ul>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n // The family's identifier on the part: its rules reach it by name, never as any descendant.\n 'data-ui': 'form',\n 'data-part': 'summary',\n role: 'alert',\n tabindex: '-1',\n '[attr.aria-labelledby]': 'form.summaryId()',\n },\n})\nexport class SlFormSummary implements AfterViewInit {\n protected readonly form = inject(SlFormOwner);\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n ngAfterViewInit() {\n this.form.registerSummary(this.element);\n }\n\n /**\n * The fragment is not followed. A link that navigated would write the\n * control's identifier into the address bar and add an entry to the history\n * of a page that never left; focusing the control is the whole of what the\n * link is for, and the browser scrolls it into view with the focus.\n */\n protected focus(event: Event, id: string) {\n const target = this.element.ownerDocument.getElementById(id);\n if (target === null) return;\n event.preventDefault();\n target.focus();\n }\n}\n\n/**\n * A form, its errors and its row of actions.\n *\n * **It owns the errors and nothing else.** `docs/component-features.md` § 6 puts\n * the boundary there: the family coordinates submission, validation, global\n * messages and focus \"sem possuir o estado de cada framework\". Values come from\n * `FormData`, validity from `checkValidity()` and from Reactive Forms, and the\n * values themselves stay with whichever of the two owns them.\n *\n * **`novalidate` is written, and constraint validation still runs.** The\n * attribute stops the browser drawing its own bubble beside a control whose\n * error the `field` is already showing; `checkValidity()` is called explicitly\n * and each control's `validationMessage` is the platform's localized string.\n *\n * **Reactive Forms is the second source.** When there is a `ControlContainer`,\n * every control is marked touched at submit and each failing one becomes a\n * sentence: a built-in validator's through the catalog's `errors.*` messages,\n * an application's own through `SL_FORM_ERROR_MESSAGES`.\n *\n * **Signal Forms needs nothing here.** Angular 22's `[field]` binds a control\n * through its `ControlValueAccessor`, which every Slotted control provides, so\n * they work under it today and this family adds no second integration.\n */\n@Component({\n selector: 'form[slForm]',\n standalone: true,\n exportAs: 'slForm',\n imports: [SlFormSummary],\n template: `@if (showsOwnSummary()) {\n <div slFormSummary></div>\n }\n <ng-content />`,\n styleUrl: '../../../styles/src/form/form.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: SlFormOwner, useExisting: forwardRef(() => SlForm) }],\n host: {\n 'data-ui': 'form',\n 'data-part': 'root',\n '[attr.novalidate]': \"resolvedNativeValidation() ? null : ''\",\n '[attr.aria-busy]': \"submitting() ? 'true' : null\",\n '[attr.data-invalid]': \"hasAnyError() ? '' : null\",\n '[attr.data-loading]': \"submitting() ? '' : null\",\n '[attr.data-disabled]': \"disabled() ? '' : null\",\n '(submit)': 'onSubmit($event)',\n '(reset)': 'onReset()',\n '(input)': 'onInput($event)',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class SlForm implements SlFormOwner, OnInit {\n /**\n * Present means the consumer owns the error map, for the life of the\n * component. Keyed by the `name` attribute of the control each error is about.\n */\n readonly errorsInput = input<FormErrorInput | undefined>(undefined, { alias: 'errors' });\n /** The errors an uncontrolled form starts from, read once. */\n readonly defaultErrors = input<FormErrorInput | undefined>(undefined);\n\n readonly validate = input<FormValidate | undefined>(undefined);\n readonly errorFocus = input<FormErrorFocus | undefined>(undefined);\n readonly summary = input<FormSummaryMode | undefined>(undefined);\n readonly summaryDescription = input<string | undefined>(undefined);\n readonly align = input<FormActionsAlign | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * summary's heading (`summaryTitle`) and the built-in validators' sentences\n * (`errors.*`).\n */\n readonly messages = input<PartialMessages<FormMessages> | undefined>(undefined);\n /** Lets the browser draw its own validation bubble. Off by default. */\n readonly nativeValidation = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (raw) => (raw === undefined ? undefined : booleanAttribute(raw)),\n });\n /** Marks the form and every control in it as unavailable. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /**\n * Marks the form busy for work the family did not start — a mutation a\n * consumer's own client is running. It is merged with the family's own\n * submission, so either one puts the root in its busy state.\n */\n readonly loading = input(false, { transform: booleanAttribute });\n /**\n * Registers a `beforeunload` guard while anything in the form has been\n * edited. Off by default: a guard nobody asked for is a trap.\n */\n readonly guardUnsaved = input(false, { transform: booleanAttribute });\n\n /** One output for one transition, carrying the reason and `cancel()`. */\n readonly errorsChange = output<ChangeRequest<FormErrors>>();\n /**\n * Emitted when the form submits and nothing is wrong with it. The values are\n * read from `FormData`, and `errors` is how a handler publishes what a server\n * answered.\n */\n readonly formSubmit = output<{\n values: Record<string, FormDataEntryValue | FormDataEntryValue[]>;\n event: SubmitEvent;\n /** Publishes a server's answer, and moves focus the way a failed submit does. */\n errors: (errors: FormErrorInput) => void;\n /** Holds the form in its busy state until the promise settles. */\n pending: (work: Promise<FormErrorInput | void>) => void;\n }>();\n\n private readonly element = inject<ElementRef<HTMLFormElement>>(ElementRef).nativeElement;\n private readonly defaults = injectFormDefaults();\n private readonly errorMessages = injectFormErrorMessages();\n /** The family's words in the language in force, with this form's `messages` laid over them. */\n readonly t = injectMessages(formMessages, this.messages);\n /** The Reactive Forms group around this element, when a consumer wrote one. */\n private readonly container = inject(ControlContainer, { optional: true, self: true });\n private readonly writtenNoValidate = inject(new HostAttributeToken('novalidate'), {\n optional: true,\n });\n\n private readonly own = signal<FormErrors>({});\n private readonly controls = signal<{ name: string; id: string | undefined }[]>([]);\n private summaryElement: HTMLElement | null = null;\n /** Set when a publish should be followed by the focus a failed submit moves. */\n private pendingFocus = false;\n private readonly ownSubmitting = signal(false);\n /** Either the family's own submission or a consumer's own work. */\n protected readonly submitting = computed(() => this.ownSubmitting() || this.loading());\n private readonly submitted = signal(false);\n\n private readonly external = computed(() => normaliseErrors(this.errorsInput()));\n private readonly controlled = computed(() => this.errorsInput() !== undefined);\n\n readonly errors = computed(() => (this.controlled() ? this.external() : this.own()));\n readonly entries = computed(() => orderErrors(this.errors(), this.controls()));\n protected readonly hasAnyError = computed(() => hasErrors(this.errors()));\n\n readonly summaryId = signal(`slotted-form-summary-${(summaryCounter += 1)}`);\n readonly resolvedSummaryTitle = computed(() => this.t('summaryTitle'));\n readonly resolvedSummaryDescription = computed(\n () => this.summaryDescription() ?? this.defaults.summaryDescription,\n );\n readonly resolvedAlign = computed(() => this.align() ?? this.defaults.align);\n protected readonly resolvedValidate = computed(() => this.validate() ?? this.defaults.validate);\n protected readonly resolvedErrorFocus = computed(\n () => this.errorFocus() ?? this.defaults.errorFocus,\n );\n protected readonly resolvedSummary = computed(() => this.summary() ?? this.defaults.summary);\n protected readonly resolvedNativeValidation = computed(\n () =>\n this.nativeValidation() ??\n (this.writtenNoValidate === null ? this.defaults.nativeValidation : false),\n );\n protected readonly showsOwnSummary = computed(\n () => this.resolvedSummary() === 'auto' && this.entries().length > 0,\n );\n\n constructor() {\n this.attachUnloadGuard();\n }\n\n ngOnInit() {\n this.own.set(normaliseErrors(this.defaultErrors()));\n this.readControls();\n }\n\n /**\n * The summary says when it exists, and takes the focus a failed submit asked\n * for. The move waits for the region rather than racing it: the errors and\n * the element that shows them are published in the same change, and a\n * `focus()` called before the region rendered would land on nothing.\n */\n registerSummary(element: HTMLElement | null) {\n this.summaryElement = element;\n if (element === null || !this.pendingFocus) return;\n this.pendingFocus = false;\n element.focus();\n }\n\n /** Runs validation now and publishes what it found. */\n validateNow(): FormErrors {\n const found = this.collect();\n this.publish(found, 'programmatic', undefined);\n return found;\n }\n\n /** Submits as though the submit button had been pressed. */\n submit() {\n this.element.requestSubmit();\n }\n\n /** Resets the controls and clears the errors. */\n reset() {\n this.element.reset();\n }\n\n /** Moves focus where a failed submit would have moved it. */\n focusFirstError() {\n const focus = this.resolvedErrorFocus();\n if (focus === 'none') return;\n if (focus === 'summary' && this.summaryElement !== null) {\n this.summaryElement.focus();\n return;\n }\n const first = this.entries()[0];\n if (first === undefined) return;\n const control = this.element.elements.namedItem(first.name);\n const element = control instanceof RadioNodeList ? control[0] : control;\n if (element instanceof HTMLElement) element.focus();\n }\n\n protected onSubmit(event: SubmitEvent) {\n this.submitted.set(true);\n this.readControls();\n\n if (this.submitting()) {\n /* A second submit while one is pending is refused. */\n event.preventDefault();\n return;\n }\n\n const found = this.resolvedValidate() === 'none' ? this.external() : this.collect();\n\n if (hasErrors(found)) {\n event.preventDefault();\n this.publish(found, 'submit', event);\n return;\n }\n\n this.publish({}, 'submit', event);\n event.preventDefault();\n\n const data = new FormData(this.element);\n const values: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {};\n for (const key of new Set(data.keys())) {\n const all = data.getAll(key);\n values[key] = all.length > 1 ? all : (all[0] as FormDataEntryValue);\n }\n\n this.formSubmit.emit({\n values,\n event,\n errors: (errors) => this.publish(normaliseErrors(errors), 'submit', event),\n pending: (work) => {\n this.ownSubmitting.set(true);\n void work\n .then((settled) => {\n if (settled !== undefined && settled !== null) {\n this.publish(normaliseErrors(settled), 'submit', event);\n }\n })\n .finally(() => this.ownSubmitting.set(false));\n },\n });\n }\n\n protected onReset() {\n this.submitted.set(false);\n this.publish({}, 'clear', undefined);\n }\n\n /**\n * A server error is dropped when the control it names is edited. After a\n * failed submit under `validate=\"change\"`, the whole form is checked again\n * instead, because a reader who has seen the list is fixing it.\n */\n protected onInput(event: Event) {\n const name = nameOf(event.target);\n if (name === null) return;\n\n if (this.resolvedValidate() === 'change' && this.submitted()) {\n this.publish(this.collect(), 'keyboard', event, false);\n return;\n }\n const next = withoutError(this.errors(), name);\n if (next !== this.errors()) this.publish(next, 'keyboard', event, false);\n }\n\n /**\n * On blur only the control that lost focus is checked. Running the whole form\n * would tell a reader that six fields they have not reached yet are wrong,\n * which is the noise `validate=\"submit\"` exists to avoid.\n */\n protected onFocusOut(event: Event) {\n if (this.resolvedValidate() !== 'blur') return;\n const name = nameOf(event.target);\n if (name === null) return;\n\n const found = this.collect();\n const messages = found[name];\n const next =\n messages === undefined\n ? withoutError(this.errors(), name)\n : mergeErrors(this.errors(), { [name]: messages });\n if (next !== this.errors()) this.publish(next, 'keyboard', event, false);\n }\n\n /**\n * Three sources, latest last: whatever a server sent, the platform's own\n * constraint validation, and Reactive Forms.\n */\n private collect(): FormErrors {\n return mergeErrors(this.external(), collectValidity(this.element), this.angularErrors());\n }\n\n /**\n * Every failing control in the group around this form, as a sentence. Angular\n * reports a key and a shape and never a message, because a message is the\n * application's and so is its language; the registry is where it is written.\n */\n private angularErrors(): FormErrors {\n const group = this.container?.control as FormGroup | FormArray | null | undefined;\n if (group === null || group === undefined) return {};\n group.markAllAsTouched();\n\n const found: Record<string, string[]> = {};\n for (const [name, control] of Object.entries(\n group.controls as Record<string, AbstractControl>,\n )) {\n const errors = control.errors;\n if (errors === null || control.disabled) continue;\n const messages = Object.entries(errors)\n .map(\n ([key, detail]) =>\n this.errorMessages[key]?.({ name, key, detail }) ?? this.builtInMessage(key, detail),\n )\n .filter((message): message is string => typeof message === 'string');\n if (messages.length > 0) found[name] = messages;\n }\n return found;\n }\n\n /**\n * The sentence for one of Angular's own validators, from the catalog; for a\n * key the catalog does not know, nothing — the application's validator names\n * its own message through `SL_FORM_ERROR_MESSAGES`.\n */\n private builtInMessage(key: string, detail: unknown): string | undefined {\n const shape = (detail ?? {}) as { min?: unknown; max?: unknown; requiredLength?: unknown };\n switch (key) {\n case 'required':\n return this.t('errors.required');\n case 'email':\n return this.t('errors.email');\n case 'min':\n return this.t('errors.min', { min: Number(shape.min) });\n case 'max':\n return this.t('errors.max', { max: Number(shape.max) });\n case 'minlength':\n return this.t('errors.minlength', { length: Number(shape.requiredLength) });\n case 'maxlength':\n return this.t('errors.maxlength', { length: Number(shape.requiredLength) });\n case 'pattern':\n return this.t('errors.pattern');\n default:\n return undefined;\n }\n }\n\n private readControls() {\n this.controls.set(namedControls(this.element));\n }\n\n private publish(\n next: FormErrors,\n reason: ChangeReason,\n source: Event | undefined,\n moveFocus = true,\n ) {\n this.readControls();\n\n let cancelled = false;\n const state = createControllable<FormErrors>({\n controlled: undefined,\n initial: this.errors(),\n equals: sameErrors,\n onRequest: (pending) => {\n this.errorsChange.emit(pending);\n cancelled = pending.cancelled;\n },\n });\n state.request(next, reason, source);\n if (cancelled) return;\n\n if (!this.controlled()) this.own.set(next);\n\n if (!moveFocus || !hasErrors(next) || this.resolvedErrorFocus() === 'none') return;\n /* A summary that has not been rendered yet takes the focus when it is, and\n one that is already on the page takes it now. */\n if (this.resolvedErrorFocus() === 'summary' && this.summaryElement === null) {\n this.pendingFocus = true;\n return;\n }\n this.focusFirstError();\n }\n\n /**\n * The guard nobody else ships. It is off by default, because a page that\n * refuses to close after a reader typed one character is a trap.\n */\n private attachUnloadGuard() {\n const onBeforeUnload = (event: BeforeUnloadEvent) => {\n if (!this.guardUnsaved() || this.submitting()) return;\n if (!isDirty(this.element)) return;\n event.preventDefault();\n };\n\n window.addEventListener('beforeunload', onBeforeUnload);\n inject(DestroyRef).onDestroy(() => window.removeEventListener('beforeunload', onBeforeUnload));\n }\n}\n\nfunction nameOf(target: EventTarget | null): string | null {\n if (!(target instanceof HTMLElement)) return null;\n const name = (target as { name?: string }).name;\n return typeof name === 'string' && name !== '' ? name : null;\n}\n\nfunction sameErrors(a: FormErrors, b: FormErrors) {\n const names = Object.keys(a);\n if (names.length !== Object.keys(b).length) return false;\n return names.every(\n (name) =>\n b[name] !== undefined &&\n a[name]!.length === b[name]!.length &&\n a[name]!.every((message, index) => message === b[name]![index]),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slotted-angular-form.mjs","sources":["../../form/src/form-defaults.ts","../../form/src/form-actions.ts","../../form/src/form.ts","../../form/src/slotted-angular-form.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { Signal } from '@angular/core';\nimport type { FormErrorEntry, FormErrors } from '@slotted/core/form';\n\n/**\n * When the form checks its own controls. `submit` is the default and\n * re-validates on every change afterwards: telling a reader an answer is wrong\n * before they have finished writing it is noise, and telling them nothing after\n * they have fixed it is worse.\n */\nexport type FormValidate = 'submit' | 'blur' | 'change' | 'none';\n\n/** Where focus goes after a submit that found something wrong. */\nexport type FormErrorFocus = 'summary' | 'control' | 'none';\n\n/** Whether the family renders the summary itself. */\nexport type FormSummaryMode = 'auto' | 'none';\n\n/** How the action row is arranged along the inline axis. */\nexport type FormActionsAlign = 'end' | 'start' | 'between' | 'stretch';\n\nexport interface FormDefaults {\n align: FormActionsAlign;\n errorFocus: FormErrorFocus;\n nativeValidation: boolean;\n summary: FormSummaryMode;\n summaryDescription: string | undefined;\n validate: FormValidate;\n}\n\nconst FALLBACK: FormDefaults = {\n align: 'end',\n errorFocus: 'summary',\n nativeValidation: false,\n summary: 'auto',\n summaryDescription: undefined,\n validate: 'submit',\n};\n\nexport const FORM_DEFAULTS = new InjectionToken<FormDefaults>('slotted form defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its forms behave: when they validate, where\n * focus goes after a failed submit, and how its action row is arranged. A form\n * that states any of them itself still wins. The summary's heading comes from\n * the language in force (`provideSlotted`).\n */\nexport function provideFormDefaults(defaults: Partial<FormDefaults>) {\n return {\n provide: FORM_DEFAULTS,\n useFactory: (): FormDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectFormDefaults(): FormDefaults {\n return inject(FORM_DEFAULTS);\n}\n\n/** One validation failure Angular reported, as the registry receives it. */\nexport interface FormErrorMessageContext {\n /** The `name` the control is submitted under, which is the key in the group. */\n name: string;\n /** The key `AbstractControl.errors` used — `required`, `minlength`, and so on. */\n key: string;\n /** Whatever the validator put beside the key. */\n detail: unknown;\n}\n\n/**\n * How a Reactive Forms validation failure the application's own validator\n * reports becomes a sentence.\n *\n * Angular's validators report a key and a shape — `{ required: true }`,\n * `{ minlength: { requiredLength: 8, actualLength: 3 } }` — and never a\n * message. The built-in keys (`required`, `email`, `min`, `max`, `minlength`,\n * `maxlength`, `pattern`) are written by the `form` catalog's `errors.*`\n * messages in the language in force; a validator the application adds names\n * its own message here, and an entry for a built-in key replaces the catalog's.\n */\nexport type FormErrorMessages = Record<string, (context: FormErrorMessageContext) => string>;\n\nexport const SL_FORM_ERROR_MESSAGES = new InjectionToken<FormErrorMessages>(\n 'slotted form error messages',\n { providedIn: 'root', factory: () => ({}) },\n);\n\n/** Names the sentences the application's own validators are written as. */\nexport function provideFormErrorMessages(messages: FormErrorMessages) {\n return { provide: SL_FORM_ERROR_MESSAGES, useValue: messages };\n}\n\nexport function injectFormErrorMessages(): FormErrorMessages {\n return inject(SL_FORM_ERROR_MESSAGES);\n}\n\n/**\n * What the summary needs from the form around it.\n *\n * It is an abstract class rather than an import so the two classes can depend\n * on each other without a cycle — the shape `field` and `text-field` already\n * have.\n */\nexport abstract class SlFormOwner {\n abstract readonly entries: Signal<readonly FormErrorEntry[]>;\n abstract readonly errors: Signal<FormErrors>;\n abstract readonly summaryId: Signal<string>;\n abstract readonly resolvedSummaryTitle: Signal<string>;\n abstract readonly resolvedSummaryDescription: Signal<string | undefined>;\n abstract readonly resolvedAlign: Signal<FormActionsAlign>;\n /** Called by whichever summary is on the page, so focus can reach the region. */\n abstract registerSummary(element: HTMLElement | null): void;\n}\n","import { computed, Directive, inject, input } from '@angular/core';\n\nimport { SlFormOwner } from './form-defaults';\nimport type { FormActionsAlign } from './form-defaults';\n\n/**\n * The row a form's actions stand in.\n *\n * `inline` can end-align a row of buttons. What it cannot do without a query\n * the consumer writes for every form is the reflow: below the form's own\n * container width every action takes the whole width, in a column, with the\n * primary one first — a reader's thumb is at the bottom of a phone and their\n * eye at the end of a row.\n */\n@Directive({\n selector: '[slFormActions]',\n standalone: true,\n exportAs: 'slFormActions',\n host: {\n // The family's identifier on the part: its rules reach it by name, never as any descendant.\n 'data-ui': 'form',\n 'data-ui-form': '',\n 'data-part': 'actions',\n 'data-part-actions': '',\n '[attr.data-align]': 'resolvedAlign()',\n },\n})\nexport class SlFormActions {\n /** Defaults to the form's own `align`, then to the token, then to `end`. */\n readonly align = input<FormActionsAlign | undefined>(undefined);\n\n private readonly form = inject(SlFormOwner, { optional: true });\n\n protected readonly resolvedAlign = computed(\n () => this.align() ?? this.form?.resolvedAlign() ?? 'end',\n );\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { AfterViewInit, OnInit } from '@angular/core';\nimport { ControlContainer } from '@angular/forms';\nimport type { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport {\n collectValidity,\n hasErrors,\n isDirty,\n mergeErrors,\n namedControls,\n normaliseErrors,\n orderErrors,\n withoutError,\n} from '@slotted/core/form';\nimport type { FormErrorInput, FormErrors } from '@slotted/core/form';\nimport { formMessages, type FormMessages, type PartialMessages } from '@slotted/core/i18n';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\n\nimport { injectFormDefaults, injectFormErrorMessages, SlFormOwner } from './form-defaults';\nimport type {\n FormActionsAlign,\n FormErrorFocus,\n FormSummaryMode,\n FormValidate,\n} from './form-defaults';\n\nexport type {\n FormActionsAlign,\n FormDefaults,\n FormErrorFocus,\n FormErrorMessageContext,\n FormErrorMessages,\n FormSummaryMode,\n FormValidate,\n} from './form-defaults';\n\nlet summaryCounter = 0;\n\n/**\n * The summary of everything wrong with the form: a focusable region with a\n * heading, and a link per error pointing at the control it is about.\n *\n * It is the GOV.UK error summary, item for item — \"move keyboard focus to the\n * error summary\", \"include the heading\", \"link to each of the answers that have\n * validation errors\", \"make sure the error messages in the error summary are\n * worded the same as those which appear next to the inputs\". The last one is\n * free here: one map feeds the summary and the field.\n *\n * The form renders this itself under `summary=\"auto\"`. A consumer who wants it\n * somewhere else writes `summary=\"none\"` and puts `slFormSummary` on their own\n * element.\n */\n@Component({\n selector: '[slFormSummary]',\n standalone: true,\n exportAs: 'slFormSummary',\n template: `<h2 data-part=\"summary-title\" data-part-summary-title=\"\" [attr.id]=\"form.summaryId()\">\n {{ form.resolvedSummaryTitle() }}\n </h2>\n @if (form.resolvedSummaryDescription(); as description) {\n <p>{{ description }}</p>\n }\n <ul data-part=\"summary-list\" data-part-summary-list=\"\">\n @for (entry of form.entries(); track entry.name) {\n @for (message of entry.messages; track message) {\n <li>\n @if (entry.id) {\n <a\n data-part=\"summary-item\"\n data-part-summary-item=\"\"\n [attr.href]=\"'#' + entry.id\"\n (click)=\"focus($event, entry.id)\"\n >\n {{ message }}\n </a>\n } @else {\n <span data-part=\"summary-item\" data-part-summary-item=\"\">{{ message }}</span>\n }\n </li>\n }\n }\n </ul>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n // The family's identifier on the part: its rules reach it by name, never as any descendant.\n 'data-ui': 'form',\n 'data-ui-form': '',\n 'data-part': 'summary',\n 'data-part-summary': '',\n role: 'alert',\n tabindex: '-1',\n '[attr.aria-labelledby]': 'form.summaryId()',\n },\n})\nexport class SlFormSummary implements AfterViewInit {\n protected readonly form = inject(SlFormOwner);\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n ngAfterViewInit() {\n this.form.registerSummary(this.element);\n }\n\n /**\n * The fragment is not followed. A link that navigated would write the\n * control's identifier into the address bar and add an entry to the history\n * of a page that never left; focusing the control is the whole of what the\n * link is for, and the browser scrolls it into view with the focus.\n */\n protected focus(event: Event, id: string) {\n const target = this.element.ownerDocument.getElementById(id);\n if (target === null) return;\n event.preventDefault();\n target.focus();\n }\n}\n\n/**\n * A form, its errors and its row of actions.\n *\n * **It owns the errors and nothing else.** `docs/component-features.md` § 6 puts\n * the boundary there: the family coordinates submission, validation, global\n * messages and focus \"sem possuir o estado de cada framework\". Values come from\n * `FormData`, validity from `checkValidity()` and from Reactive Forms, and the\n * values themselves stay with whichever of the two owns them.\n *\n * **`novalidate` is written, and constraint validation still runs.** The\n * attribute stops the browser drawing its own bubble beside a control whose\n * error the `field` is already showing; `checkValidity()` is called explicitly\n * and each control's `validationMessage` is the platform's localized string.\n *\n * **Reactive Forms is the second source.** When there is a `ControlContainer`,\n * every control is marked touched at submit and each failing one becomes a\n * sentence: a built-in validator's through the catalog's `errors.*` messages,\n * an application's own through `SL_FORM_ERROR_MESSAGES`.\n *\n * **Signal Forms needs nothing here.** Angular 22's `[field]` binds a control\n * through its `ControlValueAccessor`, which every Slotted control provides, so\n * they work under it today and this family adds no second integration.\n */\n@Component({\n selector: 'form[slForm]',\n standalone: true,\n exportAs: 'slForm',\n imports: [SlFormSummary],\n template: `@if (showsOwnSummary()) {\n <div slFormSummary></div>\n }\n <ng-content />`,\n styleUrl: '../../../styles/src/form/form.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: SlFormOwner, useExisting: forwardRef(() => SlForm) }],\n host: {\n 'data-ui': 'form',\n 'data-ui-form': '',\n 'data-part': 'root',\n 'data-part-root': '',\n '[attr.novalidate]': \"resolvedNativeValidation() ? null : ''\",\n '[attr.aria-busy]': \"submitting() ? 'true' : null\",\n '[attr.data-invalid]': \"hasAnyError() ? '' : null\",\n '[attr.data-loading]': \"submitting() ? '' : null\",\n '[attr.data-disabled]': \"disabled() ? '' : null\",\n '(submit)': 'onSubmit($event)',\n '(reset)': 'onReset()',\n '(input)': 'onInput($event)',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class SlForm implements SlFormOwner, OnInit {\n /**\n * Present means the consumer owns the error map, for the life of the\n * component. Keyed by the `name` attribute of the control each error is about.\n */\n readonly errorsInput = input<FormErrorInput | undefined>(undefined, { alias: 'errors' });\n /** The errors an uncontrolled form starts from, read once. */\n readonly defaultErrors = input<FormErrorInput | undefined>(undefined);\n\n readonly validate = input<FormValidate | undefined>(undefined);\n readonly errorFocus = input<FormErrorFocus | undefined>(undefined);\n readonly summary = input<FormSummaryMode | undefined>(undefined);\n readonly summaryDescription = input<string | undefined>(undefined);\n readonly align = input<FormActionsAlign | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * summary's heading (`summaryTitle`) and the built-in validators' sentences\n * (`errors.*`).\n */\n readonly messages = input<PartialMessages<FormMessages> | undefined>(undefined);\n /** Lets the browser draw its own validation bubble. Off by default. */\n readonly nativeValidation = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (raw) => (raw === undefined ? undefined : booleanAttribute(raw)),\n });\n /** Marks the form and every control in it as unavailable. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /**\n * Marks the form busy for work the family did not start — a mutation a\n * consumer's own client is running. It is merged with the family's own\n * submission, so either one puts the root in its busy state.\n */\n readonly loading = input(false, { transform: booleanAttribute });\n /**\n * Registers a `beforeunload` guard while anything in the form has been\n * edited. Off by default: a guard nobody asked for is a trap.\n */\n readonly guardUnsaved = input(false, { transform: booleanAttribute });\n\n /** One output for one transition, carrying the reason and `cancel()`. */\n readonly errorsChange = output<ChangeRequest<FormErrors>>();\n /**\n * Emitted when the form submits and nothing is wrong with it. The values are\n * read from `FormData`, and `errors` is how a handler publishes what a server\n * answered.\n */\n readonly formSubmit = output<{\n values: Record<string, FormDataEntryValue | FormDataEntryValue[]>;\n event: SubmitEvent;\n /** Publishes a server's answer, and moves focus the way a failed submit does. */\n errors: (errors: FormErrorInput) => void;\n /** Holds the form in its busy state until the promise settles. */\n pending: (work: Promise<FormErrorInput | void>) => void;\n }>();\n\n private readonly element = inject<ElementRef<HTMLFormElement>>(ElementRef).nativeElement;\n private readonly defaults = injectFormDefaults();\n private readonly errorMessages = injectFormErrorMessages();\n /** The family's words in the language in force, with this form's `messages` laid over them. */\n readonly t = injectMessages(formMessages, this.messages);\n /** The Reactive Forms group around this element, when a consumer wrote one. */\n private readonly container = inject(ControlContainer, { optional: true, self: true });\n private readonly writtenNoValidate = inject(new HostAttributeToken('novalidate'), {\n optional: true,\n });\n\n private readonly own = signal<FormErrors>({});\n private readonly controls = signal<{ name: string; id: string | undefined }[]>([]);\n private summaryElement: HTMLElement | null = null;\n /** Set when a publish should be followed by the focus a failed submit moves. */\n private pendingFocus = false;\n private readonly ownSubmitting = signal(false);\n /** Either the family's own submission or a consumer's own work. */\n protected readonly submitting = computed(() => this.ownSubmitting() || this.loading());\n private readonly submitted = signal(false);\n\n private readonly external = computed(() => normaliseErrors(this.errorsInput()));\n private readonly controlled = computed(() => this.errorsInput() !== undefined);\n\n readonly errors = computed(() => (this.controlled() ? this.external() : this.own()));\n readonly entries = computed(() => orderErrors(this.errors(), this.controls()));\n protected readonly hasAnyError = computed(() => hasErrors(this.errors()));\n\n readonly summaryId = signal(`slotted-form-summary-${(summaryCounter += 1)}`);\n readonly resolvedSummaryTitle = computed(() => this.t('summaryTitle'));\n readonly resolvedSummaryDescription = computed(\n () => this.summaryDescription() ?? this.defaults.summaryDescription,\n );\n readonly resolvedAlign = computed(() => this.align() ?? this.defaults.align);\n protected readonly resolvedValidate = computed(() => this.validate() ?? this.defaults.validate);\n protected readonly resolvedErrorFocus = computed(\n () => this.errorFocus() ?? this.defaults.errorFocus,\n );\n protected readonly resolvedSummary = computed(() => this.summary() ?? this.defaults.summary);\n protected readonly resolvedNativeValidation = computed(\n () =>\n this.nativeValidation() ??\n (this.writtenNoValidate === null ? this.defaults.nativeValidation : false),\n );\n protected readonly showsOwnSummary = computed(\n () => this.resolvedSummary() === 'auto' && this.entries().length > 0,\n );\n\n constructor() {\n this.attachUnloadGuard();\n }\n\n ngOnInit() {\n this.own.set(normaliseErrors(this.defaultErrors()));\n this.readControls();\n }\n\n /**\n * The summary says when it exists, and takes the focus a failed submit asked\n * for. The move waits for the region rather than racing it: the errors and\n * the element that shows them are published in the same change, and a\n * `focus()` called before the region rendered would land on nothing.\n */\n registerSummary(element: HTMLElement | null) {\n this.summaryElement = element;\n if (element === null || !this.pendingFocus) return;\n this.pendingFocus = false;\n element.focus();\n }\n\n /** Runs validation now and publishes what it found. */\n validateNow(): FormErrors {\n const found = this.collect();\n this.publish(found, 'programmatic', undefined);\n return found;\n }\n\n /** Submits as though the submit button had been pressed. */\n submit() {\n this.element.requestSubmit();\n }\n\n /** Resets the controls and clears the errors. */\n reset() {\n this.element.reset();\n }\n\n /** Moves focus where a failed submit would have moved it. */\n focusFirstError() {\n const focus = this.resolvedErrorFocus();\n if (focus === 'none') return;\n if (focus === 'summary' && this.summaryElement !== null) {\n this.summaryElement.focus();\n return;\n }\n const first = this.entries()[0];\n if (first === undefined) return;\n const control = this.element.elements.namedItem(first.name);\n const element = control instanceof RadioNodeList ? control[0] : control;\n if (element instanceof HTMLElement) element.focus();\n }\n\n protected onSubmit(event: SubmitEvent) {\n this.submitted.set(true);\n this.readControls();\n\n if (this.submitting()) {\n /* A second submit while one is pending is refused. */\n event.preventDefault();\n return;\n }\n\n const found = this.resolvedValidate() === 'none' ? this.external() : this.collect();\n\n if (hasErrors(found)) {\n event.preventDefault();\n this.publish(found, 'submit', event);\n return;\n }\n\n this.publish({}, 'submit', event);\n event.preventDefault();\n\n const data = new FormData(this.element);\n const values: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {};\n for (const key of new Set(data.keys())) {\n const all = data.getAll(key);\n values[key] = all.length > 1 ? all : (all[0] as FormDataEntryValue);\n }\n\n this.formSubmit.emit({\n values,\n event,\n errors: (errors) => this.publish(normaliseErrors(errors), 'submit', event),\n pending: (work) => {\n this.ownSubmitting.set(true);\n void work\n .then((settled) => {\n if (settled !== undefined && settled !== null) {\n this.publish(normaliseErrors(settled), 'submit', event);\n }\n })\n .finally(() => this.ownSubmitting.set(false));\n },\n });\n }\n\n protected onReset() {\n this.submitted.set(false);\n this.publish({}, 'clear', undefined);\n }\n\n /**\n * A server error is dropped when the control it names is edited. After a\n * failed submit under `validate=\"change\"`, the whole form is checked again\n * instead, because a reader who has seen the list is fixing it.\n */\n protected onInput(event: Event) {\n const name = nameOf(event.target);\n if (name === null) return;\n\n if (this.resolvedValidate() === 'change' && this.submitted()) {\n this.publish(this.collect(), 'keyboard', event, false);\n return;\n }\n const next = withoutError(this.errors(), name);\n if (next !== this.errors()) this.publish(next, 'keyboard', event, false);\n }\n\n /**\n * On blur only the control that lost focus is checked. Running the whole form\n * would tell a reader that six fields they have not reached yet are wrong,\n * which is the noise `validate=\"submit\"` exists to avoid.\n */\n protected onFocusOut(event: Event) {\n if (this.resolvedValidate() !== 'blur') return;\n const name = nameOf(event.target);\n if (name === null) return;\n\n const found = this.collect();\n const messages = found[name];\n const next =\n messages === undefined\n ? withoutError(this.errors(), name)\n : mergeErrors(this.errors(), { [name]: messages });\n if (next !== this.errors()) this.publish(next, 'keyboard', event, false);\n }\n\n /**\n * Three sources, latest last: whatever a server sent, the platform's own\n * constraint validation, and Reactive Forms.\n */\n private collect(): FormErrors {\n return mergeErrors(this.external(), collectValidity(this.element), this.angularErrors());\n }\n\n /**\n * Every failing control in the group around this form, as a sentence. Angular\n * reports a key and a shape and never a message, because a message is the\n * application's and so is its language; the registry is where it is written.\n */\n private angularErrors(): FormErrors {\n const group = this.container?.control as FormGroup | FormArray | null | undefined;\n if (group === null || group === undefined) return {};\n group.markAllAsTouched();\n\n const found: Record<string, string[]> = {};\n for (const [name, control] of Object.entries(\n group.controls as Record<string, AbstractControl>,\n )) {\n const errors = control.errors;\n if (errors === null || control.disabled) continue;\n const messages = Object.entries(errors)\n .map(\n ([key, detail]) =>\n this.errorMessages[key]?.({ name, key, detail }) ?? this.builtInMessage(key, detail),\n )\n .filter((message): message is string => typeof message === 'string');\n if (messages.length > 0) found[name] = messages;\n }\n return found;\n }\n\n /**\n * The sentence for one of Angular's own validators, from the catalog; for a\n * key the catalog does not know, nothing — the application's validator names\n * its own message through `SL_FORM_ERROR_MESSAGES`.\n */\n private builtInMessage(key: string, detail: unknown): string | undefined {\n const shape = (detail ?? {}) as { min?: unknown; max?: unknown; requiredLength?: unknown };\n switch (key) {\n case 'required':\n return this.t('errors.required');\n case 'email':\n return this.t('errors.email');\n case 'min':\n return this.t('errors.min', { min: Number(shape.min) });\n case 'max':\n return this.t('errors.max', { max: Number(shape.max) });\n case 'minlength':\n return this.t('errors.minlength', { length: Number(shape.requiredLength) });\n case 'maxlength':\n return this.t('errors.maxlength', { length: Number(shape.requiredLength) });\n case 'pattern':\n return this.t('errors.pattern');\n default:\n return undefined;\n }\n }\n\n private readControls() {\n this.controls.set(namedControls(this.element));\n }\n\n private publish(\n next: FormErrors,\n reason: ChangeReason,\n source: Event | undefined,\n moveFocus = true,\n ) {\n this.readControls();\n\n let cancelled = false;\n const state = createControllable<FormErrors>({\n controlled: undefined,\n initial: this.errors(),\n equals: sameErrors,\n onRequest: (pending) => {\n this.errorsChange.emit(pending);\n cancelled = pending.cancelled;\n },\n });\n state.request(next, reason, source);\n if (cancelled) return;\n\n if (!this.controlled()) this.own.set(next);\n\n if (!moveFocus || !hasErrors(next) || this.resolvedErrorFocus() === 'none') return;\n /* A summary that has not been rendered yet takes the focus when it is, and\n one that is already on the page takes it now. */\n if (this.resolvedErrorFocus() === 'summary' && this.summaryElement === null) {\n this.pendingFocus = true;\n return;\n }\n this.focusFirstError();\n }\n\n /**\n * The guard nobody else ships. It is off by default, because a page that\n * refuses to close after a reader typed one character is a trap.\n */\n private attachUnloadGuard() {\n const onBeforeUnload = (event: BeforeUnloadEvent) => {\n if (!this.guardUnsaved() || this.submitting()) return;\n if (!isDirty(this.element)) return;\n event.preventDefault();\n };\n\n window.addEventListener('beforeunload', onBeforeUnload);\n inject(DestroyRef).onDestroy(() => window.removeEventListener('beforeunload', onBeforeUnload));\n }\n}\n\nfunction nameOf(target: EventTarget | null): string | null {\n if (!(target instanceof HTMLElement)) return null;\n const name = (target as { name?: string }).name;\n return typeof name === 'string' && name !== '' ? name : null;\n}\n\nfunction sameErrors(a: FormErrors, b: FormErrors) {\n const names = Object.keys(a);\n if (names.length !== Object.keys(b).length) return false;\n return names.every(\n (name) =>\n b[name] !== undefined &&\n a[name]!.length === b[name]!.length &&\n a[name]!.every((message, index) => message === b[name]![index]),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -167,7 +167,7 @@ class SlFullscreen {
|
|
|
167
167
|
};
|
|
168
168
|
}
|
|
169
169
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFullscreen, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
170
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlFullscreen, isStandalone: true, selector: "[slFullscreen]", inputs: { fullscreen: { classPropertyName: "fullscreen", publicName: "fullscreen", isSignal: true, isRequired: false, transformFunction: null }, defaultFullscreen: { classPropertyName: "defaultFullscreen", publicName: "defaultFullscreen", isSignal: true, isRequired: false, transformFunction: null }, policy: { classPropertyName: "policy", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, navigationUI: { classPropertyName: "navigationUI", publicName: "navigationUI", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fullscreen: "fullscreenChange", fullscreenChangeRequest: "fullscreenChangeRequest", fullscreenError: "fullscreenError" }, host: { attributes: { "data-ui": "fullscreen", "data-part": "root" }, properties: { "attr.data-fullscreen": "fullscreen() ? '' : null", "attr.data-mode": "mode()" } }, exportAs: ["slFullscreen"], ngImport: i0 });
|
|
170
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlFullscreen, isStandalone: true, selector: "[slFullscreen]", inputs: { fullscreen: { classPropertyName: "fullscreen", publicName: "fullscreen", isSignal: true, isRequired: false, transformFunction: null }, defaultFullscreen: { classPropertyName: "defaultFullscreen", publicName: "defaultFullscreen", isSignal: true, isRequired: false, transformFunction: null }, policy: { classPropertyName: "policy", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, navigationUI: { classPropertyName: "navigationUI", publicName: "navigationUI", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fullscreen: "fullscreenChange", fullscreenChangeRequest: "fullscreenChangeRequest", fullscreenError: "fullscreenError" }, host: { attributes: { "data-ui": "fullscreen", "data-ui-fullscreen": "", "data-part": "root", "data-part-root": "" }, properties: { "attr.data-fullscreen": "fullscreen() ? '' : null", "attr.data-mode": "mode()" } }, exportAs: ["slFullscreen"], ngImport: i0 });
|
|
171
171
|
}
|
|
172
172
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFullscreen, decorators: [{
|
|
173
173
|
type: Directive,
|
|
@@ -177,7 +177,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
177
177
|
exportAs: 'slFullscreen',
|
|
178
178
|
host: {
|
|
179
179
|
'data-ui': 'fullscreen',
|
|
180
|
+
'data-ui-fullscreen': '',
|
|
180
181
|
'data-part': 'root',
|
|
182
|
+
'data-part-root': '',
|
|
181
183
|
'[attr.data-fullscreen]': "fullscreen() ? '' : null",
|
|
182
184
|
'[attr.data-mode]': 'mode()',
|
|
183
185
|
},
|
|
@@ -244,25 +246,27 @@ class SlFullscreenTrigger {
|
|
|
244
246
|
this.destroyRef.onDestroy(() => this.element.removeEventListener('click', listener));
|
|
245
247
|
}
|
|
246
248
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFullscreenTrigger, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
247
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlFullscreenTrigger, isStandalone: true, selector: "button[slFullscreenTrigger]", inputs: { target: { classPropertyName: "target", publicName: "slFullscreenTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "fullscreen", "data-part": "trigger" }, properties: { "attr.type": "type", "attr.data-fullscreen": "on() ? '' : null", "attr.data-disabled": "disabled() ? '' : null", "attr.data-icon-only": "iconOnly() ? '' : null", "attr.data-size": "resolvedSize()", "attr.data-variant": "resolvedVariant()", "disabled": "disabled()" } }, exportAs: ["slFullscreenTrigger"], ngImport: i0, template: `<span data-part="icon" aria-hidden="true"
|
|
249
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlFullscreenTrigger, isStandalone: true, selector: "button[slFullscreenTrigger]", inputs: { target: { classPropertyName: "target", publicName: "slFullscreenTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "fullscreen", "data-ui-fullscreen": "", "data-part": "trigger", "data-part-trigger": "" }, properties: { "attr.type": "type", "attr.data-fullscreen": "on() ? '' : null", "attr.data-disabled": "disabled() ? '' : null", "attr.data-icon-only": "iconOnly() ? '' : null", "attr.data-size": "resolvedSize()", "attr.data-variant": "resolvedVariant()", "disabled": "disabled()" } }, exportAs: ["slFullscreenTrigger"], ngImport: i0, template: `<span data-part="icon" data-part-icon="" aria-hidden="true"
|
|
248
250
|
><ng-content select="[slFullscreenIcon]"
|
|
249
251
|
><span slIcon
|
|
250
252
|
><svg slGlyph [name]="on() ? 'minimize' : 'maximize'"></svg></span></ng-content></span
|
|
251
|
-
><span data-part="label"
|
|
253
|
+
><span data-part="label" data-part-label=""
|
|
252
254
|
><ng-content>{{ label() }}</ng-content></span
|
|
253
|
-
>`, isInline: true, styles: ["@layer slotted.components{[data-ui
|
|
255
|
+
>`, isInline: true, styles: ["@layer slotted.components{[data-ui-fullscreen][data-part-root][data-fullscreen]{--_inset: var( --slotted-fullscreen-inset, clamp(var(--slotted-space-5, .75rem), 5vw, var(--slotted-space-8, 1.5rem)) );background-color:var(--slotted-fullscreen-surface, var(--slotted-surface, Canvas));border:0;border-radius:0;box-sizing:border-box;color:var(--slotted-text, CanvasText);overflow:auto;overscroll-behavior:contain;padding-block-end:max(var(--_inset),env(safe-area-inset-bottom,0px));padding-block-start:max(var(--_inset),env(safe-area-inset-top,0px));padding-inline:max(var(--_inset),env(safe-area-inset-left,0px),env(safe-area-inset-right,0px))}[data-ui-fullscreen][data-part-root][data-fullscreen]{display:flex;flex-direction:column}[data-ui-fullscreen][data-part-root][data-fullscreen]>[data-ui-fullscreen][data-part-content]{display:grid;flex:1 0 auto;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(min-content,1fr)}[data-ui-fullscreen][data-part-root][data-fullscreen]>:first-child:is(:last-child,:has(+[data-slotted-portal]:last-child)):not([data-part-trigger],img,video,canvas){flex:1 0 auto}[data-ui-fullscreen][data-part-root][data-fullscreen]>:is(img,video,canvas):first-child:is(:last-child,:has(+[data-slotted-portal]:last-child)){flex:1 1 0;inline-size:100%;min-block-size:0;object-fit:contain}[data-ui-fullscreen][data-part-root]::backdrop{background-color:var(--slotted-fullscreen-surface, var(--slotted-surface, Canvas))}[data-ui-fullscreen][data-part-root][data-mode=layout]{animation:slotted-fullscreen-enter var(--slotted-duration-short) var(--slotted-easing-enter);block-size:auto!important;inline-size:auto!important;inset:0!important;margin:0!important;max-block-size:none!important;max-inline-size:none!important;min-block-size:0!important;min-inline-size:0!important;position:fixed!important;transform:none!important;z-index:calc(var(--slotted-z-index-overlay, 1000) + var(--slotted-layer-depth, 0))!important}@keyframes slotted-fullscreen-enter{0%{opacity:0}}[data-ui-fullscreen][data-part-trigger]{--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_font-size: var(--slotted-control-font-size-md, 13px);--_icon-size: var(--slotted-control-icon-size-md, 16px);--_gap: var(--slotted-control-gap-md, 8px);align-items:center;appearance:none;background:transparent;block-size:var(--_height);border:var(--slotted-control-border-width, 1px) solid transparent;border-radius:var(--slotted-fullscreen-trigger-radius, var(--slotted-control-radius, 4px));box-sizing:border-box;color:var(--slotted-fullscreen-trigger-color, var(--slotted-text, ButtonText));cursor:pointer;display:inline-flex;flex:0 1 auto;font-family:var(--slotted-control-font-family, ui-sans-serif, system-ui, sans-serif);font-size:var(--_font-size);font-weight:var(--slotted-control-font-weight, 600);gap:var(--_gap);justify-content:center;letter-spacing:var(--slotted-control-letter-spacing, 0);line-height:var(--slotted-control-line-height, 1);margin:0;max-inline-size:100%;min-inline-size:var(--_height);padding-block:0;padding-inline:var(--_padding-inline);position:relative;touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-user-select:none;user-select:none;vertical-align:middle;-webkit-tap-highlight-color:transparent}[data-ui-fullscreen][data-part-trigger][data-size=sm]{--_height: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-sm, 10px);--_font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-sm, 14px);--_gap: var(--slotted-control-gap-sm, 6px)}[data-ui-fullscreen][data-part-trigger][data-size=lg]{--_height: var(--slotted-control-height-lg, 38px);--_padding-inline: var(--slotted-control-padding-inline-lg, 16px);--_font-size: var(--slotted-control-font-size-lg, 14px);--_icon-size: var(--slotted-control-icon-size-lg, 18px);--_gap: var(--slotted-control-gap-lg, 8px)}[data-ui-fullscreen] [data-part-icon]{--slotted-icon-size: var(--_icon-size);block-size:var(--_icon-size);display:inline-flex;flex:none;font-size:var(--_icon-size);inline-size:var(--_icon-size)}[data-ui-fullscreen] [data-part-icon]>*{block-size:100%;display:block;inline-size:100%}[data-ui-fullscreen] [data-part-label]{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui-fullscreen][data-part-trigger][data-icon-only]{inline-size:var(--_height);padding-inline:0}[data-ui-fullscreen][data-part-trigger][data-icon-only] [data-part-label]{block-size:1px;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;position:absolute;white-space:nowrap}[data-ui-fullscreen][data-part-trigger][data-variant=outline]{background-color:var(--slotted-control-surface, ButtonFace);border-color:var( --slotted-fullscreen-trigger-border-color, var(--slotted-control-border-color, ButtonBorder) );box-shadow:var(--slotted-control-shadow, none)}[data-ui-fullscreen][data-part-trigger]:hover:not(:disabled):not([data-disabled]){background-color:var( --slotted-fullscreen-trigger-hover-background, var(--slotted-tone-secondary-subtle-hover, ButtonFace) )}[data-ui-fullscreen][data-part-trigger]:active:not(:disabled):not([data-disabled]){background-color:var( --slotted-fullscreen-trigger-active-background, var(--slotted-tone-secondary-subtle-active, ButtonFace) );transition-duration:var(--slotted-duration-instant)}[data-ui-fullscreen][data-part-trigger]: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-fullscreen][data-part-trigger]:disabled,[data-ui-fullscreen][data-part-trigger][data-disabled]{background-color:transparent;color:var(--slotted-disabled-foreground, GrayText);cursor:not-allowed}[data-ui-fullscreen][data-part-trigger][data-variant=outline]:disabled,[data-ui-fullscreen][data-part-trigger][data-variant=outline][data-disabled]{border-color:var(--slotted-disabled-border, GrayText);box-shadow:none}}\n"], dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
254
256
|
}
|
|
255
257
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFullscreenTrigger, decorators: [{
|
|
256
258
|
type: Component,
|
|
257
|
-
args: [{ selector: 'button[slFullscreenTrigger]', standalone: true, exportAs: 'slFullscreenTrigger', imports: [SlGlyph, SlIcon], template: `<span data-part="icon" aria-hidden="true"
|
|
259
|
+
args: [{ selector: 'button[slFullscreenTrigger]', standalone: true, exportAs: 'slFullscreenTrigger', imports: [SlGlyph, SlIcon], template: `<span data-part="icon" data-part-icon="" aria-hidden="true"
|
|
258
260
|
><ng-content select="[slFullscreenIcon]"
|
|
259
261
|
><span slIcon
|
|
260
262
|
><svg slGlyph [name]="on() ? 'minimize' : 'maximize'"></svg></span></ng-content></span
|
|
261
|
-
><span data-part="label"
|
|
263
|
+
><span data-part="label" data-part-label=""
|
|
262
264
|
><ng-content>{{ label() }}</ng-content></span
|
|
263
265
|
>`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
264
266
|
'data-ui': 'fullscreen',
|
|
267
|
+
'data-ui-fullscreen': '',
|
|
265
268
|
'data-part': 'trigger',
|
|
269
|
+
'data-part-trigger': '',
|
|
266
270
|
'[attr.type]': 'type',
|
|
267
271
|
'[attr.data-fullscreen]': "on() ? '' : null",
|
|
268
272
|
'[attr.data-disabled]': "disabled() ? '' : null",
|
|
@@ -270,7 +274,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
270
274
|
'[attr.data-size]': 'resolvedSize()',
|
|
271
275
|
'[attr.data-variant]': 'resolvedVariant()',
|
|
272
276
|
'[disabled]': 'disabled()',
|
|
273
|
-
}, styles: ["@layer slotted.components{[data-ui
|
|
277
|
+
}, styles: ["@layer slotted.components{[data-ui-fullscreen][data-part-root][data-fullscreen]{--_inset: var( --slotted-fullscreen-inset, clamp(var(--slotted-space-5, .75rem), 5vw, var(--slotted-space-8, 1.5rem)) );background-color:var(--slotted-fullscreen-surface, var(--slotted-surface, Canvas));border:0;border-radius:0;box-sizing:border-box;color:var(--slotted-text, CanvasText);overflow:auto;overscroll-behavior:contain;padding-block-end:max(var(--_inset),env(safe-area-inset-bottom,0px));padding-block-start:max(var(--_inset),env(safe-area-inset-top,0px));padding-inline:max(var(--_inset),env(safe-area-inset-left,0px),env(safe-area-inset-right,0px))}[data-ui-fullscreen][data-part-root][data-fullscreen]{display:flex;flex-direction:column}[data-ui-fullscreen][data-part-root][data-fullscreen]>[data-ui-fullscreen][data-part-content]{display:grid;flex:1 0 auto;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(min-content,1fr)}[data-ui-fullscreen][data-part-root][data-fullscreen]>:first-child:is(:last-child,:has(+[data-slotted-portal]:last-child)):not([data-part-trigger],img,video,canvas){flex:1 0 auto}[data-ui-fullscreen][data-part-root][data-fullscreen]>:is(img,video,canvas):first-child:is(:last-child,:has(+[data-slotted-portal]:last-child)){flex:1 1 0;inline-size:100%;min-block-size:0;object-fit:contain}[data-ui-fullscreen][data-part-root]::backdrop{background-color:var(--slotted-fullscreen-surface, var(--slotted-surface, Canvas))}[data-ui-fullscreen][data-part-root][data-mode=layout]{animation:slotted-fullscreen-enter var(--slotted-duration-short) var(--slotted-easing-enter);block-size:auto!important;inline-size:auto!important;inset:0!important;margin:0!important;max-block-size:none!important;max-inline-size:none!important;min-block-size:0!important;min-inline-size:0!important;position:fixed!important;transform:none!important;z-index:calc(var(--slotted-z-index-overlay, 1000) + var(--slotted-layer-depth, 0))!important}@keyframes slotted-fullscreen-enter{0%{opacity:0}}[data-ui-fullscreen][data-part-trigger]{--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_font-size: var(--slotted-control-font-size-md, 13px);--_icon-size: var(--slotted-control-icon-size-md, 16px);--_gap: var(--slotted-control-gap-md, 8px);align-items:center;appearance:none;background:transparent;block-size:var(--_height);border:var(--slotted-control-border-width, 1px) solid transparent;border-radius:var(--slotted-fullscreen-trigger-radius, var(--slotted-control-radius, 4px));box-sizing:border-box;color:var(--slotted-fullscreen-trigger-color, var(--slotted-text, ButtonText));cursor:pointer;display:inline-flex;flex:0 1 auto;font-family:var(--slotted-control-font-family, ui-sans-serif, system-ui, sans-serif);font-size:var(--_font-size);font-weight:var(--slotted-control-font-weight, 600);gap:var(--_gap);justify-content:center;letter-spacing:var(--slotted-control-letter-spacing, 0);line-height:var(--slotted-control-line-height, 1);margin:0;max-inline-size:100%;min-inline-size:var(--_height);padding-block:0;padding-inline:var(--_padding-inline);position:relative;touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-user-select:none;user-select:none;vertical-align:middle;-webkit-tap-highlight-color:transparent}[data-ui-fullscreen][data-part-trigger][data-size=sm]{--_height: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-sm, 10px);--_font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-sm, 14px);--_gap: var(--slotted-control-gap-sm, 6px)}[data-ui-fullscreen][data-part-trigger][data-size=lg]{--_height: var(--slotted-control-height-lg, 38px);--_padding-inline: var(--slotted-control-padding-inline-lg, 16px);--_font-size: var(--slotted-control-font-size-lg, 14px);--_icon-size: var(--slotted-control-icon-size-lg, 18px);--_gap: var(--slotted-control-gap-lg, 8px)}[data-ui-fullscreen] [data-part-icon]{--slotted-icon-size: var(--_icon-size);block-size:var(--_icon-size);display:inline-flex;flex:none;font-size:var(--_icon-size);inline-size:var(--_icon-size)}[data-ui-fullscreen] [data-part-icon]>*{block-size:100%;display:block;inline-size:100%}[data-ui-fullscreen] [data-part-label]{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui-fullscreen][data-part-trigger][data-icon-only]{inline-size:var(--_height);padding-inline:0}[data-ui-fullscreen][data-part-trigger][data-icon-only] [data-part-label]{block-size:1px;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;position:absolute;white-space:nowrap}[data-ui-fullscreen][data-part-trigger][data-variant=outline]{background-color:var(--slotted-control-surface, ButtonFace);border-color:var( --slotted-fullscreen-trigger-border-color, var(--slotted-control-border-color, ButtonBorder) );box-shadow:var(--slotted-control-shadow, none)}[data-ui-fullscreen][data-part-trigger]:hover:not(:disabled):not([data-disabled]){background-color:var( --slotted-fullscreen-trigger-hover-background, var(--slotted-tone-secondary-subtle-hover, ButtonFace) )}[data-ui-fullscreen][data-part-trigger]:active:not(:disabled):not([data-disabled]){background-color:var( --slotted-fullscreen-trigger-active-background, var(--slotted-tone-secondary-subtle-active, ButtonFace) );transition-duration:var(--slotted-duration-instant)}[data-ui-fullscreen][data-part-trigger]: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-fullscreen][data-part-trigger]:disabled,[data-ui-fullscreen][data-part-trigger][data-disabled]{background-color:transparent;color:var(--slotted-disabled-foreground, GrayText);cursor:not-allowed}[data-ui-fullscreen][data-part-trigger][data-variant=outline]:disabled,[data-ui-fullscreen][data-part-trigger][data-variant=outline][data-disabled]{border-color:var(--slotted-disabled-border, GrayText);box-shadow:none}}\n"] }]
|
|
274
278
|
}], propDecorators: { target: [{ type: i0.Input, args: [{ isSignal: true, alias: "slFullscreenTrigger", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], iconOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOnly", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
|
|
275
279
|
/**
|
|
276
280
|
* The part that takes the height the other children of the region leave
|
|
@@ -280,7 +284,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
280
284
|
*/
|
|
281
285
|
class SlFullscreenContent {
|
|
282
286
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFullscreenContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
283
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlFullscreenContent, isStandalone: true, selector: "[slFullscreenContent]", host: { attributes: { "data-ui": "fullscreen", "data-part": "content" } }, ngImport: i0 });
|
|
287
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlFullscreenContent, isStandalone: true, selector: "[slFullscreenContent]", host: { attributes: { "data-ui": "fullscreen", "data-ui-fullscreen": "", "data-part": "content", "data-part-content": "" } }, ngImport: i0 });
|
|
284
288
|
}
|
|
285
289
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFullscreenContent, decorators: [{
|
|
286
290
|
type: Directive,
|
|
@@ -289,7 +293,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
289
293
|
standalone: true,
|
|
290
294
|
host: {
|
|
291
295
|
'data-ui': 'fullscreen',
|
|
296
|
+
'data-ui-fullscreen': '',
|
|
292
297
|
'data-part': 'content',
|
|
298
|
+
'data-part-content': '',
|
|
293
299
|
},
|
|
294
300
|
}]
|
|
295
301
|
}] });
|