@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-saved-views.mjs","sources":["../../saved-views/src/saved-views-defaults.ts","../../saved-views/src/saved-views.ts","../../saved-views/src/persisted-saved-views.ts","../../saved-views/src/slotted-angular-saved-views.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport type { GridView, SavedViewsState } from '@slotted/core/grid';\nimport type { ChangeRequest } from '@slotted/core/state';\n\n/** What the reader did. One state object answers seven different presses. */\nexport type SavedViewsAction =\n 'apply' | 'save' | 'create' | 'rename' | 'delete' | 'default' | 'revert';\n\n/** Why the views moved. `submit` is a form; `remove` a confirmed delete. */\nexport type SavedViewsReason = 'pointer' | 'keyboard' | 'submit' | 'remove' | 'programmatic';\n\n/** Why the layer opened or closed: the popover's own reasons. */\nexport type SavedViewsOpenReason = Extract<\n ChangeRequest<boolean>['reason'],\n 'pointer' | 'keyboard' | 'escape' | 'outsidePress' | 'dismiss' | 'programmatic'\n>;\n\n/**\n * The request every change carries: the state asked for, the one it\n * replaces, the reason, what the reader did, the originating event, and a\n * refusal that stops the change before anything commits.\n */\nexport interface SavedViewsRequest {\n readonly value: SavedViewsState;\n readonly previous: SavedViewsState;\n readonly reason: SavedViewsReason;\n readonly action: SavedViewsAction;\n readonly source?: Event | undefined;\n readonly cancelled: boolean;\n /** Refuses the request. Nothing commits and no view is applied. */\n cancel(): void;\n}\n\n/** What `viewApply` emits: the view to write into the grid, and the request that caused it. */\nexport interface SavedViewApply {\n readonly view: GridView;\n readonly request: SavedViewsRequest;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SlSavedViewsIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-saved-views-${this.count}`;\n }\n}\n\nlet counter = 0;\n\n/** `crypto.randomUUID()` where the platform has it, and a counter otherwise. */\nexport function newSavedViewId(): string {\n const crypto = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (typeof crypto?.randomUUID === 'function') return crypto.randomUUID();\n counter += 1;\n return `view-${Date.now().toString(36)}-${counter}`;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n HostAttributeToken,\n inject,\n Injector,\n input,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlField, SlFieldError, SlFieldLabel } from '@slotted/angular/field';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\nimport type { MenuSelectEvent } from '@slotted/angular/menu';\nimport {\n SlPopover,\n SlPopoverContent,\n SlPopoverLayer,\n SlPopoverTrigger,\n} from '@slotted/angular/popover';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\nimport {\n BUILT_IN_VIEW_ID,\n emptySavedViews,\n isViewNameTaken,\n parseGridView,\n sameSavedView,\n savedViewText,\n serializeSavedViews,\n withActiveView,\n withDefaultView,\n withViewCreated,\n withViewDeleted,\n withViewRenamed,\n withViewSaved,\n type GridColumn,\n type GridView,\n type SavedView,\n type SavedViewsState,\n} from '@slotted/core/grid';\nimport {\n type PartialMessages,\n savedViewsMessages,\n type SavedViewsMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport type { ChangeRequest } from '@slotted/core/state';\n\nimport {\n newSavedViewId,\n SlSavedViewsIdFactory,\n type SavedViewApply,\n type SavedViewsAction,\n type SavedViewsOpenReason,\n type SavedViewsReason,\n type SavedViewsRequest,\n} from './saved-views-defaults';\n\n/** What replaces a row, or opens above the footer. */\ntype Editing =\n { kind: 'create' } | { kind: 'rename'; id: string } | { kind: 'delete'; id: string } | null;\n\n/** Where focus goes after the render a change causes. */\ntype FocusTarget =\n | { id: string; part: 'apply' | 'actions' | 'input' | 'cancel' }\n | { id: null; part: 'input' | 'save-as' | 'trigger' };\n\n/** One row of the list: the built-in view has no id and no saved view. */\ninterface Row {\n readonly id: string | null;\n readonly key: string;\n readonly name: string;\n readonly view: SavedView | null;\n readonly current: boolean;\n readonly isDefault: boolean;\n}\n\n/**\n * `slMenuTriggerFor` binds `[attr.data-part]` and resolves it to `null` on a\n * trigger that is neither a bar's item nor a submenu's; a host binding of\n * `null` removes the part the template wrote. The part is written back after\n * the first change detection, where the constant binding is not applied again.\n */\n@Directive({ selector: '[slSavedViewsPart]', standalone: true })\nexport class SlSavedViewsPart {\n readonly slSavedViewsPart = input.required<string>();\n\n constructor() {\n const element: HTMLElement = inject(ElementRef).nativeElement;\n afterNextRender(() => element.setAttribute('data-part', this.slSavedViewsPart()));\n }\n}\n\n/**\n * The named views of a grid, and the one in use: a trigger naming it, a mark\n * and a revert while the grid differs from it, and a popover listing every\n * view with its actions. The family applies nothing to a grid — it asks with\n * `stateChangeRequest` and hands the consumer the view to write through\n * `viewApply`.\n */\n@Component({\n selector: 'sl-saved-views',\n standalone: true,\n exportAs: 'slSavedViews',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrl: '../../../styles/src/saved-views/saved-views.css',\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlField,\n SlFieldError,\n SlFieldLabel,\n SlGlyph,\n SlIcon,\n SlMenu,\n SlMenuItem,\n SlMenuTrigger,\n SlPopover,\n SlPopoverContent,\n SlPopoverLayer,\n SlPopoverTrigger,\n SlSavedViewsPart,\n SlTextField,\n SlTextFieldInput,\n ],\n host: {\n 'data-ui': 'saved-views',\n 'data-part': 'root',\n '[attr.role]': 'role',\n '[attr.aria-label]': 'resolvedLabel()',\n '[attr.data-modified]': 'modified() ? \"\" : null',\n '[attr.data-open]': 'isOpen() ? \"\" : null',\n },\n template: `\n <ng-container\n slPopover\n initialFocus=\"[aria-current='true']\"\n [open]=\"isOpen()\"\n (openChangeRequest)=\"onLayerRequest($event)\"\n >\n <button\n #trigger\n slPopoverTrigger\n type=\"button\"\n data-part=\"trigger\"\n [attr.title]=\"activeName()\"\n >\n <span data-label>{{ activeName() }}</span>\n @if (modified()) {\n <span data-part=\"modified\">{{ t('modified') }}</span>\n }\n <span slIcon size=\"md\"><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n\n <ng-template slPopoverLayer>\n <div slPopoverContent [attr.aria-label]=\"resolvedLabel()\">\n <!-- The family's identifier is on its own element rather than on\n the popover's: slPopoverContent names its own part. -->\n <div data-ui=\"saved-views\" data-part=\"panel\" [id]=\"panelId\">\n <ul data-part=\"list\" role=\"list\">\n @for (row of rows(); track row.key) {\n <li\n data-part=\"item\"\n [attr.data-view]=\"row.key\"\n [attr.data-current]=\"row.current ? '' : null\"\n [attr.data-default]=\"row.isDefault ? '' : null\"\n [attr.data-built-in]=\"row.view === null ? '' : null\"\n [attr.data-editing]=\"editingKind(row) !== null ? '' : null\"\n >\n @switch (editingKind(row)) {\n @case ('rename') {\n <ng-container\n [ngTemplateOutlet]=\"nameForm\"\n [ngTemplateOutletContext]=\"{ kind: 'rename', name: row.name }\"\n />\n }\n @case ('delete') {\n <div\n data-part=\"confirm\"\n role=\"group\"\n [attr.aria-labelledby]=\"panelId + '-confirm-' + row.key\"\n >\n <p [id]=\"panelId + '-confirm-' + row.key\">\n {{ t('confirmDelete', { name: row.name }) }}\n </p>\n <div data-buttons>\n <button\n slButton\n data-cancel\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n (click)=\"cancelEditing()\"\n >\n {{ t('cancel') }}\n </button>\n <button\n slButton\n size=\"sm\"\n tone=\"danger\"\n (click)=\"confirmDelete(row.key, $event)\"\n >\n {{ t('delete') }}\n </button>\n </div>\n </div>\n }\n @default {\n <button\n data-part=\"apply\"\n type=\"button\"\n [attr.aria-current]=\"row.current ? 'true' : null\"\n (click)=\"apply(row.id, pressReason($event), $event)\"\n >\n @if (row.current) {\n <span slIcon size=\"sm\"><svg slGlyph name=\"check\"></svg></span>\n }\n <span data-label>{{ row.name }}</span>\n @if (row.isDefault) {\n <span data-part=\"default-mark\"\n ><span slIcon size=\"sm\"><svg slGlyph name=\"pin\"></svg></span\n ><span>{{ t('isDefault') }}</span></span\n >\n }\n </button>\n <button\n type=\"button\"\n data-part=\"actions\"\n slSavedViewsPart=\"actions\"\n [slMenuTriggerFor]=\"menu\"\n [attr.aria-label]=\"t('actions', { name: row.name })\"\n >\n <span slIcon size=\"md\"><svg slGlyph name=\"ellipsis\"></svg></span>\n </button>\n <sl-menu #menu>\n @if (row.view; as view) {\n <button slMenuItem (select)=\"startRename(view)\">\n {{ t('rename') }}\n </button>\n }\n <button\n slMenuItem\n [disabled]=\"row.isDefault\"\n (select)=\"setDefault(row.id, $event)\"\n >\n {{ t('setDefault') }}\n </button>\n @if (row.view; as view) {\n <button slMenuItem tone=\"danger\" (select)=\"startDelete(view)\">\n {{ t('delete') }}\n </button>\n }\n </sl-menu>\n }\n }\n </li>\n }\n </ul>\n @if (editing()?.kind === 'create') {\n <ng-container\n [ngTemplateOutlet]=\"nameForm\"\n [ngTemplateOutletContext]=\"{ kind: 'create', name: '' }\"\n />\n }\n <div data-part=\"footer\">\n <button\n slButton\n data-save-as\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n (click)=\"startCreate()\"\n >\n {{ t('saveAs') }}\n </button>\n <button slButton size=\"sm\" [disabled]=\"!canSave()\" (click)=\"save($event)\">\n {{ t('save') }}\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </ng-container>\n\n @if (modified()) {\n <button data-part=\"revert\" type=\"button\" (click)=\"revert($event)\">\n <!-- An arrow that turns back turns the other way in a right-to-left document. -->\n <span slIcon size=\"sm\" directional><svg slGlyph name=\"rotate-ccw\"></svg></span>\n {{ t('revert') }}\n </button>\n }\n\n <ng-template #nameForm let-kind=\"kind\" let-name=\"name\">\n <form\n data-part=\"form\"\n novalidate\n [attr.aria-label]=\"kind === 'create' ? t('saveAs') : t('renameView', { name: name })\"\n (submit)=\"submit($event)\"\n >\n <div slField size=\"sm\" [invalid]=\"error() !== null\">\n <label slFieldLabel>{{ t('name') }}</label>\n <div slTextField size=\"sm\">\n <input\n slTextFieldInput\n autocomplete=\"off\"\n [value]=\"draft()\"\n (valueChange)=\"onDraft($event.value)\"\n />\n </div>\n @if (error(); as reason) {\n <span slFieldError>{{ reason === 'empty' ? t('empty') : t('duplicate') }}</span>\n }\n </div>\n <div data-buttons>\n <button\n slButton\n data-cancel\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n (click)=\"cancelEditing()\"\n >\n {{ t('cancel') }}\n </button>\n <button slButton type=\"submit\" size=\"sm\">\n {{ kind === 'create' ? t('create') : t('rename') }}\n </button>\n </div>\n </form>\n </ng-template>\n `,\n})\nexport class SlSavedViews {\n /** The view the grid shows now. */\n readonly current = input.required<GridView>();\n /** The built-in view: the application's defaults. */\n readonly builtIn = input.required<GridView>();\n /** The model, so a view is serialized and compared against the columns it names. */\n readonly columns = input<readonly GridColumn<never>[] | undefined>(undefined);\n /** The views. Two-way, so a template may bind it directly; cancel the request to hold it. */\n readonly state = model<SavedViewsState | undefined>(undefined);\n /** The views an unbound instance starts from. */\n readonly defaultState = input<SavedViewsState | undefined>(undefined);\n /** Whether the layer is open. Two-way. */\n readonly open = model<boolean | undefined>(undefined);\n readonly defaultOpen = input(false, { transform: booleanAttribute });\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * group's and the panel's name (`label`), the controls, the forms and the\n * announcements. A host `aria-label` names both instead.\n */\n readonly messages = input<PartialMessages<SavedViewsMessages> | undefined>(undefined);\n\n /** Every change to the views, carrying the action and the reason; cancellable. */\n readonly stateChangeRequest = output<SavedViewsRequest>();\n /** One output for one transition of the layer. */\n readonly openChangeRequest = output<ChangeRequest<boolean>>();\n /** After apply and revert: the view to write into the grid. */\n readonly viewApply = output<SavedViewApply>();\n\n private readonly injector = inject(Injector);\n private readonly host: HTMLElement = inject(ElementRef).nativeElement;\n protected readonly role = inject(new HostAttributeToken('role'), { optional: true }) ?? 'group';\n protected readonly writtenLabel = inject(new HostAttributeToken('aria-label'), {\n optional: true,\n });\n readonly panelId = `${inject(SlSavedViewsIdFactory).next()}-panel`;\n\n private readonly triggerRef = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n\n protected readonly editing = signal<Editing>(null);\n protected readonly draft = signal('');\n protected readonly error = signal<'empty' | 'duplicate' | null>(null);\n\n /** The family's words in the language in force, with this control's `messages` laid over them. */\n readonly t = injectMessages(savedViewsMessages, this.messages);\n readonly resolvedLabel = computed(() => this.writtenLabel ?? this.t('label'));\n readonly resolvedState = computed<SavedViewsState>(\n () => this.state() ?? this.defaultState() ?? emptySavedViews(),\n );\n readonly isOpen = computed(() => this.open() ?? this.defaultOpen());\n readonly active = computed(() => {\n const state = this.resolvedState();\n return state.views.find((view) => view.id === state.activeId) ?? null;\n });\n readonly activeView = computed<GridView>(() => {\n const active = this.active();\n return active ? parseGridView(active.view, this.columns()) : this.builtIn();\n });\n readonly modified = computed(\n () => !sameSavedView(this.current(), this.activeView(), this.columns()),\n );\n readonly activeName = computed(() => this.active()?.name ?? this.t('builtIn'));\n readonly canSave = computed(() => this.active() !== null && this.modified());\n readonly rows = computed<readonly Row[]>(() => {\n const state = this.resolvedState();\n return [\n {\n id: null,\n key: BUILT_IN_VIEW_ID,\n name: this.t('builtIn'),\n view: null,\n current: state.activeId === null,\n isDefault: state.defaultId === null,\n },\n ...state.views.map((view) => ({\n id: view.id,\n key: view.id,\n name: view.name,\n view,\n current: state.activeId === view.id,\n isDefault: state.defaultId === view.id,\n })),\n ];\n });\n\n /** A click the keyboard produced has no pointer detail. */\n protected pressReason(event: MouseEvent): 'pointer' | 'keyboard' {\n return event.detail === 0 ? 'keyboard' : 'pointer';\n }\n\n protected editingKind(row: Row): 'rename' | 'delete' | null {\n const editing = this.editing();\n if (editing === null || editing.kind === 'create' || editing.id !== row.id) return null;\n return editing.kind;\n }\n\n /** Opens the layer, carrying `programmatic`. */\n show() {\n this.setOpen(true, 'programmatic');\n }\n\n /** Closes the layer, carrying `programmatic`. */\n hide() {\n this.setOpen(false, 'programmatic');\n }\n\n /** Moves focus to the trigger. */\n focus() {\n this.triggerRef().nativeElement.focus();\n }\n\n /** Applies a view by id — `null` is the built-in view — carrying the reason. */\n apply(id: string | null, reason: SavedViewsReason = 'programmatic', source?: Event) {\n const state = this.resolvedState();\n const target = id === null ? null : (state.views.find((view) => view.id === id) ?? null);\n if (id !== null && target === null) return;\n const request = this.request(withActiveView(state, id), 'apply', reason, source);\n if (request === null) return;\n const view = target ? parseGridView(target.view, this.columns()) : this.builtIn();\n this.viewApply.emit({ view, request });\n this.announce(this.t('applied', { name: target?.name ?? this.t('builtIn') }));\n this.setOpen(\n false,\n reason === 'keyboard' || reason === 'pointer' ? reason : 'programmatic',\n source,\n );\n }\n\n protected revert(event: MouseEvent) {\n const request = this.request(this.resolvedState(), 'revert', this.pressReason(event), event);\n if (request === null) return;\n this.viewApply.emit({ view: this.activeView(), request });\n this.announce(this.t('applied', { name: this.activeName() }));\n this.focusAfterRender({ id: null, part: 'trigger' });\n }\n\n protected save(event: MouseEvent) {\n const active = this.active();\n if (active === null || !this.modified()) return;\n const reason = this.pressReason(event);\n const next = withViewSaved(\n this.resolvedState(),\n active.id,\n savedViewText(this.current(), this.columns()),\n );\n if (this.request(next, 'save', reason, event) === null) return;\n this.announce(this.t('saved', { name: active.name }));\n this.setOpen(false, reason, event);\n }\n\n protected setDefault(id: string | null, event: MenuSelectEvent) {\n const state = this.resolvedState();\n const request = this.request(withDefaultView(state, id), 'default', event.reason, event.source);\n if (request === null) return;\n const name = state.views.find((view) => view.id === id)?.name ?? this.t('builtIn');\n this.announce(this.t('defaultChanged', { name }));\n }\n\n protected startCreate() {\n this.editing.set({ kind: 'create' });\n this.draft.set('');\n this.error.set(null);\n this.focusAfterRender({ id: null, part: 'input' });\n }\n\n protected startRename(view: SavedView) {\n this.editing.set({ kind: 'rename', id: view.id });\n this.draft.set(view.name);\n this.error.set(null);\n this.focusAfterRender({ id: view.id, part: 'input' });\n }\n\n protected startDelete(view: SavedView) {\n this.editing.set({ kind: 'delete', id: view.id });\n this.error.set(null);\n this.focusAfterRender({ id: view.id, part: 'cancel' });\n }\n\n /** Cancelling returns focus to the control that opened the form. */\n protected cancelEditing() {\n const was = this.editing();\n this.closeForms();\n if (was === null) return;\n this.focusAfterRender(\n was.kind === 'create' ? { id: null, part: 'save-as' } : { id: was.id, part: 'actions' },\n );\n }\n\n protected onDraft(value: string | undefined) {\n this.draft.set(value ?? '');\n this.error.set(null);\n }\n\n protected submit(event: Event) {\n event.preventDefault();\n const editing = this.editing();\n if (editing === null || editing.kind === 'delete') return;\n const state = this.resolvedState();\n const name = this.draft().trim();\n const except = editing.kind === 'rename' ? editing.id : null;\n const builtIn = this.t('builtIn').trim().toLocaleLowerCase();\n if (name === '') this.error.set('empty');\n else if (isViewNameTaken(state, name, except) || name.toLocaleLowerCase() === builtIn) {\n this.error.set('duplicate');\n }\n if (this.error() !== null) {\n this.focusAfterRender({ id: except, part: 'input' } as FocusTarget);\n return;\n }\n if (editing.kind === 'create') {\n const id = newSavedViewId();\n const next = withViewCreated(state, name, savedViewText(this.current(), this.columns()), id);\n if (this.request(next, 'create', 'submit', event) === null) return;\n this.announce(this.t('saved', { name }));\n this.closeForms();\n this.focusAfterRender({ id, part: 'apply' });\n return;\n }\n if (\n this.request(withViewRenamed(state, editing.id, name), 'rename', 'submit', event) === null\n ) {\n return;\n }\n this.announce(this.t('renamed', { name }));\n this.closeForms();\n this.focusAfterRender({ id: editing.id, part: 'apply' });\n }\n\n protected confirmDelete(id: string, event: MouseEvent) {\n const state = this.resolvedState();\n const index = state.views.findIndex((view) => view.id === id);\n const view = state.views[index];\n if (view === undefined) return;\n if (this.request(withViewDeleted(state, id), 'delete', 'remove', event) === null) return;\n this.announce(this.t('deleted', { name: view.name }));\n this.closeForms();\n this.focusAfterRender({ id: state.views[index - 1]?.id ?? BUILT_IN_VIEW_ID, part: 'apply' });\n }\n\n /**\n * The dismissable layer asks in the capture phase. The popover's own move is\n * always refused here and replayed as this family's request, so the layer\n * follows one open state; a form open inside is cancelled first and the\n * close is refused.\n */\n protected onLayerRequest(request: ChangeRequest<boolean>) {\n request.cancel();\n if (!request.value && request.reason === 'escape' && this.editing() !== null) {\n this.cancelEditing();\n return;\n }\n this.setOpen(\n request.value,\n request.reason as SavedViewsOpenReason,\n request.source as Event | undefined,\n );\n }\n\n private setOpen(next: boolean, reason: SavedViewsOpenReason, source?: Event) {\n if (next === this.isOpen()) return;\n let cancelled = false;\n const request: ChangeRequest<boolean> = {\n value: next,\n previous: !next,\n reason,\n source,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n };\n this.openChangeRequest.emit(request);\n if (cancelled) return;\n this.open.set(next);\n if (!next) this.closeForms();\n }\n\n /** Asks for a new state. Not emitted when nothing would change; refused when cancelled. */\n private request(\n next: SavedViewsState,\n action: SavedViewsAction,\n reason: SavedViewsReason,\n source?: Event,\n ): SavedViewsRequest | null {\n const previous = this.resolvedState();\n let cancelled = false;\n const request: SavedViewsRequest = {\n value: next,\n previous,\n reason,\n action,\n source,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n };\n if (serializeSavedViews(next) === serializeSavedViews(previous)) return request;\n this.stateChangeRequest.emit(request);\n if (cancelled) return null;\n this.state.set(next);\n return request;\n }\n\n private closeForms() {\n this.editing.set(null);\n this.draft.set('');\n this.error.set(null);\n }\n\n private announce(text: string) {\n getLiveAnnouncer(this.host.ownerDocument).announce(text);\n }\n\n private focusAfterRender(target: FocusTarget) {\n afterNextRender(\n () => {\n if (target.part === 'trigger') {\n this.focus();\n return;\n }\n const panel = this.host.ownerDocument.getElementById(this.panelId);\n if (panel === null) return;\n const scope =\n target.id === null\n ? panel\n : ([...panel.querySelectorAll<HTMLElement>('[data-part=\"item\"]')].find(\n (item) => item.dataset['view'] === target.id,\n ) ?? null);\n const selector = {\n apply: '[data-part=\"apply\"]',\n actions: '[data-part=\"actions\"]',\n input: target.id === null ? ':scope > [data-part=\"form\"] input' : 'input',\n cancel: '[data-cancel]',\n 'save-as': '[data-save-as]',\n }[target.part];\n scope?.querySelector<HTMLElement>(selector)?.focus();\n },\n { injector: this.injector },\n );\n }\n}\n","import { effect, signal, untracked, type Injector, type WritableSignal } from '@angular/core';\nimport {\n parseGridView,\n parseSavedViews,\n serializeSavedViews,\n withActiveView,\n type GridColumn,\n type GridView,\n type GridViewStorage,\n type SavedViewsState,\n} from '@slotted/core/grid';\n\nexport interface PersistedSavedViewsOptions {\n /** The entry the views are kept under. */\n readonly key: string;\n /** Default `window.localStorage`; `null` keeps the views in memory only. */\n readonly storage?: GridViewStorage | null | undefined;\n /** The model, so the default view a visit opens on is parsed against it. */\n readonly columns?: readonly GridColumn<never>[] | undefined;\n /** Required outside an injection context. */\n readonly injector?: Injector | undefined;\n}\n\nexport interface PersistedSavedViews {\n /** Bind with `[(state)]`. */\n readonly state: WritableSignal<SavedViewsState>;\n /**\n * The default view this visit opened on, when the store held no view in use\n * and a default: the state already names it as active, and the grid still\n * has to be given it once. `null` otherwise.\n */\n readonly openedDefault: GridView | null;\n}\n\nfunction defaultStorage(): GridViewStorage | null {\n try {\n return typeof window === 'undefined' ? null : window.localStorage;\n } catch {\n return null;\n }\n}\n\n/**\n * A reader's saved views, kept across visits: read once from the store with\n * `parseSavedViews` — which is total, so a malformed entry is no views — and\n * written with `serializeSavedViews` after every change. A store that holds\n * no view in use and a default opens the visit on the default. The store is\n * reached inside `try` both ways, as `persistedGridView` reaches it.\n */\nexport function persistedSavedViews({\n key,\n storage,\n columns,\n injector,\n}: PersistedSavedViewsOptions): PersistedSavedViews {\n const store = storage === undefined ? defaultStorage() : storage;\n let text: string | null;\n try {\n text = store?.getItem(key) ?? null;\n } catch {\n text = null;\n }\n let initial = parseSavedViews(text);\n let openedDefault: GridView | null = null;\n if (initial.activeId === null && initial.defaultId !== null) {\n const opened = initial.views.find((view) => view.id === initial.defaultId);\n initial = withActiveView(initial, initial.defaultId);\n openedDefault = opened ? parseGridView(opened.view, columns) : null;\n }\n const state = signal<SavedViewsState>(initial);\n\n /* The first run is the read; every run after is a change to write. */\n let settled = false;\n effect(\n () => {\n const current = state();\n if (!settled) {\n settled = true;\n return;\n }\n untracked(() => {\n if (!store) return;\n try {\n store.setItem(key, serializeSavedViews(current));\n } catch {\n /* The store refused; the views stay in memory. */\n }\n });\n },\n injector ? { injector } : undefined,\n );\n\n return { state, openedDefault };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { NO_SCROLL_EDGES, scrollEdgeAttributes, createScrollEdges } from '@slotted/core/overflow';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { InjectionToken, inject, input, booleanAttribute, output, ElementRef, DestroyRef, viewChild, signal, computed, afterNextRender, ViewEncapsulation, ChangeDetectionStrategy, Component, Directive } from '@angular/core';
|
|
4
|
+
import { injectMessages } from '@slotted/angular/i18n';
|
|
5
|
+
import { scrollAreaMessages } from '@slotted/core/i18n';
|
|
6
|
+
|
|
7
|
+
const FALLBACK = {
|
|
8
|
+
axis: 'block',
|
|
9
|
+
fade: 'both',
|
|
10
|
+
gutter: 'stable',
|
|
11
|
+
overscroll: 'contain',
|
|
12
|
+
scrollbars: 'auto',
|
|
13
|
+
};
|
|
14
|
+
const SCROLL_AREA_DEFAULTS = new InjectionToken('slotted scroll-area defaults', { providedIn: 'root', factory: () => FALLBACK });
|
|
15
|
+
/**
|
|
16
|
+
* An application decides once what its scroll areas look like — whether the
|
|
17
|
+
* bar waits for a hand, whether the veil dims both ends — rather than repeating
|
|
18
|
+
* it on fifty of them. A region's name comes from the language in force
|
|
19
|
+
* (`provideSlotted`).
|
|
20
|
+
*
|
|
21
|
+
* None of the five surveyed implementations has an equivalent: each takes its
|
|
22
|
+
* policy per instance, and Mantine's `type` in particular is written on every
|
|
23
|
+
* call site of every product that uses it.
|
|
24
|
+
*/
|
|
25
|
+
function provideScrollAreaDefaults(defaults) {
|
|
26
|
+
return {
|
|
27
|
+
provide: SCROLL_AREA_DEFAULTS,
|
|
28
|
+
useFactory: () => ({ ...FALLBACK, ...defaults }),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** What a scroll area is here, before it states anything of its own. */
|
|
32
|
+
function injectScrollAreaDefaults() {
|
|
33
|
+
return inject(SCROLL_AREA_DEFAULTS);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A scrollport, and the box that frames it.
|
|
38
|
+
*
|
|
39
|
+
* The scrollbar is the platform's, themed by the stylesheet through
|
|
40
|
+
* `scrollbar-color`; the keyboard is the platform's too. What this component
|
|
41
|
+
* adds is the measurement of whether the content overflows and which of its
|
|
42
|
+
* ends show, published on the frame for CSS and emitted to the consumer, and
|
|
43
|
+
* the tab stop a scrolling region owes a keyboard together with the name that
|
|
44
|
+
* tab stop owes a screen reader — both written only while the content actually
|
|
45
|
+
* overflows, which is the pattern `prose` shipped first for one block inside a
|
|
46
|
+
* document.
|
|
47
|
+
*
|
|
48
|
+
* The frame is the consumer's own element — `<div slScrollArea>` — and the
|
|
49
|
+
* scrollport is the component's, projected into: the frame is where a border,
|
|
50
|
+
* a radius and a ground go, and the scrollport is the element the veil is on.
|
|
51
|
+
* A consumer's own attributes on the host are never written over, because the
|
|
52
|
+
* family writes its role, its tab stop and its name on an element it owns.
|
|
53
|
+
*
|
|
54
|
+
* The scroll position is never held. The browser moves it on a wheel, a
|
|
55
|
+
* fling, a `Tab` into a child, an anchor navigation and a printed page, and a
|
|
56
|
+
* consumer holding the value would have to accept every one of those or fight
|
|
57
|
+
* the platform. It is emitted, and the instance moves it.
|
|
58
|
+
*/
|
|
59
|
+
class SlScrollArea {
|
|
60
|
+
axis = input(undefined, /* @ts-ignore */
|
|
61
|
+
...(ngDevMode ? [{ debugName: "axis" }] : /* istanbul ignore next */ []));
|
|
62
|
+
scrollbars = input(undefined, /* @ts-ignore */
|
|
63
|
+
...(ngDevMode ? [{ debugName: "scrollbars" }] : /* istanbul ignore next */ []));
|
|
64
|
+
gutter = input(undefined, /* @ts-ignore */
|
|
65
|
+
...(ngDevMode ? [{ debugName: "gutter" }] : /* istanbul ignore next */ []));
|
|
66
|
+
fade = input(undefined, /* @ts-ignore */
|
|
67
|
+
...(ngDevMode ? [{ debugName: "fade" }] : /* istanbul ignore next */ []));
|
|
68
|
+
overscroll = input(undefined, /* @ts-ignore */
|
|
69
|
+
...(ngDevMode ? [{ debugName: "overscroll" }] : /* istanbul ignore next */ []));
|
|
70
|
+
/**
|
|
71
|
+
* Scroll only past this size, as any CSS length. It is Mantine's
|
|
72
|
+
* `ScrollArea.Autosize` as one binding rather than a second component.
|
|
73
|
+
*/
|
|
74
|
+
maxBlockSize = input(undefined, /* @ts-ignore */
|
|
75
|
+
...(ngDevMode ? [{ debugName: "maxBlockSize" }] : /* istanbul ignore next */ []));
|
|
76
|
+
maxInlineSize = input(undefined, /* @ts-ignore */
|
|
77
|
+
...(ngDevMode ? [{ debugName: "maxInlineSize" }] : /* istanbul ignore next */ []));
|
|
78
|
+
/**
|
|
79
|
+
* Whether the scrollport joins the tab sequence while it overflows.
|
|
80
|
+
*
|
|
81
|
+
* On by default, because content that scrolls has to be scrollable by
|
|
82
|
+
* keyboard and a scrollport with no tab stop is not — unless a child of it
|
|
83
|
+
* already takes focus. A consumer who knows the content is reachable another
|
|
84
|
+
* way turns it off and carries the reason.
|
|
85
|
+
*/
|
|
86
|
+
tabbable = input(true, { ...(ngDevMode ? { debugName: "tabbable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
87
|
+
/**
|
|
88
|
+
* The name the region is announced by. Resolved in one order: `labelledBy`,
|
|
89
|
+
* then `messages.label`, then the catalog of the language in force.
|
|
90
|
+
*/
|
|
91
|
+
labelledBy = input(undefined, /* @ts-ignore */
|
|
92
|
+
...(ngDevMode ? [{ debugName: "labelledBy" }] : /* istanbul ignore next */ []));
|
|
93
|
+
/** Words laid over the catalog of the language in force: the region's name (`label`). */
|
|
94
|
+
messages = input(undefined, /* @ts-ignore */
|
|
95
|
+
...(ngDevMode ? [{ debugName: "messages" }] : /* istanbul ignore next */ []));
|
|
96
|
+
/**
|
|
97
|
+
* The position, as a distance from each logical start, on every scroll. It
|
|
98
|
+
* is a report and not a request: the browser moves the position on a wheel,
|
|
99
|
+
* a fling, a `Tab` into a child and a printed page, and a consumer holding it
|
|
100
|
+
* would have to accept every one of those.
|
|
101
|
+
*/
|
|
102
|
+
scrollChange = output();
|
|
103
|
+
/** The measurement, and only a new one: which axes overflow, and which ends show. */
|
|
104
|
+
overflowChange = output();
|
|
105
|
+
defaults = injectScrollAreaDefaults();
|
|
106
|
+
/** The family's words in the language in force, with this area's `messages` laid over them. */
|
|
107
|
+
t = injectMessages(scrollAreaMessages, this.messages);
|
|
108
|
+
element = inject((ElementRef)).nativeElement;
|
|
109
|
+
destroyRef = inject(DestroyRef);
|
|
110
|
+
viewportRef = viewChild.required('viewport', /* @ts-ignore */
|
|
111
|
+
...(ngDevMode ? [{ debugName: "viewportRef" }] : /* istanbul ignore next */ []));
|
|
112
|
+
/**
|
|
113
|
+
* The measurement, as a signal, so the attributes it becomes are rendered.
|
|
114
|
+
* Before the first render it is the state of content that fits — four ends
|
|
115
|
+
* showing and nothing overflowing — which paints no veil and writes no tab
|
|
116
|
+
* stop, so a server render and its hydration agree and the veil does not
|
|
117
|
+
* flash on before the browser has said whether there is anything behind it.
|
|
118
|
+
*/
|
|
119
|
+
measured = signal(NO_SCROLL_EDGES, /* @ts-ignore */
|
|
120
|
+
...(ngDevMode ? [{ debugName: "measured" }] : /* istanbul ignore next */ []));
|
|
121
|
+
sideways = signal(false, /* @ts-ignore */
|
|
122
|
+
...(ngDevMode ? [{ debugName: "sideways" }] : /* istanbul ignore next */ []));
|
|
123
|
+
edges = null;
|
|
124
|
+
resolvedAxis = computed(() => this.axis() ?? this.defaults.axis, /* @ts-ignore */
|
|
125
|
+
...(ngDevMode ? [{ debugName: "resolvedAxis" }] : /* istanbul ignore next */ []));
|
|
126
|
+
resolvedScrollbars = computed(() => this.scrollbars() ?? this.defaults.scrollbars, /* @ts-ignore */
|
|
127
|
+
...(ngDevMode ? [{ debugName: "resolvedScrollbars" }] : /* istanbul ignore next */ []));
|
|
128
|
+
resolvedGutter = computed(() => this.gutter() ?? this.defaults.gutter, /* @ts-ignore */
|
|
129
|
+
...(ngDevMode ? [{ debugName: "resolvedGutter" }] : /* istanbul ignore next */ []));
|
|
130
|
+
resolvedFade = computed(() => this.fade() ?? this.defaults.fade, /* @ts-ignore */
|
|
131
|
+
...(ngDevMode ? [{ debugName: "resolvedFade" }] : /* istanbul ignore next */ []));
|
|
132
|
+
resolvedOverscroll = computed(() => this.overscroll() ?? this.defaults.overscroll, /* @ts-ignore */
|
|
133
|
+
...(ngDevMode ? [{ debugName: "resolvedOverscroll" }] : /* istanbul ignore next */ []));
|
|
134
|
+
edgeAttributes = computed(() => scrollEdgeAttributes(this.measured()), /* @ts-ignore */
|
|
135
|
+
...(ngDevMode ? [{ debugName: "edgeAttributes" }] : /* istanbul ignore next */ []));
|
|
136
|
+
overflowing = computed(() => {
|
|
137
|
+
const state = this.measured();
|
|
138
|
+
return state.block.overflowing || state.inline.overflowing;
|
|
139
|
+
}, /* @ts-ignore */
|
|
140
|
+
...(ngDevMode ? [{ debugName: "overflowing" }] : /* istanbul ignore next */ []));
|
|
141
|
+
wired = computed(() => this.overflowing() && this.tabbable(), /* @ts-ignore */
|
|
142
|
+
...(ngDevMode ? [{ debugName: "wired" }] : /* istanbul ignore next */ []));
|
|
143
|
+
ariaLabelledBy = computed(() => this.wired() ? (this.labelledBy() ?? null) : null, /* @ts-ignore */
|
|
144
|
+
...(ngDevMode ? [{ debugName: "ariaLabelledBy" }] : /* istanbul ignore next */ []));
|
|
145
|
+
ariaLabel = computed(() => {
|
|
146
|
+
if (!this.wired() || this.labelledBy() !== undefined)
|
|
147
|
+
return null;
|
|
148
|
+
return this.t('label');
|
|
149
|
+
}, /* @ts-ignore */
|
|
150
|
+
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
151
|
+
constructor() {
|
|
152
|
+
/**
|
|
153
|
+
* After the first render and only in a browser: Angular builds the
|
|
154
|
+
* component during a server render too, and there is nothing to measure
|
|
155
|
+
* there. The wiring appears at the first moment a browser can say whether
|
|
156
|
+
* the content overflows at all.
|
|
157
|
+
*/
|
|
158
|
+
afterNextRender(() => {
|
|
159
|
+
const viewport = this.viewportRef().nativeElement;
|
|
160
|
+
const handle = createScrollEdges(viewport, {
|
|
161
|
+
onChange: (next) => {
|
|
162
|
+
this.measured.set(next);
|
|
163
|
+
if (this.edges !== null)
|
|
164
|
+
this.sideways.set(this.edges.sideways());
|
|
165
|
+
this.overflowChange.emit(next);
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
this.edges = handle;
|
|
169
|
+
this.measured.set(handle.state());
|
|
170
|
+
this.sideways.set(handle.sideways());
|
|
171
|
+
});
|
|
172
|
+
this.destroyRef.onDestroy(() => {
|
|
173
|
+
this.edges?.destroy();
|
|
174
|
+
this.edges = null;
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/** The frame: the consumer's own element. */
|
|
178
|
+
get root() {
|
|
179
|
+
return this.element;
|
|
180
|
+
}
|
|
181
|
+
/** The scrollport: the element that scrolls and takes focus. */
|
|
182
|
+
get viewport() {
|
|
183
|
+
return this.viewportRef().nativeElement;
|
|
184
|
+
}
|
|
185
|
+
/** The last measurement: whether each axis overflows, and which of its ends show. */
|
|
186
|
+
state() {
|
|
187
|
+
return this.edges?.state() ?? NO_SCROLL_EDGES;
|
|
188
|
+
}
|
|
189
|
+
/** The distance from each logical start, read now. */
|
|
190
|
+
position() {
|
|
191
|
+
return this.edges?.position() ?? { block: 0, inline: 0 };
|
|
192
|
+
}
|
|
193
|
+
/** Moves to a logical position. An axis left out is an axis left alone. */
|
|
194
|
+
scrollTo(target) {
|
|
195
|
+
this.edges?.scrollTo(target);
|
|
196
|
+
}
|
|
197
|
+
/** Moves to one end of one axis. */
|
|
198
|
+
scrollToEdge(edge) {
|
|
199
|
+
this.edges?.scrollToEdge(edge);
|
|
200
|
+
}
|
|
201
|
+
/** Brings one element into view by the shortest movement that does it, without moving anything else. */
|
|
202
|
+
reveal(element) {
|
|
203
|
+
this.edges?.reveal(element);
|
|
204
|
+
}
|
|
205
|
+
/** Measures again, after content the observer could not see changed. */
|
|
206
|
+
refresh() {
|
|
207
|
+
this.edges?.refresh();
|
|
208
|
+
}
|
|
209
|
+
/** Moves focus to the scrollport. */
|
|
210
|
+
focus() {
|
|
211
|
+
this.viewport.focus();
|
|
212
|
+
}
|
|
213
|
+
onScroll(event) {
|
|
214
|
+
if (this.edges === null)
|
|
215
|
+
return;
|
|
216
|
+
this.scrollChange.emit({ position: this.edges.position(), source: event });
|
|
217
|
+
}
|
|
218
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlScrollArea, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
219
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.7", type: SlScrollArea, isStandalone: true, selector: "[slScrollArea]", inputs: { axis: { classPropertyName: "axis", publicName: "axis", isSignal: true, isRequired: false, transformFunction: null }, scrollbars: { classPropertyName: "scrollbars", publicName: "scrollbars", isSignal: true, isRequired: false, transformFunction: null }, gutter: { classPropertyName: "gutter", publicName: "gutter", isSignal: true, isRequired: false, transformFunction: null }, fade: { classPropertyName: "fade", publicName: "fade", isSignal: true, isRequired: false, transformFunction: null }, overscroll: { classPropertyName: "overscroll", publicName: "overscroll", isSignal: true, isRequired: false, transformFunction: null }, maxBlockSize: { classPropertyName: "maxBlockSize", publicName: "maxBlockSize", isSignal: true, isRequired: false, transformFunction: null }, maxInlineSize: { classPropertyName: "maxInlineSize", publicName: "maxInlineSize", isSignal: true, isRequired: false, transformFunction: null }, tabbable: { classPropertyName: "tabbable", publicName: "tabbable", isSignal: true, isRequired: false, transformFunction: null }, labelledBy: { classPropertyName: "labelledBy", publicName: "labelledBy", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { scrollChange: "scrollChange", overflowChange: "overflowChange" }, host: { attributes: { "data-ui": "scroll-area", "data-part": "root" }, properties: { "attr.data-axis": "resolvedAxis()", "attr.data-scrollbars": "resolvedScrollbars()", "attr.data-gutter": "resolvedGutter()", "attr.data-fade": "resolvedFade()", "attr.data-overscroll": "resolvedOverscroll()", "attr.data-overflowing": "edgeAttributes()['data-overflowing'] ?? null", "attr.data-at-block-start": "edgeAttributes()['data-at-block-start'] ?? null", "attr.data-at-block-end": "edgeAttributes()['data-at-block-end'] ?? null", "attr.data-at-inline-start": "edgeAttributes()['data-at-inline-start'] ?? null", "attr.data-at-inline-end": "edgeAttributes()['data-at-inline-end'] ?? null", "attr.data-sideways": "sideways() ? '' : null", "style.max-block-size": "maxBlockSize() ?? null", "style.max-inline-size": "maxInlineSize() ?? null" } }, viewQueries: [{ propertyName: "viewportRef", first: true, predicate: ["viewport"], descendants: true, isSignal: true }], exportAs: ["slScrollArea"], ngImport: i0, template: `
|
|
220
|
+
<div
|
|
221
|
+
#viewport
|
|
222
|
+
data-part="viewport"
|
|
223
|
+
[attr.role]="wired() ? 'region' : null"
|
|
224
|
+
[attr.tabindex]="wired() ? '0' : null"
|
|
225
|
+
[attr.aria-label]="ariaLabel()"
|
|
226
|
+
[attr.aria-labelledby]="ariaLabelledBy()"
|
|
227
|
+
(scroll)="onScroll($event)"
|
|
228
|
+
>
|
|
229
|
+
<ng-content />
|
|
230
|
+
</div>
|
|
231
|
+
`, isInline: true, styles: ["@layer slotted.components{[data-ui=scroll-area]{--_fade: min(var(--slotted-scroll-area-fade-size, var(--slotted-space-8, 1.5rem)), 20%);--_thumb: var(--slotted-scroll-area-thumb-color, var(--slotted-border-strong, ButtonBorder));--_track: var(--slotted-scroll-area-track-color, var(--slotted-surface-sunken, Canvas));display:grid;box-sizing:border-box;min-block-size:0;min-inline-size:0}[data-ui=scroll-area]>[data-part=viewport]{--_scroll-area-fade-block-start: var(--_fade);--_scroll-area-fade-block-end: var(--_fade);--_scroll-area-fade-inline-start: var(--_fade);--_scroll-area-fade-inline-end: var(--_fade);--_fade-top: var(--_scroll-area-fade-block-start);--_fade-bottom: var(--_scroll-area-fade-block-end);--_fade-left: var(--_scroll-area-fade-inline-start);--_fade-right: var(--_scroll-area-fade-inline-end);box-sizing:border-box;min-block-size:0;min-inline-size:0;border-radius:inherit;scrollbar-gutter:stable;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--_thumb) var(--_track);-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);-webkit-mask-composite:source-in;mask-composite:intersect;transition:--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area]:dir(rtl)>[data-part=viewport]{--_fade-left: var(--_scroll-area-fade-inline-end);--_fade-right: var(--_scroll-area-fade-inline-start)}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overflow-x:hidden;overflow-y:auto;overflow-inline:hidden;overflow-block:auto}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overflow-x:auto;overflow-y:hidden;overflow-inline:auto;overflow-block:hidden}[data-ui=scroll-area][data-axis=both]>[data-part=viewport]{overflow:auto}[data-ui=scroll-area][data-scrollbars=always][data-axis=block]>[data-part=viewport]{overflow-y:scroll;overflow-block:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=inline]>[data-part=viewport]{overflow-x:scroll;overflow-inline:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=both]>[data-part=viewport]{overflow:scroll}[data-ui=scroll-area][data-scrollbars=none]>[data-part=viewport]{scrollbar-width:none}[data-ui=scroll-area][data-scrollbars=hover]>[data-part=viewport]{scrollbar-color:transparent transparent;transition:scrollbar-color var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area][data-scrollbars=hover]:not([data-disabled]):hover>[data-part=viewport],[data-ui=scroll-area][data-scrollbars=hover]:focus-within>[data-part=viewport]{scrollbar-color:var(--_thumb) var(--_track)}[data-ui=scroll-area][data-gutter=auto]>[data-part=viewport]{scrollbar-gutter:auto}[data-ui=scroll-area][data-gutter=both-edges]>[data-part=viewport]{scrollbar-gutter:stable both-edges}[data-ui=scroll-area][data-overscroll=auto]>[data-part=viewport]{overscroll-behavior:auto}[data-ui=scroll-area][data-overscroll=none]>[data-part=viewport]{overscroll-behavior:none}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overscroll-behavior-y:auto;overscroll-behavior-block:auto}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overscroll-behavior-x:auto;overscroll-behavior-inline:auto}[data-ui=scroll-area][data-at-block-start]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px}[data-ui=scroll-area][data-at-block-end]>[data-part=viewport]{--_scroll-area-fade-block-end: 0px}[data-ui=scroll-area][data-at-inline-start]>[data-part=viewport]{--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-at-inline-end]>[data-part=viewport]{--_scroll-area-fade-inline-end: 0px}[data-ui=scroll-area][data-fade=end]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px;--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-fade=none]>[data-part=viewport],[data-ui=scroll-area][data-sideways]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none}[data-ui=scroll-area]>[data-part=viewport]>[data-part=content]{box-sizing:border-box;min-inline-size:fit-content;padding:var(--slotted-scroll-area-inset, var(--slotted-space-5, .75rem))}[data-ui=scroll-area]:has(>[data-part=viewport]:focus-visible){outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}@media print{[data-ui=scroll-area],[data-ui=scroll-area]>[data-part=viewport]{max-block-size:none;max-inline-size:none;overflow:visible;-webkit-mask-image:none;mask-image:none}}@media(forced-colors:active){[data-ui=scroll-area]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none;scrollbar-color:auto}}}@property --_scroll-area-fade-block-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-block-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
232
|
+
}
|
|
233
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlScrollArea, decorators: [{
|
|
234
|
+
type: Component,
|
|
235
|
+
args: [{ selector: '[slScrollArea]', standalone: true, exportAs: 'slScrollArea', template: `
|
|
236
|
+
<div
|
|
237
|
+
#viewport
|
|
238
|
+
data-part="viewport"
|
|
239
|
+
[attr.role]="wired() ? 'region' : null"
|
|
240
|
+
[attr.tabindex]="wired() ? '0' : null"
|
|
241
|
+
[attr.aria-label]="ariaLabel()"
|
|
242
|
+
[attr.aria-labelledby]="ariaLabelledBy()"
|
|
243
|
+
(scroll)="onScroll($event)"
|
|
244
|
+
>
|
|
245
|
+
<ng-content />
|
|
246
|
+
</div>
|
|
247
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
248
|
+
'data-ui': 'scroll-area',
|
|
249
|
+
'data-part': 'root',
|
|
250
|
+
'[attr.data-axis]': 'resolvedAxis()',
|
|
251
|
+
'[attr.data-scrollbars]': 'resolvedScrollbars()',
|
|
252
|
+
'[attr.data-gutter]': 'resolvedGutter()',
|
|
253
|
+
'[attr.data-fade]': 'resolvedFade()',
|
|
254
|
+
'[attr.data-overscroll]': 'resolvedOverscroll()',
|
|
255
|
+
'[attr.data-overflowing]': "edgeAttributes()['data-overflowing'] ?? null",
|
|
256
|
+
'[attr.data-at-block-start]': "edgeAttributes()['data-at-block-start'] ?? null",
|
|
257
|
+
'[attr.data-at-block-end]': "edgeAttributes()['data-at-block-end'] ?? null",
|
|
258
|
+
'[attr.data-at-inline-start]': "edgeAttributes()['data-at-inline-start'] ?? null",
|
|
259
|
+
'[attr.data-at-inline-end]': "edgeAttributes()['data-at-inline-end'] ?? null",
|
|
260
|
+
'[attr.data-sideways]': "sideways() ? '' : null",
|
|
261
|
+
'[style.max-block-size]': 'maxBlockSize() ?? null',
|
|
262
|
+
'[style.max-inline-size]': 'maxInlineSize() ?? null',
|
|
263
|
+
}, styles: ["@layer slotted.components{[data-ui=scroll-area]{--_fade: min(var(--slotted-scroll-area-fade-size, var(--slotted-space-8, 1.5rem)), 20%);--_thumb: var(--slotted-scroll-area-thumb-color, var(--slotted-border-strong, ButtonBorder));--_track: var(--slotted-scroll-area-track-color, var(--slotted-surface-sunken, Canvas));display:grid;box-sizing:border-box;min-block-size:0;min-inline-size:0}[data-ui=scroll-area]>[data-part=viewport]{--_scroll-area-fade-block-start: var(--_fade);--_scroll-area-fade-block-end: var(--_fade);--_scroll-area-fade-inline-start: var(--_fade);--_scroll-area-fade-inline-end: var(--_fade);--_fade-top: var(--_scroll-area-fade-block-start);--_fade-bottom: var(--_scroll-area-fade-block-end);--_fade-left: var(--_scroll-area-fade-inline-start);--_fade-right: var(--_scroll-area-fade-inline-end);box-sizing:border-box;min-block-size:0;min-inline-size:0;border-radius:inherit;scrollbar-gutter:stable;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--_thumb) var(--_track);-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,#000 var(--_fade-top),#000 calc(100% - var(--_fade-bottom)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--_fade-left),#000 calc(100% - var(--_fade-right)),transparent 100%);-webkit-mask-composite:source-in;mask-composite:intersect;transition:--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area]:dir(rtl)>[data-part=viewport]{--_fade-left: var(--_scroll-area-fade-inline-end);--_fade-right: var(--_scroll-area-fade-inline-start)}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overflow-x:hidden;overflow-y:auto;overflow-inline:hidden;overflow-block:auto}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overflow-x:auto;overflow-y:hidden;overflow-inline:auto;overflow-block:hidden}[data-ui=scroll-area][data-axis=both]>[data-part=viewport]{overflow:auto}[data-ui=scroll-area][data-scrollbars=always][data-axis=block]>[data-part=viewport]{overflow-y:scroll;overflow-block:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=inline]>[data-part=viewport]{overflow-x:scroll;overflow-inline:scroll}[data-ui=scroll-area][data-scrollbars=always][data-axis=both]>[data-part=viewport]{overflow:scroll}[data-ui=scroll-area][data-scrollbars=none]>[data-part=viewport]{scrollbar-width:none}[data-ui=scroll-area][data-scrollbars=hover]>[data-part=viewport]{scrollbar-color:transparent transparent;transition:scrollbar-color var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-block-end var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-start var(--slotted-duration-short) var(--slotted-easing-standard),--_scroll-area-fade-inline-end var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=scroll-area][data-scrollbars=hover]:not([data-disabled]):hover>[data-part=viewport],[data-ui=scroll-area][data-scrollbars=hover]:focus-within>[data-part=viewport]{scrollbar-color:var(--_thumb) var(--_track)}[data-ui=scroll-area][data-gutter=auto]>[data-part=viewport]{scrollbar-gutter:auto}[data-ui=scroll-area][data-gutter=both-edges]>[data-part=viewport]{scrollbar-gutter:stable both-edges}[data-ui=scroll-area][data-overscroll=auto]>[data-part=viewport]{overscroll-behavior:auto}[data-ui=scroll-area][data-overscroll=none]>[data-part=viewport]{overscroll-behavior:none}[data-ui=scroll-area][data-axis=inline]>[data-part=viewport]{overscroll-behavior-y:auto;overscroll-behavior-block:auto}[data-ui=scroll-area][data-axis=block]>[data-part=viewport]{overscroll-behavior-x:auto;overscroll-behavior-inline:auto}[data-ui=scroll-area][data-at-block-start]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px}[data-ui=scroll-area][data-at-block-end]>[data-part=viewport]{--_scroll-area-fade-block-end: 0px}[data-ui=scroll-area][data-at-inline-start]>[data-part=viewport]{--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-at-inline-end]>[data-part=viewport]{--_scroll-area-fade-inline-end: 0px}[data-ui=scroll-area][data-fade=end]>[data-part=viewport]{--_scroll-area-fade-block-start: 0px;--_scroll-area-fade-inline-start: 0px}[data-ui=scroll-area][data-fade=none]>[data-part=viewport],[data-ui=scroll-area][data-sideways]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none}[data-ui=scroll-area]>[data-part=viewport]>[data-part=content]{box-sizing:border-box;min-inline-size:fit-content;padding:var(--slotted-scroll-area-inset, var(--slotted-space-5, .75rem))}[data-ui=scroll-area]:has(>[data-part=viewport]:focus-visible){outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}@media print{[data-ui=scroll-area],[data-ui=scroll-area]>[data-part=viewport]{max-block-size:none;max-inline-size:none;overflow:visible;-webkit-mask-image:none;mask-image:none}}@media(forced-colors:active){[data-ui=scroll-area]>[data-part=viewport]{-webkit-mask-image:none;mask-image:none;scrollbar-color:auto}}}@property --_scroll-area-fade-block-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-block-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-start{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}@property --_scroll-area-fade-inline-end{syntax: \"<length-percentage>\"; inherits: false; initial-value: 0px;}\n"] }]
|
|
264
|
+
}], ctorParameters: () => [], propDecorators: { axis: [{ type: i0.Input, args: [{ isSignal: true, alias: "axis", required: false }] }], scrollbars: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbars", required: false }] }], gutter: [{ type: i0.Input, args: [{ isSignal: true, alias: "gutter", required: false }] }], fade: [{ type: i0.Input, args: [{ isSignal: true, alias: "fade", required: false }] }], overscroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "overscroll", required: false }] }], maxBlockSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxBlockSize", required: false }] }], maxInlineSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxInlineSize", required: false }] }], tabbable: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabbable", required: false }] }], labelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelledBy", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], scrollChange: [{ type: i0.Output, args: ["scrollChange"] }], overflowChange: [{ type: i0.Output, args: ["overflowChange"] }], viewportRef: [{ type: i0.ViewChild, args: ['viewport', { isSignal: true }] }] } });
|
|
265
|
+
/**
|
|
266
|
+
* The inset that scrolls with the content.
|
|
267
|
+
*
|
|
268
|
+
* Padding on a scrollport is not applied at the end edge of its scrollable
|
|
269
|
+
* overflow in every engine, so an inset that has to survive a scroll to the
|
|
270
|
+
* end goes on an element inside it. The family states no inset of its own: the
|
|
271
|
+
* directive exists to give the consumer's one a place to live, on the
|
|
272
|
+
* consumer's own element, and an area whose content already carries its own
|
|
273
|
+
* inset uses no `slScrollAreaContent` at all.
|
|
274
|
+
*/
|
|
275
|
+
class SlScrollAreaContent {
|
|
276
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlScrollAreaContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
277
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlScrollAreaContent, isStandalone: true, selector: "[slScrollAreaContent]", host: { attributes: { "data-part": "content" } }, exportAs: ["slScrollAreaContent"], ngImport: i0 });
|
|
278
|
+
}
|
|
279
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlScrollAreaContent, decorators: [{
|
|
280
|
+
type: Directive,
|
|
281
|
+
args: [{
|
|
282
|
+
selector: '[slScrollAreaContent]',
|
|
283
|
+
standalone: true,
|
|
284
|
+
exportAs: 'slScrollAreaContent',
|
|
285
|
+
host: { 'data-part': 'content' },
|
|
286
|
+
}]
|
|
287
|
+
}] });
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Generated bundle index. Do not edit.
|
|
291
|
+
*/
|
|
292
|
+
|
|
293
|
+
export { SCROLL_AREA_DEFAULTS, SlScrollArea, SlScrollAreaContent, injectScrollAreaDefaults, provideScrollAreaDefaults };
|
|
294
|
+
//# sourceMappingURL=slotted-angular-scroll-area.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slotted-angular-scroll-area.mjs","sources":["../../scroll-area/src/scroll-area-defaults.ts","../../scroll-area/src/scroll-area.ts","../../scroll-area/src/slotted-angular-scroll-area.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\n\n/** Which axes scroll. Logical, so a vertical writing mode needs no second vocabulary. */\nexport type ScrollAreaAxis = 'block' | 'inline' | 'both';\n\n/**\n * What the scrollbar does. `auto` is `overflow: auto`; `always` is\n * `overflow: scroll`; `hover` paints the bar transparent until a pointer or the\n * keyboard is inside; `none` removes the bar and leaves the scrolling.\n *\n * `scroll` — visible only while scrolling, which Radix and Mantine both ship —\n * is folded into `hover`, because it is what a platform overlay scrollbar\n * already does on its own.\n */\nexport type ScrollAreaScrollbars = 'auto' | 'always' | 'hover' | 'none';\n\n/** `scrollbar-gutter`, and `stable` is the default because content that shifts is the defect. */\nexport type ScrollAreaGutter = 'auto' | 'stable' | 'both-edges';\n\n/**\n * Where the veil is drawn. `both` dims what the reader has passed as well as\n * what is ahead; `end` only what is ahead; `none` leaves the scrollbar to say\n * there is more.\n */\nexport type ScrollAreaFade = 'both' | 'end' | 'none';\n\n/** `overscroll-behavior`, and `contain` is the default. */\nexport type ScrollAreaOverscroll = 'contain' | 'auto' | 'none';\n\nexport interface ScrollAreaDefaults {\n axis: ScrollAreaAxis;\n scrollbars: ScrollAreaScrollbars;\n gutter: ScrollAreaGutter;\n fade: ScrollAreaFade;\n overscroll: ScrollAreaOverscroll;\n}\n\nconst FALLBACK: ScrollAreaDefaults = {\n axis: 'block',\n fade: 'both',\n gutter: 'stable',\n overscroll: 'contain',\n scrollbars: 'auto',\n};\n\nexport const SCROLL_AREA_DEFAULTS = new InjectionToken<ScrollAreaDefaults>(\n 'slotted scroll-area defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once what its scroll areas look like — whether the\n * bar waits for a hand, whether the veil dims both ends — rather than repeating\n * it on fifty of them. A region's name comes from the language in force\n * (`provideSlotted`).\n *\n * None of the five surveyed implementations has an equivalent: each takes its\n * policy per instance, and Mantine's `type` in particular is written on every\n * call site of every product that uses it.\n */\nexport function provideScrollAreaDefaults(defaults: Partial<ScrollAreaDefaults>) {\n return {\n provide: SCROLL_AREA_DEFAULTS,\n useFactory: (): ScrollAreaDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a scroll area is here, before it states anything of its own. */\nexport function injectScrollAreaDefaults(): ScrollAreaDefaults {\n return inject(SCROLL_AREA_DEFAULTS);\n}\n","import {\n createScrollEdges,\n NO_SCROLL_EDGES,\n scrollEdgeAttributes,\n type LogicalEdge,\n type ScrollEdgesHandle,\n type ScrollEdgesState,\n type ScrollPosition,\n} from '@slotted/core/overflow';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport {\n scrollAreaMessages,\n type PartialMessages,\n type ScrollAreaMessages,\n} from '@slotted/core/i18n';\n\nimport { injectScrollAreaDefaults } from './scroll-area-defaults';\nimport type {\n ScrollAreaAxis,\n ScrollAreaFade,\n ScrollAreaGutter,\n ScrollAreaOverscroll,\n ScrollAreaScrollbars,\n} from './scroll-area-defaults';\n\n/** What `scrollChange` carries: where the scroller is, and the event that moved it. */\nexport interface ScrollAreaScrollEvent {\n readonly position: ScrollPosition;\n readonly source: Event;\n}\n\n/**\n * A scrollport, and the box that frames it.\n *\n * The scrollbar is the platform's, themed by the stylesheet through\n * `scrollbar-color`; the keyboard is the platform's too. What this component\n * adds is the measurement of whether the content overflows and which of its\n * ends show, published on the frame for CSS and emitted to the consumer, and\n * the tab stop a scrolling region owes a keyboard together with the name that\n * tab stop owes a screen reader — both written only while the content actually\n * overflows, which is the pattern `prose` shipped first for one block inside a\n * document.\n *\n * The frame is the consumer's own element — `<div slScrollArea>` — and the\n * scrollport is the component's, projected into: the frame is where a border,\n * a radius and a ground go, and the scrollport is the element the veil is on.\n * A consumer's own attributes on the host are never written over, because the\n * family writes its role, its tab stop and its name on an element it owns.\n *\n * The scroll position is never held. The browser moves it on a wheel, a\n * fling, a `Tab` into a child, an anchor navigation and a printed page, and a\n * consumer holding the value would have to accept every one of those or fight\n * the platform. It is emitted, and the instance moves it.\n */\n@Component({\n selector: '[slScrollArea]',\n standalone: true,\n exportAs: 'slScrollArea',\n template: `\n <div\n #viewport\n data-part=\"viewport\"\n [attr.role]=\"wired() ? 'region' : null\"\n [attr.tabindex]=\"wired() ? '0' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledBy()\"\n (scroll)=\"onScroll($event)\"\n >\n <ng-content />\n </div>\n `,\n styleUrl: '../../../styles/src/scroll-area/scroll-area.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'scroll-area',\n 'data-part': 'root',\n '[attr.data-axis]': 'resolvedAxis()',\n '[attr.data-scrollbars]': 'resolvedScrollbars()',\n '[attr.data-gutter]': 'resolvedGutter()',\n '[attr.data-fade]': 'resolvedFade()',\n '[attr.data-overscroll]': 'resolvedOverscroll()',\n '[attr.data-overflowing]': \"edgeAttributes()['data-overflowing'] ?? null\",\n '[attr.data-at-block-start]': \"edgeAttributes()['data-at-block-start'] ?? null\",\n '[attr.data-at-block-end]': \"edgeAttributes()['data-at-block-end'] ?? null\",\n '[attr.data-at-inline-start]': \"edgeAttributes()['data-at-inline-start'] ?? null\",\n '[attr.data-at-inline-end]': \"edgeAttributes()['data-at-inline-end'] ?? null\",\n '[attr.data-sideways]': \"sideways() ? '' : null\",\n '[style.max-block-size]': 'maxBlockSize() ?? null',\n '[style.max-inline-size]': 'maxInlineSize() ?? null',\n },\n})\nexport class SlScrollArea {\n readonly axis = input<ScrollAreaAxis | undefined>(undefined);\n readonly scrollbars = input<ScrollAreaScrollbars | undefined>(undefined);\n readonly gutter = input<ScrollAreaGutter | undefined>(undefined);\n readonly fade = input<ScrollAreaFade | undefined>(undefined);\n readonly overscroll = input<ScrollAreaOverscroll | undefined>(undefined);\n\n /**\n * Scroll only past this size, as any CSS length. It is Mantine's\n * `ScrollArea.Autosize` as one binding rather than a second component.\n */\n readonly maxBlockSize = input<string | undefined>(undefined);\n readonly maxInlineSize = input<string | undefined>(undefined);\n\n /**\n * Whether the scrollport joins the tab sequence while it overflows.\n *\n * On by default, because content that scrolls has to be scrollable by\n * keyboard and a scrollport with no tab stop is not — unless a child of it\n * already takes focus. A consumer who knows the content is reachable another\n * way turns it off and carries the reason.\n */\n readonly tabbable = input(true, { transform: booleanAttribute });\n\n /**\n * The name the region is announced by. Resolved in one order: `labelledBy`,\n * then `messages.label`, then the catalog of the language in force.\n */\n readonly labelledBy = input<string | undefined>(undefined);\n /** Words laid over the catalog of the language in force: the region's name (`label`). */\n readonly messages = input<PartialMessages<ScrollAreaMessages> | undefined>(undefined);\n\n /**\n * The position, as a distance from each logical start, on every scroll. It\n * is a report and not a request: the browser moves the position on a wheel,\n * a fling, a `Tab` into a child and a printed page, and a consumer holding it\n * would have to accept every one of those.\n */\n readonly scrollChange = output<ScrollAreaScrollEvent>();\n\n /** The measurement, and only a new one: which axes overflow, and which ends show. */\n readonly overflowChange = output<ScrollEdgesState>();\n\n private readonly defaults = injectScrollAreaDefaults();\n /** The family's words in the language in force, with this area's `messages` laid over them. */\n readonly t = injectMessages(scrollAreaMessages, this.messages);\n private readonly element = inject(ElementRef<HTMLElement>).nativeElement as HTMLElement;\n private readonly destroyRef = inject(DestroyRef);\n private readonly viewportRef = viewChild.required<ElementRef<HTMLElement>>('viewport');\n\n /**\n * The measurement, as a signal, so the attributes it becomes are rendered.\n * Before the first render it is the state of content that fits — four ends\n * showing and nothing overflowing — which paints no veil and writes no tab\n * stop, so a server render and its hydration agree and the veil does not\n * flash on before the browser has said whether there is anything behind it.\n */\n private readonly measured = signal<ScrollEdgesState>(NO_SCROLL_EDGES);\n protected readonly sideways = signal(false);\n private edges: ScrollEdgesHandle | null = null;\n\n protected readonly resolvedAxis = computed(() => this.axis() ?? this.defaults.axis);\n protected readonly resolvedScrollbars = computed(\n () => this.scrollbars() ?? this.defaults.scrollbars,\n );\n protected readonly resolvedGutter = computed(() => this.gutter() ?? this.defaults.gutter);\n protected readonly resolvedFade = computed(() => this.fade() ?? this.defaults.fade);\n protected readonly resolvedOverscroll = computed(\n () => this.overscroll() ?? this.defaults.overscroll,\n );\n\n protected readonly edgeAttributes = computed(() => scrollEdgeAttributes(this.measured()));\n\n protected readonly overflowing = computed(() => {\n const state = this.measured();\n return state.block.overflowing || state.inline.overflowing;\n });\n protected readonly wired = computed(() => this.overflowing() && this.tabbable());\n protected readonly ariaLabelledBy = computed(() =>\n this.wired() ? (this.labelledBy() ?? null) : null,\n );\n protected readonly ariaLabel = computed(() => {\n if (!this.wired() || this.labelledBy() !== undefined) return null;\n return this.t('label');\n });\n\n constructor() {\n /**\n * After the first render and only in a browser: Angular builds the\n * component during a server render too, and there is nothing to measure\n * there. The wiring appears at the first moment a browser can say whether\n * the content overflows at all.\n */\n afterNextRender(() => {\n const viewport = this.viewportRef().nativeElement;\n const handle = createScrollEdges(viewport, {\n onChange: (next) => {\n this.measured.set(next);\n if (this.edges !== null) this.sideways.set(this.edges.sideways());\n this.overflowChange.emit(next);\n },\n });\n this.edges = handle;\n this.measured.set(handle.state());\n this.sideways.set(handle.sideways());\n });\n\n this.destroyRef.onDestroy(() => {\n this.edges?.destroy();\n this.edges = null;\n });\n }\n\n /** The frame: the consumer's own element. */\n get root(): HTMLElement {\n return this.element;\n }\n\n /** The scrollport: the element that scrolls and takes focus. */\n get viewport(): HTMLElement {\n return this.viewportRef().nativeElement;\n }\n\n /** The last measurement: whether each axis overflows, and which of its ends show. */\n state(): ScrollEdgesState {\n return this.edges?.state() ?? NO_SCROLL_EDGES;\n }\n\n /** The distance from each logical start, read now. */\n position(): ScrollPosition {\n return this.edges?.position() ?? { block: 0, inline: 0 };\n }\n\n /** Moves to a logical position. An axis left out is an axis left alone. */\n scrollTo(target: Partial<ScrollPosition>): void {\n this.edges?.scrollTo(target);\n }\n\n /** Moves to one end of one axis. */\n scrollToEdge(edge: LogicalEdge): void {\n this.edges?.scrollToEdge(edge);\n }\n\n /** Brings one element into view by the shortest movement that does it, without moving anything else. */\n reveal(element: Element): void {\n this.edges?.reveal(element);\n }\n\n /** Measures again, after content the observer could not see changed. */\n refresh(): void {\n this.edges?.refresh();\n }\n\n /** Moves focus to the scrollport. */\n focus(): void {\n this.viewport.focus();\n }\n\n protected onScroll(event: Event) {\n if (this.edges === null) return;\n this.scrollChange.emit({ position: this.edges.position(), source: event });\n }\n}\n\n/**\n * The inset that scrolls with the content.\n *\n * Padding on a scrollport is not applied at the end edge of its scrollable\n * overflow in every engine, so an inset that has to survive a scroll to the\n * end goes on an element inside it. The family states no inset of its own: the\n * directive exists to give the consumer's one a place to live, on the\n * consumer's own element, and an area whose content already carries its own\n * inset uses no `slScrollAreaContent` at all.\n */\n@Directive({\n selector: '[slScrollAreaContent]',\n standalone: true,\n exportAs: 'slScrollAreaContent',\n host: { 'data-part': 'content' },\n})\nexport class SlScrollAreaContent {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|