@slotted/angular 0.0.0-stage → 0.1.0-beta.0
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-toast.mjs","sources":["../../toast/src/toast-defaults.ts","../../toast/src/toast.ts","../../toast/src/toast-parts.ts","../../toast/src/slotted-angular-toast.ts"],"sourcesContent":["import { createToastStore } from '@slotted/core/toast';\nimport type {\n ToastMessage,\n ToastPriority,\n ToastReason,\n ToastStatus,\n ToastStore,\n} from '@slotted/core/toast';\nimport { computed, DestroyRef, inject, Injectable, InjectionToken, signal } from '@angular/core';\nimport type { Signal, TemplateRef } from '@angular/core';\n\n/** Which of the five semantic colours the message speaks in. */\nexport type ToastTone = 'accent' | 'secondary' | 'success' | 'warning' | 'danger';\n\n/**\n * How that colour is painted. `raised` is the neutral surface with the tone in\n * the mark, and it is the default: a message floats over content this family\n * does not own, and tinting that content's corner is not its decision.\n */\nexport type ToastVariant = 'raised' | 'soft' | 'solid';\n\n/** Which edge of the screen — or of the panel — the region sits at. */\nexport type ToastPlacement =\n 'top-start' | 'top' | 'top-end' | 'bottom-start' | 'bottom' | 'bottom-end';\n\n/**\n * Where the region is rendered. One axis with three values rather than two\n * booleans that admit a meaningless combination.\n */\nexport type ToastAttach = 'portal' | 'viewport' | 'inline';\n\n/** Whether the messages stand in a column or in a pile that opens. */\nexport type ToastStacking = 'list' | 'stack';\n\nexport type { ToastMessage, ToastPriority, ToastReason, ToastStatus, ToastStore };\n\n/**\n * What a message carries for rendering. Opaque to `@slotted/core/toast`, which\n * reads four fields out of the call and never looks in here.\n */\nexport interface ToastContent {\n title?: string;\n description?: string;\n tone?: ToastTone;\n variant?: ToastVariant;\n hideIcon?: boolean;\n dismissible?: boolean;\n progress?: boolean;\n /**\n * The controls that act on the message, and the whole body when a message\n * needs one. A `TemplateRef` rather than a string, because Angular's answer\n * to \"content the consumer writes\" is a template it renders per message —\n * lazily, and with the message in its context, which is what\n * `MAT_SNACK_BAR_DATA` gives a Material consumer by another route.\n */\n actions?: TemplateRef<{ $implicit: ToastMessage<ToastContent> }>;\n body?: TemplateRef<{ $implicit: ToastMessage<ToastContent> }>;\n /** Anything the consumer's own template reads. */\n data?: unknown;\n}\n\n/** Everything one call can say about a message. */\nexport interface ToastInput extends ToastContent {\n id?: string;\n /** Milliseconds on screen. `0` never expires. */\n duration?: number;\n /** How loudly the announcer says it. Never inferred from the tone. */\n priority?: ToastPriority;\n /** What a reader hears. Built from the title and the description when unstated. */\n announcement?: string;\n /** Waiting on a promise: it does not expire and it draws no countdown. */\n loading?: boolean;\n onStatusChange?: (status: ToastStatus | 'removed', message: ToastMessage<ToastContent>) => void;\n}\n\nexport interface ToastPromiseInput<Value> {\n loading: ToastInput;\n success: ToastInput | ((value: Value) => ToastInput);\n error: ToastInput | ((reason: unknown) => ToastInput);\n}\n\nexport interface ToastDefaults {\n placement: ToastPlacement;\n attach: ToastAttach;\n stacking: ToastStacking;\n tone: ToastTone;\n variant: ToastVariant;\n priority: ToastPriority;\n dismissible: boolean;\n swipe: boolean;\n progress: boolean;\n pauseOnHover: boolean;\n pauseWhenHidden: boolean;\n limit: number;\n duration: number;\n swipeThreshold: number;\n hotkey: string;\n}\n\n/**\n * The key that moves focus into the region. Five surveyed implementations ship\n * a shortcut and no two chose the same key; `F6` is the one two of them chose\n * for the reason that generalises — it is the landmark-navigation key.\n */\nexport const TOAST_HOTKEY = 'F6';\n\nconst FALLBACK: ToastDefaults = {\n placement: 'bottom-end',\n attach: 'portal',\n stacking: 'list',\n tone: 'accent',\n variant: 'raised',\n priority: 'polite',\n dismissible: true,\n swipe: true,\n progress: false,\n pauseOnHover: true,\n pauseWhenHidden: true,\n limit: 3,\n duration: 5000,\n swipeThreshold: 48,\n hotkey: TOAST_HOTKEY,\n};\n\nexport const TOAST_DEFAULTS = new InjectionToken<ToastDefaults>('slotted toast defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once where its messages appear and how long they\n * stay. A region or a message that states any of them still wins: an explicit\n * value is never overridden by the token. The region's name and the close\n * control's come from the language in force (`provideSlotted`).\n */\nexport function provideToastDefaults(defaults: Partial<ToastDefaults>) {\n return {\n provide: TOAST_DEFAULTS,\n useFactory: (): ToastDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a region renders as here, before it states anything of its own. */\nexport function injectToastDefaults(): ToastDefaults {\n return inject(TOAST_DEFAULTS);\n}\n\n/** What a reader hears when the call did not say. */\nfunction spokenFrom(input: ToastInput): string {\n if (input.announcement !== undefined) return input.announcement;\n return [input.title, input.description].filter(Boolean).join('. ');\n}\n\n/** The store's own fields, and the rest carried whole as the message's payload. */\nfunction split(input: ToastInput) {\n const { id, duration, priority, announcement, loading, onStatusChange, ...content } = input;\n void announcement;\n\n return {\n ...(id === undefined ? {} : { id }),\n ...(duration === undefined ? {} : { duration }),\n ...(priority === undefined ? {} : { priority }),\n ...(loading === undefined ? {} : { loading }),\n ...(onStatusChange === undefined ? {} : { onStatusChange }),\n announcement: spokenFrom(input),\n /* The one field the store reads out of the content: a message a reader is\n meant to act on is a message no clock may end. */\n action: content.actions !== undefined,\n data: content as ToastContent,\n };\n}\n\n/**\n * The imperative facade, and the observable model, which\n * `docs/component-features.md` §14 asks for in one sentence.\n *\n * It is `providedIn: 'root'` because that is the surface Angular Material's\n * consumers already know: a message is shown from an interceptor, a resolver or\n * an effect, none of which is anywhere near a component. The reads are signals,\n * so a zoneless application renders on them without a `markForCheck` anywhere.\n */\n@Injectable({ providedIn: 'root' })\nexport class SlToastService {\n private readonly defaults = inject(TOAST_DEFAULTS);\n\n /** The model a region renders. Also the escape hatch for a page's own host. */\n readonly store: ToastStore<ToastContent> = createToastStore<ToastContent>({\n limit: this.defaults.limit,\n duration: this.defaults.duration,\n });\n\n private readonly snapshot = signal(this.store.snapshot);\n\n /** The messages on screen, newest first. */\n readonly visible: Signal<readonly ToastMessage<ToastContent>[]> = computed(\n () => this.snapshot().visible,\n );\n /** The messages waiting behind the limit. A page may say how many. */\n readonly queued: Signal<readonly ToastMessage<ToastContent>[]> = computed(\n () => this.snapshot().queued,\n );\n /** Whether every clock is held. */\n readonly paused: Signal<boolean> = computed(() => this.snapshot().paused);\n\n constructor() {\n const stop = this.store.subscribe(() => this.snapshot.set(this.store.snapshot));\n inject(DestroyRef).onDestroy(() => {\n stop();\n this.store.destroy();\n });\n }\n\n /** Adds a message, or updates the one that already carries this id. */\n show(input: ToastInput = {}): string {\n return this.store.show(split(input));\n }\n\n /** Changes a message already in the queue, keeping its place. */\n update(id: string, input: ToastInput): void {\n this.store.update(id, split(input));\n }\n\n /** Asks for a message to leave, carrying the reason. */\n dismiss(id: string, reason: ToastReason = 'programmatic'): void {\n this.store.dismiss(id, reason);\n }\n\n /** Asks for every message to leave at once — a route change, a sign-out. */\n clear(reason: ToastReason = 'clear'): void {\n this.store.clear(reason);\n }\n\n pauseAll(): void {\n this.store.pauseAll();\n }\n\n resumeAll(): void {\n this.store.resumeAll();\n }\n\n /** A message that follows a promise: loading, then success or failure. */\n promise<Value>(promise: Promise<Value>, input: ToastPromiseInput<Value>): Promise<Value> {\n return this.store.promise(promise, {\n loading: split(input.loading),\n success:\n typeof input.success === 'function'\n ? (value: Value) => split((input.success as (value: Value) => ToastInput)(value))\n : split(input.success),\n error:\n typeof input.error === 'function'\n ? (reason: unknown) => split((input.error as (reason: unknown) => ToastInput)(reason))\n : split(input.error),\n });\n }\n}\n","import { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n output,\n PLATFORM_ID,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlLoader } from '@slotted/angular/progress-indicator';\nimport type { GlyphName } from '@slotted/angular/icon';\nimport { createRemovalFocus } from '@slotted/core/focus';\nimport { type PartialMessages, toastMessages, type ToastMessages } from '@slotted/core/i18n';\nimport { createPortalRoot } from '@slotted/core/portal';\nimport { createPresence } from '@slotted/core/presence';\nimport { createToastStore } from '@slotted/core/toast';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport type { ToastMessage, ToastStore } from '@slotted/core/toast';\n\nimport { injectToastDefaults, SlToastService } from './toast-defaults';\nimport type {\n ToastAttach,\n ToastContent,\n ToastPlacement,\n ToastStacking,\n ToastTone,\n} from './toast-defaults';\n\n/**\n * The glyph each tone draws: `specs/components/toast/contract.json` holds the\n * map, and the binding draws it because a stylesheet paints no icon.\n */\nconst TONE_GLYPH: Record<ToastTone, GlyphName | null> = {\n accent: 'circle-info',\n secondary: null,\n success: 'circle-check',\n warning: 'circle-alert',\n danger: 'circle-x',\n};\n\n/** Which way a message is dragged away, given the edge its region sits at. */\nfunction swipeAxis(placement: ToastPlacement, direction: string) {\n const block = placement.startsWith('top') ? -1 : 1;\n const rtl = direction === 'rtl';\n const inline = placement.endsWith('-start')\n ? rtl\n ? 1\n : -1\n : placement.endsWith('-end')\n ? rtl\n ? -1\n : 1\n : 0;\n return { block, inline };\n}\n\n/**\n * A message's own height, which is not the height it is drawn at: a closed\n * pile draws every message at the front one's height, and an opening one\n * animates it. The override is lifted for the one read, and not at all while\n * the height is moving, because lifting it then cancels the movement — the\n * last measurement stands until the transition ends and the observer fires\n * again. Chrome names the logical property's transition by its physical one.\n */\nfunction naturalHeight(item: HTMLElement): number {\n const moving =\n typeof item.getAnimations === 'function' &&\n item\n .getAnimations()\n .some((animation) =>\n ['block-size', 'height', 'width'].includes(\n (animation as Animation & { transitionProperty?: string }).transitionProperty ?? '',\n ),\n );\n if (moving) {\n const last = Number.parseFloat(item.style.getPropertyValue('--slotted-toast-height'));\n if (!Number.isNaN(last)) return last;\n }\n const inline = item.style.blockSize;\n item.style.blockSize = 'auto';\n const height = item.getBoundingClientRect().height;\n item.style.blockSize = inline;\n return height;\n}\n\n/**\n * One message: everything about it that is behaviour rather than markup.\n *\n * It is a directive rather than a component so a page that writes its own list\n * — from `SlToastService.visible()` and nothing else — gets the timer, the\n * exit, the swipe and the keyboard by putting one attribute on its own `li`.\n */\n@Directive({\n selector: 'li[slToastItem]',\n standalone: true,\n exportAs: 'slToastItem',\n host: {\n 'data-part': 'item',\n tabindex: '-1',\n '[attr.data-tone]': 'tone()',\n '[attr.data-variant]': 'variant()',\n '[attr.data-open]': \"isOpen() ? '' : null\",\n '[attr.data-loading]': \"message().loading ? '' : null\",\n '[attr.data-dragging]': \"dragging() ? '' : null\",\n '[style.--slotted-toast-index]': 'index()',\n '[style.--slotted-toast-duration]': 'durationValue()',\n '[style.--slotted-toast-swipe-x]': 'swipeX()',\n '[style.--slotted-toast-swipe-y]': 'swipeY()',\n '(keydown)': 'onKeyDown($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointermove)': 'onPointerMove($event)',\n '(pointerup)': 'onPointerUp($event)',\n '(pointercancel)': 'onPointerUp($event)',\n },\n})\nexport class SlToastItem {\n readonly message = input.required<ToastMessage<ToastContent>>({ alias: 'slToastItem' });\n /** How far this message is from the front of the pile. The stylesheet reads it. */\n readonly index = input(0, { alias: 'slToastItemIndex' });\n\n private readonly region = inject(SlToastRegion);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n /**\n * The message's own injector, handed to a page's body template so the parts\n * inside it — the mark's glyph above all — read this message and not the\n * place the template was declared.\n */\n readonly injector = inject(Injector);\n\n private readonly status = signal<'entering' | 'open' | 'exiting' | 'unmounted'>('entering');\n protected readonly dragging = signal(false);\n private readonly offset = signal<{ x: number; y: number } | null>(null);\n private drag: { id: number; x: number; y: number } | null = null;\n\n readonly tone = computed(() => this.message().data.tone ?? this.region.defaults.tone);\n /**\n * The glyph the tone's mark draws: none while a promise is in flight, when\n * the mark is `progress-indicator`'s contained loader, and none for\n * `secondary`, a neutral message with no severity to state.\n */\n readonly mark = computed<GlyphName | null>(() =>\n this.message().loading ? null : TONE_GLYPH[this.tone()],\n );\n protected readonly variant = computed(\n () => this.message().data.variant ?? this.region.defaults.variant,\n );\n protected readonly isOpen = computed(() => this.status() === 'open');\n protected readonly durationValue = computed(() => {\n const duration = this.message().duration;\n return duration > 0 ? `${duration}ms` : null;\n });\n protected readonly swipeX = computed(() => {\n const value = this.offset();\n return value === null ? null : `${value.x}px`;\n });\n protected readonly swipeY = computed(() => {\n const value = this.offset();\n return value === null ? null : `${value.y}px`;\n });\n\n /**\n * `packages/core/src/presence` reads the exit the stylesheet declares and\n * completes it on a timer when the browser never reports one — a backgrounded\n * tab, a `display: none` ancestor. Ark guesses two hundred milliseconds\n * instead, and a message caught by any of those cases never leaves.\n */\n private readonly presence = createPresence({\n initialPresent: true,\n skipInitialAnimation: false,\n onStatusChange: (next) => this.status.set(next),\n onExitComplete: () => this.region.store.remove(this.message().id),\n });\n\n constructor() {\n this.presence.setNode(this.host.nativeElement);\n effect(() => {\n this.presence.request(this.message().status !== 'closing', 'programmatic');\n });\n inject(DestroyRef).onDestroy(() => this.presence.destroy());\n }\n\n protected onKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented || event.key !== 'Escape') return;\n /* Only the message the keyboard is in: a page whose dialog is open keeps\n its own Escape. */\n event.stopPropagation();\n this.region.store.dismiss(this.message().id, 'escape');\n }\n\n protected onPointerDown(event: PointerEvent) {\n if (!this.region.resolvedSwipe() || event.button !== 0) return;\n /* A control inside the message is what the pointer came for. */\n if ((event.target as HTMLElement).closest('button, a, input, select, textarea')) return;\n this.drag = { id: event.pointerId, x: event.clientX, y: event.clientY };\n this.host.nativeElement.setPointerCapture(event.pointerId);\n }\n\n protected onPointerMove(event: PointerEvent) {\n const start = this.drag;\n if (!start || start.id !== event.pointerId) return;\n\n const element = this.host.nativeElement;\n const view = element.ownerDocument.defaultView;\n const axis = swipeAxis(\n this.region.resolvedPlacement(),\n view?.getComputedStyle(element).direction ?? 'ltr',\n );\n /* Only movement toward the edge the region sits at counts. Dragging a\n message into the page is not a gesture, it is a slip. */\n const x = axis.inline === 0 ? 0 : Math.max(0, (event.clientX - start.x) * axis.inline);\n const y = Math.max(0, (event.clientY - start.y) * axis.block);\n if (!this.dragging() && Math.max(x, y) < 2) return;\n\n this.dragging.set(true);\n this.offset.set({ x: x * axis.inline, y: y * axis.block });\n }\n\n protected onPointerUp(event: PointerEvent) {\n if (!this.drag || this.drag.id !== event.pointerId) return;\n const moved = this.offset();\n const distance = moved === null ? 0 : Math.max(Math.abs(moved.x), Math.abs(moved.y));\n\n this.drag = null;\n this.dragging.set(false);\n this.offset.set(null);\n const element = this.host.nativeElement;\n if (element.hasPointerCapture(event.pointerId)) element.releasePointerCapture(event.pointerId);\n\n /* Past the threshold the gesture was a dismissal; short of it the message\n springs back, which is the only way a reader can change their mind. */\n if (event.type !== 'pointercancel' && distance >= this.region.defaults.swipeThreshold) {\n this.region.store.dismiss(this.message().id, 'pointer');\n }\n }\n}\n\n/**\n * The place transient messages appear, and the only part of this family a page\n * renders directly.\n *\n * **It is a landmark, not a live region.** A live role on a box holding a Close\n * and an Undo is read with both buttons inside the sentence, and a region\n * created in the same task as its text is silent under ARIA 1.2 §6.4. The words\n * are spoken by `packages/core/src/live-announcer`; this element is what a\n * reader navigates to, with the hotkey or with their own landmark list.\n *\n * **It never takes focus.** The APG's Alert pattern is explicit that an\n * arriving message must not affect the keyboard, and the whole of this family's\n * claim on it is one key the reader presses.\n */\n@Component({\n selector: 'sl-toast-region',\n standalone: true,\n exportAs: 'slToastRegion',\n imports: [NgTemplateOutlet, SlGlyph, SlIcon, SlLoader, SlToastItem],\n template: `<section\n #layer\n data-part=\"root\"\n data-ui=\"toast\"\n role=\"region\"\n tabindex=\"-1\"\n [attr.aria-label]=\"t('label')\"\n [attr.data-attach]=\"resolvedAttach()\"\n [attr.data-expanded]=\"paused() ? '' : null\"\n [attr.data-placement]=\"resolvedPlacement()\"\n [attr.data-stacking]=\"resolvedStacking()\"\n [attr.data-swipe]=\"resolvedSwipe()\"\n [style.--slotted-toast-count]=\"visible().length\"\n [style.--slotted-toast-play-state]=\"paused() ? 'paused' : 'running'\"\n (focusin)=\"onFocus(true)\"\n (focusout)=\"onFocusOut($event)\"\n (pointerenter)=\"onPointer(true)\"\n (pointerleave)=\"onPointer(false)\"\n >\n <ol data-part=\"list\">\n @for (message of visible(); track message.id; let index = $index) {\n <li [slToastItem]=\"message\" [slToastItemIndex]=\"index\" #item=\"slToastItem\">\n @if (message.data.body; as body) {\n <ng-container\n [ngTemplateOutlet]=\"body\"\n [ngTemplateOutletContext]=\"{ $implicit: message }\"\n [ngTemplateOutletInjector]=\"item.injector\"\n />\n } @else {\n @if (!message.data.hideIcon && (message.loading || item.mark())) {\n <span aria-hidden=\"true\" data-part=\"icon\">\n @if (message.loading) {\n <div\n slLoader\n contained\n decorative\n [delay]=\"0\"\n [minDuration]=\"0\"\n [tone]=\"item.tone()\"\n ></div>\n } @else if (item.mark(); as glyph) {\n <span slIcon><svg slGlyph [name]=\"glyph\" solid></svg></span>\n }\n </span>\n }\n <div data-part=\"content\">\n @if (message.data.title) {\n <div data-part=\"title\">{{ message.data.title }}</div>\n }\n @if (message.data.description) {\n <p data-part=\"description\">{{ message.data.description }}</p>\n }\n </div>\n @if (message.data.dismissible ?? defaults.dismissible) {\n <button\n type=\"button\"\n data-part=\"close\"\n [attr.aria-label]=\"t('close')\"\n (click)=\"store.dismiss(message.id, 'dismiss')\"\n >\n <span slIcon><svg slGlyph name=\"x\"></svg></span>\n </button>\n }\n @if (message.data.actions; as actions) {\n <div data-part=\"actions\">\n <ng-container\n [ngTemplateOutlet]=\"actions\"\n [ngTemplateOutletContext]=\"{ $implicit: message }\"\n />\n </div>\n }\n @if ((message.data.progress ?? defaults.progress) && message.duration > 0) {\n <div aria-hidden=\"true\" data-part=\"progress\"></div>\n }\n }\n </li>\n }\n </ol>\n </section>`,\n styleUrl: '../../../styles/src/toast/toast.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n})\nexport class SlToastRegion {\n /** Defaults to the token, then to `bottom-end`. */\n readonly placement = input<ToastPlacement | undefined>(undefined);\n /** Defaults to the token, then to `portal`. */\n readonly attach = input<ToastAttach | undefined>(undefined);\n /** Defaults to the token, then to `list`. */\n readonly stacking = input<ToastStacking | undefined>(undefined);\n readonly swipe = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly limit = input<number | undefined>(undefined);\n readonly duration = input<number | undefined>(undefined);\n readonly pauseOnHover = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly pauseWhenHidden = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /** The key that moves focus into the region. Defaults to the token. */\n readonly hotkey = input<string | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the name\n * a reader finds the region by (`label`) and what each close control\n * announces (`close`).\n */\n readonly messages = input<PartialMessages<ToastMessages> | undefined>(undefined);\n /** The element a portalled region is placed inside. */\n readonly container = input<Element | null | undefined>(undefined);\n /** The queue the page owns. Present at all decides the mode for good. */\n readonly toasts = input<readonly ToastMessage<ToastContent>[] | undefined>(undefined);\n\n /**\n * One output for one transition, carrying the value, the value it replaces,\n * the reason, the originating event and `cancel()`. There is no `[(toasts)]`\n * because a two-way binding has one slot and cannot carry any of those — the\n * shape `alert` settled.\n */\n readonly toastsChange = output<ChangeRequest<readonly ToastMessage<ToastContent>[]>>();\n\n readonly defaults = injectToastDefaults();\n /** The family's words in the language in force, with this region's `messages` laid over them. */\n readonly t = injectMessages(toastMessages, this.messages);\n private readonly service = inject(SlToastService);\n private readonly layer = viewChild.required<ElementRef<HTMLElement>>('layer');\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly browser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /**\n * A region the page's own array feeds cannot share the injected service: the\n * mode is decided once, for the life of the store, and the service's store is\n * uncontrolled by construction.\n */\n private readonly ownStore: ToastStore<ToastContent> | null =\n this.toasts() === undefined\n ? null\n : createToastStore<ToastContent>({ toasts: this.toasts() ?? [] });\n\n readonly store: ToastStore<ToastContent> = this.ownStore ?? this.service.store;\n\n private readonly snapshot = signal(this.store.snapshot);\n\n readonly visible = computed(() => this.snapshot().visible);\n readonly queued = computed(() => this.snapshot().queued);\n readonly paused = computed(() => this.snapshot().paused);\n\n readonly resolvedPlacement = computed(() => this.placement() ?? this.defaults.placement);\n readonly resolvedAttach = computed(() => this.attach() ?? this.defaults.attach);\n readonly resolvedStacking = computed(() => this.stacking() ?? this.defaults.stacking);\n readonly resolvedSwipe = computed(() => this.swipe() ?? this.defaults.swipe);\n readonly resolvedHotkey = computed(() => this.hotkey() ?? this.defaults.hotkey);\n\n private readonly interacting = { pointer: false, focus: false };\n /** Where the keyboard was before the hotkey moved it into the region. */\n private cameFrom: HTMLElement | null = null;\n\n constructor() {\n const stop = this.store.subscribe(() => this.snapshot.set(this.store.snapshot));\n this.store.onRequest((request) => this.toastsChange.emit(request));\n\n effect(() => {\n this.store.configure({\n limit: this.limit() ?? this.defaults.limit,\n duration: this.duration() ?? this.defaults.duration,\n pauseOnHover: this.pauseOnHover() ?? this.defaults.pauseOnHover,\n pauseWhenHidden: this.pauseWhenHidden() ?? this.defaults.pauseWhenHidden,\n });\n });\n\n effect(() => {\n const owned = this.toasts();\n if (owned !== undefined) this.store.sync(owned);\n });\n\n /**\n * A portalled region inherits nothing from where it was written, so the\n * layer carries the theme, the scheme, the density and the direction of the\n * host it came from. Every surveyed implementation loses them.\n *\n * Only in the browser, as the focus effects below: the server's document is\n * not the page. The region is drawn in its host there, where hydration\n * expects the view's nodes, and nothing on the server holds focus.\n */\n effect((onCleanup) => {\n const section = this.layer().nativeElement;\n if (this.resolvedAttach() !== 'portal' || !this.browser) return;\n\n const handle = createPortalRoot({\n origin: this.host.nativeElement,\n container: this.container() ?? null,\n });\n handle.container?.append(section);\n onCleanup(() => {\n /* Back where Angular expects it before the layer goes, so the view's\n own teardown removes a node whose parent it still knows. */\n this.host.nativeElement.append(section);\n handle.release();\n });\n });\n\n /**\n * Where the keyboard goes when the message it was in is taken away — the\n * next message, then the element focus came from. Only React Aria answers\n * it at all, and only for its own close button.\n */\n effect((onCleanup) => {\n const section = this.layer().nativeElement;\n if (!this.browser) return;\n const handle = createRemovalFocus(section, {\n itemSelector: '[data-part=\"item\"]',\n fallback: () => this.cameFrom,\n });\n onCleanup(() => handle.destroy());\n });\n\n /** The one key this family binds, and the only thing that moves focus here. */\n effect((onCleanup) => {\n const section = this.layer().nativeElement;\n const doc = section.ownerDocument;\n const hotkey = this.resolvedHotkey();\n if (!this.browser) return;\n\n const onKeyDown = (event: KeyboardEvent) => {\n const parts = hotkey.toLowerCase().split('+');\n const key = parts.at(-1) ?? '';\n const wants = (name: string) => parts.includes(name);\n if (\n event.key.toLowerCase() !== key ||\n event.altKey !== wants('alt') ||\n event.ctrlKey !== wants('ctrl') ||\n event.shiftKey !== wants('shift') ||\n event.metaKey !== wants('meta')\n ) {\n return;\n }\n\n const first = section.querySelector<HTMLElement>('[data-part=\"item\"]');\n if (!first) return;\n event.preventDefault();\n const active = doc.activeElement;\n this.cameFrom = active instanceof HTMLElement && !section.contains(active) ? active : null;\n first.focus();\n };\n\n doc.addEventListener('keydown', onKeyDown);\n onCleanup(() => doc.removeEventListener('keydown', onKeyDown));\n });\n\n /**\n * Measured, and only for the pile. A column of messages that are not all\n * the same height cannot be opened from arithmetic alone.\n *\n * After render rather than as an `effect`: a component's effect runs\n * before its view is refreshed, so the messages that just arrived were not\n * in the list yet and the pile was never measured.\n */\n afterRenderEffect((onCleanup) => {\n const section = this.layer().nativeElement;\n if (this.resolvedStacking() !== 'stack') return;\n void this.visible();\n\n const list = section.querySelector<HTMLElement>('[data-part=\"list\"]');\n const view = section.ownerDocument.defaultView;\n if (!list || !view || typeof view.ResizeObserver !== 'function') return;\n\n const measure = () => {\n const items = [...list.querySelectorAll<HTMLElement>('[data-part=\"item\"]')];\n const gap = Number.parseFloat(view.getComputedStyle(list).rowGap) || 0;\n let offset = 0;\n items.forEach((item, index) => {\n const height = naturalHeight(item);\n item.style.setProperty('--slotted-toast-height', `${height}px`);\n item.style.setProperty('--slotted-toast-stack-offset', `${offset}px`);\n if (index === 0) section.style.setProperty('--slotted-toast-front-height', `${height}px`);\n offset += height + gap;\n });\n /* The open pile's whole height, so its gaps are the region's. */\n section.style.setProperty('--slotted-toast-stack-height', `${Math.max(0, offset - gap)}px`);\n };\n\n const observer = new view.ResizeObserver(measure);\n for (const item of list.querySelectorAll('[data-part=\"item\"]')) observer.observe(item);\n measure();\n onCleanup(() => observer.disconnect());\n });\n\n inject(DestroyRef).onDestroy(() => {\n stop();\n this.ownStore?.destroy();\n });\n }\n\n /** Sends the keyboard to the newest message. The family never does it alone. */\n focus() {\n this.layer().nativeElement.querySelector<HTMLElement>('[data-part=\"item\"]')?.focus();\n }\n\n protected onPointer(inside: boolean) {\n this.interacting.pointer = inside;\n this.report();\n }\n\n protected onFocus(inside: boolean) {\n this.interacting.focus = inside;\n this.report();\n }\n\n protected onFocusOut(event: FocusEvent) {\n const next = event.relatedTarget;\n if (next instanceof Node && this.layer().nativeElement.contains(next)) return;\n this.interacting.focus = false;\n this.report();\n }\n\n private report() {\n this.store.setInteracting(this.interacting.pointer || this.interacting.focus);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, Directive, inject } from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlLoader } from '@slotted/angular/progress-indicator';\n\nimport { SlToastItem } from './toast';\n\n/**\n * The parts, for a page that writes its own message body inside\n * `<ng-template slToastBody>` rather than taking the family's.\n *\n * They carry the part name and nothing else: the geometry, the tone and the\n * states are the item's and the region's, and a directive that repeated any of\n * them would be a second place to change them. The two that draw a glyph read\n * it from the item they sit in.\n */\n\n/**\n * The tone's mark, or the page's own. Content the page writes replaces it;\n * with none, the item's glyph is drawn, `progress-indicator`'s contained\n * loader while the message waits, and nothing for `secondary`.\n */\n@Component({\n selector: '[slToastIcon]',\n standalone: true,\n exportAs: 'slToastIcon',\n imports: [SlGlyph, SlIcon, SlLoader],\n template: `<ng-content>\n @if (loading()) {\n <div slLoader contained decorative [delay]=\"0\" [minDuration]=\"0\" [tone]=\"tone()\"></div>\n } @else if (mark(); as glyph) {\n <span slIcon><svg slGlyph [name]=\"glyph\" solid></svg></span>\n }\n </ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'data-part': 'icon', 'aria-hidden': 'true' },\n})\nexport class SlToastIcon {\n private readonly item = inject(SlToastItem, { optional: true });\n\n /* Outside an item there is no tone, and the default tone's glyph stands. */\n protected readonly mark = computed(() => (this.item === null ? 'circle-info' : this.item.mark()));\n protected readonly loading = computed(() => this.item?.message().loading ?? false);\n protected readonly tone = computed(() => this.item?.tone() ?? 'accent');\n}\n\n/** The words, and the one column that is allowed to shrink. */\n@Directive({\n selector: '[slToastContent]',\n standalone: true,\n exportAs: 'slToastContent',\n host: { 'data-part': 'content' },\n})\nexport class SlToastContent {}\n\n/**\n * The message's name. Written on the page's own element, and not a heading: a\n * message that is gone in five seconds is not a section of the document.\n */\n@Directive({\n selector: '[slToastTitle]',\n standalone: true,\n exportAs: 'slToastTitle',\n host: { 'data-part': 'title' },\n})\nexport class SlToastTitle {}\n\n/** The message. Written on a `p`, which is what a sentence of prose is. */\n@Directive({\n selector: '[slToastDescription]',\n standalone: true,\n exportAs: 'slToastDescription',\n host: { 'data-part': 'description' },\n})\nexport class SlToastDescription {}\n\n/**\n * The controls that act on the message. What goes in is the page's own\n * buttons: `button` already owns what a button is.\n */\n@Directive({\n selector: '[slToastActions]',\n standalone: true,\n exportAs: 'slToastActions',\n host: { 'data-part': 'actions' },\n})\nexport class SlToastActions {}\n\n/** The control that puts the message away. A real button with a real name. */\n@Component({\n selector: 'button[slToastClose]',\n standalone: true,\n exportAs: 'slToastClose',\n imports: [SlGlyph, SlIcon],\n /* The cross is drawn unless the consumer wrote content of their own. */\n template: `<ng-content\n ><span slIcon><svg slGlyph name=\"x\"></svg></span\n ></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'data-part': 'close', type: 'button' },\n})\nexport class SlToastClose {}\n\n/** How much of the duration is left, drawn from the number the timer reads. */\n@Directive({\n selector: '[slToastProgress]',\n standalone: true,\n exportAs: 'slToastProgress',\n host: { 'data-part': 'progress', 'aria-hidden': 'true' },\n})\nexport class SlToastProgress {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;AAmGA;;;;AAIG;AACI,MAAM,YAAY,GAAG;AAE5B,MAAM,QAAQ,GAAkB;AAC9B,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,OAAO,EAAE,QAAQ;AACjB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,MAAM,EAAE,YAAY;CACrB;MAEY,cAAc,GAAG,IAAI,cAAc,CAAgB,wBAAwB,EAAE;AACxF,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM,QAAQ;AACxB,CAAA;AAED;;;;;AAKG;AACG,SAAU,oBAAoB,CAAC,QAAgC,EAAA;IACnE,OAAO;AACL,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,UAAU,EAAE,OAAsB,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;KAChE;AACH;AAEA;SACgB,mBAAmB,GAAA;AACjC,IAAA,OAAO,MAAM,CAAC,cAAc,CAAC;AAC/B;AAEA;AACA,SAAS,UAAU,CAAC,KAAiB,EAAA;AACnC,IAAA,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,YAAY;AAC/D,IAAA,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACpE;AAEA;AACA,SAAS,KAAK,CAAC,KAAiB,EAAA;AAC9B,IAAA,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK;AAC3F,IAAA,KAAK,YAAY;IAEjB,OAAO;AACL,QAAA,IAAI,EAAE,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACnC,QAAA,IAAI,QAAQ,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC/C,QAAA,IAAI,QAAQ,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC/C,QAAA,IAAI,OAAO,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC7C,QAAA,IAAI,cAAc,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;AAC3D,QAAA,YAAY,EAAE,UAAU,CAAC,KAAK,CAAC;AAC/B;AACoD;AACpD,QAAA,MAAM,EAAE,OAAO,CAAC,OAAO,KAAK,SAAS;AACrC,QAAA,IAAI,EAAE,OAAuB;KAC9B;AACH;AAEA;;;;;;;;AAQG;MAEU,cAAc,CAAA;AACR,IAAA,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;;IAGzC,KAAK,GAA6B,gBAAgB,CAAe;AACxE,QAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC1B,QAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;AACjC,KAAA,CAAC;AAEe,IAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;iFAAC;;IAG9C,OAAO,GAAkD,QAAQ,CACxE,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO;gFAC9B;;IAEQ,MAAM,GAAkD,QAAQ,CACvE,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;+EAC7B;;IAEQ,MAAM,GAAoB,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;+EAAC;AAEzE,IAAA,WAAA,GAAA;QACE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC/E,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AAChC,YAAA,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACtB,QAAA,CAAC,CAAC;IACJ;;IAGA,IAAI,CAAC,QAAoB,EAAE,EAAA;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC;;IAGA,MAAM,CAAC,EAAU,EAAE,KAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC;;AAGA,IAAA,OAAO,CAAC,EAAU,EAAE,MAAA,GAAsB,cAAc,EAAA;QACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC;IAChC;;IAGA,KAAK,CAAC,SAAsB,OAAO,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;IACvB;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;IACxB;;IAGA,OAAO,CAAQ,OAAuB,EAAE,KAA+B,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;AACjC,YAAA,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAC7B,YAAA,OAAO,EACL,OAAO,KAAK,CAAC,OAAO,KAAK;AACvB,kBAAE,CAAC,KAAY,KAAK,KAAK,CAAE,KAAK,CAAC,OAAwC,CAAC,KAAK,CAAC;AAChF,kBAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAC1B,YAAA,KAAK,EACH,OAAO,KAAK,CAAC,KAAK,KAAK;AACrB,kBAAE,CAAC,MAAe,KAAK,KAAK,CAAE,KAAK,CAAC,KAAyC,CAAC,MAAM,CAAC;AACrF,kBAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AACzB,SAAA,CAAC;IACJ;uGAvEW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA;;2FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC5IlC;;;AAGG;AACH,MAAM,UAAU,GAAwC;AACtD,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,OAAO,EAAE,cAAc;AACvB,IAAA,OAAO,EAAE,cAAc;AACvB,IAAA,MAAM,EAAE,UAAU;CACnB;AAED;AACA,SAAS,SAAS,CAAC,SAAyB,EAAE,SAAiB,EAAA;AAC7D,IAAA,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAClD,IAAA,MAAM,GAAG,GAAG,SAAS,KAAK,KAAK;AAC/B,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ;AACxC,UAAE;AACA,cAAE;cACA,CAAC;AACL,UAAE,SAAS,CAAC,QAAQ,CAAC,MAAM;AACzB,cAAE;kBACE,CAAC;AACH,kBAAE;cACF,CAAC;AACP,IAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;AAC1B;AAEA;;;;;;;AAOG;AACH,SAAS,aAAa,CAAC,IAAiB,EAAA;AACtC,IAAA,MAAM,MAAM,GACV,OAAO,IAAI,CAAC,aAAa,KAAK,UAAU;QACxC;AACG,aAAA,aAAa;aACb,IAAI,CAAC,CAAC,SAAS,KACd,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CACvC,SAAyD,CAAC,kBAAkB,IAAI,EAAE,CACpF,CACF;IACL,IAAI,MAAM,EAAE;AACV,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;IACtC;AACA,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS;AACnC,IAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,MAAM;AAClD,IAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM;AAC7B,IAAA,OAAO,MAAM;AACf;AAEA;;;;;;AAMG;MAwBU,WAAW,CAAA;IACb,OAAO,GAAG,KAAK,CAAC,QAAQ,8EAA+B,KAAK,EAAE,aAAa,EAAA,CAAG;;IAE9E,KAAK,GAAG,KAAK,CAAC,CAAC,6EAAI,KAAK,EAAE,kBAAkB,EAAA,CAAG;AAEvC,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC9B,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;AACnE;;;;AAIG;AACM,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEnB,MAAM,GAAG,MAAM,CAAgD,UAAU;+EAAC;IACxE,QAAQ,GAAG,MAAM,CAAC,KAAK;iFAAC;IAC1B,MAAM,GAAG,MAAM,CAAkC,IAAI;+EAAC;IAC/D,IAAI,GAAgD,IAAI;IAEvD,IAAI,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI;6EAAC;AACrF;;;;AAIG;IACM,IAAI,GAAG,QAAQ,CAAmB,MACzC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,GAAG,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;6EACxD;IACkB,OAAO,GAAG,QAAQ,CACnC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;gFAClE;IACkB,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,MAAM;+EAAC;AACjD,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ;AACxC,QAAA,OAAO,QAAQ,GAAG,CAAC,GAAG,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI,GAAG,IAAI;IAC9C,CAAC;sFAAC;AACiB,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,OAAO,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,CAAA,EAAG,KAAK,CAAC,CAAC,IAAI;IAC/C,CAAC;+EAAC;AACiB,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,OAAO,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,CAAA,EAAG,KAAK,CAAC,CAAC,IAAI;IAC/C,CAAC;+EAAC;AAEF;;;;;AAKG;IACc,QAAQ,GAAG,cAAc,CAAC;AACzC,QAAA,cAAc,EAAE,IAAI;AACpB,QAAA,oBAAoB,EAAE,KAAK;AAC3B,QAAA,cAAc,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/C,QAAA,cAAc,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;AAClE,KAAA,CAAC;AAEF,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QAC9C,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,SAAS,EAAE,cAAc,CAAC;AAC5E,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC7D;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;QACtC,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE;AACtD;AACqB;QACrB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC;IACxD;AAEU,IAAA,aAAa,CAAC,KAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;;AAExD,QAAA,IAAK,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,oCAAoC,CAAC;YAAE;QACjF,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE;QACvE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;IAC5D;AAEU,IAAA,aAAa,CAAC,KAAmB,EAAA;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI;QACvB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS;YAAE;AAE5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACvC,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW;QAC9C,MAAM,IAAI,GAAG,SAAS,CACpB,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAC/B,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS,IAAI,KAAK,CACnD;AACD;AAC2D;AAC3D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;QACtF,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;YAAE;AAE5C,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC5D;AAEU,IAAA,WAAW,CAAC,KAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS;YAAE;AACpD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,QAAQ,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEpF,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACvC,QAAA,IAAI,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;AAE9F;AACyE;AACzE,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE;AACrF,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC;QACzD;IACF;uGAtHW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,+BAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,6BAAA,EAAA,SAAA,EAAA,gCAAA,EAAA,iBAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAvBvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,IAAI,EAAE;AACJ,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,kBAAkB,EAAE,QAAQ;AAC5B,wBAAA,qBAAqB,EAAE,WAAW;AAClC,wBAAA,kBAAkB,EAAE,sBAAsB;AAC1C,wBAAA,qBAAqB,EAAE,+BAA+B;AACtD,wBAAA,sBAAsB,EAAE,wBAAwB;AAChD,wBAAA,+BAA+B,EAAE,SAAS;AAC1C,wBAAA,kCAAkC,EAAE,iBAAiB;AACrD,wBAAA,iCAAiC,EAAE,UAAU;AAC7C,wBAAA,iCAAiC,EAAE,UAAU;AAC7C,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,eAAe,EAAE,uBAAuB;AACxC,wBAAA,eAAe,EAAE,uBAAuB;AACxC,wBAAA,aAAa,EAAE,qBAAqB;AACpC,wBAAA,iBAAiB,EAAE,qBAAqB;AACzC,qBAAA;AACF,iBAAA;;AA0HD;;;;;;;;;;;;;AAaG;MA0FU,aAAa,CAAA;;IAEf,SAAS,GAAG,KAAK,CAA6B,SAAS;kFAAC;;IAExD,MAAM,GAAG,KAAK,CAA0B,SAAS;+EAAC;;IAElD,QAAQ,GAAG,KAAK,CAA4B,SAAS;iFAAC;AACtD,IAAA,KAAK,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,CAAA,EACjF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;IACO,KAAK,GAAG,KAAK,CAAqB,SAAS;8EAAC;IAC5C,QAAQ,GAAG,KAAK,CAAqB,SAAS;iFAAC;AAC/C,IAAA,YAAY,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,CAAA,EACxF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;AACO,IAAA,eAAe,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,CAAA,EAC3F,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;;IAEO,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;AACtD;;;;AAIG;IACM,QAAQ,GAAG,KAAK,CAA6C,SAAS;iFAAC;;IAEvE,SAAS,GAAG,KAAK,CAA6B,SAAS;kFAAC;;IAExD,MAAM,GAAG,KAAK,CAAoD,SAAS;+EAAC;AAErF;;;;;AAKG;IACM,YAAY,GAAG,MAAM,EAAwD;IAE7E,QAAQ,GAAG,mBAAmB,EAAE;;IAEhC,CAAC,GAAG,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC;AACxC,IAAA,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;AAChC,IAAA,KAAK,GAAG,SAAS,CAAC,QAAQ,CAA0B,OAAO;8EAAC;AAC5D,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;IAClD,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEjE;;;;AAIG;AACc,IAAA,QAAQ,GACvB,IAAI,CAAC,MAAM,EAAE,KAAK;AAChB,UAAE;AACF,UAAE,gBAAgB,CAAe,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;IAE5D,KAAK,GAA6B,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;AAE7D,IAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;iFAAC;IAE9C,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO;gFAAC;IACjD,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;+EAAC;IAC/C,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;+EAAC;AAE/C,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS;0FAAC;AAC/E,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;uFAAC;AACtE,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ;yFAAC;AAC5E,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK;sFAAC;AACnE,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;uFAAC;IAE9D,WAAW,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;;IAEvD,QAAQ,GAAuB,IAAI;AAE3C,IAAA,WAAA,GAAA;QACE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAElE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ;gBACnD,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY;gBAC/D,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe;AACzE,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;YAC3B,IAAI,KAAK,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjD,QAAA,CAAC,CAAC;AAEF;;;;;;;;AAQG;AACH,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa;YAC1C,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;YAEzD,MAAM,MAAM,GAAG,gBAAgB,CAAC;AAC9B,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;AAC/B,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI;AACpC,aAAA,CAAC;AACF,YAAA,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC;YACjC,SAAS,CAAC,MAAK;AACb;AAC8D;gBAC9D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;gBACvC,MAAM,CAAC,OAAO,EAAE;AAClB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF;;;;AAIG;AACH,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa;YAC1C,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;AACnB,YAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,EAAE;AACzC,gBAAA,YAAY,EAAE,oBAAoB;AAClC,gBAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,QAAQ;AAC9B,aAAA,CAAC;YACF,SAAS,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;AACnC,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa;AAC1C,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa;AACjC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;AAEnB,YAAA,MAAM,SAAS,GAAG,CAAC,KAAoB,KAAI;gBACzC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC9B,gBAAA,MAAM,KAAK,GAAG,CAAC,IAAY,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AACpD,gBAAA,IACE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG;AAC/B,oBAAA,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC;AAC7B,oBAAA,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC;AAC/B,oBAAA,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,CAAC;oBACjC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC,EAC/B;oBACA;gBACF;gBAEA,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAc,oBAAoB,CAAC;AACtE,gBAAA,IAAI,CAAC,KAAK;oBAAE;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa;gBAChC,IAAI,CAAC,QAAQ,GAAG,MAAM,YAAY,WAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI;gBAC1F,KAAK,CAAC,KAAK,EAAE;AACf,YAAA,CAAC;AAED,YAAA,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;AAC1C,YAAA,SAAS,CAAC,MAAM,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAChE,QAAA,CAAC,CAAC;AAEF;;;;;;;AAOG;AACH,QAAA,iBAAiB,CAAC,CAAC,SAAS,KAAI;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa;AAC1C,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,OAAO;gBAAE;AACzC,YAAA,KAAK,IAAI,CAAC,OAAO,EAAE;YAEnB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAc,oBAAoB,CAAC;AACrE,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW;YAC9C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,UAAU;gBAAE;YAEjE,MAAM,OAAO,GAAG,MAAK;gBACnB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAc,oBAAoB,CAAC,CAAC;AAC3E,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBACtE,IAAI,MAAM,GAAG,CAAC;gBACd,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC5B,oBAAA,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC;oBAClC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,CAAC;oBAC/D,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,CAAC;oBACrE,IAAI,KAAK,KAAK,CAAC;wBAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,CAAC;AACzF,oBAAA,MAAM,IAAI,MAAM,GAAG,GAAG;AACxB,gBAAA,CAAC,CAAC;;gBAEF,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,CAAA,EAAA,CAAI,CAAC;AAC7F,YAAA,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YACjD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;AAAE,gBAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AACtF,YAAA,OAAO,EAAE;YACT,SAAS,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;AACxC,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AAChC,YAAA,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE;AAC1B,QAAA,CAAC,CAAC;IACJ;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,aAAa,CAAc,oBAAoB,CAAC,EAAE,KAAK,EAAE;IACtF;AAEU,IAAA,SAAS,CAAC,MAAe,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,MAAM;QACjC,IAAI,CAAC,MAAM,EAAE;IACf;AAEU,IAAA,OAAO,CAAC,MAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,MAAM;QAC/B,IAAI,CAAC,MAAM,EAAE;IACf;AAEU,IAAA,UAAU,CAAC,KAAiB,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa;AAChC,QAAA,IAAI,IAAI,YAAY,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE;AACvE,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,KAAK;QAC9B,IAAI,CAAC,MAAM,EAAE;IACf;IAEQ,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAC/E;uGA3OW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApFd,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA8EC,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wncAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/ED,gBAAgB,oJAAE,OAAO,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,sGA3I1C,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAgOX,aAAa,EAAA,UAAA,EAAA,CAAA;kBAzFzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,QAAA,EACN,eAAe,EAAA,OAAA,EAChB,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAA,QAAA,EACzD,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EC,YAAA,CAAA,EAAA,eAAA,EAEM,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAA,MAAA,EAAA,CAAA,wncAAA,CAAA,EAAA;4xCA6CiC,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACrY9E;;;;;;;;AAQG;AAEH;;;;AAIG;MAgBU,WAAW,CAAA;IACL,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAG5C,IAAI,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;6EAAC;AAC9E,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,OAAO,IAAI,KAAK;gFAAC;AAC/D,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,QAAQ;6EAAC;uGAN5D,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAVZ,CAAA;;;;;;AAMI,eAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAPJ,OAAO,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAWxB,WAAW,EAAA,UAAA,EAAA,CAAA;kBAfvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC;AACpC,oBAAA,QAAQ,EAAE,CAAA;;;;;;AAMI,eAAA,CAAA;oBACd,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE;AACrD,iBAAA;;AAUD;MAOa,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;AACjC,iBAAA;;AAGD;;;AAGG;MAOU,YAAY,CAAA;uGAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,OAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBANxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE;AAC/B,iBAAA;;AAGD;MAOa,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE;AACrC,iBAAA;;AAGD;;;AAGG;MAOU,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;AACjC,iBAAA;;AAGD;MAaa,YAAY,CAAA;uGAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EANb,CAAA;;iBAEK,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAJL,OAAO,oFAAE,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAQd,YAAY,EAAA,UAAA,EAAA,CAAA;kBAZxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;;AAE1B,oBAAA,QAAQ,EAAE,CAAA;;AAEK,gBAAA,CAAA;oBACf,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC/C,iBAAA;;AAGD;MAOa,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE;AACzD,iBAAA;;;AC5GD;;AAEG;;"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { createRovingTabindex } from '@slotted/core/focus';
|
|
2
|
+
import { createControllable } from '@slotted/core/state';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { InjectionToken, inject, input, booleanAttribute, output, ElementRef, HostAttributeToken, signal, computed, afterNextRender, effect, DestroyRef, ViewEncapsulation, ChangeDetectionStrategy, Component, Directive } from '@angular/core';
|
|
5
|
+
|
|
6
|
+
const FALLBACK = {
|
|
7
|
+
attached: true,
|
|
8
|
+
deselectable: true,
|
|
9
|
+
loop: true,
|
|
10
|
+
orientation: 'horizontal',
|
|
11
|
+
size: 'md',
|
|
12
|
+
variant: 'outline',
|
|
13
|
+
};
|
|
14
|
+
const TOGGLE_GROUP_DEFAULTS = new InjectionToken('slotted toggle group defaults', { providedIn: 'root', factory: () => FALLBACK });
|
|
15
|
+
/**
|
|
16
|
+
* An application decides once how its toggle bars are drawn and how they
|
|
17
|
+
* behave, rather than repeating the same inputs on every one of them. A group
|
|
18
|
+
* that states any of them itself still wins.
|
|
19
|
+
*/
|
|
20
|
+
function provideToggleGroupDefaults(defaults) {
|
|
21
|
+
return {
|
|
22
|
+
provide: TOGGLE_GROUP_DEFAULTS,
|
|
23
|
+
useFactory: () => ({ ...FALLBACK, ...defaults }),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** What a toggle group renders as here, before it states anything of its own. */
|
|
27
|
+
function injectToggleGroupDefaults() {
|
|
28
|
+
return inject(TOGGLE_GROUP_DEFAULTS);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** The items the arrows move between. */
|
|
32
|
+
const ITEM_SELECTOR = '[data-part="item"]';
|
|
33
|
+
/**
|
|
34
|
+
* A set of two-state buttons that share one value.
|
|
35
|
+
*
|
|
36
|
+
* **The arrows move focus and never toggle.** Each item is the APG Button
|
|
37
|
+
* pattern's toggle button, activated by `Space` and `Enter` alone; the
|
|
38
|
+
* movement between them is the Toolbar pattern's roving tabindex. The family
|
|
39
|
+
* whose arrows move the value is `segmented-control`, and it is a radio group
|
|
40
|
+
* because that is the pattern describing that interaction.
|
|
41
|
+
*
|
|
42
|
+
* **Inside a `toolbar` the group stands down.** A bar is one tab stop with
|
|
43
|
+
* arrow navigation across every control it holds, so a group running a second
|
|
44
|
+
* ring inside it would put two tab stops where the APG asks for one. The bar is
|
|
45
|
+
* found in the DOM by its public identifier rather than by injecting the other
|
|
46
|
+
* family, so neither depends on the other; `rovingFocus` states it outright
|
|
47
|
+
* for a bar this library did not write.
|
|
48
|
+
*
|
|
49
|
+
* **The value is always an array.** `multiple` caps it at one entry rather
|
|
50
|
+
* than changing its type, so both bindings hold one shape and a `model()` can
|
|
51
|
+
* hold it. A single-select consumer writes an array of one, which is the price.
|
|
52
|
+
*/
|
|
53
|
+
class SlToggleGroup {
|
|
54
|
+
/** Present means the consumer owns the set. */
|
|
55
|
+
value = input(undefined, /* @ts-ignore */
|
|
56
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
57
|
+
/** The value an uncontrolled group starts from, read once. */
|
|
58
|
+
defaultValue = input(undefined, /* @ts-ignore */
|
|
59
|
+
...(ngDevMode ? [{ debugName: "defaultValue" }] : /* istanbul ignore next */ []));
|
|
60
|
+
/** Whether more than one item may be on at a time. */
|
|
61
|
+
multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
62
|
+
/**
|
|
63
|
+
* Whether the last item on may be turned off. Ignored while `multiple` is
|
|
64
|
+
* true, where a set may always empty.
|
|
65
|
+
*/
|
|
66
|
+
deselectable = input(undefined, { ...(ngDevMode ? { debugName: "deselectable" } : /* istanbul ignore next */ {}), transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
|
|
67
|
+
size = input(undefined, /* @ts-ignore */
|
|
68
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
69
|
+
variant = input(undefined, /* @ts-ignore */
|
|
70
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
71
|
+
orientation = input(undefined, /* @ts-ignore */
|
|
72
|
+
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
73
|
+
attached = input(undefined, { ...(ngDevMode ? { debugName: "attached" } : /* istanbul ignore next */ {}), transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
|
|
74
|
+
fullWidth = input(false, { ...(ngDevMode ? { debugName: "fullWidth" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
75
|
+
loop = input(undefined, { ...(ngDevMode ? { debugName: "loop" } : /* istanbul ignore next */ {}), transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
|
|
76
|
+
/** Unstated rather than `false`, so an item may state its own. */
|
|
77
|
+
disabled = input(undefined, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
|
|
78
|
+
/**
|
|
79
|
+
* Whether the group holds one tab stop of its own. Unstated, it is inferred
|
|
80
|
+
* from the bar it is in.
|
|
81
|
+
*/
|
|
82
|
+
rovingFocus = input(undefined, { ...(ngDevMode ? { debugName: "rovingFocus" } : /* istanbul ignore next */ {}), transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
|
|
83
|
+
/** One output for one transition, carrying the reason and the event. */
|
|
84
|
+
valueChange = output();
|
|
85
|
+
host = inject((ElementRef));
|
|
86
|
+
defaults = injectToggleGroupDefaults();
|
|
87
|
+
writtenRole = inject(new HostAttributeToken('role'), { optional: true });
|
|
88
|
+
writtenOrientation = inject(new HostAttributeToken('aria-orientation'), {
|
|
89
|
+
optional: true,
|
|
90
|
+
});
|
|
91
|
+
own = signal([], /* @ts-ignore */
|
|
92
|
+
...(ngDevMode ? [{ debugName: "own" }] : /* istanbul ignore next */ []));
|
|
93
|
+
insideToolbar = signal(false, /* @ts-ignore */
|
|
94
|
+
...(ngDevMode ? [{ debugName: "insideToolbar" }] : /* istanbul ignore next */ []));
|
|
95
|
+
handle;
|
|
96
|
+
selection = computed(() => this.value() ?? this.own(), /* @ts-ignore */
|
|
97
|
+
...(ngDevMode ? [{ debugName: "selection" }] : /* istanbul ignore next */ []));
|
|
98
|
+
resolvedSize = computed(() => this.size() ?? this.defaults.size, /* @ts-ignore */
|
|
99
|
+
...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
|
|
100
|
+
resolvedVariant = computed(() => this.variant() ?? this.defaults.variant, /* @ts-ignore */
|
|
101
|
+
...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
|
|
102
|
+
resolvedOrientation = computed(() => this.orientation() ?? this.defaults.orientation, /* @ts-ignore */
|
|
103
|
+
...(ngDevMode ? [{ debugName: "resolvedOrientation" }] : /* istanbul ignore next */ []));
|
|
104
|
+
resolvedAttached = computed(() => this.attached() ?? this.defaults.attached, /* @ts-ignore */
|
|
105
|
+
...(ngDevMode ? [{ debugName: "resolvedAttached" }] : /* istanbul ignore next */ []));
|
|
106
|
+
resolvedDeselectable = computed(() => this.deselectable() ?? this.defaults.deselectable, /* @ts-ignore */
|
|
107
|
+
...(ngDevMode ? [{ debugName: "resolvedDeselectable" }] : /* istanbul ignore next */ []));
|
|
108
|
+
resolvedLoop = computed(() => this.loop() ?? this.defaults.loop, /* @ts-ignore */
|
|
109
|
+
...(ngDevMode ? [{ debugName: "resolvedLoop" }] : /* istanbul ignore next */ []));
|
|
110
|
+
resolvedDisabled = computed(() => this.disabled(), /* @ts-ignore */
|
|
111
|
+
...(ngDevMode ? [{ debugName: "resolvedDisabled" }] : /* istanbul ignore next */ []));
|
|
112
|
+
resolvedRovingFocus = computed(() => this.rovingFocus() ?? !this.insideToolbar(), /* @ts-ignore */
|
|
113
|
+
...(ngDevMode ? [{ debugName: "resolvedRovingFocus" }] : /* istanbul ignore next */ []));
|
|
114
|
+
/** A consumer's own wins. The family writes `group` and never `toolbar`. */
|
|
115
|
+
resolvedRole = this.writtenRole ?? 'group';
|
|
116
|
+
/**
|
|
117
|
+
* Written only when the group flows the other way: `group` carries no
|
|
118
|
+
* implied orientation, so the attribute says something exactly when the
|
|
119
|
+
* arrows have moved to the block axis.
|
|
120
|
+
*/
|
|
121
|
+
ariaOrientation = computed(() => this.writtenOrientation ?? (this.resolvedOrientation() === 'vertical' ? 'vertical' : null), /* @ts-ignore */
|
|
122
|
+
...(ngDevMode ? [{ debugName: "ariaOrientation" }] : /* istanbul ignore next */ []));
|
|
123
|
+
constructor() {
|
|
124
|
+
/**
|
|
125
|
+
* The bar is found in the DOM rather than injected, so neither family
|
|
126
|
+
* depends on the other and `data-ui` — which is public contract — is what
|
|
127
|
+
* answers. It runs after the first render, so a server-rendered group
|
|
128
|
+
* carries its own tab stop for one frame and the bar takes it over on
|
|
129
|
+
* hydration, before a reader can reach it with `Tab`.
|
|
130
|
+
*/
|
|
131
|
+
afterNextRender(() => {
|
|
132
|
+
this.insideToolbar.set(this.host.nativeElement.closest('[data-ui="toolbar"]') !== null);
|
|
133
|
+
});
|
|
134
|
+
effect((onCleanup) => {
|
|
135
|
+
if (!this.resolvedRovingFocus())
|
|
136
|
+
return;
|
|
137
|
+
const loop = this.resolvedLoop();
|
|
138
|
+
const orientation = this.resolvedOrientation();
|
|
139
|
+
this.handle = createRovingTabindex(this.host.nativeElement, {
|
|
140
|
+
itemSelector: ITEM_SELECTOR,
|
|
141
|
+
loop: () => loop,
|
|
142
|
+
orientation: () => orientation,
|
|
143
|
+
});
|
|
144
|
+
onCleanup(() => {
|
|
145
|
+
this.handle?.destroy();
|
|
146
|
+
this.handle = undefined;
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
inject(DestroyRef).onDestroy(() => this.handle?.destroy());
|
|
150
|
+
}
|
|
151
|
+
ngOnInit() {
|
|
152
|
+
if (this.value() === undefined)
|
|
153
|
+
this.own.set(this.defaultValue() ?? []);
|
|
154
|
+
}
|
|
155
|
+
/** An item joined or left the set, so the ring re-reads what it moves between. */
|
|
156
|
+
refresh() {
|
|
157
|
+
this.handle?.refresh();
|
|
158
|
+
}
|
|
159
|
+
/** Whether one value is on. Read by every item in the set. */
|
|
160
|
+
holds(value) {
|
|
161
|
+
return this.selection().includes(value);
|
|
162
|
+
}
|
|
163
|
+
/** Asks the group to turn one value on or off. */
|
|
164
|
+
toggle(value, reason, source) {
|
|
165
|
+
const current = this.selection();
|
|
166
|
+
const on = current.includes(value);
|
|
167
|
+
let next;
|
|
168
|
+
if (this.multiple()) {
|
|
169
|
+
next = on ? current.filter((entry) => entry !== value) : [...current, value];
|
|
170
|
+
}
|
|
171
|
+
else if (on) {
|
|
172
|
+
/* The last one on stays on unless the group was told it may empty. */
|
|
173
|
+
if (!this.resolvedDeselectable())
|
|
174
|
+
return;
|
|
175
|
+
next = [];
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
next = [value];
|
|
179
|
+
}
|
|
180
|
+
let cancelled = false;
|
|
181
|
+
const state = createControllable({
|
|
182
|
+
controlled: this.value(),
|
|
183
|
+
equals: (a, b) => a.length === b.length && a.every((entry, at) => entry === b[at]),
|
|
184
|
+
initial: current,
|
|
185
|
+
onRequest: (request) => {
|
|
186
|
+
this.valueChange.emit(request);
|
|
187
|
+
cancelled = request.cancelled;
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
const moved = state.request(next, reason, source);
|
|
191
|
+
if (!cancelled && moved)
|
|
192
|
+
this.own.set(next);
|
|
193
|
+
}
|
|
194
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlToggleGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
195
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlToggleGroup, isStandalone: true, selector: "[slToggleGroup]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, deselectable: { classPropertyName: "deselectable", publicName: "deselectable", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, attached: { classPropertyName: "attached", publicName: "attached", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, rovingFocus: { classPropertyName: "rovingFocus", publicName: "rovingFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { attributes: { "data-ui": "toggle-group", "data-part": "root" }, properties: { "attr.role": "resolvedRole", "attr.data-size": "resolvedSize()", "attr.data-variant": "resolvedVariant()", "attr.data-orientation": "resolvedOrientation()", "attr.data-attached": "resolvedAttached() ? '' : null", "attr.data-full-width": "fullWidth() ? '' : null", "attr.aria-orientation": "ariaOrientation()" } }, exportAs: ["slToggleGroup"], ngImport: i0, template: '<ng-content />', isInline: true, styles: ["@layer slotted.components{[data-ui=toggle-group][data-part=root]{--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_font-size: var(--slotted-control-font-size-md, 13px);--_icon-size: var(--slotted-control-icon-size-md, 16px);--_gap: var(--slotted-control-gap-md, 8px);--_radius: var(--slotted-toggle-group-radius, var(--slotted-control-radius, 4px));--_border-width: var(--slotted-control-border-width, 1px);--_overlap: calc(-1 * var(--_border-width));--_separation: calc(var(--_gap) * 2);--_border-color: var( --slotted-toggle-group-border-color, var(--slotted-control-border-color, ButtonBorder) );align-items:stretch;display:inline-flex;flex-direction:row;flex-wrap:nowrap;font-family:var(--slotted-control-font-family, system-ui, sans-serif);isolation:isolate;min-inline-size:0}[data-ui=toggle-group][data-part=root]:empty{display:none}[data-ui=toggle-group][data-part=root][data-size=sm]{--_height: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-sm, 10px);--_font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-sm, 14px);--_gap: var(--slotted-control-gap-sm, 6px)}[data-ui=toggle-group][data-part=root][data-size=lg]{--_height: var(--slotted-control-height-lg, 38px);--_padding-inline: var(--slotted-control-padding-inline-lg, 16px);--_font-size: var(--slotted-control-font-size-lg, 14px);--_icon-size: var(--slotted-control-icon-size-lg, 18px);--_gap: var(--slotted-control-gap-lg, 8px)}[data-ui=toggle-group][data-part=root][data-orientation=vertical]{flex-direction:column}[data-ui=toggle-group][data-part=root][data-full-width]{display:flex;inline-size:100%}[data-ui=toggle-group][data-part=root][data-full-width] [data-part=item]{flex:1 1 0}[data-ui=toggle-group] [data-part=item]{align-items:center;appearance:none;background:transparent;block-size:var(--_height);border:var(--_border-width) solid transparent;border-radius:var(--_radius);box-sizing:border-box;color:var(--slotted-toggle-group-color, var(--slotted-text, ButtonText));cursor:pointer;display:inline-flex;flex:0 1 auto;font:inherit;font-size:var(--_font-size);font-weight:var(--slotted-control-font-weight, 600);gap:var(--_gap);justify-content:center;letter-spacing:var(--slotted-control-letter-spacing, 0);line-height:var(--slotted-control-line-height, 1);margin:0;min-inline-size:var(--_height);padding-block:0;padding-inline:var(--_padding-inline);position:relative;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=toggle-group] [data-part=item]:not(:has([data-part=label])){padding-inline:0}[data-ui=toggle-group] [data-part=icon]{block-size:var(--_icon-size);display:inline-flex;flex:none;inline-size:var(--_icon-size)}[data-ui=toggle-group] [data-part=label]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui=toggle-group][data-part=root][data-variant=outline] [data-part=item]{border-color:var(--_border-color);box-shadow:var(--slotted-toggle-group-shadow, var(--slotted-control-shadow, none))}[data-ui=toggle-group][data-part=root]:not([data-attached]){gap:var(--_separation)}[data-ui=toggle-group][data-part=root][data-attached]:not([data-orientation=vertical]) [data-part=item]+[data-part=item]{margin-inline-start:var(--_overlap)}[data-ui=toggle-group][data-part=root][data-attached][data-orientation=vertical] [data-part=item]+[data-part=item]{margin-block-start:var(--_overlap)}[data-ui=toggle-group][data-part=root][data-attached]:not([data-orientation=vertical]) [data-part=item]{border-end-start-radius:0;border-end-end-radius:0;border-start-start-radius:0;border-start-end-radius:0}[data-ui=toggle-group][data-part=root][data-attached]:not([data-orientation=vertical]) [data-part=item]:first-child{border-end-start-radius:var(--_radius);border-start-start-radius:var(--_radius)}[data-ui=toggle-group][data-part=root][data-attached]:not([data-orientation=vertical]) [data-part=item]:last-child{border-end-end-radius:var(--_radius);border-start-end-radius:var(--_radius)}[data-ui=toggle-group][data-part=root][data-attached][data-orientation=vertical] [data-part=item]{border-end-start-radius:0;border-end-end-radius:0;border-start-start-radius:0;border-start-end-radius:0}[data-ui=toggle-group][data-part=root][data-attached][data-orientation=vertical] [data-part=item]:first-child{border-start-end-radius:var(--_radius);border-start-start-radius:var(--_radius)}[data-ui=toggle-group][data-part=root][data-attached][data-orientation=vertical] [data-part=item]:last-child{border-end-end-radius:var(--_radius);border-end-start-radius:var(--_radius)}[data-ui=toggle-group][data-part=root][data-variant=outline][data-attached]:not([data-orientation=vertical]) [data-part=item]:not(:last-child):not([data-pressed]){border-inline-end-color:transparent}[data-ui=toggle-group][data-part=root][data-variant=outline][data-attached][data-orientation=vertical] [data-part=item]:not(:last-child):not([data-pressed]){border-block-end-color:transparent}[data-ui=toggle-group][data-part=root][data-variant=outline][data-attached]:not([data-orientation=vertical]) [data-part=item][data-pressed]+[data-part=item]{border-inline-start-color:transparent}[data-ui=toggle-group][data-part=root][data-variant=outline][data-attached][data-orientation=vertical] [data-part=item][data-pressed]+[data-part=item]{border-block-start-color:transparent}[data-ui=toggle-group] [data-part=item][data-pressed]:not(:disabled):not([data-disabled]){background:var( --slotted-toggle-group-pressed-background, var(--slotted-tone-accent-subtle-active, Highlight) );border-color:var( --slotted-toggle-group-pressed-border-color, var(--slotted-tone-accent-border, Highlight) );color:var( --slotted-toggle-group-pressed-color, var(--slotted-tone-accent-text, HighlightText) )}[data-ui=toggle-group] [data-part=item][data-pressed]{z-index:1}[data-ui=toggle-group] [data-part=item]:hover:not(:disabled):not([data-disabled]):not([data-pressed]){background:var( --slotted-toggle-group-hover-background, var(--slotted-tone-secondary-subtle-hover, ButtonFace) )}[data-ui=toggle-group] [data-part=item]:active:not(:disabled):not([data-disabled]):not([data-pressed]){background:var( --slotted-toggle-group-active-background, var(--slotted-tone-secondary-subtle-active, ButtonFace) );transition-duration:var(--slotted-duration-instant)}[data-ui=toggle-group] [data-part=item][data-pressed]:hover:not(:disabled):not([data-disabled]){background:var( --slotted-toggle-group-pressed-hover-background, var(--slotted-tone-accent-subtle-hover, Highlight) )}[data-ui=toggle-group] [data-part=item][data-pressed]:active:not(:disabled):not([data-disabled]){background:var( --slotted-toggle-group-pressed-background, var(--slotted-tone-accent-subtle-active, Highlight) );transition-duration:var(--slotted-duration-instant)}[data-ui=toggle-group] [data-part=item]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px);z-index:2}[data-ui=toggle-group][data-part=root][data-attached] [data-part=item]:focus-visible{outline-offset:calc(-1 * var(--slotted-focus-ring-width, 2px))}[data-ui=toggle-group] [data-part=item]:disabled,[data-ui=toggle-group] [data-part=item][data-disabled]{background:transparent;color:var(--slotted-toggle-group-disabled-color, var(--slotted-disabled-foreground, GrayText));cursor:default}[data-ui=toggle-group][data-part=root][data-variant=outline] [data-part=item]:disabled,[data-ui=toggle-group][data-part=root][data-variant=outline] [data-part=item][data-disabled]{border-color:var( --slotted-toggle-group-disabled-border-color, var(--slotted-disabled-border, GrayText) );box-shadow:none}[data-ui=toggle-group] [data-part=item][data-pressed]:disabled,[data-ui=toggle-group] [data-part=item][data-pressed][data-disabled]{background:var( --slotted-toggle-group-disabled-pressed-background, var(--slotted-disabled-background, ButtonFace) )}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
196
|
+
}
|
|
197
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlToggleGroup, decorators: [{
|
|
198
|
+
type: Component,
|
|
199
|
+
args: [{ selector: '[slToggleGroup]', standalone: true, exportAs: 'slToggleGroup', template: '<ng-content />', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
200
|
+
'data-ui': 'toggle-group',
|
|
201
|
+
'data-part': 'root',
|
|
202
|
+
'[attr.role]': 'resolvedRole',
|
|
203
|
+
'[attr.data-size]': 'resolvedSize()',
|
|
204
|
+
'[attr.data-variant]': 'resolvedVariant()',
|
|
205
|
+
'[attr.data-orientation]': 'resolvedOrientation()',
|
|
206
|
+
'[attr.data-attached]': "resolvedAttached() ? '' : null",
|
|
207
|
+
'[attr.data-full-width]': "fullWidth() ? '' : null",
|
|
208
|
+
'[attr.aria-orientation]': 'ariaOrientation()',
|
|
209
|
+
}, styles: ["@layer slotted.components{[data-ui=toggle-group][data-part=root]{--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_font-size: var(--slotted-control-font-size-md, 13px);--_icon-size: var(--slotted-control-icon-size-md, 16px);--_gap: var(--slotted-control-gap-md, 8px);--_radius: var(--slotted-toggle-group-radius, var(--slotted-control-radius, 4px));--_border-width: var(--slotted-control-border-width, 1px);--_overlap: calc(-1 * var(--_border-width));--_separation: calc(var(--_gap) * 2);--_border-color: var( --slotted-toggle-group-border-color, var(--slotted-control-border-color, ButtonBorder) );align-items:stretch;display:inline-flex;flex-direction:row;flex-wrap:nowrap;font-family:var(--slotted-control-font-family, system-ui, sans-serif);isolation:isolate;min-inline-size:0}[data-ui=toggle-group][data-part=root]:empty{display:none}[data-ui=toggle-group][data-part=root][data-size=sm]{--_height: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-sm, 10px);--_font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-sm, 14px);--_gap: var(--slotted-control-gap-sm, 6px)}[data-ui=toggle-group][data-part=root][data-size=lg]{--_height: var(--slotted-control-height-lg, 38px);--_padding-inline: var(--slotted-control-padding-inline-lg, 16px);--_font-size: var(--slotted-control-font-size-lg, 14px);--_icon-size: var(--slotted-control-icon-size-lg, 18px);--_gap: var(--slotted-control-gap-lg, 8px)}[data-ui=toggle-group][data-part=root][data-orientation=vertical]{flex-direction:column}[data-ui=toggle-group][data-part=root][data-full-width]{display:flex;inline-size:100%}[data-ui=toggle-group][data-part=root][data-full-width] [data-part=item]{flex:1 1 0}[data-ui=toggle-group] [data-part=item]{align-items:center;appearance:none;background:transparent;block-size:var(--_height);border:var(--_border-width) solid transparent;border-radius:var(--_radius);box-sizing:border-box;color:var(--slotted-toggle-group-color, var(--slotted-text, ButtonText));cursor:pointer;display:inline-flex;flex:0 1 auto;font:inherit;font-size:var(--_font-size);font-weight:var(--slotted-control-font-weight, 600);gap:var(--_gap);justify-content:center;letter-spacing:var(--slotted-control-letter-spacing, 0);line-height:var(--slotted-control-line-height, 1);margin:0;min-inline-size:var(--_height);padding-block:0;padding-inline:var(--_padding-inline);position:relative;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=toggle-group] [data-part=item]:not(:has([data-part=label])){padding-inline:0}[data-ui=toggle-group] [data-part=icon]{block-size:var(--_icon-size);display:inline-flex;flex:none;inline-size:var(--_icon-size)}[data-ui=toggle-group] [data-part=label]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui=toggle-group][data-part=root][data-variant=outline] [data-part=item]{border-color:var(--_border-color);box-shadow:var(--slotted-toggle-group-shadow, var(--slotted-control-shadow, none))}[data-ui=toggle-group][data-part=root]:not([data-attached]){gap:var(--_separation)}[data-ui=toggle-group][data-part=root][data-attached]:not([data-orientation=vertical]) [data-part=item]+[data-part=item]{margin-inline-start:var(--_overlap)}[data-ui=toggle-group][data-part=root][data-attached][data-orientation=vertical] [data-part=item]+[data-part=item]{margin-block-start:var(--_overlap)}[data-ui=toggle-group][data-part=root][data-attached]:not([data-orientation=vertical]) [data-part=item]{border-end-start-radius:0;border-end-end-radius:0;border-start-start-radius:0;border-start-end-radius:0}[data-ui=toggle-group][data-part=root][data-attached]:not([data-orientation=vertical]) [data-part=item]:first-child{border-end-start-radius:var(--_radius);border-start-start-radius:var(--_radius)}[data-ui=toggle-group][data-part=root][data-attached]:not([data-orientation=vertical]) [data-part=item]:last-child{border-end-end-radius:var(--_radius);border-start-end-radius:var(--_radius)}[data-ui=toggle-group][data-part=root][data-attached][data-orientation=vertical] [data-part=item]{border-end-start-radius:0;border-end-end-radius:0;border-start-start-radius:0;border-start-end-radius:0}[data-ui=toggle-group][data-part=root][data-attached][data-orientation=vertical] [data-part=item]:first-child{border-start-end-radius:var(--_radius);border-start-start-radius:var(--_radius)}[data-ui=toggle-group][data-part=root][data-attached][data-orientation=vertical] [data-part=item]:last-child{border-end-end-radius:var(--_radius);border-end-start-radius:var(--_radius)}[data-ui=toggle-group][data-part=root][data-variant=outline][data-attached]:not([data-orientation=vertical]) [data-part=item]:not(:last-child):not([data-pressed]){border-inline-end-color:transparent}[data-ui=toggle-group][data-part=root][data-variant=outline][data-attached][data-orientation=vertical] [data-part=item]:not(:last-child):not([data-pressed]){border-block-end-color:transparent}[data-ui=toggle-group][data-part=root][data-variant=outline][data-attached]:not([data-orientation=vertical]) [data-part=item][data-pressed]+[data-part=item]{border-inline-start-color:transparent}[data-ui=toggle-group][data-part=root][data-variant=outline][data-attached][data-orientation=vertical] [data-part=item][data-pressed]+[data-part=item]{border-block-start-color:transparent}[data-ui=toggle-group] [data-part=item][data-pressed]:not(:disabled):not([data-disabled]){background:var( --slotted-toggle-group-pressed-background, var(--slotted-tone-accent-subtle-active, Highlight) );border-color:var( --slotted-toggle-group-pressed-border-color, var(--slotted-tone-accent-border, Highlight) );color:var( --slotted-toggle-group-pressed-color, var(--slotted-tone-accent-text, HighlightText) )}[data-ui=toggle-group] [data-part=item][data-pressed]{z-index:1}[data-ui=toggle-group] [data-part=item]:hover:not(:disabled):not([data-disabled]):not([data-pressed]){background:var( --slotted-toggle-group-hover-background, var(--slotted-tone-secondary-subtle-hover, ButtonFace) )}[data-ui=toggle-group] [data-part=item]:active:not(:disabled):not([data-disabled]):not([data-pressed]){background:var( --slotted-toggle-group-active-background, var(--slotted-tone-secondary-subtle-active, ButtonFace) );transition-duration:var(--slotted-duration-instant)}[data-ui=toggle-group] [data-part=item][data-pressed]:hover:not(:disabled):not([data-disabled]){background:var( --slotted-toggle-group-pressed-hover-background, var(--slotted-tone-accent-subtle-hover, Highlight) )}[data-ui=toggle-group] [data-part=item][data-pressed]:active:not(:disabled):not([data-disabled]){background:var( --slotted-toggle-group-pressed-background, var(--slotted-tone-accent-subtle-active, Highlight) );transition-duration:var(--slotted-duration-instant)}[data-ui=toggle-group] [data-part=item]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px);z-index:2}[data-ui=toggle-group][data-part=root][data-attached] [data-part=item]:focus-visible{outline-offset:calc(-1 * var(--slotted-focus-ring-width, 2px))}[data-ui=toggle-group] [data-part=item]:disabled,[data-ui=toggle-group] [data-part=item][data-disabled]{background:transparent;color:var(--slotted-toggle-group-disabled-color, var(--slotted-disabled-foreground, GrayText));cursor:default}[data-ui=toggle-group][data-part=root][data-variant=outline] [data-part=item]:disabled,[data-ui=toggle-group][data-part=root][data-variant=outline] [data-part=item][data-disabled]{border-color:var( --slotted-toggle-group-disabled-border-color, var(--slotted-disabled-border, GrayText) );box-shadow:none}[data-ui=toggle-group] [data-part=item][data-pressed]:disabled,[data-ui=toggle-group] [data-part=item][data-pressed][data-disabled]{background:var( --slotted-toggle-group-disabled-pressed-background, var(--slotted-disabled-background, ButtonFace) )}}\n"] }]
|
|
210
|
+
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], deselectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "deselectable", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], attached: [{ type: i0.Input, args: [{ isSignal: true, alias: "attached", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], loop: [{ type: i0.Input, args: [{ isSignal: true, alias: "loop", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], rovingFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "rovingFocus", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* The mark an item is drawn with, on the consumer's own element.
|
|
214
|
+
*
|
|
215
|
+
* A directive rather than a slot, so an `ng-icon`, an inline `svg` or a `span`
|
|
216
|
+
* all work and none of them loses its own semantics. It is hidden from the
|
|
217
|
+
* reading order, because the words beside it — or the `aria-label` on the
|
|
218
|
+
* button — are what a reader hears.
|
|
219
|
+
*/
|
|
220
|
+
class SlToggleGroupIcon {
|
|
221
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlToggleGroupIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
222
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlToggleGroupIcon, isStandalone: true, selector: "[slToggleGroupIcon]", host: { attributes: { "data-part": "icon", "aria-hidden": "true" } }, exportAs: ["slToggleGroupIcon"], ngImport: i0 });
|
|
223
|
+
}
|
|
224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlToggleGroupIcon, decorators: [{
|
|
225
|
+
type: Directive,
|
|
226
|
+
args: [{
|
|
227
|
+
selector: '[slToggleGroupIcon]',
|
|
228
|
+
standalone: true,
|
|
229
|
+
exportAs: 'slToggleGroupIcon',
|
|
230
|
+
host: {
|
|
231
|
+
'data-part': 'icon',
|
|
232
|
+
'aria-hidden': 'true',
|
|
233
|
+
},
|
|
234
|
+
}]
|
|
235
|
+
}] });
|
|
236
|
+
/**
|
|
237
|
+
* A click synthesised by the keyboard reports no detail; a real one reports
|
|
238
|
+
* the click count. It is why `Space`, `Enter` and a pointer are told apart
|
|
239
|
+
* without a key listener existing anywhere in the family.
|
|
240
|
+
*/
|
|
241
|
+
function activationReason(event) {
|
|
242
|
+
return event instanceof MouseEvent && event.detail === 0 ? 'keyboard' : 'pointer';
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* One two-state button of the set.
|
|
246
|
+
*
|
|
247
|
+
* `aria-pressed` is written in both states, so the item is announced as a
|
|
248
|
+
* toggle rather than as a button that happens to be pressed — and its label
|
|
249
|
+
* never changes with its state, which the APG Button pattern calls critical.
|
|
250
|
+
*
|
|
251
|
+
* It is a part of `toggle-group` and not an entry point of its own:
|
|
252
|
+
* `SlToggleGroup` is injected without `optional`, so an item written outside a
|
|
253
|
+
* group fails at construction rather than rendering a button that toggles
|
|
254
|
+
* nothing.
|
|
255
|
+
*/
|
|
256
|
+
class SlToggleGroupItem {
|
|
257
|
+
/** What this item turns on. It is what the group's value holds. */
|
|
258
|
+
value = input.required(/* @ts-ignore */
|
|
259
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
260
|
+
/** Unstated rather than `false`, so the item defers to the group. */
|
|
261
|
+
disabled = input(undefined, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
|
|
262
|
+
/**
|
|
263
|
+
* The group the item belongs to. Public, because a consumer reaching the
|
|
264
|
+
* item through `exportAs` may want the group's resolved step.
|
|
265
|
+
*/
|
|
266
|
+
group = inject(SlToggleGroup);
|
|
267
|
+
pressed = computed(() => this.group.holds(this.value()), /* @ts-ignore */
|
|
268
|
+
...(ngDevMode ? [{ debugName: "pressed" }] : /* istanbul ignore next */ []));
|
|
269
|
+
resolvedDisabled = computed(() => this.disabled() ?? this.group.resolvedDisabled(), /* @ts-ignore */
|
|
270
|
+
...(ngDevMode ? [{ debugName: "resolvedDisabled" }] : /* istanbul ignore next */ []));
|
|
271
|
+
disabledAttribute = computed(() => this.resolvedDisabled() === true ? '' : null, /* @ts-ignore */
|
|
272
|
+
...(ngDevMode ? [{ debugName: "disabledAttribute" }] : /* istanbul ignore next */ []));
|
|
273
|
+
constructor() {
|
|
274
|
+
this.group.refresh();
|
|
275
|
+
inject(DestroyRef).onDestroy(() => this.group.refresh());
|
|
276
|
+
}
|
|
277
|
+
onClick(event) {
|
|
278
|
+
this.group.toggle(this.value(), activationReason(event), event);
|
|
279
|
+
}
|
|
280
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlToggleGroupItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
281
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlToggleGroupItem, isStandalone: true, selector: "button[slToggleGroupItem]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button", "data-part": "item" }, listeners: { "click": "onClick($event)" }, properties: { "attr.aria-pressed": "pressed()", "attr.data-pressed": "pressed() ? '' : null", "attr.data-disabled": "resolvedDisabled() === true ? '' : null", "attr.disabled": "disabledAttribute()" } }, exportAs: ["slToggleGroupItem"], ngImport: i0, template: `<ng-content select="[slToggleGroupIcon]" />
|
|
282
|
+
<span data-part="label"><ng-content /></span>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
283
|
+
}
|
|
284
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlToggleGroupItem, decorators: [{
|
|
285
|
+
type: Component,
|
|
286
|
+
args: [{
|
|
287
|
+
selector: 'button[slToggleGroupItem]',
|
|
288
|
+
standalone: true,
|
|
289
|
+
exportAs: 'slToggleGroupItem',
|
|
290
|
+
template: `<ng-content select="[slToggleGroupIcon]" />
|
|
291
|
+
<span data-part="label"><ng-content /></span>`,
|
|
292
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
293
|
+
encapsulation: ViewEncapsulation.None,
|
|
294
|
+
host: {
|
|
295
|
+
type: 'button',
|
|
296
|
+
'data-part': 'item',
|
|
297
|
+
'[attr.aria-pressed]': 'pressed()',
|
|
298
|
+
'[attr.data-pressed]': "pressed() ? '' : null",
|
|
299
|
+
'[attr.data-disabled]': "resolvedDisabled() === true ? '' : null",
|
|
300
|
+
'[attr.disabled]': 'disabledAttribute()',
|
|
301
|
+
'(click)': 'onClick($event)',
|
|
302
|
+
},
|
|
303
|
+
}]
|
|
304
|
+
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Generated bundle index. Do not edit.
|
|
308
|
+
*/
|
|
309
|
+
|
|
310
|
+
export { SlToggleGroup, SlToggleGroupIcon, SlToggleGroupItem, TOGGLE_GROUP_DEFAULTS, injectToggleGroupDefaults, provideToggleGroupDefaults };
|
|
311
|
+
//# sourceMappingURL=slotted-angular-toggle-group.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slotted-angular-toggle-group.mjs","sources":["../../toggle-group/src/toggle-group-defaults.ts","../../toggle-group/src/toggle-group.ts","../../toggle-group/src/toggle-group-parts.ts","../../toggle-group/src/slotted-angular-toggle-group.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\n\n/** The type step the group and every item inside it sit at. */\nexport type ToggleGroupSize = 'sm' | 'md' | 'lg';\n\n/**\n * Whether the items are framed or bare. `ghost` is the bar that sits inside\n * something already framed — a toolbar, a card header. There is no tone axis:\n * \"on\" is one colour across the system, and a bar that wants the whole palette\n * is `button-group` around toggle buttons.\n */\nexport type ToggleGroupVariant = 'outline' | 'ghost';\n\n/** How the items flow. The arrows follow the same axis. */\nexport type ToggleGroupOrientation = 'horizontal' | 'vertical';\n\nexport interface ToggleGroupDefaults {\n attached: boolean;\n deselectable: boolean;\n loop: boolean;\n orientation: ToggleGroupOrientation;\n size: ToggleGroupSize;\n variant: ToggleGroupVariant;\n}\n\nconst FALLBACK: ToggleGroupDefaults = {\n attached: true,\n deselectable: true,\n loop: true,\n orientation: 'horizontal',\n size: 'md',\n variant: 'outline',\n};\n\nexport const TOGGLE_GROUP_DEFAULTS = new InjectionToken<ToggleGroupDefaults>(\n 'slotted toggle group defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once how its toggle bars are drawn and how they\n * behave, rather than repeating the same inputs on every one of them. A group\n * that states any of them itself still wins.\n */\nexport function provideToggleGroupDefaults(defaults: Partial<ToggleGroupDefaults>) {\n return {\n provide: TOGGLE_GROUP_DEFAULTS,\n useFactory: (): ToggleGroupDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a toggle group renders as here, before it states anything of its own. */\nexport function injectToggleGroupDefaults(): ToggleGroupDefaults {\n return inject(TOGGLE_GROUP_DEFAULTS);\n}\n","import { createRovingTabindex } from '@slotted/core/focus';\nimport type { RovingTabindexHandle } from '@slotted/core/focus';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { OnInit } from '@angular/core';\n\nimport { injectToggleGroupDefaults } from './toggle-group-defaults';\nimport type {\n ToggleGroupOrientation,\n ToggleGroupSize,\n ToggleGroupVariant,\n} from './toggle-group-defaults';\n\nexport type {\n ToggleGroupDefaults,\n ToggleGroupOrientation,\n ToggleGroupSize,\n ToggleGroupVariant,\n} from './toggle-group-defaults';\n\n/** Why the value moved. A toggle group can produce exactly these two. */\nexport type ToggleGroupSelectionReason = 'pointer' | 'keyboard';\n\n/** The items the arrows move between. */\nconst ITEM_SELECTOR = '[data-part=\"item\"]';\n\n/**\n * A set of two-state buttons that share one value.\n *\n * **The arrows move focus and never toggle.** Each item is the APG Button\n * pattern's toggle button, activated by `Space` and `Enter` alone; the\n * movement between them is the Toolbar pattern's roving tabindex. The family\n * whose arrows move the value is `segmented-control`, and it is a radio group\n * because that is the pattern describing that interaction.\n *\n * **Inside a `toolbar` the group stands down.** A bar is one tab stop with\n * arrow navigation across every control it holds, so a group running a second\n * ring inside it would put two tab stops where the APG asks for one. The bar is\n * found in the DOM by its public identifier rather than by injecting the other\n * family, so neither depends on the other; `rovingFocus` states it outright\n * for a bar this library did not write.\n *\n * **The value is always an array.** `multiple` caps it at one entry rather\n * than changing its type, so both bindings hold one shape and a `model()` can\n * hold it. A single-select consumer writes an array of one, which is the price.\n */\n@Component({\n selector: '[slToggleGroup]',\n standalone: true,\n exportAs: 'slToggleGroup',\n template: '<ng-content />',\n styleUrl: '../../../styles/src/toggle-group/toggle-group.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'toggle-group',\n 'data-part': 'root',\n '[attr.role]': 'resolvedRole',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-orientation]': 'resolvedOrientation()',\n '[attr.data-attached]': \"resolvedAttached() ? '' : null\",\n '[attr.data-full-width]': \"fullWidth() ? '' : null\",\n '[attr.aria-orientation]': 'ariaOrientation()',\n },\n})\nexport class SlToggleGroup implements OnInit {\n /** Present means the consumer owns the set. */\n readonly value = input<readonly string[] | undefined>(undefined);\n /** The value an uncontrolled group starts from, read once. */\n readonly defaultValue = input<readonly string[] | undefined>(undefined);\n /** Whether more than one item may be on at a time. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /**\n * Whether the last item on may be turned off. Ignored while `multiple` is\n * true, where a set may always empty.\n */\n readonly deselectable = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly size = input<ToggleGroupSize | undefined>(undefined);\n readonly variant = input<ToggleGroupVariant | undefined>(undefined);\n readonly orientation = input<ToggleGroupOrientation | undefined>(undefined);\n readonly attached = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly fullWidth = input(false, { transform: booleanAttribute });\n readonly loop = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /** Unstated rather than `false`, so an item may state its own. */\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /**\n * Whether the group holds one tab stop of its own. Unstated, it is inferred\n * from the bar it is in.\n */\n readonly rovingFocus = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n\n /** One output for one transition, carrying the reason and the event. */\n readonly valueChange = output<ChangeRequest<readonly string[]>>();\n\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly defaults = injectToggleGroupDefaults();\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n private readonly writtenOrientation = inject(new HostAttributeToken('aria-orientation'), {\n optional: true,\n });\n\n private readonly own = signal<readonly string[]>([]);\n private readonly insideToolbar = signal(false);\n private handle: RovingTabindexHandle | undefined;\n\n readonly selection = computed(() => this.value() ?? this.own());\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n readonly resolvedOrientation = computed(() => this.orientation() ?? this.defaults.orientation);\n readonly resolvedAttached = computed(() => this.attached() ?? this.defaults.attached);\n readonly resolvedDeselectable = computed(() => this.deselectable() ?? this.defaults.deselectable);\n readonly resolvedLoop = computed(() => this.loop() ?? this.defaults.loop);\n readonly resolvedDisabled = computed(() => this.disabled());\n readonly resolvedRovingFocus = computed(() => this.rovingFocus() ?? !this.insideToolbar());\n\n /** A consumer's own wins. The family writes `group` and never `toolbar`. */\n protected readonly resolvedRole = this.writtenRole ?? 'group';\n /**\n * Written only when the group flows the other way: `group` carries no\n * implied orientation, so the attribute says something exactly when the\n * arrows have moved to the block axis.\n */\n protected readonly ariaOrientation = computed(\n () =>\n this.writtenOrientation ?? (this.resolvedOrientation() === 'vertical' ? 'vertical' : null),\n );\n\n constructor() {\n /**\n * The bar is found in the DOM rather than injected, so neither family\n * depends on the other and `data-ui` — which is public contract — is what\n * answers. It runs after the first render, so a server-rendered group\n * carries its own tab stop for one frame and the bar takes it over on\n * hydration, before a reader can reach it with `Tab`.\n */\n afterNextRender(() => {\n this.insideToolbar.set(\n (this.host.nativeElement as HTMLElement).closest('[data-ui=\"toolbar\"]') !== null,\n );\n });\n\n effect((onCleanup) => {\n if (!this.resolvedRovingFocus()) return;\n const loop = this.resolvedLoop();\n const orientation = this.resolvedOrientation();\n\n this.handle = createRovingTabindex(this.host.nativeElement as HTMLElement, {\n itemSelector: ITEM_SELECTOR,\n loop: () => loop,\n orientation: () => orientation,\n });\n onCleanup(() => {\n this.handle?.destroy();\n this.handle = undefined;\n });\n });\n\n inject(DestroyRef).onDestroy(() => this.handle?.destroy());\n }\n\n ngOnInit() {\n if (this.value() === undefined) this.own.set(this.defaultValue() ?? []);\n }\n\n /** An item joined or left the set, so the ring re-reads what it moves between. */\n refresh() {\n this.handle?.refresh();\n }\n\n /** Whether one value is on. Read by every item in the set. */\n holds(value: string): boolean {\n return this.selection().includes(value);\n }\n\n /** Asks the group to turn one value on or off. */\n toggle(value: string, reason: ToggleGroupSelectionReason, source: Event) {\n const current = this.selection();\n const on = current.includes(value);\n let next: readonly string[];\n\n if (this.multiple()) {\n next = on ? current.filter((entry) => entry !== value) : [...current, value];\n } else if (on) {\n /* The last one on stays on unless the group was told it may empty. */\n if (!this.resolvedDeselectable()) return;\n next = [];\n } else {\n next = [value];\n }\n\n let cancelled = false;\n const state = createControllable<readonly string[]>({\n controlled: this.value(),\n equals: (a, b) => a.length === b.length && a.every((entry, at) => entry === b[at]),\n initial: current,\n onRequest: (request) => {\n this.valueChange.emit(request);\n cancelled = request.cancelled;\n },\n });\n const moved = state.request(next, reason, source);\n if (!cancelled && moved) this.own.set(next);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n Directive,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { SlToggleGroup } from './toggle-group';\nimport type { ToggleGroupSelectionReason } from './toggle-group';\n\n/**\n * The mark an item is drawn with, on the consumer's own element.\n *\n * A directive rather than a slot, so an `ng-icon`, an inline `svg` or a `span`\n * all work and none of them loses its own semantics. It is hidden from the\n * reading order, because the words beside it — or the `aria-label` on the\n * button — are what a reader hears.\n */\n@Directive({\n selector: '[slToggleGroupIcon]',\n standalone: true,\n exportAs: 'slToggleGroupIcon',\n host: {\n 'data-part': 'icon',\n 'aria-hidden': 'true',\n },\n})\nexport class SlToggleGroupIcon {}\n\n/**\n * A click synthesised by the keyboard reports no detail; a real one reports\n * the click count. It is why `Space`, `Enter` and a pointer are told apart\n * without a key listener existing anywhere in the family.\n */\nfunction activationReason(event: Event): ToggleGroupSelectionReason {\n return event instanceof MouseEvent && event.detail === 0 ? 'keyboard' : 'pointer';\n}\n\n/**\n * One two-state button of the set.\n *\n * `aria-pressed` is written in both states, so the item is announced as a\n * toggle rather than as a button that happens to be pressed — and its label\n * never changes with its state, which the APG Button pattern calls critical.\n *\n * It is a part of `toggle-group` and not an entry point of its own:\n * `SlToggleGroup` is injected without `optional`, so an item written outside a\n * group fails at construction rather than rendering a button that toggles\n * nothing.\n */\n@Component({\n selector: 'button[slToggleGroupItem]',\n standalone: true,\n exportAs: 'slToggleGroupItem',\n template: `<ng-content select=\"[slToggleGroupIcon]\" />\n <span data-part=\"label\"><ng-content /></span>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n type: 'button',\n 'data-part': 'item',\n '[attr.aria-pressed]': 'pressed()',\n '[attr.data-pressed]': \"pressed() ? '' : null\",\n '[attr.data-disabled]': \"resolvedDisabled() === true ? '' : null\",\n '[attr.disabled]': 'disabledAttribute()',\n '(click)': 'onClick($event)',\n },\n})\nexport class SlToggleGroupItem {\n /** What this item turns on. It is what the group's value holds. */\n readonly value = input.required<string>();\n /** Unstated rather than `false`, so the item defers to the group. */\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n\n /**\n * The group the item belongs to. Public, because a consumer reaching the\n * item through `exportAs` may want the group's resolved step.\n */\n readonly group = inject(SlToggleGroup);\n\n readonly pressed = computed(() => this.group.holds(this.value()));\n readonly resolvedDisabled = computed(() => this.disabled() ?? this.group.resolvedDisabled());\n\n protected readonly disabledAttribute = computed(() =>\n this.resolvedDisabled() === true ? '' : null,\n );\n\n constructor() {\n this.group.refresh();\n inject(DestroyRef).onDestroy(() => this.group.refresh());\n }\n\n protected onClick(event: Event) {\n this.group.toggle(this.value(), activationReason(event), event);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAyBA,MAAM,QAAQ,GAAwB;AACpC,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,WAAW,EAAE,YAAY;AACzB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,OAAO,EAAE,SAAS;CACnB;MAEY,qBAAqB,GAAG,IAAI,cAAc,CACrD,+BAA+B,EAC/B,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAAQ,EAAE;AAGjD;;;;AAIG;AACG,SAAU,0BAA0B,CAAC,QAAsC,EAAA;IAC/E,OAAO;AACL,QAAA,OAAO,EAAE,qBAAqB;AAC9B,QAAA,UAAU,EAAE,OAA4B,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;KACtE;AACH;AAEA;SACgB,yBAAyB,GAAA;AACvC,IAAA,OAAO,MAAM,CAAC,qBAAqB,CAAC;AACtC;;ACfA;AACA,MAAM,aAAa,GAAG,oBAAoB;AAE1C;;;;;;;;;;;;;;;;;;;AAmBG;MAqBU,aAAa,CAAA;;IAEf,KAAK,GAAG,KAAK,CAAgC,SAAS;8EAAC;;IAEvD,YAAY,GAAG,KAAK,CAAgC,SAAS;qFAAC;;IAE9D,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACjE;;;AAGG;AACM,IAAA,YAAY,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,CAAA,EACxF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;IACO,IAAI,GAAG,KAAK,CAA8B,SAAS;6EAAC;IACpD,OAAO,GAAG,KAAK,CAAiC,SAAS;gFAAC;IAC1D,WAAW,GAAG,KAAK,CAAqC,SAAS;oFAAC;AAClE,IAAA,QAAQ,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;IACO,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACzD,IAAA,IAAI,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,CAAA,EAChF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;;AAEO,IAAA,QAAQ,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;AACF;;;AAGG;AACM,IAAA,WAAW,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,CAAA,EACvF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;;IAGO,WAAW,GAAG,MAAM,EAAoC;AAEhD,IAAA,IAAI,GAAG,MAAM,EAAC,UAAuB,EAAC;IACtC,QAAQ,GAAG,yBAAyB,EAAE;AACtC,IAAA,WAAW,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxE,kBAAkB,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,EAAE;AACvF,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CAAC;IAEe,GAAG,GAAG,MAAM,CAAoB,EAAE;4EAAC;IACnC,aAAa,GAAG,MAAM,CAAC,KAAK;sFAAC;AACtC,IAAA,MAAM;AAEL,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;kFAAC;AACtD,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI;qFAAC;AAChE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;wFAAC;AACzE,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW;4FAAC;AACrF,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ;yFAAC;AAC5E,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY;6FAAC;AACxF,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI;qFAAC;IAChE,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;yFAAC;AAClD,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;4FAAC;;AAGvE,IAAA,YAAY,GAAG,IAAI,CAAC,WAAW,IAAI,OAAO;AAC7D;;;;AAIG;IACgB,eAAe,GAAG,QAAQ,CAC3C,MACE,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,mBAAmB,EAAE,KAAK,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;wFAC7F;AAED,IAAA,WAAA,GAAA;AACE;;;;;;AAMG;QACH,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CACnB,IAAI,CAAC,IAAI,CAAC,aAA6B,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,IAAI,CACjF;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAAE;AACjC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE;YAE9C,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,aAA4B,EAAE;AACzE,gBAAA,YAAY,EAAE,aAAa;AAC3B,gBAAA,IAAI,EAAE,MAAM,IAAI;AAChB,gBAAA,WAAW,EAAE,MAAM,WAAW;AAC/B,aAAA,CAAC;YACF,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,GAAG,SAAS;AACzB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAC5D;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;IACzE;;IAGA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;IACxB;;AAGA,IAAA,KAAK,CAAC,KAAa,EAAA;QACjB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;IACzC;;AAGA,IAAA,MAAM,CAAC,KAAa,EAAE,MAAkC,EAAE,MAAa,EAAA;AACrE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE;QAChC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,IAAuB;AAE3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;QAC9E;aAAO,IAAI,EAAE,EAAE;;AAEb,YAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAAE;YAClC,IAAI,GAAG,EAAE;QACX;aAAO;AACL,YAAA,IAAI,GAAG,CAAC,KAAK,CAAC;QAChB;QAEA,IAAI,SAAS,GAAG,KAAK;QACrB,MAAM,KAAK,GAAG,kBAAkB,CAAoB;AAClD,YAAA,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE;AACxB,YAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAClF,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,SAAS,EAAE,CAAC,OAAO,KAAI;AACrB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,gBAAA,SAAS,GAAG,OAAO,CAAC,SAAS;YAC/B,CAAC;AACF,SAAA,CAAC;AACF,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;QACjD,IAAI,CAAC,SAAS,IAAI,KAAK;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7C;uGAnJW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,kkEAhBd,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kjQAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAgBf,aAAa,EAAA,UAAA,EAAA,CAAA;kBApBzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,QAAA,EACN,eAAe,YACf,gBAAgB,EAAA,eAAA,EAET,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,SAAS,EAAE,cAAc;AACzB,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,aAAa,EAAE,cAAc;AAC7B,wBAAA,kBAAkB,EAAE,gBAAgB;AACpC,wBAAA,qBAAqB,EAAE,mBAAmB;AAC1C,wBAAA,yBAAyB,EAAE,uBAAuB;AAClD,wBAAA,sBAAsB,EAAE,gCAAgC;AACxD,wBAAA,wBAAwB,EAAE,yBAAyB;AACnD,wBAAA,yBAAyB,EAAE,mBAAmB;AAC/C,qBAAA,EAAA,MAAA,EAAA,CAAA,kjQAAA,CAAA,EAAA;;;ACjEH;;;;;;;AAOG;MAUU,iBAAiB,CAAA;uGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,aAAa,EAAE,MAAM;AACtB,qBAAA;AACF,iBAAA;;AAGD;;;;AAIG;AACH,SAAS,gBAAgB,CAAC,KAAY,EAAA;AACpC,IAAA,OAAO,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,GAAG,SAAS;AACnF;AAEA;;;;;;;;;;;AAWG;MAmBU,iBAAiB,CAAA;;IAEnB,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAU;;AAEhC,IAAA,QAAQ,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;AAEF;;;AAGG;AACM,IAAA,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC;AAE7B,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gFAAC;AACxD,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;yFAAC;AAEzE,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAC9C,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI;0FAC7C;AAED,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACpB,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1D;AAEU,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACjE;uGA5BW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,yCAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdlB,CAAA;AACsC,iDAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAarC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,CAAA;AACsC,iDAAA,CAAA;oBAChD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,qBAAqB,EAAE,WAAW;AAClC,wBAAA,qBAAqB,EAAE,uBAAuB;AAC9C,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,iBAAiB,EAAE,qBAAqB;AACxC,wBAAA,SAAS,EAAE,iBAAiB;AAC7B,qBAAA;AACF,iBAAA;;;ACxED;;AAEG;;"}
|