@slotted/angular 0.0.0-stage → 0.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +51 -2
- package/docs/AGENTS.snippet.md +10 -0
- package/docs/accordion.json +345 -0
- package/docs/accordion.md +207 -0
- package/docs/action-bar.json +421 -0
- package/docs/action-bar.md +364 -0
- package/docs/action-sheet.json +210 -0
- package/docs/action-sheet.md +19 -0
- package/docs/alert.json +407 -0
- package/docs/alert.md +239 -0
- package/docs/app-shell.examples.md +349 -0
- package/docs/app-shell.json +835 -0
- package/docs/app-shell.md +214 -0
- package/docs/aspect-ratio.json +159 -0
- package/docs/aspect-ratio.md +134 -0
- package/docs/attachment.json +486 -0
- package/docs/attachment.md +253 -0
- package/docs/avatar-group.json +208 -0
- package/docs/avatar-group.md +130 -0
- package/docs/avatar.json +342 -0
- package/docs/avatar.md +142 -0
- package/docs/badge.json +334 -0
- package/docs/badge.md +138 -0
- package/docs/breadcrumb.json +368 -0
- package/docs/breadcrumb.md +237 -0
- package/docs/button-group.json +158 -0
- package/docs/button-group.md +72 -0
- package/docs/button.examples.md +621 -0
- package/docs/button.json +977 -0
- package/docs/button.md +200 -0
- package/docs/calendar.json +592 -0
- package/docs/calendar.md +242 -0
- package/docs/card.json +283 -0
- package/docs/card.md +130 -0
- package/docs/carousel.json +560 -0
- package/docs/carousel.md +357 -0
- package/docs/cascader.json +933 -0
- package/docs/cascader.md +379 -0
- package/docs/chart.examples.md +582 -0
- package/docs/chart.json +1359 -0
- package/docs/chart.md +187 -0
- package/docs/checkbox-group.examples.md +612 -0
- package/docs/checkbox-group.json +395 -0
- package/docs/checkbox-group.md +106 -0
- package/docs/checkbox.examples.md +546 -0
- package/docs/checkbox.json +506 -0
- package/docs/checkbox.md +104 -0
- package/docs/code-block.json +616 -0
- package/docs/code-block.md +303 -0
- package/docs/collapsible.json +456 -0
- package/docs/collapsible.md +261 -0
- package/docs/color-picker.json +523 -0
- package/docs/color-picker.md +201 -0
- package/docs/column-manager.json +486 -0
- package/docs/column-manager.md +277 -0
- package/docs/combobox.examples.md +1732 -0
- package/docs/combobox.json +1250 -0
- package/docs/combobox.md +209 -0
- package/docs/command-palette.json +800 -0
- package/docs/command-palette.md +419 -0
- package/docs/container.json +156 -0
- package/docs/container.md +92 -0
- package/docs/context-menu.json +231 -0
- package/docs/context-menu.md +176 -0
- package/docs/currency-field.examples.md +321 -0
- package/docs/currency-field.json +649 -0
- package/docs/currency-field.md +128 -0
- package/docs/dashboard-grid.json +680 -0
- package/docs/dashboard-grid.md +265 -0
- package/docs/data-grid.examples.md +3064 -0
- package/docs/data-grid.json +1577 -0
- package/docs/data-grid.md +237 -0
- package/docs/data-grid.props.md +81 -0
- package/docs/data-list.json +685 -0
- package/docs/data-list.md +327 -0
- package/docs/date-field.json +490 -0
- package/docs/date-field.md +235 -0
- package/docs/date-picker.examples.md +1226 -0
- package/docs/date-picker.json +696 -0
- package/docs/date-picker.md +121 -0
- package/docs/date-range-picker.examples.md +1300 -0
- package/docs/date-range-picker.json +903 -0
- package/docs/date-range-picker.md +142 -0
- package/docs/datetime-field.json +665 -0
- package/docs/datetime-field.md +337 -0
- package/docs/datetime-picker.examples.md +1269 -0
- package/docs/datetime-picker.json +928 -0
- package/docs/datetime-picker.md +150 -0
- package/docs/datetime-range-picker.examples.md +225 -0
- package/docs/datetime-range-picker.json +1015 -0
- package/docs/datetime-range-picker.md +162 -0
- package/docs/description-list.json +471 -0
- package/docs/description-list.md +268 -0
- package/docs/detail-panel.json +530 -0
- package/docs/detail-panel.md +361 -0
- package/docs/dialog.examples.md +2467 -0
- package/docs/dialog.json +1141 -0
- package/docs/dialog.md +217 -0
- package/docs/dialog.props.md +63 -0
- package/docs/divider.json +148 -0
- package/docs/divider.md +83 -0
- package/docs/drawer.examples.md +1929 -0
- package/docs/drawer.json +753 -0
- package/docs/drawer.md +199 -0
- package/docs/entity-picker.json +946 -0
- package/docs/entity-picker.md +365 -0
- package/docs/event-calendar.examples.md +308 -0
- package/docs/event-calendar.json +1202 -0
- package/docs/event-calendar.md +201 -0
- package/docs/field-group.json +333 -0
- package/docs/field-group.md +181 -0
- package/docs/field.examples.md +676 -0
- package/docs/field.json +528 -0
- package/docs/field.md +127 -0
- package/docs/filter-bar.json +817 -0
- package/docs/filter-bar.md +380 -0
- package/docs/form.json +378 -0
- package/docs/form.md +235 -0
- package/docs/fullscreen.json +395 -0
- package/docs/fullscreen.md +225 -0
- package/docs/grid.json +176 -0
- package/docs/grid.md +74 -0
- package/docs/highlight.json +279 -0
- package/docs/highlight.md +210 -0
- package/docs/hover-card.json +254 -0
- package/docs/hover-card.md +213 -0
- package/docs/icon.json +173 -0
- package/docs/icon.md +101 -0
- package/docs/image.json +476 -0
- package/docs/image.md +254 -0
- package/docs/import-export-center.json +836 -0
- package/docs/import-export-center.md +345 -0
- package/docs/index.md +141 -0
- package/docs/inline-message.json +312 -0
- package/docs/inline-message.md +191 -0
- package/docs/inline.json +149 -0
- package/docs/inline.md +72 -0
- package/docs/kbd.json +350 -0
- package/docs/kbd.md +210 -0
- package/docs/link.json +264 -0
- package/docs/link.md +167 -0
- package/docs/list-item.json +463 -0
- package/docs/list-item.md +236 -0
- package/docs/list.json +321 -0
- package/docs/list.md +185 -0
- package/docs/listbox.json +807 -0
- package/docs/listbox.md +413 -0
- package/docs/loading-overlay.json +440 -0
- package/docs/loading-overlay.md +248 -0
- package/docs/markdown.json +461 -0
- package/docs/markdown.md +266 -0
- package/docs/menu.examples.md +1651 -0
- package/docs/menu.json +922 -0
- package/docs/menu.md +155 -0
- package/docs/menubar.json +292 -0
- package/docs/menubar.md +173 -0
- package/docs/message-scroller.json +401 -0
- package/docs/message-scroller.md +212 -0
- package/docs/message.json +862 -0
- package/docs/message.md +473 -0
- package/docs/multi-select.examples.md +1922 -0
- package/docs/multi-select.json +1314 -0
- package/docs/multi-select.md +213 -0
- package/docs/navigation-menu.json +529 -0
- package/docs/navigation-menu.md +329 -0
- package/docs/notification-center.json +664 -0
- package/docs/notification-center.md +372 -0
- package/docs/number-field.examples.md +1078 -0
- package/docs/number-field.json +668 -0
- package/docs/number-field.md +137 -0
- package/docs/otp-input.json +479 -0
- package/docs/otp-input.md +291 -0
- package/docs/page-header.json +574 -0
- package/docs/page-header.md +338 -0
- package/docs/page.json +332 -0
- package/docs/page.md +184 -0
- package/docs/pagination.json +434 -0
- package/docs/pagination.md +238 -0
- package/docs/popover.examples.md +1235 -0
- package/docs/popover.json +656 -0
- package/docs/popover.md +199 -0
- package/docs/progress-indicator.json +501 -0
- package/docs/progress-indicator.md +329 -0
- package/docs/prompt-composer.json +498 -0
- package/docs/prompt-composer.md +278 -0
- package/docs/prose.json +357 -0
- package/docs/prose.md +226 -0
- package/docs/radio-group.examples.md +626 -0
- package/docs/radio-group.json +541 -0
- package/docs/radio-group.md +112 -0
- package/docs/rating.json +1053 -0
- package/docs/rating.md +435 -0
- package/docs/result-state.json +376 -0
- package/docs/result-state.md +286 -0
- package/docs/saved-views.json +384 -0
- package/docs/saved-views.md +242 -0
- package/docs/scroll-area.json +120 -0
- package/docs/scroll-area.md +8 -0
- package/docs/section.json +344 -0
- package/docs/section.md +208 -0
- package/docs/segmented-control.json +429 -0
- package/docs/segmented-control.md +240 -0
- package/docs/select.examples.md +1214 -0
- package/docs/select.json +1147 -0
- package/docs/select.md +199 -0
- package/docs/side-navigation.json +632 -0
- package/docs/side-navigation.md +430 -0
- package/docs/skeleton.json +358 -0
- package/docs/skeleton.md +223 -0
- package/docs/slider.json +522 -0
- package/docs/slider.md +261 -0
- package/docs/sparkline.json +426 -0
- package/docs/sparkline.md +206 -0
- package/docs/split-button.json +361 -0
- package/docs/split-button.md +275 -0
- package/docs/splitter.json +142 -0
- package/docs/splitter.md +14 -0
- package/docs/stack.json +135 -0
- package/docs/stack.md +74 -0
- package/docs/stat-card.json +529 -0
- package/docs/stat-card.md +270 -0
- package/docs/status-indicator.json +314 -0
- package/docs/status-indicator.md +197 -0
- package/docs/stepper.json +451 -0
- package/docs/stepper.md +250 -0
- package/docs/switch.json +451 -0
- package/docs/switch.md +508 -0
- package/docs/table-of-contents.json +553 -0
- package/docs/table-of-contents.md +289 -0
- package/docs/table.examples.md +1981 -0
- package/docs/table.json +1059 -0
- package/docs/table.md +290 -0
- package/docs/tabs.examples.md +1370 -0
- package/docs/tabs.json +661 -0
- package/docs/tabs.md +211 -0
- package/docs/tag.json +813 -0
- package/docs/tag.md +241 -0
- package/docs/tags-input.json +771 -0
- package/docs/tags-input.md +361 -0
- package/docs/text-field.examples.md +821 -0
- package/docs/text-field.json +604 -0
- package/docs/text-field.md +125 -0
- package/docs/textarea.examples.md +612 -0
- package/docs/textarea.json +440 -0
- package/docs/textarea.md +98 -0
- package/docs/time-field.json +584 -0
- package/docs/time-field.md +291 -0
- package/docs/time-picker.json +679 -0
- package/docs/time-picker.md +315 -0
- package/docs/time-range-picker.examples.md +191 -0
- package/docs/time-range-picker.json +924 -0
- package/docs/time-range-picker.md +152 -0
- package/docs/timeline.json +839 -0
- package/docs/timeline.md +401 -0
- package/docs/toast.json +642 -0
- package/docs/toast.md +311 -0
- package/docs/toggle-group.json +417 -0
- package/docs/toggle-group.md +255 -0
- package/docs/toggle.json +326 -0
- package/docs/toggle.md +222 -0
- package/docs/toolbar.json +380 -0
- package/docs/toolbar.md +240 -0
- package/docs/tooltip.examples.md +664 -0
- package/docs/tooltip.json +604 -0
- package/docs/tooltip.md +146 -0
- package/docs/top-navigation.examples.md +287 -0
- package/docs/top-navigation.json +648 -0
- package/docs/top-navigation.md +138 -0
- package/docs/tour.json +759 -0
- package/docs/tour.md +337 -0
- package/docs/transfer.json +746 -0
- package/docs/transfer.md +273 -0
- package/docs/tree.json +918 -0
- package/docs/tree.md +397 -0
- package/docs/typography.json +317 -0
- package/docs/typography.md +107 -0
- package/docs/upload.examples.md +358 -0
- package/docs/upload.json +1103 -0
- package/docs/upload.md +166 -0
- package/docs/visually-hidden.json +71 -0
- package/docs/visually-hidden.md +42 -0
- package/docs/wizard.json +724 -0
- package/docs/wizard.md +295 -0
- package/fesm2022/slotted-angular-accordion.mjs +247 -0
- package/fesm2022/slotted-angular-accordion.mjs.map +1 -0
- package/fesm2022/slotted-angular-action-bar.mjs +639 -0
- package/fesm2022/slotted-angular-action-bar.mjs.map +1 -0
- package/fesm2022/slotted-angular-action-sheet.mjs +749 -0
- package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -0
- package/fesm2022/slotted-angular-alert.mjs +427 -0
- package/fesm2022/slotted-angular-alert.mjs.map +1 -0
- package/fesm2022/slotted-angular-app-shell.mjs +1334 -0
- package/fesm2022/slotted-angular-app-shell.mjs.map +1 -0
- package/fesm2022/slotted-angular-aspect-ratio.mjs +63 -0
- package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -0
- package/fesm2022/slotted-angular-attachment.mjs +595 -0
- package/fesm2022/slotted-angular-attachment.mjs.map +1 -0
- package/fesm2022/slotted-angular-avatar-group.mjs +230 -0
- package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-avatar.mjs +330 -0
- package/fesm2022/slotted-angular-avatar.mjs.map +1 -0
- package/fesm2022/slotted-angular-badge.mjs +255 -0
- package/fesm2022/slotted-angular-badge.mjs.map +1 -0
- package/fesm2022/slotted-angular-breadcrumb.mjs +544 -0
- package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -0
- package/fesm2022/slotted-angular-button-group.mjs +146 -0
- package/fesm2022/slotted-angular-button-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-button.mjs +692 -0
- package/fesm2022/slotted-angular-button.mjs.map +1 -0
- package/fesm2022/slotted-angular-calendar.mjs +916 -0
- package/fesm2022/slotted-angular-calendar.mjs.map +1 -0
- package/fesm2022/slotted-angular-card.mjs +225 -0
- package/fesm2022/slotted-angular-card.mjs.map +1 -0
- package/fesm2022/slotted-angular-carousel.mjs +840 -0
- package/fesm2022/slotted-angular-carousel.mjs.map +1 -0
- package/fesm2022/slotted-angular-cascader.mjs +1839 -0
- package/fesm2022/slotted-angular-cascader.mjs.map +1 -0
- package/fesm2022/slotted-angular-chart.mjs +974 -0
- package/fesm2022/slotted-angular-chart.mjs.map +1 -0
- package/fesm2022/slotted-angular-checkbox-group.mjs +283 -0
- package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-checkbox.mjs +468 -0
- package/fesm2022/slotted-angular-checkbox.mjs.map +1 -0
- package/fesm2022/slotted-angular-code-block.mjs +476 -0
- package/fesm2022/slotted-angular-code-block.mjs.map +1 -0
- package/fesm2022/slotted-angular-collapsible.mjs +479 -0
- package/fesm2022/slotted-angular-collapsible.mjs.map +1 -0
- package/fesm2022/slotted-angular-color-picker.mjs +910 -0
- package/fesm2022/slotted-angular-color-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-column-manager.mjs +1037 -0
- package/fesm2022/slotted-angular-column-manager.mjs.map +1 -0
- package/fesm2022/slotted-angular-combobox.mjs +1480 -0
- package/fesm2022/slotted-angular-combobox.mjs.map +1 -0
- package/fesm2022/slotted-angular-command-palette.mjs +1283 -0
- package/fesm2022/slotted-angular-command-palette.mjs.map +1 -0
- package/fesm2022/slotted-angular-container.mjs +105 -0
- package/fesm2022/slotted-angular-container.mjs.map +1 -0
- package/fesm2022/slotted-angular-context-menu.mjs +221 -0
- package/fesm2022/slotted-angular-context-menu.mjs.map +1 -0
- package/fesm2022/slotted-angular-currency-field.mjs +1131 -0
- package/fesm2022/slotted-angular-currency-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-dashboard-grid.mjs +1928 -0
- package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -0
- package/fesm2022/slotted-angular-data-grid.mjs +6697 -0
- package/fesm2022/slotted-angular-data-grid.mjs.map +1 -0
- package/fesm2022/slotted-angular-data-list.mjs +1418 -0
- package/fesm2022/slotted-angular-data-list.mjs.map +1 -0
- package/fesm2022/slotted-angular-date-field.mjs +772 -0
- package/fesm2022/slotted-angular-date-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-date-picker.mjs +690 -0
- package/fesm2022/slotted-angular-date-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-date-range-picker.mjs +1150 -0
- package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-datetime-field.mjs +1058 -0
- package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-datetime-picker.mjs +1362 -0
- package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-datetime-range-picker.mjs +1872 -0
- package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-description-list.mjs +545 -0
- package/fesm2022/slotted-angular-description-list.mjs.map +1 -0
- package/fesm2022/slotted-angular-detail-panel.mjs +754 -0
- package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -0
- package/fesm2022/slotted-angular-dialog.mjs +980 -0
- package/fesm2022/slotted-angular-dialog.mjs.map +1 -0
- package/fesm2022/slotted-angular-divider.mjs +76 -0
- package/fesm2022/slotted-angular-divider.mjs.map +1 -0
- package/fesm2022/slotted-angular-drawer.mjs +1397 -0
- package/fesm2022/slotted-angular-drawer.mjs.map +1 -0
- package/fesm2022/slotted-angular-entity-picker.mjs +1987 -0
- package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-event-calendar.mjs +2934 -0
- package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -0
- package/fesm2022/slotted-angular-field-group.mjs +301 -0
- package/fesm2022/slotted-angular-field-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-field.mjs +928 -0
- package/fesm2022/slotted-angular-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-filter-bar.mjs +3107 -0
- package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -0
- package/fesm2022/slotted-angular-form.mjs +592 -0
- package/fesm2022/slotted-angular-form.mjs.map +1 -0
- package/fesm2022/slotted-angular-fullscreen.mjs +314 -0
- package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -0
- package/fesm2022/slotted-angular-grid.mjs +58 -0
- package/fesm2022/slotted-angular-grid.mjs.map +1 -0
- package/fesm2022/slotted-angular-highlight.mjs +123 -0
- package/fesm2022/slotted-angular-highlight.mjs.map +1 -0
- package/fesm2022/slotted-angular-hover-card.mjs +326 -0
- package/fesm2022/slotted-angular-hover-card.mjs.map +1 -0
- package/fesm2022/slotted-angular-i18n.mjs +75 -0
- package/fesm2022/slotted-angular-i18n.mjs.map +1 -0
- package/fesm2022/slotted-angular-icon.mjs +232 -0
- package/fesm2022/slotted-angular-icon.mjs.map +1 -0
- package/fesm2022/slotted-angular-image.mjs +442 -0
- package/fesm2022/slotted-angular-image.mjs.map +1 -0
- package/fesm2022/slotted-angular-import-export-center.mjs +1792 -0
- package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -0
- package/fesm2022/slotted-angular-inline-message.mjs +280 -0
- package/fesm2022/slotted-angular-inline-message.mjs.map +1 -0
- package/fesm2022/slotted-angular-inline.mjs +52 -0
- package/fesm2022/slotted-angular-inline.mjs.map +1 -0
- package/fesm2022/slotted-angular-kbd.mjs +284 -0
- package/fesm2022/slotted-angular-kbd.mjs.map +1 -0
- package/fesm2022/slotted-angular-link.mjs +182 -0
- package/fesm2022/slotted-angular-link.mjs.map +1 -0
- package/fesm2022/slotted-angular-list-item.mjs +367 -0
- package/fesm2022/slotted-angular-list-item.mjs.map +1 -0
- package/fesm2022/slotted-angular-list.mjs +256 -0
- package/fesm2022/slotted-angular-list.mjs.map +1 -0
- package/fesm2022/slotted-angular-listbox.mjs +1274 -0
- package/fesm2022/slotted-angular-listbox.mjs.map +1 -0
- package/fesm2022/slotted-angular-loading-overlay.mjs +451 -0
- package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -0
- package/fesm2022/slotted-angular-markdown.mjs +914 -0
- package/fesm2022/slotted-angular-markdown.mjs.map +1 -0
- package/fesm2022/slotted-angular-menu.mjs +1211 -0
- package/fesm2022/slotted-angular-menu.mjs.map +1 -0
- package/fesm2022/slotted-angular-menubar.mjs +230 -0
- package/fesm2022/slotted-angular-menubar.mjs.map +1 -0
- package/fesm2022/slotted-angular-message-scroller.mjs +378 -0
- package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -0
- package/fesm2022/slotted-angular-message.mjs +866 -0
- package/fesm2022/slotted-angular-message.mjs.map +1 -0
- package/fesm2022/slotted-angular-multi-select.mjs +1939 -0
- package/fesm2022/slotted-angular-multi-select.mjs.map +1 -0
- package/fesm2022/slotted-angular-navigation-menu.mjs +770 -0
- package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -0
- package/fesm2022/slotted-angular-notification-center.mjs +1172 -0
- package/fesm2022/slotted-angular-notification-center.mjs.map +1 -0
- package/fesm2022/slotted-angular-number-field.mjs +966 -0
- package/fesm2022/slotted-angular-number-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-otp-input.mjs +629 -0
- package/fesm2022/slotted-angular-otp-input.mjs.map +1 -0
- package/fesm2022/slotted-angular-page-header.mjs +788 -0
- package/fesm2022/slotted-angular-page-header.mjs.map +1 -0
- package/fesm2022/slotted-angular-page.mjs +255 -0
- package/fesm2022/slotted-angular-page.mjs.map +1 -0
- package/fesm2022/slotted-angular-pagination.mjs +562 -0
- package/fesm2022/slotted-angular-pagination.mjs.map +1 -0
- package/fesm2022/slotted-angular-popover.mjs +799 -0
- package/fesm2022/slotted-angular-popover.mjs.map +1 -0
- package/fesm2022/slotted-angular-progress-indicator.mjs +572 -0
- package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -0
- package/fesm2022/slotted-angular-prompt-composer.mjs +596 -0
- package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -0
- package/fesm2022/slotted-angular-prose.mjs +314 -0
- package/fesm2022/slotted-angular-prose.mjs.map +1 -0
- package/fesm2022/slotted-angular-radio-group.mjs +469 -0
- package/fesm2022/slotted-angular-radio-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-rating.mjs +1174 -0
- package/fesm2022/slotted-angular-rating.mjs.map +1 -0
- package/fesm2022/slotted-angular-result-state.mjs +330 -0
- package/fesm2022/slotted-angular-result-state.mjs.map +1 -0
- package/fesm2022/slotted-angular-saved-views.mjs +877 -0
- package/fesm2022/slotted-angular-saved-views.mjs.map +1 -0
- package/fesm2022/slotted-angular-scroll-area.mjs +294 -0
- package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -0
- package/fesm2022/slotted-angular-section.mjs +266 -0
- package/fesm2022/slotted-angular-section.mjs.map +1 -0
- package/fesm2022/slotted-angular-segmented-control.mjs +454 -0
- package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -0
- package/fesm2022/slotted-angular-select.mjs +1899 -0
- package/fesm2022/slotted-angular-select.mjs.map +1 -0
- package/fesm2022/slotted-angular-side-navigation.mjs +1042 -0
- package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -0
- package/fesm2022/slotted-angular-skeleton.mjs +316 -0
- package/fesm2022/slotted-angular-skeleton.mjs.map +1 -0
- package/fesm2022/slotted-angular-slider.mjs +586 -0
- package/fesm2022/slotted-angular-slider.mjs.map +1 -0
- package/fesm2022/slotted-angular-sparkline.mjs +235 -0
- package/fesm2022/slotted-angular-sparkline.mjs.map +1 -0
- package/fesm2022/slotted-angular-split-button.mjs +331 -0
- package/fesm2022/slotted-angular-split-button.mjs.map +1 -0
- package/fesm2022/slotted-angular-splitter.mjs +516 -0
- package/fesm2022/slotted-angular-splitter.mjs.map +1 -0
- package/fesm2022/slotted-angular-stack.mjs +48 -0
- package/fesm2022/slotted-angular-stack.mjs.map +1 -0
- package/fesm2022/slotted-angular-stat-card.mjs +478 -0
- package/fesm2022/slotted-angular-stat-card.mjs.map +1 -0
- package/fesm2022/slotted-angular-status-indicator.mjs +155 -0
- package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -0
- package/fesm2022/slotted-angular-stepper.mjs +536 -0
- package/fesm2022/slotted-angular-stepper.mjs.map +1 -0
- package/fesm2022/slotted-angular-switch.mjs +447 -0
- package/fesm2022/slotted-angular-switch.mjs.map +1 -0
- package/fesm2022/slotted-angular-table-of-contents.mjs +750 -0
- package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -0
- package/fesm2022/slotted-angular-table.mjs +2518 -0
- package/fesm2022/slotted-angular-table.mjs.map +1 -0
- package/fesm2022/slotted-angular-tabs.mjs +829 -0
- package/fesm2022/slotted-angular-tabs.mjs.map +1 -0
- package/fesm2022/slotted-angular-tag.mjs +595 -0
- package/fesm2022/slotted-angular-tag.mjs.map +1 -0
- package/fesm2022/slotted-angular-tags-input.mjs +1211 -0
- package/fesm2022/slotted-angular-tags-input.mjs.map +1 -0
- package/fesm2022/slotted-angular-text-field.mjs +674 -0
- package/fesm2022/slotted-angular-text-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-textarea.mjs +275 -0
- package/fesm2022/slotted-angular-textarea.mjs.map +1 -0
- package/fesm2022/slotted-angular-theme.mjs +45 -0
- package/fesm2022/slotted-angular-theme.mjs.map +1 -0
- package/fesm2022/slotted-angular-time-field.mjs +895 -0
- package/fesm2022/slotted-angular-time-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-time-picker.mjs +856 -0
- package/fesm2022/slotted-angular-time-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-time-range-picker.mjs +1534 -0
- package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-timeline.mjs +928 -0
- package/fesm2022/slotted-angular-timeline.mjs.map +1 -0
- package/fesm2022/slotted-angular-toast.mjs +917 -0
- package/fesm2022/slotted-angular-toast.mjs.map +1 -0
- package/fesm2022/slotted-angular-toggle-group.mjs +311 -0
- package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-toggle.mjs +162 -0
- package/fesm2022/slotted-angular-toggle.mjs.map +1 -0
- package/fesm2022/slotted-angular-toolbar.mjs +536 -0
- package/fesm2022/slotted-angular-toolbar.mjs.map +1 -0
- package/fesm2022/slotted-angular-tooltip.mjs +798 -0
- package/fesm2022/slotted-angular-tooltip.mjs.map +1 -0
- package/fesm2022/slotted-angular-top-navigation.mjs +1308 -0
- package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -0
- package/fesm2022/slotted-angular-tour.mjs +1330 -0
- package/fesm2022/slotted-angular-tour.mjs.map +1 -0
- package/fesm2022/slotted-angular-transfer.mjs +1406 -0
- package/fesm2022/slotted-angular-transfer.mjs.map +1 -0
- package/fesm2022/slotted-angular-tree.mjs +1448 -0
- package/fesm2022/slotted-angular-tree.mjs.map +1 -0
- package/fesm2022/slotted-angular-typography.mjs +184 -0
- package/fesm2022/slotted-angular-typography.mjs.map +1 -0
- package/fesm2022/slotted-angular-upload.mjs +1523 -0
- package/fesm2022/slotted-angular-upload.mjs.map +1 -0
- package/fesm2022/slotted-angular-visually-hidden.mjs +32 -0
- package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -0
- package/fesm2022/slotted-angular-wizard.mjs +1715 -0
- package/fesm2022/slotted-angular-wizard.mjs.map +1 -0
- package/fesm2022/slotted-angular.mjs +4 -0
- package/fesm2022/slotted-angular.mjs.map +1 -0
- package/package.json +537 -3
- package/types/slotted-angular-accordion.d.ts +156 -0
- package/types/slotted-angular-accordion.d.ts.map +1 -0
- package/types/slotted-angular-action-bar.d.ts +291 -0
- package/types/slotted-angular-action-bar.d.ts.map +1 -0
- package/types/slotted-angular-action-sheet.d.ts +294 -0
- package/types/slotted-angular-action-sheet.d.ts.map +1 -0
- package/types/slotted-angular-alert.d.ts +214 -0
- package/types/slotted-angular-alert.d.ts.map +1 -0
- package/types/slotted-angular-app-shell.d.ts +549 -0
- package/types/slotted-angular-app-shell.d.ts.map +1 -0
- package/types/slotted-angular-aspect-ratio.d.ts +57 -0
- package/types/slotted-angular-aspect-ratio.d.ts.map +1 -0
- package/types/slotted-angular-attachment.d.ts +294 -0
- package/types/slotted-angular-attachment.d.ts.map +1 -0
- package/types/slotted-angular-avatar-group.d.ts +119 -0
- package/types/slotted-angular-avatar-group.d.ts.map +1 -0
- package/types/slotted-angular-avatar.d.ts +202 -0
- package/types/slotted-angular-avatar.d.ts.map +1 -0
- package/types/slotted-angular-badge.d.ts +166 -0
- package/types/slotted-angular-badge.d.ts.map +1 -0
- package/types/slotted-angular-breadcrumb.d.ts +251 -0
- package/types/slotted-angular-breadcrumb.d.ts.map +1 -0
- package/types/slotted-angular-button-group.d.ts +89 -0
- package/types/slotted-angular-button-group.d.ts.map +1 -0
- package/types/slotted-angular-button.d.ts +390 -0
- package/types/slotted-angular-button.d.ts.map +1 -0
- package/types/slotted-angular-calendar.d.ts +280 -0
- package/types/slotted-angular-calendar.d.ts.map +1 -0
- package/types/slotted-angular-card.d.ts +140 -0
- package/types/slotted-angular-card.d.ts.map +1 -0
- package/types/slotted-angular-carousel.d.ts +288 -0
- package/types/slotted-angular-carousel.d.ts.map +1 -0
- package/types/slotted-angular-cascader.d.ts +351 -0
- package/types/slotted-angular-cascader.d.ts.map +1 -0
- package/types/slotted-angular-chart.d.ts +319 -0
- package/types/slotted-angular-chart.d.ts.map +1 -0
- package/types/slotted-angular-checkbox-group.d.ts +156 -0
- package/types/slotted-angular-checkbox-group.d.ts.map +1 -0
- package/types/slotted-angular-checkbox.d.ts +197 -0
- package/types/slotted-angular-checkbox.d.ts.map +1 -0
- package/types/slotted-angular-code-block.d.ts +158 -0
- package/types/slotted-angular-code-block.d.ts.map +1 -0
- package/types/slotted-angular-collapsible.d.ts +272 -0
- package/types/slotted-angular-collapsible.d.ts.map +1 -0
- package/types/slotted-angular-color-picker.d.ts +181 -0
- package/types/slotted-angular-color-picker.d.ts.map +1 -0
- package/types/slotted-angular-column-manager.d.ts +200 -0
- package/types/slotted-angular-column-manager.d.ts.map +1 -0
- package/types/slotted-angular-combobox.d.ts +449 -0
- package/types/slotted-angular-combobox.d.ts.map +1 -0
- package/types/slotted-angular-command-palette.d.ts +256 -0
- package/types/slotted-angular-command-palette.d.ts.map +1 -0
- package/types/slotted-angular-container.d.ts +84 -0
- package/types/slotted-angular-container.d.ts.map +1 -0
- package/types/slotted-angular-context-menu.d.ts +84 -0
- package/types/slotted-angular-context-menu.d.ts.map +1 -0
- package/types/slotted-angular-currency-field.d.ts +480 -0
- package/types/slotted-angular-currency-field.d.ts.map +1 -0
- package/types/slotted-angular-dashboard-grid.d.ts +341 -0
- package/types/slotted-angular-dashboard-grid.d.ts.map +1 -0
- package/types/slotted-angular-data-grid.d.ts +1077 -0
- package/types/slotted-angular-data-grid.d.ts.map +1 -0
- package/types/slotted-angular-data-list.d.ts +272 -0
- package/types/slotted-angular-data-list.d.ts.map +1 -0
- package/types/slotted-angular-date-field.d.ts +320 -0
- package/types/slotted-angular-date-field.d.ts.map +1 -0
- package/types/slotted-angular-date-picker.d.ts +224 -0
- package/types/slotted-angular-date-picker.d.ts.map +1 -0
- package/types/slotted-angular-date-range-picker.d.ts +310 -0
- package/types/slotted-angular-date-range-picker.d.ts.map +1 -0
- package/types/slotted-angular-datetime-field.d.ts +362 -0
- package/types/slotted-angular-datetime-field.d.ts.map +1 -0
- package/types/slotted-angular-datetime-picker.d.ts +370 -0
- package/types/slotted-angular-datetime-picker.d.ts.map +1 -0
- package/types/slotted-angular-datetime-range-picker.d.ts +459 -0
- package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -0
- package/types/slotted-angular-description-list.d.ts +281 -0
- package/types/slotted-angular-description-list.d.ts.map +1 -0
- package/types/slotted-angular-detail-panel.d.ts +240 -0
- package/types/slotted-angular-detail-panel.d.ts.map +1 -0
- package/types/slotted-angular-dialog.d.ts +497 -0
- package/types/slotted-angular-dialog.d.ts.map +1 -0
- package/types/slotted-angular-divider.d.ts +40 -0
- package/types/slotted-angular-divider.d.ts.map +1 -0
- package/types/slotted-angular-drawer.d.ts +532 -0
- package/types/slotted-angular-drawer.d.ts.map +1 -0
- package/types/slotted-angular-entity-picker.d.ts +338 -0
- package/types/slotted-angular-entity-picker.d.ts.map +1 -0
- package/types/slotted-angular-event-calendar.d.ts +574 -0
- package/types/slotted-angular-event-calendar.d.ts.map +1 -0
- package/types/slotted-angular-field-group.d.ts +152 -0
- package/types/slotted-angular-field-group.d.ts.map +1 -0
- package/types/slotted-angular-field.d.ts +535 -0
- package/types/slotted-angular-field.d.ts.map +1 -0
- package/types/slotted-angular-filter-bar.d.ts +573 -0
- package/types/slotted-angular-filter-bar.d.ts.map +1 -0
- package/types/slotted-angular-form.d.ts +298 -0
- package/types/slotted-angular-form.d.ts.map +1 -0
- package/types/slotted-angular-fullscreen.d.ts +145 -0
- package/types/slotted-angular-fullscreen.d.ts.map +1 -0
- package/types/slotted-angular-grid.d.ts +50 -0
- package/types/slotted-angular-grid.d.ts.map +1 -0
- package/types/slotted-angular-highlight.d.ts +93 -0
- package/types/slotted-angular-highlight.d.ts.map +1 -0
- package/types/slotted-angular-hover-card.d.ts +140 -0
- package/types/slotted-angular-hover-card.d.ts.map +1 -0
- package/types/slotted-angular-i18n.d.ts +46 -0
- package/types/slotted-angular-i18n.d.ts.map +1 -0
- package/types/slotted-angular-icon.d.ts +94 -0
- package/types/slotted-angular-icon.d.ts.map +1 -0
- package/types/slotted-angular-image.d.ts +251 -0
- package/types/slotted-angular-image.d.ts.map +1 -0
- package/types/slotted-angular-import-export-center.d.ts +351 -0
- package/types/slotted-angular-import-export-center.d.ts.map +1 -0
- package/types/slotted-angular-inline-message.d.ts +195 -0
- package/types/slotted-angular-inline-message.d.ts.map +1 -0
- package/types/slotted-angular-inline.d.ts +41 -0
- package/types/slotted-angular-inline.d.ts.map +1 -0
- package/types/slotted-angular-kbd.d.ts +174 -0
- package/types/slotted-angular-kbd.d.ts.map +1 -0
- package/types/slotted-angular-link.d.ts +94 -0
- package/types/slotted-angular-link.d.ts.map +1 -0
- package/types/slotted-angular-list-item.d.ts +210 -0
- package/types/slotted-angular-list-item.d.ts.map +1 -0
- package/types/slotted-angular-list.d.ts +176 -0
- package/types/slotted-angular-list.d.ts.map +1 -0
- package/types/slotted-angular-listbox.d.ts +470 -0
- package/types/slotted-angular-listbox.d.ts.map +1 -0
- package/types/slotted-angular-loading-overlay.d.ts +219 -0
- package/types/slotted-angular-loading-overlay.d.ts.map +1 -0
- package/types/slotted-angular-markdown.d.ts +172 -0
- package/types/slotted-angular-markdown.d.ts.map +1 -0
- package/types/slotted-angular-menu.d.ts +448 -0
- package/types/slotted-angular-menu.d.ts.map +1 -0
- package/types/slotted-angular-menubar.d.ts +90 -0
- package/types/slotted-angular-menubar.d.ts.map +1 -0
- package/types/slotted-angular-message-scroller.d.ts +151 -0
- package/types/slotted-angular-message-scroller.d.ts.map +1 -0
- package/types/slotted-angular-message.d.ts +348 -0
- package/types/slotted-angular-message.d.ts.map +1 -0
- package/types/slotted-angular-multi-select.d.ts +462 -0
- package/types/slotted-angular-multi-select.d.ts.map +1 -0
- package/types/slotted-angular-navigation-menu.d.ts +309 -0
- package/types/slotted-angular-navigation-menu.d.ts.map +1 -0
- package/types/slotted-angular-notification-center.d.ts +318 -0
- package/types/slotted-angular-notification-center.d.ts.map +1 -0
- package/types/slotted-angular-number-field.d.ts +402 -0
- package/types/slotted-angular-number-field.d.ts.map +1 -0
- package/types/slotted-angular-otp-input.d.ts +286 -0
- package/types/slotted-angular-otp-input.d.ts.map +1 -0
- package/types/slotted-angular-page-header.d.ts +334 -0
- package/types/slotted-angular-page-header.d.ts.map +1 -0
- package/types/slotted-angular-page.d.ts +141 -0
- package/types/slotted-angular-page.d.ts.map +1 -0
- package/types/slotted-angular-pagination.d.ts +213 -0
- package/types/slotted-angular-pagination.d.ts.map +1 -0
- package/types/slotted-angular-popover.d.ts +366 -0
- package/types/slotted-angular-popover.d.ts.map +1 -0
- package/types/slotted-angular-progress-indicator.d.ts +312 -0
- package/types/slotted-angular-progress-indicator.d.ts.map +1 -0
- package/types/slotted-angular-prompt-composer.d.ts +242 -0
- package/types/slotted-angular-prompt-composer.d.ts.map +1 -0
- package/types/slotted-angular-prose.d.ts +171 -0
- package/types/slotted-angular-prose.d.ts.map +1 -0
- package/types/slotted-angular-radio-group.d.ts +268 -0
- package/types/slotted-angular-radio-group.d.ts.map +1 -0
- package/types/slotted-angular-rating.d.ts +374 -0
- package/types/slotted-angular-rating.d.ts.map +1 -0
- package/types/slotted-angular-result-state.d.ts +217 -0
- package/types/slotted-angular-result-state.d.ts.map +1 -0
- package/types/slotted-angular-saved-views.d.ts +198 -0
- package/types/slotted-angular-saved-views.d.ts.map +1 -0
- package/types/slotted-angular-scroll-area.d.ts +186 -0
- package/types/slotted-angular-scroll-area.d.ts.map +1 -0
- package/types/slotted-angular-section.d.ts +143 -0
- package/types/slotted-angular-section.d.ts.map +1 -0
- package/types/slotted-angular-segmented-control.d.ts +251 -0
- package/types/slotted-angular-segmented-control.d.ts.map +1 -0
- package/types/slotted-angular-select.d.ts +507 -0
- package/types/slotted-angular-select.d.ts.map +1 -0
- package/types/slotted-angular-side-navigation.d.ts +373 -0
- package/types/slotted-angular-side-navigation.d.ts.map +1 -0
- package/types/slotted-angular-skeleton.d.ts +198 -0
- package/types/slotted-angular-skeleton.d.ts.map +1 -0
- package/types/slotted-angular-slider.d.ts +216 -0
- package/types/slotted-angular-slider.d.ts.map +1 -0
- package/types/slotted-angular-sparkline.d.ts +106 -0
- package/types/slotted-angular-sparkline.d.ts.map +1 -0
- package/types/slotted-angular-split-button.d.ts +180 -0
- package/types/slotted-angular-split-button.d.ts.map +1 -0
- package/types/slotted-angular-splitter.d.ts +206 -0
- package/types/slotted-angular-splitter.d.ts.map +1 -0
- package/types/slotted-angular-stack.d.ts +38 -0
- package/types/slotted-angular-stack.d.ts.map +1 -0
- package/types/slotted-angular-stat-card.d.ts +232 -0
- package/types/slotted-angular-stat-card.d.ts.map +1 -0
- package/types/slotted-angular-status-indicator.d.ts +106 -0
- package/types/slotted-angular-status-indicator.d.ts.map +1 -0
- package/types/slotted-angular-stepper.d.ts +198 -0
- package/types/slotted-angular-stepper.d.ts.map +1 -0
- package/types/slotted-angular-switch.d.ts +243 -0
- package/types/slotted-angular-switch.d.ts.map +1 -0
- package/types/slotted-angular-table-of-contents.d.ts +210 -0
- package/types/slotted-angular-table-of-contents.d.ts.map +1 -0
- package/types/slotted-angular-table.d.ts +888 -0
- package/types/slotted-angular-table.d.ts.map +1 -0
- package/types/slotted-angular-tabs.d.ts +340 -0
- package/types/slotted-angular-tabs.d.ts.map +1 -0
- package/types/slotted-angular-tag.d.ts +279 -0
- package/types/slotted-angular-tag.d.ts.map +1 -0
- package/types/slotted-angular-tags-input.d.ts +302 -0
- package/types/slotted-angular-tags-input.d.ts.map +1 -0
- package/types/slotted-angular-text-field.d.ts +334 -0
- package/types/slotted-angular-text-field.d.ts.map +1 -0
- package/types/slotted-angular-textarea.d.ts +150 -0
- package/types/slotted-angular-textarea.d.ts.map +1 -0
- package/types/slotted-angular-theme.d.ts +26 -0
- package/types/slotted-angular-theme.d.ts.map +1 -0
- package/types/slotted-angular-time-field.d.ts +300 -0
- package/types/slotted-angular-time-field.d.ts.map +1 -0
- package/types/slotted-angular-time-picker.d.ts +260 -0
- package/types/slotted-angular-time-picker.d.ts.map +1 -0
- package/types/slotted-angular-time-range-picker.d.ts +401 -0
- package/types/slotted-angular-time-range-picker.d.ts.map +1 -0
- package/types/slotted-angular-timeline.d.ts +329 -0
- package/types/slotted-angular-timeline.d.ts.map +1 -0
- package/types/slotted-angular-toast.d.ts +340 -0
- package/types/slotted-angular-toast.d.ts.map +1 -0
- package/types/slotted-angular-toggle-group.d.ts +167 -0
- package/types/slotted-angular-toggle-group.d.ts.map +1 -0
- package/types/slotted-angular-toggle.d.ts +106 -0
- package/types/slotted-angular-toggle.d.ts.map +1 -0
- package/types/slotted-angular-toolbar.d.ts +252 -0
- package/types/slotted-angular-toolbar.d.ts.map +1 -0
- package/types/slotted-angular-tooltip.d.ts +388 -0
- package/types/slotted-angular-tooltip.d.ts.map +1 -0
- package/types/slotted-angular-top-navigation.d.ts +442 -0
- package/types/slotted-angular-top-navigation.d.ts.map +1 -0
- package/types/slotted-angular-tour.d.ts +440 -0
- package/types/slotted-angular-tour.d.ts.map +1 -0
- package/types/slotted-angular-transfer.d.ts +296 -0
- package/types/slotted-angular-transfer.d.ts.map +1 -0
- package/types/slotted-angular-tree.d.ts +499 -0
- package/types/slotted-angular-tree.d.ts.map +1 -0
- package/types/slotted-angular-typography.d.ts +89 -0
- package/types/slotted-angular-typography.d.ts.map +1 -0
- package/types/slotted-angular-upload.d.ts +365 -0
- package/types/slotted-angular-upload.d.ts.map +1 -0
- package/types/slotted-angular-visually-hidden.d.ts +19 -0
- package/types/slotted-angular-visually-hidden.d.ts.map +1 -0
- package/types/slotted-angular-wizard.d.ts +441 -0
- package/types/slotted-angular-wizard.d.ts.map +1 -0
- package/types/slotted-angular.d.ts +3 -0
- package/types/slotted-angular.d.ts.map +1 -0
|
@@ -0,0 +1,1235 @@
|
|
|
1
|
+
<!-- index: ./index.md -->
|
|
2
|
+
# popover
|
|
3
|
+
|
|
4
|
+
`data-ui="popover"` · Floating panel anchored to a trigger.
|
|
5
|
+
|
|
6
|
+
## Examples
|
|
7
|
+
|
|
8
|
+
### A panel on a button
|
|
9
|
+
|
|
10
|
+
Press the button: the panel opens, takes the focus and says its own name. Escape closes it and the focus goes back where it came from.
|
|
11
|
+
|
|
12
|
+
Excerpt — not a complete module
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<ng-container slPopover>
|
|
16
|
+
<button slButton slPopoverTrigger type="button">Filters</button>
|
|
17
|
+
<ng-template slPopoverLayer>
|
|
18
|
+
<div slPopoverContent>
|
|
19
|
+
<div slPopoverHeader>
|
|
20
|
+
<div slPopoverTitle>Filter invoices</div>
|
|
21
|
+
<button slPopoverClose></button>
|
|
22
|
+
</div>
|
|
23
|
+
<div slPopoverBody>Unpaid, overdue and disputed.</div>
|
|
24
|
+
</div>
|
|
25
|
+
<div slPopoverArrow></div>
|
|
26
|
+
</ng-template>
|
|
27
|
+
</ng-container>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Three width steps
|
|
31
|
+
|
|
32
|
+
Sixteen, twenty and twenty-four rems. The inset and the title step move with the width, and the controls inside move with the density.
|
|
33
|
+
|
|
34
|
+
Example
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import { Component } from '@angular/core';
|
|
38
|
+
import { SlButton } from '@slotted/angular/button';
|
|
39
|
+
import { SlInline } from '@slotted/angular/inline';
|
|
40
|
+
import {
|
|
41
|
+
SlPopover,
|
|
42
|
+
SlPopoverArrow,
|
|
43
|
+
SlPopoverBody,
|
|
44
|
+
SlPopoverContent,
|
|
45
|
+
SlPopoverHeader,
|
|
46
|
+
SlPopoverLayer,
|
|
47
|
+
SlPopoverTitle,
|
|
48
|
+
SlPopoverTrigger,
|
|
49
|
+
} from '@slotted/angular/popover';
|
|
50
|
+
import type { PopoverSize } from '@slotted/angular/popover';
|
|
51
|
+
|
|
52
|
+
@Component({
|
|
53
|
+
selector: 'app-popover-sizes',
|
|
54
|
+
imports: [
|
|
55
|
+
SlButton,
|
|
56
|
+
SlInline,
|
|
57
|
+
SlPopover,
|
|
58
|
+
SlPopoverArrow,
|
|
59
|
+
SlPopoverBody,
|
|
60
|
+
SlPopoverContent,
|
|
61
|
+
SlPopoverHeader,
|
|
62
|
+
SlPopoverLayer,
|
|
63
|
+
SlPopoverTitle,
|
|
64
|
+
SlPopoverTrigger,
|
|
65
|
+
],
|
|
66
|
+
template: `
|
|
67
|
+
<div slInline [gap]="3" justify="center" wrap="wrap">
|
|
68
|
+
@for (size of sizes; track size) {
|
|
69
|
+
<ng-container slPopover [size]="size">
|
|
70
|
+
<button slButton tone="secondary" variant="outline" slPopoverTrigger>{{ size }}</button>
|
|
71
|
+
<ng-template slPopoverLayer>
|
|
72
|
+
<div slPopoverContent>
|
|
73
|
+
<div slPopoverHeader>
|
|
74
|
+
<div slPopoverTitle>Order 10248</div>
|
|
75
|
+
</div>
|
|
76
|
+
<div slPopoverBody>
|
|
77
|
+
Vins et alcools Chevalier, Reims. Three lines, 440.00 USD, shipped by Federal
|
|
78
|
+
Shipping on Jul 16.
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
<div slPopoverArrow></div>
|
|
82
|
+
</ng-template>
|
|
83
|
+
</ng-container>
|
|
84
|
+
}
|
|
85
|
+
</div>
|
|
86
|
+
`,
|
|
87
|
+
})
|
|
88
|
+
export class PopoverSizes {
|
|
89
|
+
readonly sizes: PopoverSize[] = ['sm', 'md', 'lg'];
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### As wide as its words, or as wide as the field
|
|
94
|
+
|
|
95
|
+
width="anchor" reads the anchor measured width, which is the one case Radix publishes a custom property for and the shape a filter panel under a search field needs.
|
|
96
|
+
|
|
97
|
+
Example
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
import { Component } from '@angular/core';
|
|
101
|
+
import { SlButton } from '@slotted/angular/button';
|
|
102
|
+
import {
|
|
103
|
+
SlDescriptionList,
|
|
104
|
+
SlDescriptionListDescription,
|
|
105
|
+
SlDescriptionListItem,
|
|
106
|
+
SlDescriptionListTerm,
|
|
107
|
+
} from '@slotted/angular/description-list';
|
|
108
|
+
import {
|
|
109
|
+
SlPopover,
|
|
110
|
+
SlPopoverArrow,
|
|
111
|
+
SlPopoverBody,
|
|
112
|
+
SlPopoverContent,
|
|
113
|
+
SlPopoverLayer,
|
|
114
|
+
SlPopoverTrigger,
|
|
115
|
+
} from '@slotted/angular/popover';
|
|
116
|
+
|
|
117
|
+
@Component({
|
|
118
|
+
selector: 'app-popover-width',
|
|
119
|
+
imports: [
|
|
120
|
+
SlButton,
|
|
121
|
+
SlDescriptionList,
|
|
122
|
+
SlDescriptionListDescription,
|
|
123
|
+
SlDescriptionListItem,
|
|
124
|
+
SlDescriptionListTerm,
|
|
125
|
+
SlPopover,
|
|
126
|
+
SlPopoverArrow,
|
|
127
|
+
SlPopoverBody,
|
|
128
|
+
SlPopoverContent,
|
|
129
|
+
SlPopoverLayer,
|
|
130
|
+
SlPopoverTrigger,
|
|
131
|
+
],
|
|
132
|
+
template: `
|
|
133
|
+
<ng-container slPopover align="start" width="anchor">
|
|
134
|
+
<button slButton fullWidth tone="secondary" variant="outline" slPopoverTrigger>
|
|
135
|
+
Chai, stock by warehouse
|
|
136
|
+
</button>
|
|
137
|
+
<ng-template slPopoverLayer>
|
|
138
|
+
<div slPopoverContent aria-label="Chai stock by warehouse">
|
|
139
|
+
<div slPopoverBody>
|
|
140
|
+
<div slDescriptionList>
|
|
141
|
+
@for (warehouse of warehouses; track warehouse.name) {
|
|
142
|
+
<div slDescriptionListItem>
|
|
143
|
+
<dt slDescriptionListTerm>{{ warehouse.name }}</dt>
|
|
144
|
+
<dd slDescriptionListDescription>{{ warehouse.stock }}</dd>
|
|
145
|
+
</div>
|
|
146
|
+
}
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
<div slPopoverArrow></div>
|
|
151
|
+
</ng-template>
|
|
152
|
+
</ng-container>
|
|
153
|
+
`,
|
|
154
|
+
})
|
|
155
|
+
export class PopoverWidth {
|
|
156
|
+
readonly warehouses = [
|
|
157
|
+
{ name: 'Seattle', stock: '39 units' },
|
|
158
|
+
{ name: 'Tacoma', stock: '120 units' },
|
|
159
|
+
{ name: 'Portland', stock: 'Out of stock' },
|
|
160
|
+
];
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Which edge it takes
|
|
165
|
+
|
|
166
|
+
The four physical sides and the two logical ones. Switch the toolbar to rtl: inline-start and inline-end swap, left and right stay where they are.
|
|
167
|
+
|
|
168
|
+
Example
|
|
169
|
+
|
|
170
|
+
```ts
|
|
171
|
+
import { Component } from '@angular/core';
|
|
172
|
+
import { SlButton } from '@slotted/angular/button';
|
|
173
|
+
import { SlInline } from '@slotted/angular/inline';
|
|
174
|
+
import {
|
|
175
|
+
SlPopover,
|
|
176
|
+
SlPopoverArrow,
|
|
177
|
+
SlPopoverBody,
|
|
178
|
+
SlPopoverContent,
|
|
179
|
+
SlPopoverLayer,
|
|
180
|
+
SlPopoverTrigger,
|
|
181
|
+
} from '@slotted/angular/popover';
|
|
182
|
+
import type { PopoverSide } from '@slotted/angular/popover';
|
|
183
|
+
|
|
184
|
+
@Component({
|
|
185
|
+
selector: 'app-popover-placement',
|
|
186
|
+
imports: [
|
|
187
|
+
SlButton,
|
|
188
|
+
SlInline,
|
|
189
|
+
SlPopover,
|
|
190
|
+
SlPopoverArrow,
|
|
191
|
+
SlPopoverBody,
|
|
192
|
+
SlPopoverContent,
|
|
193
|
+
SlPopoverLayer,
|
|
194
|
+
SlPopoverTrigger,
|
|
195
|
+
],
|
|
196
|
+
template: `
|
|
197
|
+
<div slInline [gap]="3" justify="center" wrap="wrap">
|
|
198
|
+
@for (item of sides; track item.side) {
|
|
199
|
+
<ng-container slPopover [side]="item.side">
|
|
200
|
+
<button slButton tone="secondary" variant="outline" slPopoverTrigger>
|
|
201
|
+
{{ item.side }}
|
|
202
|
+
</button>
|
|
203
|
+
<ng-template slPopoverLayer>
|
|
204
|
+
<div slPopoverContent [attr.aria-label]="'Pickup, ' + item.side">
|
|
205
|
+
<div slPopoverBody>{{ item.text }}</div>
|
|
206
|
+
</div>
|
|
207
|
+
<div slPopoverArrow></div>
|
|
208
|
+
</ng-template>
|
|
209
|
+
</ng-container>
|
|
210
|
+
}
|
|
211
|
+
</div>
|
|
212
|
+
`,
|
|
213
|
+
})
|
|
214
|
+
export class PopoverPlacement {
|
|
215
|
+
readonly sides: { side: PopoverSide; text: string }[] = [
|
|
216
|
+
{ side: 'top', text: 'Speedy Express collects at 4:00 PM.' },
|
|
217
|
+
{ side: 'bottom', text: 'United Package collects at 5:30 PM.' },
|
|
218
|
+
{ side: 'inline-start', text: 'Federal Shipping collects at 11:00 AM.' },
|
|
219
|
+
{ side: 'inline-end', text: 'Northwind Courier collects at 2:00 PM.' },
|
|
220
|
+
];
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Pointing at something other than the button
|
|
225
|
+
|
|
226
|
+
The panel hangs off the whole row and the button only opens it. Nothing is written on the anchor: it is measured and nothing else.
|
|
227
|
+
|
|
228
|
+
Excerpt — not a complete module
|
|
229
|
+
|
|
230
|
+
```html
|
|
231
|
+
<ng-container slPopover align="end">
|
|
232
|
+
<div slPopoverAnchor>
|
|
233
|
+
<span>Invoice 2026-014</span>
|
|
234
|
+
<button slButton slPopoverTrigger type="button">More</button>
|
|
235
|
+
</div>
|
|
236
|
+
<ng-template slPopoverLayer></ng-template>
|
|
237
|
+
</ng-container>
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Where the keyboard goes
|
|
241
|
+
|
|
242
|
+
The first panel takes the focus itself; the second sends it to its search field; the third leaves it on the trigger. Close each one and watch where the focus comes back to.
|
|
243
|
+
|
|
244
|
+
Example
|
|
245
|
+
|
|
246
|
+
```ts
|
|
247
|
+
import { Component, computed, signal } from '@angular/core';
|
|
248
|
+
import { SlButton } from '@slotted/angular/button';
|
|
249
|
+
import { SlField, SlFieldLabel } from '@slotted/angular/field';
|
|
250
|
+
import {
|
|
251
|
+
SlPopover,
|
|
252
|
+
SlPopoverArrow,
|
|
253
|
+
SlPopoverBody,
|
|
254
|
+
SlPopoverContent,
|
|
255
|
+
SlPopoverHeader,
|
|
256
|
+
SlPopoverLayer,
|
|
257
|
+
SlPopoverTitle,
|
|
258
|
+
SlPopoverTrigger,
|
|
259
|
+
} from '@slotted/angular/popover';
|
|
260
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
261
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
262
|
+
import { SlText } from '@slotted/angular/typography';
|
|
263
|
+
|
|
264
|
+
@Component({
|
|
265
|
+
selector: 'app-popover-focus',
|
|
266
|
+
imports: [
|
|
267
|
+
SlButton,
|
|
268
|
+
SlField,
|
|
269
|
+
SlFieldLabel,
|
|
270
|
+
SlPopover,
|
|
271
|
+
SlPopoverArrow,
|
|
272
|
+
SlPopoverBody,
|
|
273
|
+
SlPopoverContent,
|
|
274
|
+
SlPopoverHeader,
|
|
275
|
+
SlPopoverLayer,
|
|
276
|
+
SlPopoverTitle,
|
|
277
|
+
SlPopoverTrigger,
|
|
278
|
+
SlStack,
|
|
279
|
+
SlText,
|
|
280
|
+
SlTextField,
|
|
281
|
+
SlTextFieldInput,
|
|
282
|
+
],
|
|
283
|
+
template: `
|
|
284
|
+
<ng-container slPopover align="start" initialFocus="input">
|
|
285
|
+
<button slButton tone="secondary" variant="outline" slPopoverTrigger>Find a customer</button>
|
|
286
|
+
<ng-template slPopoverLayer>
|
|
287
|
+
<div slPopoverContent>
|
|
288
|
+
<div slPopoverHeader>
|
|
289
|
+
<div slPopoverTitle>Find a customer</div>
|
|
290
|
+
</div>
|
|
291
|
+
<div slPopoverBody>
|
|
292
|
+
<div slStack [gap]="3">
|
|
293
|
+
<div slField>
|
|
294
|
+
<label slFieldLabel>Company name</label>
|
|
295
|
+
<div slTextField>
|
|
296
|
+
<input
|
|
297
|
+
slTextFieldInput
|
|
298
|
+
type="search"
|
|
299
|
+
[value]="query()"
|
|
300
|
+
(valueChange)="query.set($event.value)"
|
|
301
|
+
/>
|
|
302
|
+
</div>
|
|
303
|
+
</div>
|
|
304
|
+
<span slText size="sm" tone="muted">{{ summary() }}</span>
|
|
305
|
+
</div>
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
<div slPopoverArrow></div>
|
|
309
|
+
</ng-template>
|
|
310
|
+
</ng-container>
|
|
311
|
+
`,
|
|
312
|
+
})
|
|
313
|
+
export class PopoverFocus {
|
|
314
|
+
readonly customers = [
|
|
315
|
+
'Alfreds Futterkiste',
|
|
316
|
+
'Ernst Handel',
|
|
317
|
+
'Frankenversand',
|
|
318
|
+
'Königlich Essen',
|
|
319
|
+
'Wartian Herkku',
|
|
320
|
+
];
|
|
321
|
+
readonly query = signal('');
|
|
322
|
+
readonly summary = computed(() => {
|
|
323
|
+
const query = this.query().trim().toLowerCase();
|
|
324
|
+
const matches = this.customers.filter((name) => name.toLowerCase().includes(query));
|
|
325
|
+
return matches.length === 0 ? 'No customer matches.' : matches.join(', ');
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Every way it closes, and the reason it carries
|
|
331
|
+
|
|
332
|
+
Escape, a press outside, the close control, the trigger again. Each one reports a different reason, and a consumer may refuse any of them before anything moves.
|
|
333
|
+
|
|
334
|
+
Example
|
|
335
|
+
|
|
336
|
+
```ts
|
|
337
|
+
import { Component, signal } from '@angular/core';
|
|
338
|
+
import { SlButton } from '@slotted/angular/button';
|
|
339
|
+
import { SlInline } from '@slotted/angular/inline';
|
|
340
|
+
import {
|
|
341
|
+
SlPopover,
|
|
342
|
+
SlPopoverArrow,
|
|
343
|
+
SlPopoverBody,
|
|
344
|
+
SlPopoverClose,
|
|
345
|
+
SlPopoverContent,
|
|
346
|
+
SlPopoverHeader,
|
|
347
|
+
SlPopoverLayer,
|
|
348
|
+
SlPopoverTitle,
|
|
349
|
+
SlPopoverTrigger,
|
|
350
|
+
type PopoverChangeRequest,
|
|
351
|
+
} from '@slotted/angular/popover';
|
|
352
|
+
import { SlText } from '@slotted/angular/typography';
|
|
353
|
+
|
|
354
|
+
@Component({
|
|
355
|
+
selector: 'app-popover-dismissal',
|
|
356
|
+
imports: [
|
|
357
|
+
SlButton,
|
|
358
|
+
SlInline,
|
|
359
|
+
SlPopover,
|
|
360
|
+
SlPopoverArrow,
|
|
361
|
+
SlPopoverBody,
|
|
362
|
+
SlPopoverClose,
|
|
363
|
+
SlPopoverContent,
|
|
364
|
+
SlPopoverHeader,
|
|
365
|
+
SlPopoverLayer,
|
|
366
|
+
SlPopoverTitle,
|
|
367
|
+
SlPopoverTrigger,
|
|
368
|
+
SlText,
|
|
369
|
+
],
|
|
370
|
+
template: `
|
|
371
|
+
<div slInline align="center" [gap]="3">
|
|
372
|
+
<ng-container slPopover (openChangeRequest)="record($event)">
|
|
373
|
+
<button slButton tone="secondary" variant="outline" slPopoverTrigger>Delivery note</button>
|
|
374
|
+
<ng-template slPopoverLayer>
|
|
375
|
+
<div slPopoverContent>
|
|
376
|
+
<div slPopoverHeader>
|
|
377
|
+
<div slPopoverTitle>Order 10249 delivery note</div>
|
|
378
|
+
<button slPopoverClose></button>
|
|
379
|
+
</div>
|
|
380
|
+
<div slPopoverBody>
|
|
381
|
+
Leave at the loading dock behind Toms Spezialitäten. The gate closes at 6:00 PM.
|
|
382
|
+
</div>
|
|
383
|
+
</div>
|
|
384
|
+
<div slPopoverArrow></div>
|
|
385
|
+
</ng-template>
|
|
386
|
+
</ng-container>
|
|
387
|
+
<span slText size="sm" tone="muted">Last closed by: {{ reason() }}</span>
|
|
388
|
+
</div>
|
|
389
|
+
`,
|
|
390
|
+
})
|
|
391
|
+
export class PopoverDismissal {
|
|
392
|
+
readonly reason = signal('not closed yet');
|
|
393
|
+
|
|
394
|
+
record(request: PopoverChangeRequest): void {
|
|
395
|
+
if (!request.value) this.reason.set(request.reason);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
### More content than room
|
|
401
|
+
|
|
402
|
+
The body is the only part that scrolls, bounded by the height the engine says is left. The title and the actions keep theirs, and the fade at the cut says there is more.
|
|
403
|
+
|
|
404
|
+
Example
|
|
405
|
+
|
|
406
|
+
```ts
|
|
407
|
+
import { Component, signal } from '@angular/core';
|
|
408
|
+
import { SlButton } from '@slotted/angular/button';
|
|
409
|
+
import {
|
|
410
|
+
SlPopover,
|
|
411
|
+
SlPopoverArrow,
|
|
412
|
+
SlPopoverBody,
|
|
413
|
+
SlPopoverClose,
|
|
414
|
+
SlPopoverContent,
|
|
415
|
+
SlPopoverFooter,
|
|
416
|
+
SlPopoverHeader,
|
|
417
|
+
SlPopoverLayer,
|
|
418
|
+
SlPopoverTitle,
|
|
419
|
+
SlPopoverTrigger,
|
|
420
|
+
} from '@slotted/angular/popover';
|
|
421
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
422
|
+
import { SlText } from '@slotted/angular/typography';
|
|
423
|
+
|
|
424
|
+
@Component({
|
|
425
|
+
selector: 'app-popover-scrolling',
|
|
426
|
+
imports: [
|
|
427
|
+
SlButton,
|
|
428
|
+
SlPopover,
|
|
429
|
+
SlPopoverArrow,
|
|
430
|
+
SlPopoverBody,
|
|
431
|
+
SlPopoverClose,
|
|
432
|
+
SlPopoverContent,
|
|
433
|
+
SlPopoverFooter,
|
|
434
|
+
SlPopoverHeader,
|
|
435
|
+
SlPopoverLayer,
|
|
436
|
+
SlPopoverTitle,
|
|
437
|
+
SlPopoverTrigger,
|
|
438
|
+
SlStack,
|
|
439
|
+
SlText,
|
|
440
|
+
],
|
|
441
|
+
template: `
|
|
442
|
+
<ng-container slPopover [(open)]="open">
|
|
443
|
+
<button slButton tone="secondary" variant="outline" slPopoverTrigger>
|
|
444
|
+
Order 10248 activity
|
|
445
|
+
</button>
|
|
446
|
+
<ng-template slPopoverLayer>
|
|
447
|
+
<div slPopoverContent>
|
|
448
|
+
<div slPopoverHeader>
|
|
449
|
+
<div slPopoverTitle>Order 10248 activity</div>
|
|
450
|
+
<button slPopoverClose></button>
|
|
451
|
+
</div>
|
|
452
|
+
<div slPopoverBody>
|
|
453
|
+
<div slStack [gap]="3">
|
|
454
|
+
@for (entry of activity; track entry) {
|
|
455
|
+
<span slText size="sm">{{ entry }}</span>
|
|
456
|
+
}
|
|
457
|
+
</div>
|
|
458
|
+
</div>
|
|
459
|
+
<div slPopoverFooter>
|
|
460
|
+
<button slButton size="sm" (click)="open.set(false)">Done</button>
|
|
461
|
+
</div>
|
|
462
|
+
</div>
|
|
463
|
+
<div slPopoverArrow></div>
|
|
464
|
+
</ng-template>
|
|
465
|
+
</ng-container>
|
|
466
|
+
`,
|
|
467
|
+
})
|
|
468
|
+
export class PopoverScrolling {
|
|
469
|
+
readonly open = signal(false);
|
|
470
|
+
readonly activity = [
|
|
471
|
+
'Jul 4, 9:12 AM. Order placed by Vins et alcools Chevalier.',
|
|
472
|
+
'Jul 4, 9:40 AM. Payment authorised, 440.00 USD.',
|
|
473
|
+
'Jul 5, 8:05 AM. Allocated to the Seattle warehouse.',
|
|
474
|
+
'Jul 5, 2:30 PM. Picked by Nancy Davolio.',
|
|
475
|
+
'Jul 6, 10:15 AM. Packed in two cartons, 14.2 kg.',
|
|
476
|
+
'Jul 8, 11:00 AM. Customs documents filed for France.',
|
|
477
|
+
'Jul 16, 4:00 PM. Collected by Federal Shipping.',
|
|
478
|
+
'Jul 18, 7:20 AM. Arrived at the Le Havre hub.',
|
|
479
|
+
'Jul 19, 9:45 AM. Out for delivery in Reims.',
|
|
480
|
+
'Jul 19, 3:10 PM. Delivered, signed by P. Henriot.',
|
|
481
|
+
];
|
|
482
|
+
}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### A panel holding a real form
|
|
486
|
+
|
|
487
|
+
Fields, a footer of actions and a close control. The controls inside are the consumer own and reach their form untouched: the family holds no value of theirs.
|
|
488
|
+
|
|
489
|
+
Excerpt — not a complete module
|
|
490
|
+
|
|
491
|
+
```html
|
|
492
|
+
<div slPopoverBody>
|
|
493
|
+
<div slField>
|
|
494
|
+
<label slFieldLabel>Amount</label>
|
|
495
|
+
<input slFieldControl slTextFieldInput />
|
|
496
|
+
</div>
|
|
497
|
+
</div>
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### A tooltip on a control inside the panel
|
|
501
|
+
|
|
502
|
+
Two layers at once. The tooltip is a later layer, so it draws above the panel and Escape reaches it first; the panel closes on the second Escape and not before.
|
|
503
|
+
|
|
504
|
+
Excerpt — not a complete module
|
|
505
|
+
|
|
506
|
+
```html
|
|
507
|
+
<div slPopoverFooter>
|
|
508
|
+
<ng-container slTooltip describes="label">
|
|
509
|
+
<button slButton slTooltipTrigger type="button">Clear</button>
|
|
510
|
+
<ng-template slTooltipLayer>
|
|
511
|
+
<div slTooltipContent>Clear the filters</div>
|
|
512
|
+
</ng-template>
|
|
513
|
+
</ng-container>
|
|
514
|
+
</div>
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
### What the keyboard does
|
|
518
|
+
|
|
519
|
+
Enter or Space opens it. Tab walks the panel and, past the last control, closes it and returns to the trigger — one extra Tab, and the reading order intact.
|
|
520
|
+
|
|
521
|
+
Excerpt — not a complete module
|
|
522
|
+
|
|
523
|
+
```html
|
|
524
|
+
<ng-container slPopover (openChangeRequest)="reason = $event.reason">
|
|
525
|
+
<button slButton slPopoverTrigger type="button">Tab through me</button>
|
|
526
|
+
<ng-template slPopoverLayer></ng-template>
|
|
527
|
+
</ng-container>
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
### alignment.ts
|
|
531
|
+
|
|
532
|
+
Example
|
|
533
|
+
|
|
534
|
+
```ts
|
|
535
|
+
import { Component } from '@angular/core';
|
|
536
|
+
import { SlButton } from '@slotted/angular/button';
|
|
537
|
+
import { SlInline } from '@slotted/angular/inline';
|
|
538
|
+
import {
|
|
539
|
+
SlPopover,
|
|
540
|
+
SlPopoverArrow,
|
|
541
|
+
SlPopoverBody,
|
|
542
|
+
SlPopoverContent,
|
|
543
|
+
SlPopoverLayer,
|
|
544
|
+
SlPopoverTrigger,
|
|
545
|
+
} from '@slotted/angular/popover';
|
|
546
|
+
import type { PopoverAlign } from '@slotted/angular/popover';
|
|
547
|
+
|
|
548
|
+
@Component({
|
|
549
|
+
selector: 'app-popover-alignment',
|
|
550
|
+
imports: [
|
|
551
|
+
SlButton,
|
|
552
|
+
SlInline,
|
|
553
|
+
SlPopover,
|
|
554
|
+
SlPopoverArrow,
|
|
555
|
+
SlPopoverBody,
|
|
556
|
+
SlPopoverContent,
|
|
557
|
+
SlPopoverLayer,
|
|
558
|
+
SlPopoverTrigger,
|
|
559
|
+
],
|
|
560
|
+
template: `
|
|
561
|
+
<div slInline [gap]="3" justify="center" wrap="wrap">
|
|
562
|
+
@for (align of alignments; track align) {
|
|
563
|
+
<ng-container slPopover [align]="align">
|
|
564
|
+
<button slButton tone="secondary" variant="outline" slPopoverTrigger>
|
|
565
|
+
Align {{ align }}
|
|
566
|
+
</button>
|
|
567
|
+
<ng-template slPopoverLayer>
|
|
568
|
+
<div slPopoverContent [attr.aria-label]="'Restock, aligned ' + align">
|
|
569
|
+
<div slPopoverBody>Restock 40 units of Chang from Exotic Liquids by Oct 14.</div>
|
|
570
|
+
</div>
|
|
571
|
+
<div slPopoverArrow></div>
|
|
572
|
+
</ng-template>
|
|
573
|
+
</ng-container>
|
|
574
|
+
}
|
|
575
|
+
</div>
|
|
576
|
+
`,
|
|
577
|
+
})
|
|
578
|
+
export class PopoverAlignment {
|
|
579
|
+
readonly alignments: PopoverAlign[] = ['start', 'center', 'end'];
|
|
580
|
+
}
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
### arrow-and-offset.ts
|
|
584
|
+
|
|
585
|
+
Example
|
|
586
|
+
|
|
587
|
+
```ts
|
|
588
|
+
import { Component } from '@angular/core';
|
|
589
|
+
import { SlButton } from '@slotted/angular/button';
|
|
590
|
+
import { SlInline } from '@slotted/angular/inline';
|
|
591
|
+
import {
|
|
592
|
+
SlPopover,
|
|
593
|
+
SlPopoverArrow,
|
|
594
|
+
SlPopoverBody,
|
|
595
|
+
SlPopoverContent,
|
|
596
|
+
SlPopoverLayer,
|
|
597
|
+
SlPopoverTrigger,
|
|
598
|
+
} from '@slotted/angular/popover';
|
|
599
|
+
|
|
600
|
+
@Component({
|
|
601
|
+
selector: 'app-popover-arrow-and-offset',
|
|
602
|
+
imports: [
|
|
603
|
+
SlButton,
|
|
604
|
+
SlInline,
|
|
605
|
+
SlPopover,
|
|
606
|
+
SlPopoverArrow,
|
|
607
|
+
SlPopoverBody,
|
|
608
|
+
SlPopoverContent,
|
|
609
|
+
SlPopoverLayer,
|
|
610
|
+
SlPopoverTrigger,
|
|
611
|
+
],
|
|
612
|
+
template: `
|
|
613
|
+
<div slInline [gap]="3" justify="center" wrap="wrap">
|
|
614
|
+
<ng-container slPopover>
|
|
615
|
+
<button slButton tone="secondary" variant="outline" slPopoverTrigger>With arrow</button>
|
|
616
|
+
<ng-template slPopoverLayer>
|
|
617
|
+
<div slPopoverContent aria-label="Pickup window">
|
|
618
|
+
<div slPopoverBody>Speedy Express collects between 3:30 and 4:00 PM.</div>
|
|
619
|
+
</div>
|
|
620
|
+
<div slPopoverArrow></div>
|
|
621
|
+
</ng-template>
|
|
622
|
+
</ng-container>
|
|
623
|
+
<ng-container slPopover [arrow]="false" [sideOffset]="8">
|
|
624
|
+
<button slButton tone="secondary" variant="outline" slPopoverTrigger>
|
|
625
|
+
No arrow, 8px further
|
|
626
|
+
</button>
|
|
627
|
+
<ng-template slPopoverLayer>
|
|
628
|
+
<div slPopoverContent aria-label="Pickup window">
|
|
629
|
+
<div slPopoverBody>Speedy Express collects between 3:30 and 4:00 PM.</div>
|
|
630
|
+
</div>
|
|
631
|
+
<div slPopoverArrow></div>
|
|
632
|
+
</ng-template>
|
|
633
|
+
</ng-container>
|
|
634
|
+
</div>
|
|
635
|
+
`,
|
|
636
|
+
})
|
|
637
|
+
export class PopoverArrowAndOffset {}
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
### controlled.ts
|
|
641
|
+
|
|
642
|
+
Example
|
|
643
|
+
|
|
644
|
+
```ts
|
|
645
|
+
import { Component, signal } from '@angular/core';
|
|
646
|
+
import { SlButton } from '@slotted/angular/button';
|
|
647
|
+
import { SlInline } from '@slotted/angular/inline';
|
|
648
|
+
import {
|
|
649
|
+
SlPopover,
|
|
650
|
+
SlPopoverArrow,
|
|
651
|
+
SlPopoverBody,
|
|
652
|
+
SlPopoverContent,
|
|
653
|
+
SlPopoverHeader,
|
|
654
|
+
SlPopoverLayer,
|
|
655
|
+
SlPopoverTitle,
|
|
656
|
+
SlPopoverTrigger,
|
|
657
|
+
} from '@slotted/angular/popover';
|
|
658
|
+
import { SlRadio, SlRadioGroup } from '@slotted/angular/radio-group';
|
|
659
|
+
import { SlText } from '@slotted/angular/typography';
|
|
660
|
+
|
|
661
|
+
@Component({
|
|
662
|
+
selector: 'app-popover-controlled',
|
|
663
|
+
imports: [
|
|
664
|
+
SlButton,
|
|
665
|
+
SlInline,
|
|
666
|
+
SlPopover,
|
|
667
|
+
SlPopoverArrow,
|
|
668
|
+
SlPopoverBody,
|
|
669
|
+
SlPopoverContent,
|
|
670
|
+
SlPopoverHeader,
|
|
671
|
+
SlPopoverLayer,
|
|
672
|
+
SlPopoverTitle,
|
|
673
|
+
SlPopoverTrigger,
|
|
674
|
+
SlRadio,
|
|
675
|
+
SlRadioGroup,
|
|
676
|
+
SlText,
|
|
677
|
+
],
|
|
678
|
+
template: `
|
|
679
|
+
<div slInline align="center" [gap]="3">
|
|
680
|
+
<span slText size="sm">Order 10251, picked by {{ picker() }}</span>
|
|
681
|
+
<ng-container slPopover [(open)]="open" align="end">
|
|
682
|
+
<button slButton size="sm" tone="secondary" variant="outline" slPopoverTrigger>
|
|
683
|
+
Reassign
|
|
684
|
+
</button>
|
|
685
|
+
<ng-template slPopoverLayer>
|
|
686
|
+
<div slPopoverContent>
|
|
687
|
+
<div slPopoverHeader>
|
|
688
|
+
<div slPopoverTitle>Picker for order 10251</div>
|
|
689
|
+
</div>
|
|
690
|
+
<div slPopoverBody>
|
|
691
|
+
<div
|
|
692
|
+
slRadioGroup
|
|
693
|
+
aria-label="Picker"
|
|
694
|
+
[value]="picker()"
|
|
695
|
+
(valueChange)="choose($event.value)"
|
|
696
|
+
>
|
|
697
|
+
@for (name of pickers; track name) {
|
|
698
|
+
<div slRadio [value]="name">{{ name }}</div>
|
|
699
|
+
}
|
|
700
|
+
</div>
|
|
701
|
+
</div>
|
|
702
|
+
</div>
|
|
703
|
+
<div slPopoverArrow></div>
|
|
704
|
+
</ng-template>
|
|
705
|
+
</ng-container>
|
|
706
|
+
</div>
|
|
707
|
+
`,
|
|
708
|
+
})
|
|
709
|
+
export class PopoverControlled {
|
|
710
|
+
readonly pickers = ['Nancy Davolio', 'Andrew Fuller', 'Janet Leverling', 'Margaret Peacock'];
|
|
711
|
+
readonly open = signal(false);
|
|
712
|
+
readonly picker = signal('Nancy Davolio');
|
|
713
|
+
|
|
714
|
+
choose(name: string | undefined): void {
|
|
715
|
+
if (name !== undefined) this.picker.set(name);
|
|
716
|
+
this.open.set(false);
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
### defaults.ts
|
|
722
|
+
|
|
723
|
+
Example
|
|
724
|
+
|
|
725
|
+
```ts
|
|
726
|
+
import { Component } from '@angular/core';
|
|
727
|
+
import { SlButton } from '@slotted/angular/button';
|
|
728
|
+
import { SlInline } from '@slotted/angular/inline';
|
|
729
|
+
import {
|
|
730
|
+
providePopoverDefaults,
|
|
731
|
+
SlPopover,
|
|
732
|
+
SlPopoverArrow,
|
|
733
|
+
SlPopoverBody,
|
|
734
|
+
SlPopoverContent,
|
|
735
|
+
SlPopoverLayer,
|
|
736
|
+
SlPopoverTrigger,
|
|
737
|
+
} from '@slotted/angular/popover';
|
|
738
|
+
|
|
739
|
+
@Component({
|
|
740
|
+
selector: 'app-popover-defaults',
|
|
741
|
+
imports: [
|
|
742
|
+
SlButton,
|
|
743
|
+
SlInline,
|
|
744
|
+
SlPopover,
|
|
745
|
+
SlPopoverArrow,
|
|
746
|
+
SlPopoverBody,
|
|
747
|
+
SlPopoverContent,
|
|
748
|
+
SlPopoverLayer,
|
|
749
|
+
SlPopoverTrigger,
|
|
750
|
+
],
|
|
751
|
+
providers: [providePopoverDefaults({ arrow: false, size: 'sm' })],
|
|
752
|
+
template: `
|
|
753
|
+
<div slInline [gap]="3" justify="center" wrap="wrap">
|
|
754
|
+
@for (term of terms; track term.label) {
|
|
755
|
+
<ng-container slPopover>
|
|
756
|
+
<button slButton tone="secondary" variant="outline" slPopoverTrigger>
|
|
757
|
+
{{ term.label }}
|
|
758
|
+
</button>
|
|
759
|
+
<ng-template slPopoverLayer>
|
|
760
|
+
<div slPopoverContent [attr.aria-label]="term.label">
|
|
761
|
+
<div slPopoverBody>{{ term.text }}</div>
|
|
762
|
+
</div>
|
|
763
|
+
<div slPopoverArrow></div>
|
|
764
|
+
</ng-template>
|
|
765
|
+
</ng-container>
|
|
766
|
+
}
|
|
767
|
+
<ng-container slPopover [arrow]="true">
|
|
768
|
+
<button slButton tone="secondary" variant="outline" slPopoverTrigger>
|
|
769
|
+
Cash in advance
|
|
770
|
+
</button>
|
|
771
|
+
<ng-template slPopoverLayer>
|
|
772
|
+
<div slPopoverContent aria-label="Cash in advance">
|
|
773
|
+
<div slPopoverBody>The order ships once the payment has cleared.</div>
|
|
774
|
+
</div>
|
|
775
|
+
<div slPopoverArrow></div>
|
|
776
|
+
</ng-template>
|
|
777
|
+
</ng-container>
|
|
778
|
+
</div>
|
|
779
|
+
`,
|
|
780
|
+
})
|
|
781
|
+
export class PopoverDefaults {
|
|
782
|
+
readonly terms = [
|
|
783
|
+
{ label: 'Net 30', text: 'Payment is due 30 days after the invoice date.' },
|
|
784
|
+
{ label: 'Net 60', text: 'Payment is due 60 days after the invoice date.' },
|
|
785
|
+
];
|
|
786
|
+
}
|
|
787
|
+
```
|
|
788
|
+
|
|
789
|
+
### form.ts
|
|
790
|
+
|
|
791
|
+
Example
|
|
792
|
+
|
|
793
|
+
```ts
|
|
794
|
+
import { Component, computed, signal } from '@angular/core';
|
|
795
|
+
import { SlButton } from '@slotted/angular/button';
|
|
796
|
+
import { SlField, SlFieldLabel } from '@slotted/angular/field';
|
|
797
|
+
import { SlInline } from '@slotted/angular/inline';
|
|
798
|
+
import { SlNumberField, SlNumberFieldEnd, SlNumberFieldInput } from '@slotted/angular/number-field';
|
|
799
|
+
import {
|
|
800
|
+
SlPopover,
|
|
801
|
+
SlPopoverArrow,
|
|
802
|
+
SlPopoverBody,
|
|
803
|
+
SlPopoverContent,
|
|
804
|
+
SlPopoverDescription,
|
|
805
|
+
SlPopoverFooter,
|
|
806
|
+
SlPopoverHeader,
|
|
807
|
+
SlPopoverLayer,
|
|
808
|
+
SlPopoverTitle,
|
|
809
|
+
SlPopoverTrigger,
|
|
810
|
+
type PopoverChangeRequest,
|
|
811
|
+
} from '@slotted/angular/popover';
|
|
812
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
813
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
814
|
+
import { SlText } from '@slotted/angular/typography';
|
|
815
|
+
|
|
816
|
+
@Component({
|
|
817
|
+
selector: 'app-popover-form',
|
|
818
|
+
imports: [
|
|
819
|
+
SlButton,
|
|
820
|
+
SlField,
|
|
821
|
+
SlFieldLabel,
|
|
822
|
+
SlInline,
|
|
823
|
+
SlNumberField,
|
|
824
|
+
SlNumberFieldEnd,
|
|
825
|
+
SlNumberFieldInput,
|
|
826
|
+
SlPopover,
|
|
827
|
+
SlPopoverArrow,
|
|
828
|
+
SlPopoverBody,
|
|
829
|
+
SlPopoverContent,
|
|
830
|
+
SlPopoverDescription,
|
|
831
|
+
SlPopoverFooter,
|
|
832
|
+
SlPopoverHeader,
|
|
833
|
+
SlPopoverLayer,
|
|
834
|
+
SlPopoverTitle,
|
|
835
|
+
SlPopoverTrigger,
|
|
836
|
+
SlStack,
|
|
837
|
+
SlText,
|
|
838
|
+
SlTextField,
|
|
839
|
+
SlTextFieldInput,
|
|
840
|
+
],
|
|
841
|
+
template: `
|
|
842
|
+
<div slInline align="center" [gap]="3">
|
|
843
|
+
<span slText size="sm">Chai: {{ onHand() }} units on hand</span>
|
|
844
|
+
<ng-container
|
|
845
|
+
slPopover
|
|
846
|
+
initialFocus="input"
|
|
847
|
+
[(open)]="open"
|
|
848
|
+
(openChangeRequest)="guard($event)"
|
|
849
|
+
>
|
|
850
|
+
<button slButton size="sm" tone="secondary" variant="outline" slPopoverTrigger>
|
|
851
|
+
Adjust stock
|
|
852
|
+
</button>
|
|
853
|
+
<ng-template slPopoverLayer>
|
|
854
|
+
<div slPopoverContent>
|
|
855
|
+
<div slPopoverHeader>
|
|
856
|
+
<div slPopoverTitle>Adjust Chai stock</div>
|
|
857
|
+
<p slPopoverDescription>Seattle warehouse, bin A-14</p>
|
|
858
|
+
</div>
|
|
859
|
+
<div slPopoverBody>
|
|
860
|
+
<div slStack [gap]="3">
|
|
861
|
+
<div slField>
|
|
862
|
+
<label slFieldLabel>Counted quantity</label>
|
|
863
|
+
<div slNumberField>
|
|
864
|
+
<input
|
|
865
|
+
slNumberFieldInput
|
|
866
|
+
min="0"
|
|
867
|
+
[value]="count()"
|
|
868
|
+
(valueChange)="count.set($event.value)"
|
|
869
|
+
/>
|
|
870
|
+
<span slNumberFieldEnd>units</span>
|
|
871
|
+
</div>
|
|
872
|
+
</div>
|
|
873
|
+
<div slField>
|
|
874
|
+
<label slFieldLabel>Reason</label>
|
|
875
|
+
<div slTextField>
|
|
876
|
+
<input
|
|
877
|
+
slTextFieldInput
|
|
878
|
+
[value]="note()"
|
|
879
|
+
(valueChange)="note.set($event.value)"
|
|
880
|
+
/>
|
|
881
|
+
</div>
|
|
882
|
+
</div>
|
|
883
|
+
</div>
|
|
884
|
+
</div>
|
|
885
|
+
<div slPopoverFooter>
|
|
886
|
+
<button slButton size="sm" tone="secondary" variant="ghost" (click)="open.set(false)">
|
|
887
|
+
Cancel
|
|
888
|
+
</button>
|
|
889
|
+
<button slButton size="sm" [disabled]="count() === null" (click)="save()">
|
|
890
|
+
Save
|
|
891
|
+
</button>
|
|
892
|
+
</div>
|
|
893
|
+
</div>
|
|
894
|
+
<div slPopoverArrow></div>
|
|
895
|
+
</ng-template>
|
|
896
|
+
</ng-container>
|
|
897
|
+
</div>
|
|
898
|
+
`,
|
|
899
|
+
})
|
|
900
|
+
export class PopoverForm {
|
|
901
|
+
readonly open = signal(false);
|
|
902
|
+
readonly onHand = signal(39);
|
|
903
|
+
readonly count = signal<number | null>(39);
|
|
904
|
+
readonly note = signal('');
|
|
905
|
+
readonly dirty = computed(() => this.count() !== this.onHand() || this.note() !== '');
|
|
906
|
+
|
|
907
|
+
guard(request: PopoverChangeRequest): void {
|
|
908
|
+
if (!request.value && request.reason === 'outsidePress' && this.dirty()) {
|
|
909
|
+
request.cancel();
|
|
910
|
+
return;
|
|
911
|
+
}
|
|
912
|
+
if (request.value) {
|
|
913
|
+
this.count.set(this.onHand());
|
|
914
|
+
this.note.set('');
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
save(): void {
|
|
919
|
+
const count = this.count();
|
|
920
|
+
if (count !== null) this.onHand.set(count);
|
|
921
|
+
this.open.set(false);
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
```
|
|
925
|
+
|
|
926
|
+
### narrow.ts
|
|
927
|
+
|
|
928
|
+
Example
|
|
929
|
+
|
|
930
|
+
```ts
|
|
931
|
+
import { Component } from '@angular/core';
|
|
932
|
+
import { SlButton } from '@slotted/angular/button';
|
|
933
|
+
import { SlInline } from '@slotted/angular/inline';
|
|
934
|
+
import {
|
|
935
|
+
SlPopover,
|
|
936
|
+
SlPopoverArrow,
|
|
937
|
+
SlPopoverBody,
|
|
938
|
+
SlPopoverContent,
|
|
939
|
+
SlPopoverHeader,
|
|
940
|
+
SlPopoverLayer,
|
|
941
|
+
SlPopoverTitle,
|
|
942
|
+
SlPopoverTrigger,
|
|
943
|
+
} from '@slotted/angular/popover';
|
|
944
|
+
|
|
945
|
+
@Component({
|
|
946
|
+
selector: 'app-popover-narrow',
|
|
947
|
+
imports: [
|
|
948
|
+
SlButton,
|
|
949
|
+
SlInline,
|
|
950
|
+
SlPopover,
|
|
951
|
+
SlPopoverArrow,
|
|
952
|
+
SlPopoverBody,
|
|
953
|
+
SlPopoverContent,
|
|
954
|
+
SlPopoverHeader,
|
|
955
|
+
SlPopoverLayer,
|
|
956
|
+
SlPopoverTitle,
|
|
957
|
+
SlPopoverTrigger,
|
|
958
|
+
],
|
|
959
|
+
template: `
|
|
960
|
+
<div slInline justify="end">
|
|
961
|
+
<ng-container slPopover align="start" size="lg">
|
|
962
|
+
<button slButton tone="secondary" variant="outline" slPopoverTrigger>Volume pricing</button>
|
|
963
|
+
<ng-template slPopoverLayer>
|
|
964
|
+
<div slPopoverContent>
|
|
965
|
+
<div slPopoverHeader>
|
|
966
|
+
<div slPopoverTitle>Volume pricing for Chai</div>
|
|
967
|
+
</div>
|
|
968
|
+
<div slPopoverBody>
|
|
969
|
+
18.00 USD a case up to 24 cases, 16.20 USD from 25 cases, and 15.30 USD from 100
|
|
970
|
+
cases. Prices apply to orders shipped from the Seattle warehouse.
|
|
971
|
+
</div>
|
|
972
|
+
</div>
|
|
973
|
+
<div slPopoverArrow></div>
|
|
974
|
+
</ng-template>
|
|
975
|
+
</ng-container>
|
|
976
|
+
</div>
|
|
977
|
+
`,
|
|
978
|
+
})
|
|
979
|
+
export class PopoverNarrow {}
|
|
980
|
+
```
|
|
981
|
+
|
|
982
|
+
### table-row.ts
|
|
983
|
+
|
|
984
|
+
Example
|
|
985
|
+
|
|
986
|
+
```ts
|
|
987
|
+
import { Component } from '@angular/core';
|
|
988
|
+
import { SlButton } from '@slotted/angular/button';
|
|
989
|
+
import {
|
|
990
|
+
SlDescriptionList,
|
|
991
|
+
SlDescriptionListDescription,
|
|
992
|
+
SlDescriptionListItem,
|
|
993
|
+
SlDescriptionListTerm,
|
|
994
|
+
} from '@slotted/angular/description-list';
|
|
995
|
+
import {
|
|
996
|
+
SlPopover,
|
|
997
|
+
SlPopoverAnchor,
|
|
998
|
+
SlPopoverArrow,
|
|
999
|
+
SlPopoverBody,
|
|
1000
|
+
SlPopoverClose,
|
|
1001
|
+
SlPopoverContent,
|
|
1002
|
+
SlPopoverHeader,
|
|
1003
|
+
SlPopoverLayer,
|
|
1004
|
+
SlPopoverTitle,
|
|
1005
|
+
SlPopoverTrigger,
|
|
1006
|
+
} from '@slotted/angular/popover';
|
|
1007
|
+
import {
|
|
1008
|
+
SlTable,
|
|
1009
|
+
SlTableBody,
|
|
1010
|
+
SlTableCaption,
|
|
1011
|
+
SlTableCell,
|
|
1012
|
+
SlTableColumnHeader,
|
|
1013
|
+
SlTableContent,
|
|
1014
|
+
SlTableHead,
|
|
1015
|
+
SlTableRow,
|
|
1016
|
+
SlTableRowHeader,
|
|
1017
|
+
} from '@slotted/angular/table';
|
|
1018
|
+
|
|
1019
|
+
@Component({
|
|
1020
|
+
selector: 'app-popover-table-row',
|
|
1021
|
+
imports: [
|
|
1022
|
+
SlButton,
|
|
1023
|
+
SlDescriptionList,
|
|
1024
|
+
SlDescriptionListDescription,
|
|
1025
|
+
SlDescriptionListItem,
|
|
1026
|
+
SlDescriptionListTerm,
|
|
1027
|
+
SlPopover,
|
|
1028
|
+
SlPopoverAnchor,
|
|
1029
|
+
SlPopoverArrow,
|
|
1030
|
+
SlPopoverBody,
|
|
1031
|
+
SlPopoverClose,
|
|
1032
|
+
SlPopoverContent,
|
|
1033
|
+
SlPopoverHeader,
|
|
1034
|
+
SlPopoverLayer,
|
|
1035
|
+
SlPopoverTitle,
|
|
1036
|
+
SlPopoverTrigger,
|
|
1037
|
+
SlTable,
|
|
1038
|
+
SlTableBody,
|
|
1039
|
+
SlTableCaption,
|
|
1040
|
+
SlTableCell,
|
|
1041
|
+
SlTableColumnHeader,
|
|
1042
|
+
SlTableContent,
|
|
1043
|
+
SlTableHead,
|
|
1044
|
+
SlTableRow,
|
|
1045
|
+
SlTableRowHeader,
|
|
1046
|
+
],
|
|
1047
|
+
template: `
|
|
1048
|
+
<div slTable [columns]="3">
|
|
1049
|
+
<div slTableContent>
|
|
1050
|
+
<caption slTableCaption>
|
|
1051
|
+
Shipped orders
|
|
1052
|
+
</caption>
|
|
1053
|
+
<thead slTableHead>
|
|
1054
|
+
<tr slTableRow>
|
|
1055
|
+
<th slTableColumnHeader>Order</th>
|
|
1056
|
+
<th slTableColumnHeader>Customer</th>
|
|
1057
|
+
<th slTableColumnHeader>Shipment</th>
|
|
1058
|
+
</tr>
|
|
1059
|
+
</thead>
|
|
1060
|
+
<tbody slTableBody>
|
|
1061
|
+
@for (order of orders; track order.id) {
|
|
1062
|
+
<ng-container slPopover align="end">
|
|
1063
|
+
<tr slTableRow slPopoverAnchor [value]="order.id">
|
|
1064
|
+
<th slTableRowHeader>{{ order.id }}</th>
|
|
1065
|
+
<td slTableCell>{{ order.customer }}</td>
|
|
1066
|
+
<td slTableCell>
|
|
1067
|
+
<button slButton size="sm" tone="secondary" variant="ghost" slPopoverTrigger>
|
|
1068
|
+
Tracking
|
|
1069
|
+
</button>
|
|
1070
|
+
</td>
|
|
1071
|
+
</tr>
|
|
1072
|
+
<ng-template slPopoverLayer>
|
|
1073
|
+
<div slPopoverContent>
|
|
1074
|
+
<div slPopoverHeader>
|
|
1075
|
+
<div slPopoverTitle>Order {{ order.id }} shipment</div>
|
|
1076
|
+
<button slPopoverClose></button>
|
|
1077
|
+
</div>
|
|
1078
|
+
<div slPopoverBody>
|
|
1079
|
+
<div slDescriptionList>
|
|
1080
|
+
<div slDescriptionListItem>
|
|
1081
|
+
<dt slDescriptionListTerm>Carrier</dt>
|
|
1082
|
+
<dd slDescriptionListDescription>{{ order.carrier }}</dd>
|
|
1083
|
+
</div>
|
|
1084
|
+
<div slDescriptionListItem>
|
|
1085
|
+
<dt slDescriptionListTerm>Tracking</dt>
|
|
1086
|
+
<dd slDescriptionListDescription>{{ order.tracking }}</dd>
|
|
1087
|
+
</div>
|
|
1088
|
+
<div slDescriptionListItem>
|
|
1089
|
+
<dt slDescriptionListTerm>Shipped</dt>
|
|
1090
|
+
<dd slDescriptionListDescription>{{ order.shipped }}</dd>
|
|
1091
|
+
</div>
|
|
1092
|
+
</div>
|
|
1093
|
+
</div>
|
|
1094
|
+
</div>
|
|
1095
|
+
<div slPopoverArrow></div>
|
|
1096
|
+
</ng-template>
|
|
1097
|
+
</ng-container>
|
|
1098
|
+
}
|
|
1099
|
+
</tbody>
|
|
1100
|
+
</div>
|
|
1101
|
+
</div>
|
|
1102
|
+
`,
|
|
1103
|
+
})
|
|
1104
|
+
export class PopoverTableRow {
|
|
1105
|
+
readonly orders = [
|
|
1106
|
+
{
|
|
1107
|
+
id: '10248',
|
|
1108
|
+
customer: 'Vins et alcools Chevalier',
|
|
1109
|
+
carrier: 'Federal Shipping',
|
|
1110
|
+
tracking: 'FS-4471-0921',
|
|
1111
|
+
shipped: 'Jul 16',
|
|
1112
|
+
},
|
|
1113
|
+
{
|
|
1114
|
+
id: '10249',
|
|
1115
|
+
customer: 'Toms Spezialitäten',
|
|
1116
|
+
carrier: 'Speedy Express',
|
|
1117
|
+
tracking: 'SE-2210-3384',
|
|
1118
|
+
shipped: 'Jul 10',
|
|
1119
|
+
},
|
|
1120
|
+
{
|
|
1121
|
+
id: '10250',
|
|
1122
|
+
customer: 'Hanari Carnes',
|
|
1123
|
+
carrier: 'United Package',
|
|
1124
|
+
tracking: 'UP-9035-1172',
|
|
1125
|
+
shipped: 'Jul 12',
|
|
1126
|
+
},
|
|
1127
|
+
];
|
|
1128
|
+
}
|
|
1129
|
+
```
|
|
1130
|
+
|
|
1131
|
+
### toolbar.ts
|
|
1132
|
+
|
|
1133
|
+
Example
|
|
1134
|
+
|
|
1135
|
+
```ts
|
|
1136
|
+
import { Component, computed, signal } from '@angular/core';
|
|
1137
|
+
import { SlButton } from '@slotted/angular/button';
|
|
1138
|
+
import { SlCheckbox } from '@slotted/angular/checkbox';
|
|
1139
|
+
import { SlCheckboxGroup } from '@slotted/angular/checkbox-group';
|
|
1140
|
+
import {
|
|
1141
|
+
SlPopover,
|
|
1142
|
+
SlPopoverArrow,
|
|
1143
|
+
SlPopoverBody,
|
|
1144
|
+
SlPopoverContent,
|
|
1145
|
+
SlPopoverHeader,
|
|
1146
|
+
SlPopoverLayer,
|
|
1147
|
+
SlPopoverTitle,
|
|
1148
|
+
SlPopoverTrigger,
|
|
1149
|
+
} from '@slotted/angular/popover';
|
|
1150
|
+
import { SlToolbar, SlToolbarSpacer } from '@slotted/angular/toolbar';
|
|
1151
|
+
import { SlText } from '@slotted/angular/typography';
|
|
1152
|
+
|
|
1153
|
+
@Component({
|
|
1154
|
+
selector: 'app-popover-toolbar',
|
|
1155
|
+
imports: [
|
|
1156
|
+
SlButton,
|
|
1157
|
+
SlCheckbox,
|
|
1158
|
+
SlCheckboxGroup,
|
|
1159
|
+
SlPopover,
|
|
1160
|
+
SlPopoverArrow,
|
|
1161
|
+
SlPopoverBody,
|
|
1162
|
+
SlPopoverContent,
|
|
1163
|
+
SlPopoverHeader,
|
|
1164
|
+
SlPopoverLayer,
|
|
1165
|
+
SlPopoverTitle,
|
|
1166
|
+
SlPopoverTrigger,
|
|
1167
|
+
SlText,
|
|
1168
|
+
SlToolbar,
|
|
1169
|
+
SlToolbarSpacer,
|
|
1170
|
+
],
|
|
1171
|
+
template: `
|
|
1172
|
+
<div slToolbar aria-label="Orders">
|
|
1173
|
+
<ng-container slPopover align="start">
|
|
1174
|
+
<button slButton size="sm" tone="secondary" variant="ghost" slPopoverTrigger>Status</button>
|
|
1175
|
+
<ng-template slPopoverLayer>
|
|
1176
|
+
<div slPopoverContent>
|
|
1177
|
+
<div slPopoverHeader>
|
|
1178
|
+
<div slPopoverTitle>Show orders that are</div>
|
|
1179
|
+
</div>
|
|
1180
|
+
<div slPopoverBody>
|
|
1181
|
+
<div
|
|
1182
|
+
slCheckboxGroup
|
|
1183
|
+
aria-label="Status"
|
|
1184
|
+
[value]="shown()"
|
|
1185
|
+
(valueChange)="shown.set($event.value)"
|
|
1186
|
+
>
|
|
1187
|
+
@for (status of statuses; track status.value) {
|
|
1188
|
+
<div slCheckbox [value]="status.value">{{ status.label }}</div>
|
|
1189
|
+
}
|
|
1190
|
+
</div>
|
|
1191
|
+
</div>
|
|
1192
|
+
</div>
|
|
1193
|
+
<div slPopoverArrow></div>
|
|
1194
|
+
</ng-template>
|
|
1195
|
+
</ng-container>
|
|
1196
|
+
<ng-container slPopover align="start">
|
|
1197
|
+
<button slButton size="sm" tone="secondary" variant="ghost" slPopoverTrigger>
|
|
1198
|
+
Columns
|
|
1199
|
+
</button>
|
|
1200
|
+
<ng-template slPopoverLayer>
|
|
1201
|
+
<div slPopoverContent>
|
|
1202
|
+
<div slPopoverHeader>
|
|
1203
|
+
<div slPopoverTitle>Columns</div>
|
|
1204
|
+
</div>
|
|
1205
|
+
<div slPopoverBody>
|
|
1206
|
+
<div slCheckboxGroup aria-label="Columns" [defaultValue]="['customer', 'total']">
|
|
1207
|
+
<div slCheckbox value="customer">Customer</div>
|
|
1208
|
+
<div slCheckbox value="ship-via">Ship via</div>
|
|
1209
|
+
<div slCheckbox value="total">Total</div>
|
|
1210
|
+
</div>
|
|
1211
|
+
</div>
|
|
1212
|
+
</div>
|
|
1213
|
+
<div slPopoverArrow></div>
|
|
1214
|
+
</ng-template>
|
|
1215
|
+
</ng-container>
|
|
1216
|
+
<div slToolbarSpacer></div>
|
|
1217
|
+
<span slText size="sm" tone="muted">{{ count() }} orders</span>
|
|
1218
|
+
</div>
|
|
1219
|
+
`,
|
|
1220
|
+
})
|
|
1221
|
+
export class PopoverToolbar {
|
|
1222
|
+
readonly statuses = [
|
|
1223
|
+
{ value: 'pending', label: 'Pending', orders: 14 },
|
|
1224
|
+
{ value: 'shipped', label: 'Shipped', orders: 27 },
|
|
1225
|
+
{ value: 'delivered', label: 'Delivered', orders: 112 },
|
|
1226
|
+
{ value: 'returned', label: 'Returned', orders: 3 },
|
|
1227
|
+
];
|
|
1228
|
+
readonly shown = signal<readonly string[]>(['pending', 'shipped']);
|
|
1229
|
+
readonly count = computed(() =>
|
|
1230
|
+
this.statuses
|
|
1231
|
+
.filter((status) => this.shown().includes(status.value))
|
|
1232
|
+
.reduce((sum, status) => sum + status.orders, 0),
|
|
1233
|
+
);
|
|
1234
|
+
}
|
|
1235
|
+
```
|