@slotted/angular 0.0.0-stage → 0.1.0-beta.1
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/LICENSE +21 -0
- package/README.md +51 -2
- package/docs/AGENTS.snippet.md +10 -0
- package/docs/accordion.json +345 -0
- package/docs/accordion.md +207 -0
- package/docs/action-bar.json +421 -0
- package/docs/action-bar.md +364 -0
- package/docs/action-sheet.json +210 -0
- package/docs/action-sheet.md +19 -0
- package/docs/alert.json +407 -0
- package/docs/alert.md +239 -0
- package/docs/app-shell.examples.md +349 -0
- package/docs/app-shell.json +835 -0
- package/docs/app-shell.md +214 -0
- package/docs/aspect-ratio.json +159 -0
- package/docs/aspect-ratio.md +134 -0
- package/docs/attachment.json +486 -0
- package/docs/attachment.md +253 -0
- package/docs/avatar-group.json +208 -0
- package/docs/avatar-group.md +130 -0
- package/docs/avatar.json +342 -0
- package/docs/avatar.md +142 -0
- package/docs/badge.json +334 -0
- package/docs/badge.md +138 -0
- package/docs/breadcrumb.json +368 -0
- package/docs/breadcrumb.md +237 -0
- package/docs/button-group.json +158 -0
- package/docs/button-group.md +72 -0
- package/docs/button.examples.md +621 -0
- package/docs/button.json +977 -0
- package/docs/button.md +200 -0
- package/docs/calendar.json +592 -0
- package/docs/calendar.md +242 -0
- package/docs/card.json +283 -0
- package/docs/card.md +130 -0
- package/docs/carousel.json +560 -0
- package/docs/carousel.md +357 -0
- package/docs/cascader.json +933 -0
- package/docs/cascader.md +379 -0
- package/docs/chart.examples.md +582 -0
- package/docs/chart.json +1359 -0
- package/docs/chart.md +187 -0
- package/docs/checkbox-group.examples.md +612 -0
- package/docs/checkbox-group.json +395 -0
- package/docs/checkbox-group.md +106 -0
- package/docs/checkbox.examples.md +546 -0
- package/docs/checkbox.json +506 -0
- package/docs/checkbox.md +104 -0
- package/docs/code-block.json +616 -0
- package/docs/code-block.md +303 -0
- package/docs/collapsible.json +456 -0
- package/docs/collapsible.md +261 -0
- package/docs/color-picker.json +523 -0
- package/docs/color-picker.md +201 -0
- package/docs/column-manager.json +486 -0
- package/docs/column-manager.md +277 -0
- package/docs/combobox.examples.md +1732 -0
- package/docs/combobox.json +1250 -0
- package/docs/combobox.md +209 -0
- package/docs/command-palette.json +800 -0
- package/docs/command-palette.md +419 -0
- package/docs/container.json +156 -0
- package/docs/container.md +92 -0
- package/docs/context-menu.json +231 -0
- package/docs/context-menu.md +176 -0
- package/docs/currency-field.examples.md +321 -0
- package/docs/currency-field.json +649 -0
- package/docs/currency-field.md +128 -0
- package/docs/dashboard-grid.json +680 -0
- package/docs/dashboard-grid.md +265 -0
- package/docs/data-grid.examples.md +3064 -0
- package/docs/data-grid.json +1577 -0
- package/docs/data-grid.md +237 -0
- package/docs/data-grid.props.md +81 -0
- package/docs/data-list.json +685 -0
- package/docs/data-list.md +327 -0
- package/docs/date-field.json +490 -0
- package/docs/date-field.md +235 -0
- package/docs/date-picker.examples.md +1226 -0
- package/docs/date-picker.json +696 -0
- package/docs/date-picker.md +121 -0
- package/docs/date-range-picker.examples.md +1300 -0
- package/docs/date-range-picker.json +903 -0
- package/docs/date-range-picker.md +142 -0
- package/docs/datetime-field.json +665 -0
- package/docs/datetime-field.md +337 -0
- package/docs/datetime-picker.examples.md +1269 -0
- package/docs/datetime-picker.json +928 -0
- package/docs/datetime-picker.md +150 -0
- package/docs/datetime-range-picker.examples.md +225 -0
- package/docs/datetime-range-picker.json +1015 -0
- package/docs/datetime-range-picker.md +162 -0
- package/docs/description-list.json +471 -0
- package/docs/description-list.md +268 -0
- package/docs/detail-panel.json +530 -0
- package/docs/detail-panel.md +361 -0
- package/docs/dialog.examples.md +2467 -0
- package/docs/dialog.json +1141 -0
- package/docs/dialog.md +217 -0
- package/docs/dialog.props.md +63 -0
- package/docs/divider.json +148 -0
- package/docs/divider.md +83 -0
- package/docs/drawer.examples.md +1929 -0
- package/docs/drawer.json +753 -0
- package/docs/drawer.md +199 -0
- package/docs/entity-picker.json +946 -0
- package/docs/entity-picker.md +365 -0
- package/docs/event-calendar.examples.md +308 -0
- package/docs/event-calendar.json +1202 -0
- package/docs/event-calendar.md +201 -0
- package/docs/field-group.json +333 -0
- package/docs/field-group.md +181 -0
- package/docs/field.examples.md +676 -0
- package/docs/field.json +528 -0
- package/docs/field.md +127 -0
- package/docs/filter-bar.json +817 -0
- package/docs/filter-bar.md +380 -0
- package/docs/form.json +378 -0
- package/docs/form.md +235 -0
- package/docs/fullscreen.json +395 -0
- package/docs/fullscreen.md +225 -0
- package/docs/grid.json +176 -0
- package/docs/grid.md +74 -0
- package/docs/highlight.json +279 -0
- package/docs/highlight.md +210 -0
- package/docs/hover-card.json +254 -0
- package/docs/hover-card.md +213 -0
- package/docs/icon.json +173 -0
- package/docs/icon.md +101 -0
- package/docs/image.json +476 -0
- package/docs/image.md +254 -0
- package/docs/import-export-center.json +836 -0
- package/docs/import-export-center.md +345 -0
- package/docs/index.md +141 -0
- package/docs/inline-message.json +312 -0
- package/docs/inline-message.md +191 -0
- package/docs/inline.json +149 -0
- package/docs/inline.md +72 -0
- package/docs/kbd.json +350 -0
- package/docs/kbd.md +210 -0
- package/docs/link.json +264 -0
- package/docs/link.md +167 -0
- package/docs/list-item.json +463 -0
- package/docs/list-item.md +236 -0
- package/docs/list.json +321 -0
- package/docs/list.md +185 -0
- package/docs/listbox.json +807 -0
- package/docs/listbox.md +413 -0
- package/docs/loading-overlay.json +440 -0
- package/docs/loading-overlay.md +248 -0
- package/docs/markdown.json +461 -0
- package/docs/markdown.md +266 -0
- package/docs/menu.examples.md +1651 -0
- package/docs/menu.json +922 -0
- package/docs/menu.md +155 -0
- package/docs/menubar.json +292 -0
- package/docs/menubar.md +173 -0
- package/docs/message-scroller.json +401 -0
- package/docs/message-scroller.md +212 -0
- package/docs/message.json +862 -0
- package/docs/message.md +473 -0
- package/docs/multi-select.examples.md +1922 -0
- package/docs/multi-select.json +1314 -0
- package/docs/multi-select.md +213 -0
- package/docs/navigation-menu.json +529 -0
- package/docs/navigation-menu.md +329 -0
- package/docs/notification-center.json +664 -0
- package/docs/notification-center.md +372 -0
- package/docs/number-field.examples.md +1078 -0
- package/docs/number-field.json +668 -0
- package/docs/number-field.md +137 -0
- package/docs/otp-input.json +479 -0
- package/docs/otp-input.md +291 -0
- package/docs/page-header.json +574 -0
- package/docs/page-header.md +338 -0
- package/docs/page.json +332 -0
- package/docs/page.md +184 -0
- package/docs/pagination.json +434 -0
- package/docs/pagination.md +238 -0
- package/docs/popover.examples.md +1235 -0
- package/docs/popover.json +656 -0
- package/docs/popover.md +199 -0
- package/docs/progress-indicator.json +501 -0
- package/docs/progress-indicator.md +329 -0
- package/docs/prompt-composer.json +498 -0
- package/docs/prompt-composer.md +278 -0
- package/docs/prose.json +357 -0
- package/docs/prose.md +226 -0
- package/docs/radio-group.examples.md +626 -0
- package/docs/radio-group.json +541 -0
- package/docs/radio-group.md +112 -0
- package/docs/rating.json +1053 -0
- package/docs/rating.md +435 -0
- package/docs/result-state.json +376 -0
- package/docs/result-state.md +286 -0
- package/docs/saved-views.json +384 -0
- package/docs/saved-views.md +242 -0
- package/docs/scroll-area.json +120 -0
- package/docs/scroll-area.md +8 -0
- package/docs/section.json +344 -0
- package/docs/section.md +208 -0
- package/docs/segmented-control.json +429 -0
- package/docs/segmented-control.md +240 -0
- package/docs/select.examples.md +1214 -0
- package/docs/select.json +1147 -0
- package/docs/select.md +199 -0
- package/docs/side-navigation.json +632 -0
- package/docs/side-navigation.md +430 -0
- package/docs/skeleton.json +358 -0
- package/docs/skeleton.md +223 -0
- package/docs/slider.json +522 -0
- package/docs/slider.md +261 -0
- package/docs/sparkline.json +426 -0
- package/docs/sparkline.md +206 -0
- package/docs/split-button.json +361 -0
- package/docs/split-button.md +275 -0
- package/docs/splitter.json +142 -0
- package/docs/splitter.md +14 -0
- package/docs/stack.json +135 -0
- package/docs/stack.md +74 -0
- package/docs/stat-card.json +529 -0
- package/docs/stat-card.md +270 -0
- package/docs/status-indicator.json +314 -0
- package/docs/status-indicator.md +197 -0
- package/docs/stepper.json +451 -0
- package/docs/stepper.md +250 -0
- package/docs/switch.json +451 -0
- package/docs/switch.md +508 -0
- package/docs/table-of-contents.json +553 -0
- package/docs/table-of-contents.md +289 -0
- package/docs/table.examples.md +1981 -0
- package/docs/table.json +1059 -0
- package/docs/table.md +290 -0
- package/docs/tabs.examples.md +1370 -0
- package/docs/tabs.json +661 -0
- package/docs/tabs.md +211 -0
- package/docs/tag.json +813 -0
- package/docs/tag.md +241 -0
- package/docs/tags-input.json +771 -0
- package/docs/tags-input.md +361 -0
- package/docs/text-field.examples.md +821 -0
- package/docs/text-field.json +604 -0
- package/docs/text-field.md +125 -0
- package/docs/textarea.examples.md +612 -0
- package/docs/textarea.json +440 -0
- package/docs/textarea.md +98 -0
- package/docs/time-field.json +584 -0
- package/docs/time-field.md +291 -0
- package/docs/time-picker.json +679 -0
- package/docs/time-picker.md +315 -0
- package/docs/time-range-picker.examples.md +191 -0
- package/docs/time-range-picker.json +924 -0
- package/docs/time-range-picker.md +152 -0
- package/docs/timeline.json +839 -0
- package/docs/timeline.md +401 -0
- package/docs/toast.json +642 -0
- package/docs/toast.md +311 -0
- package/docs/toggle-group.json +417 -0
- package/docs/toggle-group.md +255 -0
- package/docs/toggle.json +326 -0
- package/docs/toggle.md +222 -0
- package/docs/toolbar.json +380 -0
- package/docs/toolbar.md +240 -0
- package/docs/tooltip.examples.md +664 -0
- package/docs/tooltip.json +604 -0
- package/docs/tooltip.md +146 -0
- package/docs/top-navigation.examples.md +287 -0
- package/docs/top-navigation.json +648 -0
- package/docs/top-navigation.md +138 -0
- package/docs/tour.json +759 -0
- package/docs/tour.md +337 -0
- package/docs/transfer.json +746 -0
- package/docs/transfer.md +273 -0
- package/docs/tree.json +918 -0
- package/docs/tree.md +397 -0
- package/docs/typography.json +317 -0
- package/docs/typography.md +107 -0
- package/docs/upload.examples.md +358 -0
- package/docs/upload.json +1103 -0
- package/docs/upload.md +166 -0
- package/docs/visually-hidden.json +71 -0
- package/docs/visually-hidden.md +42 -0
- package/docs/wizard.json +724 -0
- package/docs/wizard.md +295 -0
- package/fesm2022/slotted-angular-accordion.mjs +247 -0
- package/fesm2022/slotted-angular-accordion.mjs.map +1 -0
- package/fesm2022/slotted-angular-action-bar.mjs +639 -0
- package/fesm2022/slotted-angular-action-bar.mjs.map +1 -0
- package/fesm2022/slotted-angular-action-sheet.mjs +749 -0
- package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -0
- package/fesm2022/slotted-angular-alert.mjs +427 -0
- package/fesm2022/slotted-angular-alert.mjs.map +1 -0
- package/fesm2022/slotted-angular-app-shell.mjs +1334 -0
- package/fesm2022/slotted-angular-app-shell.mjs.map +1 -0
- package/fesm2022/slotted-angular-aspect-ratio.mjs +63 -0
- package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -0
- package/fesm2022/slotted-angular-attachment.mjs +595 -0
- package/fesm2022/slotted-angular-attachment.mjs.map +1 -0
- package/fesm2022/slotted-angular-avatar-group.mjs +230 -0
- package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-avatar.mjs +330 -0
- package/fesm2022/slotted-angular-avatar.mjs.map +1 -0
- package/fesm2022/slotted-angular-badge.mjs +255 -0
- package/fesm2022/slotted-angular-badge.mjs.map +1 -0
- package/fesm2022/slotted-angular-breadcrumb.mjs +544 -0
- package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -0
- package/fesm2022/slotted-angular-button-group.mjs +146 -0
- package/fesm2022/slotted-angular-button-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-button.mjs +692 -0
- package/fesm2022/slotted-angular-button.mjs.map +1 -0
- package/fesm2022/slotted-angular-calendar.mjs +916 -0
- package/fesm2022/slotted-angular-calendar.mjs.map +1 -0
- package/fesm2022/slotted-angular-card.mjs +225 -0
- package/fesm2022/slotted-angular-card.mjs.map +1 -0
- package/fesm2022/slotted-angular-carousel.mjs +840 -0
- package/fesm2022/slotted-angular-carousel.mjs.map +1 -0
- package/fesm2022/slotted-angular-cascader.mjs +1839 -0
- package/fesm2022/slotted-angular-cascader.mjs.map +1 -0
- package/fesm2022/slotted-angular-chart.mjs +974 -0
- package/fesm2022/slotted-angular-chart.mjs.map +1 -0
- package/fesm2022/slotted-angular-checkbox-group.mjs +283 -0
- package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-checkbox.mjs +468 -0
- package/fesm2022/slotted-angular-checkbox.mjs.map +1 -0
- package/fesm2022/slotted-angular-code-block.mjs +476 -0
- package/fesm2022/slotted-angular-code-block.mjs.map +1 -0
- package/fesm2022/slotted-angular-collapsible.mjs +479 -0
- package/fesm2022/slotted-angular-collapsible.mjs.map +1 -0
- package/fesm2022/slotted-angular-color-picker.mjs +910 -0
- package/fesm2022/slotted-angular-color-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-column-manager.mjs +1037 -0
- package/fesm2022/slotted-angular-column-manager.mjs.map +1 -0
- package/fesm2022/slotted-angular-combobox.mjs +1480 -0
- package/fesm2022/slotted-angular-combobox.mjs.map +1 -0
- package/fesm2022/slotted-angular-command-palette.mjs +1283 -0
- package/fesm2022/slotted-angular-command-palette.mjs.map +1 -0
- package/fesm2022/slotted-angular-container.mjs +105 -0
- package/fesm2022/slotted-angular-container.mjs.map +1 -0
- package/fesm2022/slotted-angular-context-menu.mjs +221 -0
- package/fesm2022/slotted-angular-context-menu.mjs.map +1 -0
- package/fesm2022/slotted-angular-currency-field.mjs +1131 -0
- package/fesm2022/slotted-angular-currency-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-dashboard-grid.mjs +1928 -0
- package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -0
- package/fesm2022/slotted-angular-data-grid.mjs +6697 -0
- package/fesm2022/slotted-angular-data-grid.mjs.map +1 -0
- package/fesm2022/slotted-angular-data-list.mjs +1418 -0
- package/fesm2022/slotted-angular-data-list.mjs.map +1 -0
- package/fesm2022/slotted-angular-date-field.mjs +772 -0
- package/fesm2022/slotted-angular-date-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-date-picker.mjs +690 -0
- package/fesm2022/slotted-angular-date-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-date-range-picker.mjs +1150 -0
- package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-datetime-field.mjs +1058 -0
- package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-datetime-picker.mjs +1362 -0
- package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-datetime-range-picker.mjs +1872 -0
- package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-description-list.mjs +545 -0
- package/fesm2022/slotted-angular-description-list.mjs.map +1 -0
- package/fesm2022/slotted-angular-detail-panel.mjs +754 -0
- package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -0
- package/fesm2022/slotted-angular-dialog.mjs +980 -0
- package/fesm2022/slotted-angular-dialog.mjs.map +1 -0
- package/fesm2022/slotted-angular-divider.mjs +76 -0
- package/fesm2022/slotted-angular-divider.mjs.map +1 -0
- package/fesm2022/slotted-angular-drawer.mjs +1397 -0
- package/fesm2022/slotted-angular-drawer.mjs.map +1 -0
- package/fesm2022/slotted-angular-entity-picker.mjs +1987 -0
- package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-event-calendar.mjs +2934 -0
- package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -0
- package/fesm2022/slotted-angular-field-group.mjs +301 -0
- package/fesm2022/slotted-angular-field-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-field.mjs +928 -0
- package/fesm2022/slotted-angular-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-filter-bar.mjs +3107 -0
- package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -0
- package/fesm2022/slotted-angular-form.mjs +592 -0
- package/fesm2022/slotted-angular-form.mjs.map +1 -0
- package/fesm2022/slotted-angular-fullscreen.mjs +314 -0
- package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -0
- package/fesm2022/slotted-angular-grid.mjs +58 -0
- package/fesm2022/slotted-angular-grid.mjs.map +1 -0
- package/fesm2022/slotted-angular-highlight.mjs +123 -0
- package/fesm2022/slotted-angular-highlight.mjs.map +1 -0
- package/fesm2022/slotted-angular-hover-card.mjs +326 -0
- package/fesm2022/slotted-angular-hover-card.mjs.map +1 -0
- package/fesm2022/slotted-angular-i18n.mjs +75 -0
- package/fesm2022/slotted-angular-i18n.mjs.map +1 -0
- package/fesm2022/slotted-angular-icon.mjs +232 -0
- package/fesm2022/slotted-angular-icon.mjs.map +1 -0
- package/fesm2022/slotted-angular-image.mjs +442 -0
- package/fesm2022/slotted-angular-image.mjs.map +1 -0
- package/fesm2022/slotted-angular-import-export-center.mjs +1792 -0
- package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -0
- package/fesm2022/slotted-angular-inline-message.mjs +280 -0
- package/fesm2022/slotted-angular-inline-message.mjs.map +1 -0
- package/fesm2022/slotted-angular-inline.mjs +52 -0
- package/fesm2022/slotted-angular-inline.mjs.map +1 -0
- package/fesm2022/slotted-angular-kbd.mjs +284 -0
- package/fesm2022/slotted-angular-kbd.mjs.map +1 -0
- package/fesm2022/slotted-angular-link.mjs +182 -0
- package/fesm2022/slotted-angular-link.mjs.map +1 -0
- package/fesm2022/slotted-angular-list-item.mjs +367 -0
- package/fesm2022/slotted-angular-list-item.mjs.map +1 -0
- package/fesm2022/slotted-angular-list.mjs +256 -0
- package/fesm2022/slotted-angular-list.mjs.map +1 -0
- package/fesm2022/slotted-angular-listbox.mjs +1274 -0
- package/fesm2022/slotted-angular-listbox.mjs.map +1 -0
- package/fesm2022/slotted-angular-loading-overlay.mjs +451 -0
- package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -0
- package/fesm2022/slotted-angular-markdown.mjs +914 -0
- package/fesm2022/slotted-angular-markdown.mjs.map +1 -0
- package/fesm2022/slotted-angular-menu.mjs +1211 -0
- package/fesm2022/slotted-angular-menu.mjs.map +1 -0
- package/fesm2022/slotted-angular-menubar.mjs +230 -0
- package/fesm2022/slotted-angular-menubar.mjs.map +1 -0
- package/fesm2022/slotted-angular-message-scroller.mjs +378 -0
- package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -0
- package/fesm2022/slotted-angular-message.mjs +866 -0
- package/fesm2022/slotted-angular-message.mjs.map +1 -0
- package/fesm2022/slotted-angular-multi-select.mjs +1939 -0
- package/fesm2022/slotted-angular-multi-select.mjs.map +1 -0
- package/fesm2022/slotted-angular-navigation-menu.mjs +770 -0
- package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -0
- package/fesm2022/slotted-angular-notification-center.mjs +1172 -0
- package/fesm2022/slotted-angular-notification-center.mjs.map +1 -0
- package/fesm2022/slotted-angular-number-field.mjs +966 -0
- package/fesm2022/slotted-angular-number-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-otp-input.mjs +629 -0
- package/fesm2022/slotted-angular-otp-input.mjs.map +1 -0
- package/fesm2022/slotted-angular-page-header.mjs +788 -0
- package/fesm2022/slotted-angular-page-header.mjs.map +1 -0
- package/fesm2022/slotted-angular-page.mjs +255 -0
- package/fesm2022/slotted-angular-page.mjs.map +1 -0
- package/fesm2022/slotted-angular-pagination.mjs +562 -0
- package/fesm2022/slotted-angular-pagination.mjs.map +1 -0
- package/fesm2022/slotted-angular-popover.mjs +799 -0
- package/fesm2022/slotted-angular-popover.mjs.map +1 -0
- package/fesm2022/slotted-angular-progress-indicator.mjs +572 -0
- package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -0
- package/fesm2022/slotted-angular-prompt-composer.mjs +596 -0
- package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -0
- package/fesm2022/slotted-angular-prose.mjs +314 -0
- package/fesm2022/slotted-angular-prose.mjs.map +1 -0
- package/fesm2022/slotted-angular-radio-group.mjs +469 -0
- package/fesm2022/slotted-angular-radio-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-rating.mjs +1174 -0
- package/fesm2022/slotted-angular-rating.mjs.map +1 -0
- package/fesm2022/slotted-angular-result-state.mjs +330 -0
- package/fesm2022/slotted-angular-result-state.mjs.map +1 -0
- package/fesm2022/slotted-angular-saved-views.mjs +877 -0
- package/fesm2022/slotted-angular-saved-views.mjs.map +1 -0
- package/fesm2022/slotted-angular-scroll-area.mjs +294 -0
- package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -0
- package/fesm2022/slotted-angular-section.mjs +266 -0
- package/fesm2022/slotted-angular-section.mjs.map +1 -0
- package/fesm2022/slotted-angular-segmented-control.mjs +454 -0
- package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -0
- package/fesm2022/slotted-angular-select.mjs +1899 -0
- package/fesm2022/slotted-angular-select.mjs.map +1 -0
- package/fesm2022/slotted-angular-side-navigation.mjs +1042 -0
- package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -0
- package/fesm2022/slotted-angular-skeleton.mjs +316 -0
- package/fesm2022/slotted-angular-skeleton.mjs.map +1 -0
- package/fesm2022/slotted-angular-slider.mjs +586 -0
- package/fesm2022/slotted-angular-slider.mjs.map +1 -0
- package/fesm2022/slotted-angular-sparkline.mjs +235 -0
- package/fesm2022/slotted-angular-sparkline.mjs.map +1 -0
- package/fesm2022/slotted-angular-split-button.mjs +331 -0
- package/fesm2022/slotted-angular-split-button.mjs.map +1 -0
- package/fesm2022/slotted-angular-splitter.mjs +516 -0
- package/fesm2022/slotted-angular-splitter.mjs.map +1 -0
- package/fesm2022/slotted-angular-stack.mjs +48 -0
- package/fesm2022/slotted-angular-stack.mjs.map +1 -0
- package/fesm2022/slotted-angular-stat-card.mjs +478 -0
- package/fesm2022/slotted-angular-stat-card.mjs.map +1 -0
- package/fesm2022/slotted-angular-status-indicator.mjs +155 -0
- package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -0
- package/fesm2022/slotted-angular-stepper.mjs +536 -0
- package/fesm2022/slotted-angular-stepper.mjs.map +1 -0
- package/fesm2022/slotted-angular-switch.mjs +447 -0
- package/fesm2022/slotted-angular-switch.mjs.map +1 -0
- package/fesm2022/slotted-angular-table-of-contents.mjs +750 -0
- package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -0
- package/fesm2022/slotted-angular-table.mjs +2518 -0
- package/fesm2022/slotted-angular-table.mjs.map +1 -0
- package/fesm2022/slotted-angular-tabs.mjs +829 -0
- package/fesm2022/slotted-angular-tabs.mjs.map +1 -0
- package/fesm2022/slotted-angular-tag.mjs +595 -0
- package/fesm2022/slotted-angular-tag.mjs.map +1 -0
- package/fesm2022/slotted-angular-tags-input.mjs +1211 -0
- package/fesm2022/slotted-angular-tags-input.mjs.map +1 -0
- package/fesm2022/slotted-angular-text-field.mjs +674 -0
- package/fesm2022/slotted-angular-text-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-textarea.mjs +275 -0
- package/fesm2022/slotted-angular-textarea.mjs.map +1 -0
- package/fesm2022/slotted-angular-theme.mjs +45 -0
- package/fesm2022/slotted-angular-theme.mjs.map +1 -0
- package/fesm2022/slotted-angular-time-field.mjs +895 -0
- package/fesm2022/slotted-angular-time-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-time-picker.mjs +856 -0
- package/fesm2022/slotted-angular-time-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-time-range-picker.mjs +1534 -0
- package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-timeline.mjs +928 -0
- package/fesm2022/slotted-angular-timeline.mjs.map +1 -0
- package/fesm2022/slotted-angular-toast.mjs +917 -0
- package/fesm2022/slotted-angular-toast.mjs.map +1 -0
- package/fesm2022/slotted-angular-toggle-group.mjs +311 -0
- package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-toggle.mjs +162 -0
- package/fesm2022/slotted-angular-toggle.mjs.map +1 -0
- package/fesm2022/slotted-angular-toolbar.mjs +536 -0
- package/fesm2022/slotted-angular-toolbar.mjs.map +1 -0
- package/fesm2022/slotted-angular-tooltip.mjs +798 -0
- package/fesm2022/slotted-angular-tooltip.mjs.map +1 -0
- package/fesm2022/slotted-angular-top-navigation.mjs +1308 -0
- package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -0
- package/fesm2022/slotted-angular-tour.mjs +1330 -0
- package/fesm2022/slotted-angular-tour.mjs.map +1 -0
- package/fesm2022/slotted-angular-transfer.mjs +1406 -0
- package/fesm2022/slotted-angular-transfer.mjs.map +1 -0
- package/fesm2022/slotted-angular-tree.mjs +1448 -0
- package/fesm2022/slotted-angular-tree.mjs.map +1 -0
- package/fesm2022/slotted-angular-typography.mjs +184 -0
- package/fesm2022/slotted-angular-typography.mjs.map +1 -0
- package/fesm2022/slotted-angular-upload.mjs +1523 -0
- package/fesm2022/slotted-angular-upload.mjs.map +1 -0
- package/fesm2022/slotted-angular-visually-hidden.mjs +32 -0
- package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -0
- package/fesm2022/slotted-angular-wizard.mjs +1715 -0
- package/fesm2022/slotted-angular-wizard.mjs.map +1 -0
- package/fesm2022/slotted-angular.mjs +4 -0
- package/fesm2022/slotted-angular.mjs.map +1 -0
- package/package.json +537 -3
- package/types/slotted-angular-accordion.d.ts +156 -0
- package/types/slotted-angular-accordion.d.ts.map +1 -0
- package/types/slotted-angular-action-bar.d.ts +291 -0
- package/types/slotted-angular-action-bar.d.ts.map +1 -0
- package/types/slotted-angular-action-sheet.d.ts +294 -0
- package/types/slotted-angular-action-sheet.d.ts.map +1 -0
- package/types/slotted-angular-alert.d.ts +214 -0
- package/types/slotted-angular-alert.d.ts.map +1 -0
- package/types/slotted-angular-app-shell.d.ts +549 -0
- package/types/slotted-angular-app-shell.d.ts.map +1 -0
- package/types/slotted-angular-aspect-ratio.d.ts +57 -0
- package/types/slotted-angular-aspect-ratio.d.ts.map +1 -0
- package/types/slotted-angular-attachment.d.ts +294 -0
- package/types/slotted-angular-attachment.d.ts.map +1 -0
- package/types/slotted-angular-avatar-group.d.ts +119 -0
- package/types/slotted-angular-avatar-group.d.ts.map +1 -0
- package/types/slotted-angular-avatar.d.ts +202 -0
- package/types/slotted-angular-avatar.d.ts.map +1 -0
- package/types/slotted-angular-badge.d.ts +166 -0
- package/types/slotted-angular-badge.d.ts.map +1 -0
- package/types/slotted-angular-breadcrumb.d.ts +251 -0
- package/types/slotted-angular-breadcrumb.d.ts.map +1 -0
- package/types/slotted-angular-button-group.d.ts +89 -0
- package/types/slotted-angular-button-group.d.ts.map +1 -0
- package/types/slotted-angular-button.d.ts +390 -0
- package/types/slotted-angular-button.d.ts.map +1 -0
- package/types/slotted-angular-calendar.d.ts +280 -0
- package/types/slotted-angular-calendar.d.ts.map +1 -0
- package/types/slotted-angular-card.d.ts +140 -0
- package/types/slotted-angular-card.d.ts.map +1 -0
- package/types/slotted-angular-carousel.d.ts +288 -0
- package/types/slotted-angular-carousel.d.ts.map +1 -0
- package/types/slotted-angular-cascader.d.ts +351 -0
- package/types/slotted-angular-cascader.d.ts.map +1 -0
- package/types/slotted-angular-chart.d.ts +319 -0
- package/types/slotted-angular-chart.d.ts.map +1 -0
- package/types/slotted-angular-checkbox-group.d.ts +156 -0
- package/types/slotted-angular-checkbox-group.d.ts.map +1 -0
- package/types/slotted-angular-checkbox.d.ts +197 -0
- package/types/slotted-angular-checkbox.d.ts.map +1 -0
- package/types/slotted-angular-code-block.d.ts +158 -0
- package/types/slotted-angular-code-block.d.ts.map +1 -0
- package/types/slotted-angular-collapsible.d.ts +272 -0
- package/types/slotted-angular-collapsible.d.ts.map +1 -0
- package/types/slotted-angular-color-picker.d.ts +181 -0
- package/types/slotted-angular-color-picker.d.ts.map +1 -0
- package/types/slotted-angular-column-manager.d.ts +200 -0
- package/types/slotted-angular-column-manager.d.ts.map +1 -0
- package/types/slotted-angular-combobox.d.ts +449 -0
- package/types/slotted-angular-combobox.d.ts.map +1 -0
- package/types/slotted-angular-command-palette.d.ts +256 -0
- package/types/slotted-angular-command-palette.d.ts.map +1 -0
- package/types/slotted-angular-container.d.ts +84 -0
- package/types/slotted-angular-container.d.ts.map +1 -0
- package/types/slotted-angular-context-menu.d.ts +84 -0
- package/types/slotted-angular-context-menu.d.ts.map +1 -0
- package/types/slotted-angular-currency-field.d.ts +480 -0
- package/types/slotted-angular-currency-field.d.ts.map +1 -0
- package/types/slotted-angular-dashboard-grid.d.ts +341 -0
- package/types/slotted-angular-dashboard-grid.d.ts.map +1 -0
- package/types/slotted-angular-data-grid.d.ts +1077 -0
- package/types/slotted-angular-data-grid.d.ts.map +1 -0
- package/types/slotted-angular-data-list.d.ts +272 -0
- package/types/slotted-angular-data-list.d.ts.map +1 -0
- package/types/slotted-angular-date-field.d.ts +320 -0
- package/types/slotted-angular-date-field.d.ts.map +1 -0
- package/types/slotted-angular-date-picker.d.ts +224 -0
- package/types/slotted-angular-date-picker.d.ts.map +1 -0
- package/types/slotted-angular-date-range-picker.d.ts +310 -0
- package/types/slotted-angular-date-range-picker.d.ts.map +1 -0
- package/types/slotted-angular-datetime-field.d.ts +362 -0
- package/types/slotted-angular-datetime-field.d.ts.map +1 -0
- package/types/slotted-angular-datetime-picker.d.ts +370 -0
- package/types/slotted-angular-datetime-picker.d.ts.map +1 -0
- package/types/slotted-angular-datetime-range-picker.d.ts +459 -0
- package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -0
- package/types/slotted-angular-description-list.d.ts +281 -0
- package/types/slotted-angular-description-list.d.ts.map +1 -0
- package/types/slotted-angular-detail-panel.d.ts +240 -0
- package/types/slotted-angular-detail-panel.d.ts.map +1 -0
- package/types/slotted-angular-dialog.d.ts +497 -0
- package/types/slotted-angular-dialog.d.ts.map +1 -0
- package/types/slotted-angular-divider.d.ts +40 -0
- package/types/slotted-angular-divider.d.ts.map +1 -0
- package/types/slotted-angular-drawer.d.ts +532 -0
- package/types/slotted-angular-drawer.d.ts.map +1 -0
- package/types/slotted-angular-entity-picker.d.ts +338 -0
- package/types/slotted-angular-entity-picker.d.ts.map +1 -0
- package/types/slotted-angular-event-calendar.d.ts +574 -0
- package/types/slotted-angular-event-calendar.d.ts.map +1 -0
- package/types/slotted-angular-field-group.d.ts +152 -0
- package/types/slotted-angular-field-group.d.ts.map +1 -0
- package/types/slotted-angular-field.d.ts +535 -0
- package/types/slotted-angular-field.d.ts.map +1 -0
- package/types/slotted-angular-filter-bar.d.ts +573 -0
- package/types/slotted-angular-filter-bar.d.ts.map +1 -0
- package/types/slotted-angular-form.d.ts +298 -0
- package/types/slotted-angular-form.d.ts.map +1 -0
- package/types/slotted-angular-fullscreen.d.ts +145 -0
- package/types/slotted-angular-fullscreen.d.ts.map +1 -0
- package/types/slotted-angular-grid.d.ts +50 -0
- package/types/slotted-angular-grid.d.ts.map +1 -0
- package/types/slotted-angular-highlight.d.ts +93 -0
- package/types/slotted-angular-highlight.d.ts.map +1 -0
- package/types/slotted-angular-hover-card.d.ts +140 -0
- package/types/slotted-angular-hover-card.d.ts.map +1 -0
- package/types/slotted-angular-i18n.d.ts +46 -0
- package/types/slotted-angular-i18n.d.ts.map +1 -0
- package/types/slotted-angular-icon.d.ts +94 -0
- package/types/slotted-angular-icon.d.ts.map +1 -0
- package/types/slotted-angular-image.d.ts +251 -0
- package/types/slotted-angular-image.d.ts.map +1 -0
- package/types/slotted-angular-import-export-center.d.ts +351 -0
- package/types/slotted-angular-import-export-center.d.ts.map +1 -0
- package/types/slotted-angular-inline-message.d.ts +195 -0
- package/types/slotted-angular-inline-message.d.ts.map +1 -0
- package/types/slotted-angular-inline.d.ts +41 -0
- package/types/slotted-angular-inline.d.ts.map +1 -0
- package/types/slotted-angular-kbd.d.ts +174 -0
- package/types/slotted-angular-kbd.d.ts.map +1 -0
- package/types/slotted-angular-link.d.ts +94 -0
- package/types/slotted-angular-link.d.ts.map +1 -0
- package/types/slotted-angular-list-item.d.ts +210 -0
- package/types/slotted-angular-list-item.d.ts.map +1 -0
- package/types/slotted-angular-list.d.ts +176 -0
- package/types/slotted-angular-list.d.ts.map +1 -0
- package/types/slotted-angular-listbox.d.ts +470 -0
- package/types/slotted-angular-listbox.d.ts.map +1 -0
- package/types/slotted-angular-loading-overlay.d.ts +219 -0
- package/types/slotted-angular-loading-overlay.d.ts.map +1 -0
- package/types/slotted-angular-markdown.d.ts +172 -0
- package/types/slotted-angular-markdown.d.ts.map +1 -0
- package/types/slotted-angular-menu.d.ts +448 -0
- package/types/slotted-angular-menu.d.ts.map +1 -0
- package/types/slotted-angular-menubar.d.ts +90 -0
- package/types/slotted-angular-menubar.d.ts.map +1 -0
- package/types/slotted-angular-message-scroller.d.ts +151 -0
- package/types/slotted-angular-message-scroller.d.ts.map +1 -0
- package/types/slotted-angular-message.d.ts +348 -0
- package/types/slotted-angular-message.d.ts.map +1 -0
- package/types/slotted-angular-multi-select.d.ts +462 -0
- package/types/slotted-angular-multi-select.d.ts.map +1 -0
- package/types/slotted-angular-navigation-menu.d.ts +309 -0
- package/types/slotted-angular-navigation-menu.d.ts.map +1 -0
- package/types/slotted-angular-notification-center.d.ts +318 -0
- package/types/slotted-angular-notification-center.d.ts.map +1 -0
- package/types/slotted-angular-number-field.d.ts +402 -0
- package/types/slotted-angular-number-field.d.ts.map +1 -0
- package/types/slotted-angular-otp-input.d.ts +286 -0
- package/types/slotted-angular-otp-input.d.ts.map +1 -0
- package/types/slotted-angular-page-header.d.ts +334 -0
- package/types/slotted-angular-page-header.d.ts.map +1 -0
- package/types/slotted-angular-page.d.ts +141 -0
- package/types/slotted-angular-page.d.ts.map +1 -0
- package/types/slotted-angular-pagination.d.ts +213 -0
- package/types/slotted-angular-pagination.d.ts.map +1 -0
- package/types/slotted-angular-popover.d.ts +366 -0
- package/types/slotted-angular-popover.d.ts.map +1 -0
- package/types/slotted-angular-progress-indicator.d.ts +312 -0
- package/types/slotted-angular-progress-indicator.d.ts.map +1 -0
- package/types/slotted-angular-prompt-composer.d.ts +242 -0
- package/types/slotted-angular-prompt-composer.d.ts.map +1 -0
- package/types/slotted-angular-prose.d.ts +171 -0
- package/types/slotted-angular-prose.d.ts.map +1 -0
- package/types/slotted-angular-radio-group.d.ts +268 -0
- package/types/slotted-angular-radio-group.d.ts.map +1 -0
- package/types/slotted-angular-rating.d.ts +374 -0
- package/types/slotted-angular-rating.d.ts.map +1 -0
- package/types/slotted-angular-result-state.d.ts +217 -0
- package/types/slotted-angular-result-state.d.ts.map +1 -0
- package/types/slotted-angular-saved-views.d.ts +198 -0
- package/types/slotted-angular-saved-views.d.ts.map +1 -0
- package/types/slotted-angular-scroll-area.d.ts +186 -0
- package/types/slotted-angular-scroll-area.d.ts.map +1 -0
- package/types/slotted-angular-section.d.ts +143 -0
- package/types/slotted-angular-section.d.ts.map +1 -0
- package/types/slotted-angular-segmented-control.d.ts +251 -0
- package/types/slotted-angular-segmented-control.d.ts.map +1 -0
- package/types/slotted-angular-select.d.ts +507 -0
- package/types/slotted-angular-select.d.ts.map +1 -0
- package/types/slotted-angular-side-navigation.d.ts +373 -0
- package/types/slotted-angular-side-navigation.d.ts.map +1 -0
- package/types/slotted-angular-skeleton.d.ts +198 -0
- package/types/slotted-angular-skeleton.d.ts.map +1 -0
- package/types/slotted-angular-slider.d.ts +216 -0
- package/types/slotted-angular-slider.d.ts.map +1 -0
- package/types/slotted-angular-sparkline.d.ts +106 -0
- package/types/slotted-angular-sparkline.d.ts.map +1 -0
- package/types/slotted-angular-split-button.d.ts +180 -0
- package/types/slotted-angular-split-button.d.ts.map +1 -0
- package/types/slotted-angular-splitter.d.ts +206 -0
- package/types/slotted-angular-splitter.d.ts.map +1 -0
- package/types/slotted-angular-stack.d.ts +38 -0
- package/types/slotted-angular-stack.d.ts.map +1 -0
- package/types/slotted-angular-stat-card.d.ts +232 -0
- package/types/slotted-angular-stat-card.d.ts.map +1 -0
- package/types/slotted-angular-status-indicator.d.ts +106 -0
- package/types/slotted-angular-status-indicator.d.ts.map +1 -0
- package/types/slotted-angular-stepper.d.ts +198 -0
- package/types/slotted-angular-stepper.d.ts.map +1 -0
- package/types/slotted-angular-switch.d.ts +243 -0
- package/types/slotted-angular-switch.d.ts.map +1 -0
- package/types/slotted-angular-table-of-contents.d.ts +210 -0
- package/types/slotted-angular-table-of-contents.d.ts.map +1 -0
- package/types/slotted-angular-table.d.ts +888 -0
- package/types/slotted-angular-table.d.ts.map +1 -0
- package/types/slotted-angular-tabs.d.ts +340 -0
- package/types/slotted-angular-tabs.d.ts.map +1 -0
- package/types/slotted-angular-tag.d.ts +279 -0
- package/types/slotted-angular-tag.d.ts.map +1 -0
- package/types/slotted-angular-tags-input.d.ts +302 -0
- package/types/slotted-angular-tags-input.d.ts.map +1 -0
- package/types/slotted-angular-text-field.d.ts +334 -0
- package/types/slotted-angular-text-field.d.ts.map +1 -0
- package/types/slotted-angular-textarea.d.ts +150 -0
- package/types/slotted-angular-textarea.d.ts.map +1 -0
- package/types/slotted-angular-theme.d.ts +26 -0
- package/types/slotted-angular-theme.d.ts.map +1 -0
- package/types/slotted-angular-time-field.d.ts +300 -0
- package/types/slotted-angular-time-field.d.ts.map +1 -0
- package/types/slotted-angular-time-picker.d.ts +260 -0
- package/types/slotted-angular-time-picker.d.ts.map +1 -0
- package/types/slotted-angular-time-range-picker.d.ts +401 -0
- package/types/slotted-angular-time-range-picker.d.ts.map +1 -0
- package/types/slotted-angular-timeline.d.ts +329 -0
- package/types/slotted-angular-timeline.d.ts.map +1 -0
- package/types/slotted-angular-toast.d.ts +340 -0
- package/types/slotted-angular-toast.d.ts.map +1 -0
- package/types/slotted-angular-toggle-group.d.ts +167 -0
- package/types/slotted-angular-toggle-group.d.ts.map +1 -0
- package/types/slotted-angular-toggle.d.ts +106 -0
- package/types/slotted-angular-toggle.d.ts.map +1 -0
- package/types/slotted-angular-toolbar.d.ts +252 -0
- package/types/slotted-angular-toolbar.d.ts.map +1 -0
- package/types/slotted-angular-tooltip.d.ts +388 -0
- package/types/slotted-angular-tooltip.d.ts.map +1 -0
- package/types/slotted-angular-top-navigation.d.ts +442 -0
- package/types/slotted-angular-top-navigation.d.ts.map +1 -0
- package/types/slotted-angular-tour.d.ts +440 -0
- package/types/slotted-angular-tour.d.ts.map +1 -0
- package/types/slotted-angular-transfer.d.ts +296 -0
- package/types/slotted-angular-transfer.d.ts.map +1 -0
- package/types/slotted-angular-tree.d.ts +499 -0
- package/types/slotted-angular-tree.d.ts.map +1 -0
- package/types/slotted-angular-typography.d.ts +89 -0
- package/types/slotted-angular-typography.d.ts.map +1 -0
- package/types/slotted-angular-upload.d.ts +365 -0
- package/types/slotted-angular-upload.d.ts.map +1 -0
- package/types/slotted-angular-visually-hidden.d.ts +19 -0
- package/types/slotted-angular-visually-hidden.d.ts.map +1 -0
- package/types/slotted-angular-wizard.d.ts +441 -0
- package/types/slotted-angular-wizard.d.ts.map +1 -0
- package/types/slotted-angular.d.ts +3 -0
- package/types/slotted-angular.d.ts.map +1 -0
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, model, input, booleanAttribute, output, ElementRef, signal, DestroyRef, afterNextRender, effect, untracked, Directive, HostAttributeToken, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { injectMessages } from '@slotted/angular/i18n';
|
|
4
|
+
import { SlGlyph, SlIcon } from '@slotted/angular/icon';
|
|
5
|
+
import { fullscreenSupported, createFullscreen } from '@slotted/core/fullscreen';
|
|
6
|
+
import { fullscreenMessages } from '@slotted/core/i18n';
|
|
7
|
+
import { createControllable } from '@slotted/core/state';
|
|
8
|
+
|
|
9
|
+
const FALLBACK = {
|
|
10
|
+
mode: 'auto',
|
|
11
|
+
navigationUI: 'auto',
|
|
12
|
+
size: 'md',
|
|
13
|
+
variant: 'ghost',
|
|
14
|
+
};
|
|
15
|
+
const FULLSCREEN_DEFAULTS = new InjectionToken('slotted fullscreen defaults', { providedIn: 'root', factory: () => FALLBACK });
|
|
16
|
+
/**
|
|
17
|
+
* An application decides once whether its regions ask the platform and how the
|
|
18
|
+
* control is drawn; a region or a control that states any of them itself still
|
|
19
|
+
* wins. The words come from the language in force (`provideSlotted`).
|
|
20
|
+
*/
|
|
21
|
+
function provideFullscreenDefaults(defaults) {
|
|
22
|
+
return {
|
|
23
|
+
provide: FULLSCREEN_DEFAULTS,
|
|
24
|
+
useFactory: () => ({ ...FALLBACK, ...defaults }),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function injectFullscreenDefaults() {
|
|
28
|
+
return inject(FULLSCREEN_DEFAULTS);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* A region the reader can give the whole screen: by the Fullscreen API where
|
|
33
|
+
* the page may ask, fixed over the page where it may not. At rest it paints
|
|
34
|
+
* nothing — it is the container the consumer already had — so it is a
|
|
35
|
+
* directive on that container rather than a wrapper around it.
|
|
36
|
+
*
|
|
37
|
+
* `[(fullscreen)]` holds the state; every move is first asked through
|
|
38
|
+
* `fullscreenChangeRequest`, whose `cancel()` refuses it. `Escape` in native
|
|
39
|
+
* full screen belongs to the agent, and no listener is written for it; the
|
|
40
|
+
* leave arrives as a request with the reason `escape`, and the agent has
|
|
41
|
+
* already left by then.
|
|
42
|
+
*/
|
|
43
|
+
class SlFullscreen {
|
|
44
|
+
fullscreen = model(false, /* @ts-ignore */
|
|
45
|
+
...(ngDevMode ? [{ debugName: "fullscreen" }] : /* istanbul ignore next */ []));
|
|
46
|
+
/** The value an uncontrolled region starts from, read once. */
|
|
47
|
+
defaultFullscreen = input(false, { ...(ngDevMode ? { debugName: "defaultFullscreen" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
48
|
+
/** `auto` asks the platform and falls back to the layout; `layout` never asks. */
|
|
49
|
+
policy = input(undefined, { ...(ngDevMode ? { debugName: "policy" } : /* istanbul ignore next */ {}), alias: 'mode' });
|
|
50
|
+
navigationUI = input(undefined, /* @ts-ignore */
|
|
51
|
+
...(ngDevMode ? [{ debugName: "navigationUI" }] : /* istanbul ignore next */ []));
|
|
52
|
+
/**
|
|
53
|
+
* Words laid over the catalog of the language in force, key by key: the
|
|
54
|
+
* control's (`enter`, `exit`) and the announcements (`entered`, `exited`).
|
|
55
|
+
*/
|
|
56
|
+
messages = input(undefined, /* @ts-ignore */
|
|
57
|
+
...(ngDevMode ? [{ debugName: "messages" }] : /* istanbul ignore next */ []));
|
|
58
|
+
fullscreenChangeRequest = output();
|
|
59
|
+
/** The platform was absent or refused. The region is in the layout by then. */
|
|
60
|
+
fullscreenError = output();
|
|
61
|
+
defaults = injectFullscreenDefaults();
|
|
62
|
+
element = inject((ElementRef)).nativeElement;
|
|
63
|
+
/** The way that answered, or `null` while the region is not full screen. */
|
|
64
|
+
mode = signal(null, /* @ts-ignore */
|
|
65
|
+
...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
66
|
+
/** Whether the page may ask for native full screen. `false` until rendered. */
|
|
67
|
+
supported = signal(false, /* @ts-ignore */
|
|
68
|
+
...(ngDevMode ? [{ debugName: "supported" }] : /* istanbul ignore next */ []));
|
|
69
|
+
/** The last refusal, cleared on the next entry. */
|
|
70
|
+
error = signal(null, /* @ts-ignore */
|
|
71
|
+
...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
72
|
+
/** The family's words in the language in force, with this region's `messages` laid over them. */
|
|
73
|
+
t = injectMessages(fullscreenMessages, this.messages);
|
|
74
|
+
controller = null;
|
|
75
|
+
/* Set when the agent left native and the state was kept: a new request
|
|
76
|
+
outside a gesture would only be refused. */
|
|
77
|
+
agentLeft = false;
|
|
78
|
+
constructor() {
|
|
79
|
+
const destroyRef = inject(DestroyRef);
|
|
80
|
+
afterNextRender(() => {
|
|
81
|
+
if (this.defaultFullscreen())
|
|
82
|
+
this.fullscreen.set(true);
|
|
83
|
+
this.supported.set(fullscreenSupported(this.element.ownerDocument));
|
|
84
|
+
this.controller = createFullscreen(this.element, this.options());
|
|
85
|
+
this.apply();
|
|
86
|
+
});
|
|
87
|
+
/* Options the controller reads on its next move. */
|
|
88
|
+
effect(() => {
|
|
89
|
+
const options = this.options();
|
|
90
|
+
untracked(() => this.controller?.update(options));
|
|
91
|
+
});
|
|
92
|
+
/* The state applied: a two-way value the page set, and a value the page
|
|
93
|
+
kept after the agent left. */
|
|
94
|
+
effect(() => {
|
|
95
|
+
this.fullscreen();
|
|
96
|
+
this.mode();
|
|
97
|
+
untracked(() => this.apply());
|
|
98
|
+
});
|
|
99
|
+
destroyRef.onDestroy(() => {
|
|
100
|
+
this.controller?.destroy();
|
|
101
|
+
this.controller = null;
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/** Asks to enter. From code the reason is `programmatic`. */
|
|
105
|
+
enter(reason = 'programmatic', source) {
|
|
106
|
+
this.request(true, reason, source);
|
|
107
|
+
}
|
|
108
|
+
exit(reason = 'programmatic', source) {
|
|
109
|
+
this.request(false, reason, source);
|
|
110
|
+
}
|
|
111
|
+
toggle(reason = 'programmatic', source) {
|
|
112
|
+
this.request(!this.fullscreen(), reason, source);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The request, and on acceptance the entry itself — inside the handler that
|
|
116
|
+
* asked, because the agent grants native full screen only to a request made
|
|
117
|
+
* during a gesture.
|
|
118
|
+
*/
|
|
119
|
+
request(next, reason, source) {
|
|
120
|
+
let cancelled = false;
|
|
121
|
+
const state = createControllable({
|
|
122
|
+
initial: this.fullscreen(),
|
|
123
|
+
onRequest: (request) => {
|
|
124
|
+
this.fullscreenChangeRequest.emit(request);
|
|
125
|
+
cancelled = request.cancelled;
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
if (!state.request(next, reason, source) || cancelled)
|
|
129
|
+
return;
|
|
130
|
+
this.fullscreen.set(next);
|
|
131
|
+
if (next) {
|
|
132
|
+
this.error.set(null);
|
|
133
|
+
void this.controller?.enter();
|
|
134
|
+
}
|
|
135
|
+
else
|
|
136
|
+
void this.controller?.exit();
|
|
137
|
+
}
|
|
138
|
+
apply() {
|
|
139
|
+
const controller = this.controller;
|
|
140
|
+
if (!controller)
|
|
141
|
+
return;
|
|
142
|
+
if (this.fullscreen() && controller.mode === null) {
|
|
143
|
+
const native = !this.agentLeft;
|
|
144
|
+
this.agentLeft = false;
|
|
145
|
+
void controller.enter({ native });
|
|
146
|
+
}
|
|
147
|
+
else if (!this.fullscreen() && controller.mode !== null) {
|
|
148
|
+
void controller.exit();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
options() {
|
|
152
|
+
return {
|
|
153
|
+
policy: this.policy() ?? this.defaults.mode,
|
|
154
|
+
navigationUI: this.navigationUI() ?? this.defaults.navigationUI,
|
|
155
|
+
t: this.t,
|
|
156
|
+
onModeChange: (mode) => this.mode.set(mode),
|
|
157
|
+
onError: (failure) => {
|
|
158
|
+
this.error.set(failure);
|
|
159
|
+
this.fullscreenError.emit(failure);
|
|
160
|
+
},
|
|
161
|
+
onExit: (source) => {
|
|
162
|
+
/* In native the agent has already left and the controller is out; in
|
|
163
|
+
the layout `Escape` only asked, and the region is still there. */
|
|
164
|
+
this.agentLeft = this.controller?.mode === null;
|
|
165
|
+
this.request(false, 'escape', source);
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
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 });
|
|
171
|
+
}
|
|
172
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFullscreen, decorators: [{
|
|
173
|
+
type: Directive,
|
|
174
|
+
args: [{
|
|
175
|
+
selector: '[slFullscreen]',
|
|
176
|
+
standalone: true,
|
|
177
|
+
exportAs: 'slFullscreen',
|
|
178
|
+
host: {
|
|
179
|
+
'data-ui': 'fullscreen',
|
|
180
|
+
'data-part': 'root',
|
|
181
|
+
'[attr.data-fullscreen]': "fullscreen() ? '' : null",
|
|
182
|
+
'[attr.data-mode]': 'mode()',
|
|
183
|
+
},
|
|
184
|
+
}]
|
|
185
|
+
}], ctorParameters: () => [], propDecorators: { fullscreen: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullscreen", required: false }] }, { type: i0.Output, args: ["fullscreenChange"] }], defaultFullscreen: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultFullscreen", required: false }] }], policy: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], navigationUI: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigationUI", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], fullscreenChangeRequest: [{ type: i0.Output, args: ["fullscreenChangeRequest"] }], fullscreenError: [{ type: i0.Output, args: ["fullscreenError"] }] } });
|
|
186
|
+
/**
|
|
187
|
+
* A click synthesised by the keyboard reports no detail; a real one reports
|
|
188
|
+
* the click count.
|
|
189
|
+
*/
|
|
190
|
+
function activationReason(event) {
|
|
191
|
+
return event instanceof MouseEvent && event.detail === 0 ? 'keyboard' : 'pointer';
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* The control. Its words and its mark say what the press does next and change
|
|
195
|
+
* with the state, so it is not a toggle and writes no `aria-pressed` (APG
|
|
196
|
+
* Button pattern). Inside `[slFullscreen]` it reaches the region by injection;
|
|
197
|
+
* anywhere else it takes the region's instance: `[slFullscreenTrigger]="fs"`.
|
|
198
|
+
*
|
|
199
|
+
* Projected content replaces the words, and an element marked `slFullscreenIcon`
|
|
200
|
+
* replaces the mark; both can read `fs.fullscreen()` to follow the state.
|
|
201
|
+
*/
|
|
202
|
+
class SlFullscreenTrigger {
|
|
203
|
+
/** The region, when the control is not inside it. */
|
|
204
|
+
target = input(undefined, { ...(ngDevMode ? { debugName: "target" } : /* istanbul ignore next */ {}), alias: 'slFullscreenTrigger' });
|
|
205
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
206
|
+
iconOnly = input(false, { ...(ngDevMode ? { debugName: "iconOnly" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
207
|
+
size = input(undefined, /* @ts-ignore */
|
|
208
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
209
|
+
variant = input(undefined, /* @ts-ignore */
|
|
210
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
211
|
+
defaults = injectFullscreenDefaults();
|
|
212
|
+
/* A control with no region has no region's words, and speaks the catalog's. */
|
|
213
|
+
own = injectMessages(fullscreenMessages);
|
|
214
|
+
enclosing = inject(SlFullscreen, { optional: true });
|
|
215
|
+
element = inject((ElementRef)).nativeElement;
|
|
216
|
+
destroyRef = inject(DestroyRef);
|
|
217
|
+
/** A `type` the consumer wrote survives, read before the host binding writes it. */
|
|
218
|
+
writtenType = inject(new HostAttributeToken('type'), { optional: true });
|
|
219
|
+
type = this.writtenType ?? 'button';
|
|
220
|
+
region = computed(() => {
|
|
221
|
+
const target = this.target();
|
|
222
|
+
return target instanceof SlFullscreen ? target : this.enclosing;
|
|
223
|
+
}, /* @ts-ignore */
|
|
224
|
+
...(ngDevMode ? [{ debugName: "region" }] : /* istanbul ignore next */ []));
|
|
225
|
+
on = computed(() => this.region()?.fullscreen() ?? false, /* @ts-ignore */
|
|
226
|
+
...(ngDevMode ? [{ debugName: "on" }] : /* istanbul ignore next */ []));
|
|
227
|
+
label = computed(() => (this.region()?.t ?? this.own)(this.on() ? 'exit' : 'enter'), /* @ts-ignore */
|
|
228
|
+
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
229
|
+
resolvedSize = computed(() => this.size() ?? this.defaults.size, /* @ts-ignore */
|
|
230
|
+
...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
|
|
231
|
+
resolvedVariant = computed(() => this.variant() ?? this.defaults.variant, /* @ts-ignore */
|
|
232
|
+
...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
|
|
233
|
+
/**
|
|
234
|
+
* After the view: a `(click)` the consumer wrote on the same element is
|
|
235
|
+
* bound first, so its `preventDefault()` is read before the family acts.
|
|
236
|
+
*/
|
|
237
|
+
ngAfterViewInit() {
|
|
238
|
+
const listener = (event) => {
|
|
239
|
+
if (this.disabled() || event.defaultPrevented)
|
|
240
|
+
return;
|
|
241
|
+
this.region()?.toggle(activationReason(event), event);
|
|
242
|
+
};
|
|
243
|
+
this.element.addEventListener('click', listener);
|
|
244
|
+
this.destroyRef.onDestroy(() => this.element.removeEventListener('click', listener));
|
|
245
|
+
}
|
|
246
|
+
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"
|
|
248
|
+
><ng-content select="[slFullscreenIcon]"
|
|
249
|
+
><span slIcon
|
|
250
|
+
><svg slGlyph [name]="on() ? 'minimize' : 'maximize'"></svg></span></ng-content></span
|
|
251
|
+
><span data-part="label"
|
|
252
|
+
><ng-content>{{ label() }}</ng-content></span
|
|
253
|
+
>`, 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
|
+
}
|
|
255
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFullscreenTrigger, decorators: [{
|
|
256
|
+
type: Component,
|
|
257
|
+
args: [{ selector: 'button[slFullscreenTrigger]', standalone: true, exportAs: 'slFullscreenTrigger', imports: [SlGlyph, SlIcon], template: `<span data-part="icon" aria-hidden="true"
|
|
258
|
+
><ng-content select="[slFullscreenIcon]"
|
|
259
|
+
><span slIcon
|
|
260
|
+
><svg slGlyph [name]="on() ? 'minimize' : 'maximize'"></svg></span></ng-content></span
|
|
261
|
+
><span data-part="label"
|
|
262
|
+
><ng-content>{{ label() }}</ng-content></span
|
|
263
|
+
>`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
264
|
+
'data-ui': 'fullscreen',
|
|
265
|
+
'data-part': 'trigger',
|
|
266
|
+
'[attr.type]': 'type',
|
|
267
|
+
'[attr.data-fullscreen]': "on() ? '' : null",
|
|
268
|
+
'[attr.data-disabled]': "disabled() ? '' : null",
|
|
269
|
+
'[attr.data-icon-only]': "iconOnly() ? '' : null",
|
|
270
|
+
'[attr.data-size]': 'resolvedSize()',
|
|
271
|
+
'[attr.data-variant]': 'resolvedVariant()',
|
|
272
|
+
'[disabled]': 'disabled()',
|
|
273
|
+
}, 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
|
+
}], 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
|
+
/**
|
|
276
|
+
* The part that takes the height the other children of the region leave
|
|
277
|
+
* while it is full screen — a chart under its header, a document under its
|
|
278
|
+
* toolbar — and whose first child fills it. A direct child of the region; at
|
|
279
|
+
* rest it is the element the consumer wrote, unchanged.
|
|
280
|
+
*/
|
|
281
|
+
class SlFullscreenContent {
|
|
282
|
+
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 });
|
|
284
|
+
}
|
|
285
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFullscreenContent, decorators: [{
|
|
286
|
+
type: Directive,
|
|
287
|
+
args: [{
|
|
288
|
+
selector: '[slFullscreenContent]',
|
|
289
|
+
standalone: true,
|
|
290
|
+
host: {
|
|
291
|
+
'data-ui': 'fullscreen',
|
|
292
|
+
'data-part': 'content',
|
|
293
|
+
},
|
|
294
|
+
}]
|
|
295
|
+
}] });
|
|
296
|
+
/** Marks the consumer's own mark for the control's icon part. */
|
|
297
|
+
class SlFullscreenIcon {
|
|
298
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFullscreenIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
299
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlFullscreenIcon, isStandalone: true, selector: "[slFullscreenIcon]", ngImport: i0 });
|
|
300
|
+
}
|
|
301
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlFullscreenIcon, decorators: [{
|
|
302
|
+
type: Directive,
|
|
303
|
+
args: [{
|
|
304
|
+
selector: '[slFullscreenIcon]',
|
|
305
|
+
standalone: true,
|
|
306
|
+
}]
|
|
307
|
+
}] });
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Generated bundle index. Do not edit.
|
|
311
|
+
*/
|
|
312
|
+
|
|
313
|
+
export { FULLSCREEN_DEFAULTS, SlFullscreen, SlFullscreenContent, SlFullscreenIcon, SlFullscreenTrigger, injectFullscreenDefaults, provideFullscreenDefaults };
|
|
314
|
+
//# sourceMappingURL=slotted-angular-fullscreen.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slotted-angular-fullscreen.mjs","sources":["../../fullscreen/src/fullscreen-defaults.ts","../../fullscreen/src/fullscreen.ts","../../fullscreen/src/slotted-angular-fullscreen.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { FullscreenNavigationUI, FullscreenPolicy } from '@slotted/core/fullscreen';\n\nexport type FullscreenTriggerSize = 'sm' | 'md' | 'lg';\n\n/** `ghost` inside a bar that is already framed; `outline` over content. */\nexport type FullscreenTriggerVariant = 'ghost' | 'outline';\n\nexport interface FullscreenDefaults {\n mode: FullscreenPolicy;\n navigationUI: FullscreenNavigationUI;\n size: FullscreenTriggerSize;\n variant: FullscreenTriggerVariant;\n}\n\nconst FALLBACK: FullscreenDefaults = {\n mode: 'auto',\n navigationUI: 'auto',\n size: 'md',\n variant: 'ghost',\n};\n\nexport const FULLSCREEN_DEFAULTS = new InjectionToken<FullscreenDefaults>(\n 'slotted fullscreen defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once whether its regions ask the platform and how the\n * control is drawn; a region or a control that states any of them itself still\n * wins. The words come from the language in force (`provideSlotted`).\n */\nexport function provideFullscreenDefaults(defaults: Partial<FullscreenDefaults>) {\n return {\n provide: FULLSCREEN_DEFAULTS,\n useFactory: (): FullscreenDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectFullscreenDefaults(): FullscreenDefaults {\n return inject(FULLSCREEN_DEFAULTS);\n}\n","import {\n afterNextRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { createFullscreen, fullscreenSupported } from '@slotted/core/fullscreen';\nimport type {\n FullscreenController,\n FullscreenError,\n FullscreenMode,\n FullscreenNavigationUI,\n FullscreenOptions,\n FullscreenPolicy,\n} from '@slotted/core/fullscreen';\nimport {\n fullscreenMessages,\n type FullscreenMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeRequest } from '@slotted/core/state';\n\nimport { injectFullscreenDefaults } from './fullscreen-defaults';\nimport type { FullscreenTriggerSize, FullscreenTriggerVariant } from './fullscreen-defaults';\n\n/**\n * Why the state moved. `escape` is the leave nobody asked for: `Escape` in the\n * layout, or the agent's own exit in native — a key, F11, its interface.\n */\nexport type FullscreenReason = 'pointer' | 'keyboard' | 'escape' | 'programmatic';\n\n/**\n * A region the reader can give the whole screen: by the Fullscreen API where\n * the page may ask, fixed over the page where it may not. At rest it paints\n * nothing — it is the container the consumer already had — so it is a\n * directive on that container rather than a wrapper around it.\n *\n * `[(fullscreen)]` holds the state; every move is first asked through\n * `fullscreenChangeRequest`, whose `cancel()` refuses it. `Escape` in native\n * full screen belongs to the agent, and no listener is written for it; the\n * leave arrives as a request with the reason `escape`, and the agent has\n * already left by then.\n */\n@Directive({\n selector: '[slFullscreen]',\n standalone: true,\n exportAs: 'slFullscreen',\n host: {\n 'data-ui': 'fullscreen',\n 'data-part': 'root',\n '[attr.data-fullscreen]': \"fullscreen() ? '' : null\",\n '[attr.data-mode]': 'mode()',\n },\n})\nexport class SlFullscreen {\n readonly fullscreen = model(false);\n /** The value an uncontrolled region starts from, read once. */\n readonly defaultFullscreen = input(false, { transform: booleanAttribute });\n /** `auto` asks the platform and falls back to the layout; `layout` never asks. */\n readonly policy = input<FullscreenPolicy | undefined>(undefined, { alias: 'mode' });\n readonly navigationUI = input<FullscreenNavigationUI | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * control's (`enter`, `exit`) and the announcements (`entered`, `exited`).\n */\n readonly messages = input<PartialMessages<FullscreenMessages> | undefined>(undefined);\n\n readonly fullscreenChangeRequest = output<ChangeRequest<boolean>>();\n /** The platform was absent or refused. The region is in the layout by then. */\n readonly fullscreenError = output<FullscreenError>();\n\n private readonly defaults = injectFullscreenDefaults();\n private readonly element = inject(ElementRef<HTMLElement>).nativeElement;\n\n /** The way that answered, or `null` while the region is not full screen. */\n readonly mode = signal<FullscreenMode | null>(null);\n /** Whether the page may ask for native full screen. `false` until rendered. */\n readonly supported = signal(false);\n /** The last refusal, cleared on the next entry. */\n readonly error = signal<FullscreenError | null>(null);\n /** The family's words in the language in force, with this region's `messages` laid over them. */\n readonly t = injectMessages(fullscreenMessages, this.messages);\n\n private controller: FullscreenController | null = null;\n /* Set when the agent left native and the state was kept: a new request\n outside a gesture would only be refused. */\n private agentLeft = false;\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n if (this.defaultFullscreen()) this.fullscreen.set(true);\n this.supported.set(fullscreenSupported(this.element.ownerDocument));\n this.controller = createFullscreen(this.element, this.options());\n this.apply();\n });\n\n /* Options the controller reads on its next move. */\n effect(() => {\n const options = this.options();\n untracked(() => this.controller?.update(options));\n });\n\n /* The state applied: a two-way value the page set, and a value the page\n kept after the agent left. */\n effect(() => {\n this.fullscreen();\n this.mode();\n untracked(() => this.apply());\n });\n\n destroyRef.onDestroy(() => {\n this.controller?.destroy();\n this.controller = null;\n });\n }\n\n /** Asks to enter. From code the reason is `programmatic`. */\n enter(reason: FullscreenReason = 'programmatic', source?: unknown) {\n this.request(true, reason, source);\n }\n\n exit(reason: FullscreenReason = 'programmatic', source?: unknown) {\n this.request(false, reason, source);\n }\n\n toggle(reason: FullscreenReason = 'programmatic', source?: unknown) {\n this.request(!this.fullscreen(), reason, source);\n }\n\n /**\n * The request, and on acceptance the entry itself — inside the handler that\n * asked, because the agent grants native full screen only to a request made\n * during a gesture.\n */\n private request(next: boolean, reason: FullscreenReason, source?: unknown) {\n let cancelled = false;\n const state = createControllable<boolean>({\n initial: this.fullscreen(),\n onRequest: (request) => {\n this.fullscreenChangeRequest.emit(request);\n cancelled = request.cancelled;\n },\n });\n if (!state.request(next, reason, source) || cancelled) return;\n this.fullscreen.set(next);\n if (next) {\n this.error.set(null);\n void this.controller?.enter();\n } else void this.controller?.exit();\n }\n\n private apply() {\n const controller = this.controller;\n if (!controller) return;\n if (this.fullscreen() && controller.mode === null) {\n const native = !this.agentLeft;\n this.agentLeft = false;\n void controller.enter({ native });\n } else if (!this.fullscreen() && controller.mode !== null) {\n void controller.exit();\n }\n }\n\n private options(): FullscreenOptions {\n return {\n policy: this.policy() ?? this.defaults.mode,\n navigationUI: this.navigationUI() ?? this.defaults.navigationUI,\n t: this.t,\n onModeChange: (mode) => this.mode.set(mode),\n onError: (failure) => {\n this.error.set(failure);\n this.fullscreenError.emit(failure);\n },\n onExit: (source) => {\n /* In native the agent has already left and the controller is out; in\n the layout `Escape` only asked, and the region is still there. */\n this.agentLeft = this.controller?.mode === null;\n this.request(false, 'escape', source);\n },\n };\n }\n}\n\n/**\n * A click synthesised by the keyboard reports no detail; a real one reports\n * the click count.\n */\nfunction activationReason(event: Event): FullscreenReason {\n return event instanceof MouseEvent && event.detail === 0 ? 'keyboard' : 'pointer';\n}\n\n/**\n * The control. Its words and its mark say what the press does next and change\n * with the state, so it is not a toggle and writes no `aria-pressed` (APG\n * Button pattern). Inside `[slFullscreen]` it reaches the region by injection;\n * anywhere else it takes the region's instance: `[slFullscreenTrigger]=\"fs\"`.\n *\n * Projected content replaces the words, and an element marked `slFullscreenIcon`\n * replaces the mark; both can read `fs.fullscreen()` to follow the state.\n */\n@Component({\n selector: 'button[slFullscreenTrigger]',\n standalone: true,\n exportAs: 'slFullscreenTrigger',\n imports: [SlGlyph, SlIcon],\n /* The mark follows the state unless the consumer projected their own. */\n template: `<span data-part=\"icon\" aria-hidden=\"true\"\n ><ng-content select=\"[slFullscreenIcon]\"\n ><span slIcon\n ><svg slGlyph [name]=\"on() ? 'minimize' : 'maximize'\"></svg></span></ng-content></span\n ><span data-part=\"label\"\n ><ng-content>{{ label() }}</ng-content></span\n >`,\n styleUrl: '../../../styles/src/fullscreen/fullscreen.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'fullscreen',\n 'data-part': 'trigger',\n '[attr.type]': 'type',\n '[attr.data-fullscreen]': \"on() ? '' : null\",\n '[attr.data-disabled]': \"disabled() ? '' : null\",\n '[attr.data-icon-only]': \"iconOnly() ? '' : null\",\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[disabled]': 'disabled()',\n },\n})\nexport class SlFullscreenTrigger implements AfterViewInit {\n /** The region, when the control is not inside it. */\n readonly target = input<SlFullscreen | '' | undefined>(undefined, {\n alias: 'slFullscreenTrigger',\n });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly iconOnly = input(false, { transform: booleanAttribute });\n readonly size = input<FullscreenTriggerSize | undefined>(undefined);\n readonly variant = input<FullscreenTriggerVariant | undefined>(undefined);\n\n private readonly defaults = injectFullscreenDefaults();\n /* A control with no region has no region's words, and speaks the catalog's. */\n private readonly own = injectMessages(fullscreenMessages);\n private readonly enclosing = inject(SlFullscreen, { optional: true });\n private readonly element = inject(ElementRef<HTMLButtonElement>).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n /** A `type` the consumer wrote survives, read before the host binding writes it. */\n private readonly writtenType = inject(new HostAttributeToken('type'), { optional: true });\n protected readonly type = this.writtenType ?? 'button';\n\n readonly region = computed(() => {\n const target = this.target();\n return target instanceof SlFullscreen ? target : this.enclosing;\n });\n readonly on = computed(() => this.region()?.fullscreen() ?? false);\n protected readonly label = computed(() =>\n (this.region()?.t ?? this.own)(this.on() ? 'exit' : 'enter'),\n );\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n\n /**\n * After the view: a `(click)` the consumer wrote on the same element is\n * bound first, so its `preventDefault()` is read before the family acts.\n */\n ngAfterViewInit() {\n const listener = (event: Event) => {\n if (this.disabled() || event.defaultPrevented) return;\n this.region()?.toggle(activationReason(event), event);\n };\n this.element.addEventListener('click', listener);\n this.destroyRef.onDestroy(() => this.element.removeEventListener('click', listener));\n }\n}\n\n/**\n * The part that takes the height the other children of the region leave\n * while it is full screen — a chart under its header, a document under its\n * toolbar — and whose first child fills it. A direct child of the region; at\n * rest it is the element the consumer wrote, unchanged.\n */\n@Directive({\n selector: '[slFullscreenContent]',\n standalone: true,\n host: {\n 'data-ui': 'fullscreen',\n 'data-part': 'content',\n },\n})\nexport class SlFullscreenContent {}\n\n/** Marks the consumer's own mark for the control's icon part. */\n@Directive({\n selector: '[slFullscreenIcon]',\n standalone: true,\n})\nexport class SlFullscreenIcon {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Grid arranges its children across two axes and reflows by measuring itself
|
|
6
|
+
* rather than the viewport, so no breakpoint appears anywhere in the family. It
|
|
7
|
+
* paints nothing and adds no semantics: the element is the one the consumer
|
|
8
|
+
* wrote.
|
|
9
|
+
*
|
|
10
|
+
* It is not the APG grid widget. There is no `role="grid"`, no cell and no
|
|
11
|
+
* arrow-key navigation: this family lays children out, and the children keep
|
|
12
|
+
* whatever semantics they already had.
|
|
13
|
+
*
|
|
14
|
+
* The count travels as a custom property as well as an attribute, because a
|
|
15
|
+
* track function cannot read an integer from an attribute.
|
|
16
|
+
*/
|
|
17
|
+
class SlGrid {
|
|
18
|
+
/** Positions a child across the flow, inside its own cell. */
|
|
19
|
+
align = input(/* @ts-ignore */
|
|
20
|
+
...(ngDevMode ? [undefined, { debugName: "align" }] : /* istanbul ignore next */ []));
|
|
21
|
+
/** At most this many tracks. Absent, the grid fits as many as it can. */
|
|
22
|
+
columns = input(/* @ts-ignore */
|
|
23
|
+
...(ngDevMode ? [undefined, { debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
24
|
+
/** Separation between cells, as a step on the space scale. */
|
|
25
|
+
gap = input(/* @ts-ignore */
|
|
26
|
+
...(ngDevMode ? [undefined, { debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
27
|
+
/** Positions a child along the flow, inside its own cell. */
|
|
28
|
+
justify = input(/* @ts-ignore */
|
|
29
|
+
...(ngDevMode ? [undefined, { debugName: "justify" }] : /* istanbul ignore next */ []));
|
|
30
|
+
/** The narrowest a cell may become before a column is dropped. */
|
|
31
|
+
minItemWidth = input(/* @ts-ignore */
|
|
32
|
+
...(ngDevMode ? [undefined, { debugName: "minItemWidth" }] : /* istanbul ignore next */ []));
|
|
33
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlGrid, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
34
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlGrid, isStandalone: true, selector: "[slGrid]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null }, minItemWidth: { classPropertyName: "minItemWidth", publicName: "minItemWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "grid", "data-part": "root" }, properties: { "attr.data-gap": "gap() ?? null", "attr.data-columns": "columns() ?? null", "attr.data-min-item-width": "minItemWidth() ?? null", "attr.data-align": "align() ?? null", "attr.align": "null", "attr.data-justify": "justify() ?? null", "style.--slotted-grid-columns": "columns() ?? null" } }, exportAs: ["slGrid"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: ["@layer slotted.components{[data-ui=grid]{--_gap: var(--slotted-space-6, 1rem);--_min-item: var(--slotted-grid-min-item-width-md, 16rem);display:grid;gap:var(--_gap);grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--_min-item)),1fr));min-inline-size:0}[data-ui=grid][data-columns]{grid-template-columns:repeat(auto-fill,minmax(min(100%,max(var(--_min-item),(100% - (var(--slotted-grid-columns, 1) - 1) * var(--_gap)) / var(--slotted-grid-columns, 1))),1fr))}[data-ui=grid][data-gap=\"0\"]{--_gap: 0}[data-ui=grid][data-gap=\"1\"]{--_gap: var(--slotted-space-1, .125rem)}[data-ui=grid][data-gap=\"2\"]{--_gap: var(--slotted-space-2, .25rem)}[data-ui=grid][data-gap=\"3\"]{--_gap: var(--slotted-space-3, .375rem)}[data-ui=grid][data-gap=\"4\"]{--_gap: var(--slotted-space-4, .5rem)}[data-ui=grid][data-gap=\"5\"]{--_gap: var(--slotted-space-5, .75rem)}[data-ui=grid][data-gap=\"6\"]{--_gap: var(--slotted-space-6, 1rem)}[data-ui=grid][data-gap=\"7\"]{--_gap: var(--slotted-space-7, 1.25rem)}[data-ui=grid][data-gap=\"8\"]{--_gap: var(--slotted-space-8, 1.5rem)}[data-ui=grid][data-gap=\"9\"]{--_gap: var(--slotted-space-9, 2rem)}[data-ui=grid][data-gap=\"10\"]{--_gap: var(--slotted-space-10, 2.5rem)}[data-ui=grid][data-gap=\"11\"]{--_gap: var(--slotted-space-11, 3rem)}[data-ui=grid][data-gap=\"12\"]{--_gap: var(--slotted-space-12, 4rem)}[data-ui=grid][data-min-item-width=xs]{--_min-item: var(--slotted-grid-min-item-width-xs, 8rem)}[data-ui=grid][data-min-item-width=sm]{--_min-item: var(--slotted-grid-min-item-width-sm, 12rem)}[data-ui=grid][data-min-item-width=md]{--_min-item: var(--slotted-grid-min-item-width-md, 16rem)}[data-ui=grid][data-min-item-width=lg]{--_min-item: var(--slotted-grid-min-item-width-lg, 20rem)}[data-ui=grid][data-min-item-width=xl]{--_min-item: var(--slotted-grid-min-item-width-xl, 24rem)}[data-ui=grid][data-align=start]{align-items:start}[data-ui=grid][data-align=center]{align-items:center}[data-ui=grid][data-align=end]{align-items:end}[data-ui=grid][data-align=stretch]{align-items:stretch}[data-ui=grid][data-justify=start]{justify-items:start}[data-ui=grid][data-justify=center]{justify-items:center}[data-ui=grid][data-justify=end]{justify-items:end}[data-ui=grid][data-justify=stretch]{justify-items:stretch}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
35
|
+
}
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlGrid, decorators: [{
|
|
37
|
+
type: Component,
|
|
38
|
+
args: [{ selector: '[slGrid]', standalone: true, exportAs: 'slGrid', template: '<ng-content></ng-content>', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
39
|
+
'data-ui': 'grid',
|
|
40
|
+
'data-part': 'root',
|
|
41
|
+
'[attr.data-gap]': 'gap() ?? null',
|
|
42
|
+
'[attr.data-columns]': 'columns() ?? null',
|
|
43
|
+
'[attr.data-min-item-width]': 'minItemWidth() ?? null',
|
|
44
|
+
'[attr.data-align]': 'align() ?? null',
|
|
45
|
+
/* `align` is also an obsolete HTML attribute a browser still honours on a
|
|
46
|
+
div, centring its text; written statically for the input it would stay. */
|
|
47
|
+
'[attr.align]': 'null',
|
|
48
|
+
'[attr.data-justify]': 'justify() ?? null',
|
|
49
|
+
'[style.--slotted-grid-columns]': 'columns() ?? null',
|
|
50
|
+
}, styles: ["@layer slotted.components{[data-ui=grid]{--_gap: var(--slotted-space-6, 1rem);--_min-item: var(--slotted-grid-min-item-width-md, 16rem);display:grid;gap:var(--_gap);grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--_min-item)),1fr));min-inline-size:0}[data-ui=grid][data-columns]{grid-template-columns:repeat(auto-fill,minmax(min(100%,max(var(--_min-item),(100% - (var(--slotted-grid-columns, 1) - 1) * var(--_gap)) / var(--slotted-grid-columns, 1))),1fr))}[data-ui=grid][data-gap=\"0\"]{--_gap: 0}[data-ui=grid][data-gap=\"1\"]{--_gap: var(--slotted-space-1, .125rem)}[data-ui=grid][data-gap=\"2\"]{--_gap: var(--slotted-space-2, .25rem)}[data-ui=grid][data-gap=\"3\"]{--_gap: var(--slotted-space-3, .375rem)}[data-ui=grid][data-gap=\"4\"]{--_gap: var(--slotted-space-4, .5rem)}[data-ui=grid][data-gap=\"5\"]{--_gap: var(--slotted-space-5, .75rem)}[data-ui=grid][data-gap=\"6\"]{--_gap: var(--slotted-space-6, 1rem)}[data-ui=grid][data-gap=\"7\"]{--_gap: var(--slotted-space-7, 1.25rem)}[data-ui=grid][data-gap=\"8\"]{--_gap: var(--slotted-space-8, 1.5rem)}[data-ui=grid][data-gap=\"9\"]{--_gap: var(--slotted-space-9, 2rem)}[data-ui=grid][data-gap=\"10\"]{--_gap: var(--slotted-space-10, 2.5rem)}[data-ui=grid][data-gap=\"11\"]{--_gap: var(--slotted-space-11, 3rem)}[data-ui=grid][data-gap=\"12\"]{--_gap: var(--slotted-space-12, 4rem)}[data-ui=grid][data-min-item-width=xs]{--_min-item: var(--slotted-grid-min-item-width-xs, 8rem)}[data-ui=grid][data-min-item-width=sm]{--_min-item: var(--slotted-grid-min-item-width-sm, 12rem)}[data-ui=grid][data-min-item-width=md]{--_min-item: var(--slotted-grid-min-item-width-md, 16rem)}[data-ui=grid][data-min-item-width=lg]{--_min-item: var(--slotted-grid-min-item-width-lg, 20rem)}[data-ui=grid][data-min-item-width=xl]{--_min-item: var(--slotted-grid-min-item-width-xl, 24rem)}[data-ui=grid][data-align=start]{align-items:start}[data-ui=grid][data-align=center]{align-items:center}[data-ui=grid][data-align=end]{align-items:end}[data-ui=grid][data-align=stretch]{align-items:stretch}[data-ui=grid][data-justify=start]{justify-items:start}[data-ui=grid][data-justify=center]{justify-items:center}[data-ui=grid][data-justify=end]{justify-items:end}[data-ui=grid][data-justify=stretch]{justify-items:stretch}}\n"] }]
|
|
51
|
+
}], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], justify: [{ type: i0.Input, args: [{ isSignal: true, alias: "justify", required: false }] }], minItemWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minItemWidth", required: false }] }] } });
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Generated bundle index. Do not edit.
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
export { SlGrid };
|
|
58
|
+
//# sourceMappingURL=slotted-angular-grid.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slotted-angular-grid.mjs","sources":["../../grid/src/grid.ts","../../grid/src/slotted-angular-grid.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * A step on the space scale. Separation is chosen from the scale rather than\n * stated as a length, so a theme retunes every layout at once and no component\n * invents a rhythm of its own. `0` is the absence of separation.\n */\nexport type GridGap = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\n/**\n * A ceiling on the number of tracks, not a promise of them. The grid drops a\n * column whenever keeping it would take a cell below `minItemWidth`.\n */\nexport type GridColumns = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\n/** The narrowest a cell may become before the grid drops a column. */\nexport type GridMinItemWidth = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/** Across the flow, which for a cell is the block axis. */\nexport type GridAlign = 'start' | 'center' | 'end' | 'stretch';\n\n/** Along the flow, which for a cell is the inline axis. */\nexport type GridJustify = 'start' | 'center' | 'end' | 'stretch';\n\n/**\n * Grid arranges its children across two axes and reflows by measuring itself\n * rather than the viewport, so no breakpoint appears anywhere in the family. It\n * paints nothing and adds no semantics: the element is the one the consumer\n * wrote.\n *\n * It is not the APG grid widget. There is no `role=\"grid\"`, no cell and no\n * arrow-key navigation: this family lays children out, and the children keep\n * whatever semantics they already had.\n *\n * The count travels as a custom property as well as an attribute, because a\n * track function cannot read an integer from an attribute.\n */\n@Component({\n selector: '[slGrid]',\n standalone: true,\n exportAs: 'slGrid',\n template: '<ng-content></ng-content>',\n styleUrl: '../../../styles/src/grid/grid.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'grid',\n 'data-part': 'root',\n '[attr.data-gap]': 'gap() ?? null',\n '[attr.data-columns]': 'columns() ?? null',\n '[attr.data-min-item-width]': 'minItemWidth() ?? null',\n '[attr.data-align]': 'align() ?? null',\n /* `align` is also an obsolete HTML attribute a browser still honours on a\n div, centring its text; written statically for the input it would stay. */\n '[attr.align]': 'null',\n '[attr.data-justify]': 'justify() ?? null',\n '[style.--slotted-grid-columns]': 'columns() ?? null',\n },\n})\nexport class SlGrid {\n /** Positions a child across the flow, inside its own cell. */\n readonly align = input<GridAlign>();\n /** At most this many tracks. Absent, the grid fits as many as it can. */\n readonly columns = input<GridColumns>();\n /** Separation between cells, as a step on the space scale. */\n readonly gap = input<GridGap>();\n /** Positions a child along the flow, inside its own cell. */\n readonly justify = input<GridJustify>();\n /** The narrowest a cell may become before a column is dropped. */\n readonly minItemWidth = input<GridMinItemWidth>();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAwBA;;;;;;;;;;;;AAYG;MAuBU,MAAM,CAAA;;AAER,IAAA,KAAK,GAAG,KAAK;yFAAa;;AAE1B,IAAA,OAAO,GAAG,KAAK;2FAAe;;AAE9B,IAAA,GAAG,GAAG,KAAK;uFAAW;;AAEtB,IAAA,OAAO,GAAG,KAAK;2FAAe;;AAE9B,IAAA,YAAY,GAAG,KAAK;gGAAoB;uGAVtC,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAN,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAM,wkCAlBP,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ytEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAkB1B,MAAM,EAAA,UAAA,EAAA,CAAA;kBAtBlB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,QAAA,EACN,QAAQ,YACR,2BAA2B,EAAA,eAAA,EAEpB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,iBAAiB,EAAE,eAAe;AAClC,wBAAA,qBAAqB,EAAE,mBAAmB;AAC1C,wBAAA,4BAA4B,EAAE,wBAAwB;AACtD,wBAAA,mBAAmB,EAAE,iBAAiB;AACtC;AAC6E;AAC7E,wBAAA,cAAc,EAAE,MAAM;AACtB,wBAAA,qBAAqB,EAAE,mBAAmB;AAC1C,wBAAA,gCAAgC,EAAE,mBAAmB;AACtD,qBAAA,EAAA,MAAA,EAAA,CAAA,ytEAAA,CAAA,EAAA;;;ACzDH;;AAEG;;"}
|