@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,798 @@
|
|
|
1
|
+
import { isClipped } from '@slotted/core/overflow';
|
|
2
|
+
import { createControllable } from '@slotted/core/state';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { InjectionToken, Injectable, inject, booleanAttribute, numberAttribute, model, input, output, DestroyRef, signal, computed, effect, untracked, Directive, ElementRef, TemplateRef, ViewContainerRef, PLATFORM_ID, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
5
|
+
import { setPortalContainer, createPortalRoot } from '@slotted/core/portal';
|
|
6
|
+
import { createDismissableLayer } from '@slotted/core/dismissable-layer';
|
|
7
|
+
import { createPositioner } from '@slotted/core/positioner';
|
|
8
|
+
import { createPresence } from '@slotted/core/presence';
|
|
9
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The numbers, and why they are these numbers.
|
|
13
|
+
*
|
|
14
|
+
* `openDelay` is long enough that a pointer crossing a toolbar opens nothing
|
|
15
|
+
* and short enough that a deliberate hover is answered; `closeDelay` is the
|
|
16
|
+
* window the pointer has to travel onto the layer, and zero makes a hoverable
|
|
17
|
+
* tooltip unreachable; `groupDelay` is what stops a row of icon buttons
|
|
18
|
+
* charging the warmup once per button.
|
|
19
|
+
*/
|
|
20
|
+
const TOOLTIP_FALLBACK = {
|
|
21
|
+
align: 'center',
|
|
22
|
+
alignOffset: 0,
|
|
23
|
+
arrow: true,
|
|
24
|
+
arrowPadding: 8,
|
|
25
|
+
closeDelay: 150,
|
|
26
|
+
closeOnPress: true,
|
|
27
|
+
collisionPadding: 8,
|
|
28
|
+
describes: 'description',
|
|
29
|
+
flip: true,
|
|
30
|
+
groupDelay: 400,
|
|
31
|
+
hideWhenDetached: true,
|
|
32
|
+
hoverable: true,
|
|
33
|
+
mount: 'active',
|
|
34
|
+
openDelay: 600,
|
|
35
|
+
openOn: 'hover',
|
|
36
|
+
portal: true,
|
|
37
|
+
shift: true,
|
|
38
|
+
side: 'top',
|
|
39
|
+
sideOffset: 0,
|
|
40
|
+
size: 'md',
|
|
41
|
+
strategy: 'absolute',
|
|
42
|
+
touchDelay: 500,
|
|
43
|
+
variant: 'inverse',
|
|
44
|
+
whenClipped: false,
|
|
45
|
+
};
|
|
46
|
+
const TOOLTIP_DEFAULTS = new InjectionToken('slotted tooltip defaults', {
|
|
47
|
+
providedIn: 'root',
|
|
48
|
+
factory: () => TOOLTIP_FALLBACK,
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* When the last tooltip in this injector closed. A tooltip asked to open inside
|
|
52
|
+
* `groupDelay` of that moment opens in the same task, so reading a row of icon
|
|
53
|
+
* buttons pays the warmup once. It is held per injector rather than per
|
|
54
|
+
* tooltip, because a value held per tooltip could not say what "the next one"
|
|
55
|
+
* means.
|
|
56
|
+
*/
|
|
57
|
+
class SlTooltipGroup {
|
|
58
|
+
lastClosedAt = 0;
|
|
59
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipGroup, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
60
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipGroup, providedIn: 'root' });
|
|
61
|
+
}
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipGroup, decorators: [{
|
|
63
|
+
type: Injectable,
|
|
64
|
+
args: [{ providedIn: 'root' }]
|
|
65
|
+
}] });
|
|
66
|
+
/**
|
|
67
|
+
* An application decides once how its tooltips behave and look. A tooltip that
|
|
68
|
+
* states any of them itself still wins.
|
|
69
|
+
*
|
|
70
|
+
* What is stated here is written over the defaults already in force rather than
|
|
71
|
+
* over the fallback, which is what React's provider does and what a family that
|
|
72
|
+
* sets two axes for itself needs: a column header asking for `describes="none"`
|
|
73
|
+
* would otherwise hand the application's own delays back to the fallback.
|
|
74
|
+
*
|
|
75
|
+
* The group is provided beside the defaults, so a component that sets its own
|
|
76
|
+
* defaults also gets its own warmup window — the same scoping React's provider
|
|
77
|
+
* gives.
|
|
78
|
+
*/
|
|
79
|
+
function provideTooltipDefaults(defaults) {
|
|
80
|
+
return [
|
|
81
|
+
{
|
|
82
|
+
provide: TOOLTIP_DEFAULTS,
|
|
83
|
+
useFactory: () => ({
|
|
84
|
+
...(inject(TOOLTIP_DEFAULTS, { optional: true, skipSelf: true }) ?? TOOLTIP_FALLBACK),
|
|
85
|
+
...defaults,
|
|
86
|
+
}),
|
|
87
|
+
},
|
|
88
|
+
SlTooltipGroup,
|
|
89
|
+
];
|
|
90
|
+
}
|
|
91
|
+
/** What a tooltip renders as here, before it states anything of its own. */
|
|
92
|
+
function injectTooltipDefaults() {
|
|
93
|
+
return inject(TOOLTIP_DEFAULTS);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Whether `provideSlottedPortalContainer` named a container in this injector.
|
|
97
|
+
* A factory runs only when something injects its token, so `slTooltipLayer`
|
|
98
|
+
* injects this one before it builds a layer.
|
|
99
|
+
*/
|
|
100
|
+
const SLOTTED_PORTAL_CONTAINER = new InjectionToken('slotted portal container');
|
|
101
|
+
/**
|
|
102
|
+
* Where every layer is rendered, for the whole application. It calls
|
|
103
|
+
* `setPortalContainer` from `@slotted/core/portal`, which is per document, so
|
|
104
|
+
* an application shell that builds its own stacking context names it once.
|
|
105
|
+
*/
|
|
106
|
+
function provideSlottedPortalContainer(container) {
|
|
107
|
+
return {
|
|
108
|
+
provide: SLOTTED_PORTAL_CONTAINER,
|
|
109
|
+
useFactory: () => {
|
|
110
|
+
setPortalContainer(container());
|
|
111
|
+
return true;
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Application-scoped rather than module-scoped, for the reason `field` records:
|
|
117
|
+
* a module-level counter produces colliding sequences when two applications
|
|
118
|
+
* render in one server process, and the server and the client sequences have to
|
|
119
|
+
* match for hydration.
|
|
120
|
+
*/
|
|
121
|
+
class SlTooltipIdFactory {
|
|
122
|
+
count = 0;
|
|
123
|
+
next() {
|
|
124
|
+
this.count += 1;
|
|
125
|
+
return `slotted-tooltip-${this.count}`;
|
|
126
|
+
}
|
|
127
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipIdFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
128
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipIdFactory, providedIn: 'root' });
|
|
129
|
+
}
|
|
130
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipIdFactory, decorators: [{
|
|
131
|
+
type: Injectable,
|
|
132
|
+
args: [{ providedIn: 'root' }]
|
|
133
|
+
}] });
|
|
134
|
+
|
|
135
|
+
/** Unstated stays unstated, so a tooltip defers to the provider rather than to `false`. */
|
|
136
|
+
const optionalBoolean = (state) => state === undefined ? undefined : booleanAttribute(state);
|
|
137
|
+
/** Unstated stays unstated, for the same reason, on a number. */
|
|
138
|
+
const optionalNumber = (value) => value === undefined ? undefined : numberAttribute(value);
|
|
139
|
+
/**
|
|
140
|
+
* A short, non-interactive sentence about the element under the pointer or
|
|
141
|
+
* under focus.
|
|
142
|
+
*
|
|
143
|
+
* It is written on an `ng-container`, because it renders nothing: the trigger
|
|
144
|
+
* stays where the consumer wrote it and the layer is portalled to the end of
|
|
145
|
+
* the document, so no one element could hold both. What it holds is the state,
|
|
146
|
+
* the delays, and the values every part reads.
|
|
147
|
+
*
|
|
148
|
+
* The layer never takes focus and never holds a control. The APG's tooltip
|
|
149
|
+
* pattern says so, and names the non-modal dialog for the other case, which is
|
|
150
|
+
* `slPopover`.
|
|
151
|
+
*/
|
|
152
|
+
class SlTooltip {
|
|
153
|
+
/** Whether the hint is showing. Two-way, so a template may bind it directly. */
|
|
154
|
+
open = model(false, /* @ts-ignore */
|
|
155
|
+
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
156
|
+
/** The state an uncontrolled tooltip starts in, read once in `ngOnInit`. */
|
|
157
|
+
defaultOpen = input(false, { ...(ngDevMode ? { debugName: "defaultOpen" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
158
|
+
/** The tooltip never opens. The trigger's own `disabled` is the consumer's. */
|
|
159
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
160
|
+
/**
|
|
161
|
+
* Opens only while the trigger's own content is cut by its box — a column
|
|
162
|
+
* header narrowed to `Op…`, a breadcrumb in a rail. The measurement is taken
|
|
163
|
+
* at the moment the hint would open, so a column dragged wider stops opening
|
|
164
|
+
* one without anything being told.
|
|
165
|
+
*/
|
|
166
|
+
whenClipped = input(undefined, { ...(ngDevMode ? { debugName: "whenClipped" } : /* istanbul ignore next */ {}), transform: optionalBoolean });
|
|
167
|
+
variant = input(undefined, /* @ts-ignore */
|
|
168
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
169
|
+
size = input(undefined, /* @ts-ignore */
|
|
170
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
171
|
+
describes = input(undefined, /* @ts-ignore */
|
|
172
|
+
...(ngDevMode ? [{ debugName: "describes" }] : /* istanbul ignore next */ []));
|
|
173
|
+
openOn = input(undefined, /* @ts-ignore */
|
|
174
|
+
...(ngDevMode ? [{ debugName: "openOn" }] : /* istanbul ignore next */ []));
|
|
175
|
+
side = input(undefined, /* @ts-ignore */
|
|
176
|
+
...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
177
|
+
align = input(undefined, /* @ts-ignore */
|
|
178
|
+
...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
|
|
179
|
+
mount = input(undefined, /* @ts-ignore */
|
|
180
|
+
...(ngDevMode ? [{ debugName: "mount" }] : /* istanbul ignore next */ []));
|
|
181
|
+
strategy = input(undefined, /* @ts-ignore */
|
|
182
|
+
...(ngDevMode ? [{ debugName: "strategy" }] : /* istanbul ignore next */ []));
|
|
183
|
+
arrow = input(undefined, { ...(ngDevMode ? { debugName: "arrow" } : /* istanbul ignore next */ {}), transform: optionalBoolean });
|
|
184
|
+
hoverable = input(undefined, { ...(ngDevMode ? { debugName: "hoverable" } : /* istanbul ignore next */ {}), transform: optionalBoolean });
|
|
185
|
+
closeOnPress = input(undefined, { ...(ngDevMode ? { debugName: "closeOnPress" } : /* istanbul ignore next */ {}), transform: optionalBoolean });
|
|
186
|
+
flip = input(undefined, { ...(ngDevMode ? { debugName: "flip" } : /* istanbul ignore next */ {}), transform: optionalBoolean });
|
|
187
|
+
shift = input(undefined, { ...(ngDevMode ? { debugName: "shift" } : /* istanbul ignore next */ {}), transform: optionalBoolean });
|
|
188
|
+
hideWhenDetached = input(undefined, { ...(ngDevMode ? { debugName: "hideWhenDetached" } : /* istanbul ignore next */ {}), transform: optionalBoolean });
|
|
189
|
+
portal = input(undefined, { ...(ngDevMode ? { debugName: "portal" } : /* istanbul ignore next */ {}), transform: optionalBoolean });
|
|
190
|
+
openDelay = input(undefined, { ...(ngDevMode ? { debugName: "openDelay" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
191
|
+
closeDelay = input(undefined, { ...(ngDevMode ? { debugName: "closeDelay" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
192
|
+
touchDelay = input(undefined, { ...(ngDevMode ? { debugName: "touchDelay" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
193
|
+
sideOffset = input(undefined, { ...(ngDevMode ? { debugName: "sideOffset" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
194
|
+
alignOffset = input(undefined, { ...(ngDevMode ? { debugName: "alignOffset" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
195
|
+
collisionPadding = input(undefined, { ...(ngDevMode ? { debugName: "collisionPadding" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
196
|
+
arrowPadding = input(undefined, { ...(ngDevMode ? { debugName: "arrowPadding" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
197
|
+
/** One output for one transition, carrying the reason and the event. */
|
|
198
|
+
openChangeRequest = output();
|
|
199
|
+
defaults = injectTooltipDefaults();
|
|
200
|
+
group = inject(SlTooltipGroup);
|
|
201
|
+
destroyRef = inject(DestroyRef);
|
|
202
|
+
contentId = `${inject(SlTooltipIdFactory).next()}-content`;
|
|
203
|
+
/** The elements the parts register, which the layer measures and listens to. */
|
|
204
|
+
triggerNode = signal(null, /* @ts-ignore */
|
|
205
|
+
...(ngDevMode ? [{ debugName: "triggerNode" }] : /* istanbul ignore next */ []));
|
|
206
|
+
arrowNode = signal(null, /* @ts-ignore */
|
|
207
|
+
...(ngDevMode ? [{ debugName: "arrowNode" }] : /* istanbul ignore next */ []));
|
|
208
|
+
isOpen = computed(() => this.open() && !this.disabled(), /* @ts-ignore */
|
|
209
|
+
...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
|
|
210
|
+
resolvedVariant = computed(() => this.variant() ?? this.defaults.variant, /* @ts-ignore */
|
|
211
|
+
...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
|
|
212
|
+
resolvedSize = computed(() => this.size() ?? this.defaults.size, /* @ts-ignore */
|
|
213
|
+
...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
|
|
214
|
+
resolvedDescribes = computed(() => this.describes() ?? this.defaults.describes, /* @ts-ignore */
|
|
215
|
+
...(ngDevMode ? [{ debugName: "resolvedDescribes" }] : /* istanbul ignore next */ []));
|
|
216
|
+
resolvedWhenClipped = computed(() => this.whenClipped() ?? this.defaults.whenClipped, /* @ts-ignore */
|
|
217
|
+
...(ngDevMode ? [{ debugName: "resolvedWhenClipped" }] : /* istanbul ignore next */ []));
|
|
218
|
+
resolvedOpenOn = computed(() => this.openOn() ?? this.defaults.openOn, /* @ts-ignore */
|
|
219
|
+
...(ngDevMode ? [{ debugName: "resolvedOpenOn" }] : /* istanbul ignore next */ []));
|
|
220
|
+
resolvedSide = computed(() => this.side() ?? this.defaults.side, /* @ts-ignore */
|
|
221
|
+
...(ngDevMode ? [{ debugName: "resolvedSide" }] : /* istanbul ignore next */ []));
|
|
222
|
+
resolvedAlign = computed(() => this.align() ?? this.defaults.align, /* @ts-ignore */
|
|
223
|
+
...(ngDevMode ? [{ debugName: "resolvedAlign" }] : /* istanbul ignore next */ []));
|
|
224
|
+
resolvedStrategy = computed(() => this.strategy() ?? this.defaults.strategy, /* @ts-ignore */
|
|
225
|
+
...(ngDevMode ? [{ debugName: "resolvedStrategy" }] : /* istanbul ignore next */ []));
|
|
226
|
+
resolvedArrow = computed(() => (this.arrow() ?? this.defaults.arrow) === true, /* @ts-ignore */
|
|
227
|
+
...(ngDevMode ? [{ debugName: "resolvedArrow" }] : /* istanbul ignore next */ []));
|
|
228
|
+
resolvedHoverable = computed(() => (this.hoverable() ?? this.defaults.hoverable) === true, /* @ts-ignore */
|
|
229
|
+
...(ngDevMode ? [{ debugName: "resolvedHoverable" }] : /* istanbul ignore next */ []));
|
|
230
|
+
resolvedCloseOnPress = computed(() => (this.closeOnPress() ?? this.defaults.closeOnPress) === true, /* @ts-ignore */
|
|
231
|
+
...(ngDevMode ? [{ debugName: "resolvedCloseOnPress" }] : /* istanbul ignore next */ []));
|
|
232
|
+
resolvedFlip = computed(() => (this.flip() ?? this.defaults.flip) === true, /* @ts-ignore */
|
|
233
|
+
...(ngDevMode ? [{ debugName: "resolvedFlip" }] : /* istanbul ignore next */ []));
|
|
234
|
+
resolvedShift = computed(() => (this.shift() ?? this.defaults.shift) === true, /* @ts-ignore */
|
|
235
|
+
...(ngDevMode ? [{ debugName: "resolvedShift" }] : /* istanbul ignore next */ []));
|
|
236
|
+
resolvedHideWhenDetached = computed(() => (this.hideWhenDetached() ?? this.defaults.hideWhenDetached) === true, /* @ts-ignore */
|
|
237
|
+
...(ngDevMode ? [{ debugName: "resolvedHideWhenDetached" }] : /* istanbul ignore next */ []));
|
|
238
|
+
resolvedPortal = computed(() => (this.portal() ?? this.defaults.portal) === true, /* @ts-ignore */
|
|
239
|
+
...(ngDevMode ? [{ debugName: "resolvedPortal" }] : /* istanbul ignore next */ []));
|
|
240
|
+
resolvedSideOffset = computed(() => this.sideOffset() ?? this.defaults.sideOffset, /* @ts-ignore */
|
|
241
|
+
...(ngDevMode ? [{ debugName: "resolvedSideOffset" }] : /* istanbul ignore next */ []));
|
|
242
|
+
resolvedAlignOffset = computed(() => this.alignOffset() ?? this.defaults.alignOffset, /* @ts-ignore */
|
|
243
|
+
...(ngDevMode ? [{ debugName: "resolvedAlignOffset" }] : /* istanbul ignore next */ []));
|
|
244
|
+
resolvedCollisionPadding = computed(() => this.collisionPadding() ?? this.defaults.collisionPadding, /* @ts-ignore */
|
|
245
|
+
...(ngDevMode ? [{ debugName: "resolvedCollisionPadding" }] : /* istanbul ignore next */ []));
|
|
246
|
+
resolvedArrowPadding = computed(() => this.arrowPadding() ?? this.defaults.arrowPadding, /* @ts-ignore */
|
|
247
|
+
...(ngDevMode ? [{ debugName: "resolvedArrowPadding" }] : /* istanbul ignore next */ []));
|
|
248
|
+
/**
|
|
249
|
+
* Under `label` the layer is the trigger's accessible name, so it has to be
|
|
250
|
+
* in the document before it is ever opened. Forcing the axis is deliberate:
|
|
251
|
+
* the alternative is a button silently announced as "button".
|
|
252
|
+
*/
|
|
253
|
+
resolvedMount = computed(() => this.resolvedDescribes() === 'label' ? 'eager' : (this.mount() ?? this.defaults.mount), /* @ts-ignore */
|
|
254
|
+
...(ngDevMode ? [{ debugName: "resolvedMount" }] : /* istanbul ignore next */ []));
|
|
255
|
+
everOpened = signal(false, /* @ts-ignore */
|
|
256
|
+
...(ngDevMode ? [{ debugName: "everOpened" }] : /* istanbul ignore next */ []));
|
|
257
|
+
seen = computed(() => this.everOpened() || this.isOpen(), /* @ts-ignore */
|
|
258
|
+
...(ngDevMode ? [{ debugName: "seen" }] : /* istanbul ignore next */ []));
|
|
259
|
+
/**
|
|
260
|
+
* One timer for the whole family. An open waiting on `openDelay`, a close
|
|
261
|
+
* waiting on `closeDelay` and a long press waiting on `touchDelay` are never
|
|
262
|
+
* pending at once — each cancels the others.
|
|
263
|
+
*/
|
|
264
|
+
timer;
|
|
265
|
+
constructor() {
|
|
266
|
+
this.destroyRef.onDestroy(() => this.cancelPending());
|
|
267
|
+
/** Disabling cancels a waiting open and drops an open one, so enabling opens nothing. */
|
|
268
|
+
effect(() => {
|
|
269
|
+
if (!this.disabled())
|
|
270
|
+
return;
|
|
271
|
+
untracked(() => {
|
|
272
|
+
this.cancelPending();
|
|
273
|
+
if (this.open())
|
|
274
|
+
this.open.set(false);
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Read here rather than in the constructor, because inputs are not set yet
|
|
280
|
+
* there, and once: a later change to it is not new state.
|
|
281
|
+
*/
|
|
282
|
+
ngOnInit() {
|
|
283
|
+
if (this.defaultOpen() && !this.open())
|
|
284
|
+
this.open.set(true);
|
|
285
|
+
}
|
|
286
|
+
cancelPending() {
|
|
287
|
+
if (this.timer !== undefined)
|
|
288
|
+
clearTimeout(this.timer);
|
|
289
|
+
this.timer = undefined;
|
|
290
|
+
}
|
|
291
|
+
/** Opens after `openDelay`, or in the same task inside the group window. */
|
|
292
|
+
openAfterDelay(source) {
|
|
293
|
+
this.cancelPending();
|
|
294
|
+
const delay = this.openDelay() ?? this.defaults.openDelay;
|
|
295
|
+
const sinceLast = Date.now() - this.group.lastClosedAt;
|
|
296
|
+
if (delay <= 0 || sinceLast < this.defaults.groupDelay) {
|
|
297
|
+
this.toggle(true, 'pointer', source);
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
this.timer = setTimeout(() => this.toggle(true, 'pointer', source), delay);
|
|
301
|
+
}
|
|
302
|
+
/** Closes after `closeDelay`, which is the window the pointer has to reach the layer. */
|
|
303
|
+
closeAfterDelay(source) {
|
|
304
|
+
this.cancelPending();
|
|
305
|
+
const delay = this.closeDelay() ?? this.defaults.closeDelay;
|
|
306
|
+
if (delay <= 0) {
|
|
307
|
+
this.toggle(false, 'pointer', source);
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
this.timer = setTimeout(() => this.toggle(false, 'pointer', source), delay);
|
|
311
|
+
}
|
|
312
|
+
/** A coarse pointer has no hover, so a press held still opens the hint. */
|
|
313
|
+
pressAndHold(source) {
|
|
314
|
+
this.cancelPending();
|
|
315
|
+
const delay = this.touchDelay() ?? this.defaults.touchDelay;
|
|
316
|
+
this.timer = setTimeout(() => this.toggle(true, 'pointer', source), delay);
|
|
317
|
+
}
|
|
318
|
+
/** Opens now, ignoring every delay. One of the two imperative actions. */
|
|
319
|
+
show() {
|
|
320
|
+
this.toggle(true, 'programmatic');
|
|
321
|
+
}
|
|
322
|
+
/** Closes now. */
|
|
323
|
+
hide() {
|
|
324
|
+
this.toggle(false, 'programmatic');
|
|
325
|
+
}
|
|
326
|
+
toggle(next, reason, source) {
|
|
327
|
+
this.cancelPending();
|
|
328
|
+
if (next === this.isOpen())
|
|
329
|
+
return;
|
|
330
|
+
/**
|
|
331
|
+
* Refused rather than recorded: an open granted while disabled is hidden by
|
|
332
|
+
* `isOpen`, and the leave that follows finds nothing to close, so it would
|
|
333
|
+
* surface the moment `disabled` turned false.
|
|
334
|
+
*/
|
|
335
|
+
if (next && this.disabled())
|
|
336
|
+
return;
|
|
337
|
+
/**
|
|
338
|
+
* Measured here rather than watched: the answer is needed at the moment the
|
|
339
|
+
* hint would open, and a box measured then is never a box two column drags
|
|
340
|
+
* old.
|
|
341
|
+
*/
|
|
342
|
+
const trigger = this.triggerNode();
|
|
343
|
+
if (next && this.resolvedWhenClipped() && trigger !== null && !isClipped(trigger))
|
|
344
|
+
return;
|
|
345
|
+
let cancelled = false;
|
|
346
|
+
const state = createControllable({
|
|
347
|
+
initial: this.isOpen(),
|
|
348
|
+
onRequest: (request) => {
|
|
349
|
+
this.openChangeRequest.emit(request);
|
|
350
|
+
cancelled = request.cancelled;
|
|
351
|
+
},
|
|
352
|
+
});
|
|
353
|
+
const moved = state.request(next, reason, source);
|
|
354
|
+
if (cancelled)
|
|
355
|
+
return;
|
|
356
|
+
if (next)
|
|
357
|
+
this.everOpened.set(true);
|
|
358
|
+
/**
|
|
359
|
+
* The window the next tooltip opens instantly inside starts when this one
|
|
360
|
+
* closes, so a reader crossing a toolbar pays one warmup.
|
|
361
|
+
*/
|
|
362
|
+
if (!next)
|
|
363
|
+
this.group.lastClosedAt = Date.now();
|
|
364
|
+
if (moved)
|
|
365
|
+
this.open.set(next);
|
|
366
|
+
}
|
|
367
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltip, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
368
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlTooltip, isStandalone: true, selector: "[slTooltip]", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, defaultOpen: { classPropertyName: "defaultOpen", publicName: "defaultOpen", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, whenClipped: { classPropertyName: "whenClipped", publicName: "whenClipped", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, describes: { classPropertyName: "describes", publicName: "describes", isSignal: true, isRequired: false, transformFunction: null }, openOn: { classPropertyName: "openOn", publicName: "openOn", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, mount: { classPropertyName: "mount", publicName: "mount", isSignal: true, isRequired: false, transformFunction: null }, strategy: { classPropertyName: "strategy", publicName: "strategy", isSignal: true, isRequired: false, transformFunction: null }, arrow: { classPropertyName: "arrow", publicName: "arrow", isSignal: true, isRequired: false, transformFunction: null }, hoverable: { classPropertyName: "hoverable", publicName: "hoverable", isSignal: true, isRequired: false, transformFunction: null }, closeOnPress: { classPropertyName: "closeOnPress", publicName: "closeOnPress", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "flip", isSignal: true, isRequired: false, transformFunction: null }, shift: { classPropertyName: "shift", publicName: "shift", isSignal: true, isRequired: false, transformFunction: null }, hideWhenDetached: { classPropertyName: "hideWhenDetached", publicName: "hideWhenDetached", isSignal: true, isRequired: false, transformFunction: null }, portal: { classPropertyName: "portal", publicName: "portal", isSignal: true, isRequired: false, transformFunction: null }, openDelay: { classPropertyName: "openDelay", publicName: "openDelay", isSignal: true, isRequired: false, transformFunction: null }, closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null }, touchDelay: { classPropertyName: "touchDelay", publicName: "touchDelay", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null }, alignOffset: { classPropertyName: "alignOffset", publicName: "alignOffset", isSignal: true, isRequired: false, transformFunction: null }, collisionPadding: { classPropertyName: "collisionPadding", publicName: "collisionPadding", isSignal: true, isRequired: false, transformFunction: null }, arrowPadding: { classPropertyName: "arrowPadding", publicName: "arrowPadding", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", openChangeRequest: "openChangeRequest" }, exportAs: ["slTooltip"], ngImport: i0 });
|
|
369
|
+
}
|
|
370
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltip, decorators: [{
|
|
371
|
+
type: Directive,
|
|
372
|
+
args: [{
|
|
373
|
+
selector: '[slTooltip]',
|
|
374
|
+
standalone: true,
|
|
375
|
+
exportAs: 'slTooltip',
|
|
376
|
+
}]
|
|
377
|
+
}], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], defaultOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultOpen", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], whenClipped: [{ type: i0.Input, args: [{ isSignal: true, alias: "whenClipped", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], describes: [{ type: i0.Input, args: [{ isSignal: true, alias: "describes", required: false }] }], openOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "openOn", required: false }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], mount: [{ type: i0.Input, args: [{ isSignal: true, alias: "mount", required: false }] }], strategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "strategy", required: false }] }], arrow: [{ type: i0.Input, args: [{ isSignal: true, alias: "arrow", required: false }] }], hoverable: [{ type: i0.Input, args: [{ isSignal: true, alias: "hoverable", required: false }] }], closeOnPress: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnPress", required: false }] }], flip: [{ type: i0.Input, args: [{ isSignal: true, alias: "flip", required: false }] }], shift: [{ type: i0.Input, args: [{ isSignal: true, alias: "shift", required: false }] }], hideWhenDetached: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideWhenDetached", required: false }] }], portal: [{ type: i0.Input, args: [{ isSignal: true, alias: "portal", required: false }] }], openDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "openDelay", required: false }] }], closeDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeDelay", required: false }] }], touchDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "touchDelay", required: false }] }], sideOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideOffset", required: false }] }], alignOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignOffset", required: false }] }], collisionPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "collisionPadding", required: false }] }], arrowPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "arrowPadding", required: false }] }], openChangeRequest: [{ type: i0.Output, args: ["openChangeRequest"] }] } });
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* The element the hint is about.
|
|
381
|
+
*
|
|
382
|
+
* The directive goes on the consumer's own control, which is what this
|
|
383
|
+
* ecosystem composes with. It writes the ARIA relationship and `data-open` and
|
|
384
|
+
* **no `data-part`**: `data-part` names a part of the family that owns the
|
|
385
|
+
* element, and sixteen stylesheets in this repository key on
|
|
386
|
+
* `[data-part='root']`, so claiming a `slBadge` or a `slCheckbox` used as a
|
|
387
|
+
* trigger would unstyle it and nothing would report it.
|
|
388
|
+
*
|
|
389
|
+
* A control the page disabled with the native attribute fires no pointer events
|
|
390
|
+
* at all, so the one explanation of why it is disabled would be unreachable.
|
|
391
|
+
* The reference page shows the two shapes that work: `aria-disabled` on a
|
|
392
|
+
* control that stays focusable, or a wrapping element carrying the trigger.
|
|
393
|
+
*/
|
|
394
|
+
class SlTooltipTrigger {
|
|
395
|
+
tooltip = inject(SlTooltip);
|
|
396
|
+
native = inject(ElementRef).nativeElement;
|
|
397
|
+
holding = false;
|
|
398
|
+
/**
|
|
399
|
+
* Named by the layer under `label`, described by it otherwise. Under `none`
|
|
400
|
+
* the trigger references nothing: it already says the words.
|
|
401
|
+
*/
|
|
402
|
+
names = computed(() => this.tooltip.resolvedDescribes() !== 'none' &&
|
|
403
|
+
(this.tooltip.isOpen() || this.tooltip.resolvedDescribes() === 'label'), /* @ts-ignore */
|
|
404
|
+
...(ngDevMode ? [{ debugName: "names" }] : /* istanbul ignore next */ []));
|
|
405
|
+
describedBy = computed(() => this.names() && this.tooltip.resolvedDescribes() === 'description'
|
|
406
|
+
? this.tooltip.contentId
|
|
407
|
+
: null, /* @ts-ignore */
|
|
408
|
+
...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
|
|
409
|
+
labelledBy = computed(() => this.names() && this.tooltip.resolvedDescribes() === 'label' ? this.tooltip.contentId : null, /* @ts-ignore */
|
|
410
|
+
...(ngDevMode ? [{ debugName: "labelledBy" }] : /* istanbul ignore next */ []));
|
|
411
|
+
constructor() {
|
|
412
|
+
this.tooltip.triggerNode.set(this.native);
|
|
413
|
+
inject(DestroyRef).onDestroy(() => this.tooltip.triggerNode.set(null));
|
|
414
|
+
}
|
|
415
|
+
onPointerEnter(event) {
|
|
416
|
+
if (this.tooltip.resolvedOpenOn() !== 'hover' || event.pointerType === 'touch')
|
|
417
|
+
return;
|
|
418
|
+
this.tooltip.openAfterDelay(event);
|
|
419
|
+
}
|
|
420
|
+
onPointerLeave(event) {
|
|
421
|
+
this.holding = false;
|
|
422
|
+
if (this.tooltip.resolvedOpenOn() === 'manual')
|
|
423
|
+
return;
|
|
424
|
+
this.tooltip.closeAfterDelay(event);
|
|
425
|
+
}
|
|
426
|
+
onPointerDown(event) {
|
|
427
|
+
if (event.pointerType === 'touch') {
|
|
428
|
+
this.holding = true;
|
|
429
|
+
this.tooltip.pressAndHold(event);
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
if (this.tooltip.resolvedCloseOnPress() && this.tooltip.isOpen()) {
|
|
433
|
+
this.tooltip.toggle(false, 'pointer', event);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
onPointerRelease() {
|
|
437
|
+
if (!this.holding)
|
|
438
|
+
return;
|
|
439
|
+
this.holding = false;
|
|
440
|
+
this.tooltip.cancelPending();
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* `:focus-visible` rather than every focus. A pointer press focuses a button
|
|
444
|
+
* too, and a tooltip opened by it would arrive before the delay it was given
|
|
445
|
+
* and stay after the press that was meant to dismiss it.
|
|
446
|
+
*/
|
|
447
|
+
onFocus(event) {
|
|
448
|
+
if (this.tooltip.resolvedOpenOn() === 'manual')
|
|
449
|
+
return;
|
|
450
|
+
if (!this.native.matches(':focus-visible'))
|
|
451
|
+
return;
|
|
452
|
+
this.tooltip.toggle(true, 'keyboard', event);
|
|
453
|
+
}
|
|
454
|
+
onBlur(event) {
|
|
455
|
+
if (this.tooltip.resolvedOpenOn() === 'manual')
|
|
456
|
+
return;
|
|
457
|
+
this.tooltip.toggle(false, 'blur', event);
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* A click synthesised by the keyboard reports no detail; a real one reports
|
|
461
|
+
* the click count. It is how `Enter` and `Space` are told from a press
|
|
462
|
+
* without a key listener existing for either.
|
|
463
|
+
*/
|
|
464
|
+
onClick(event) {
|
|
465
|
+
if (!this.tooltip.resolvedCloseOnPress() || !this.tooltip.isOpen())
|
|
466
|
+
return;
|
|
467
|
+
this.tooltip.toggle(false, event.detail === 0 ? 'keyboard' : 'pointer', event);
|
|
468
|
+
}
|
|
469
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
470
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlTooltipTrigger, isStandalone: true, selector: "[slTooltipTrigger]", host: { listeners: { "pointerenter": "onPointerEnter($event)", "pointerleave": "onPointerLeave($event)", "pointerdown": "onPointerDown($event)", "pointerup": "onPointerRelease()", "pointercancel": "onPointerRelease()", "focus": "onFocus($event)", "blur": "onBlur($event)", "click": "onClick($event)" }, properties: { "attr.aria-describedby": "describedBy()", "attr.aria-labelledby": "labelledBy()", "attr.data-open": "tooltip.isOpen() ? '' : null" } }, exportAs: ["slTooltipTrigger"], ngImport: i0 });
|
|
471
|
+
}
|
|
472
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipTrigger, decorators: [{
|
|
473
|
+
type: Directive,
|
|
474
|
+
args: [{
|
|
475
|
+
selector: '[slTooltipTrigger]',
|
|
476
|
+
standalone: true,
|
|
477
|
+
exportAs: 'slTooltipTrigger',
|
|
478
|
+
host: {
|
|
479
|
+
'[attr.aria-describedby]': 'describedBy()',
|
|
480
|
+
'[attr.aria-labelledby]': 'labelledBy()',
|
|
481
|
+
'[attr.data-open]': "tooltip.isOpen() ? '' : null",
|
|
482
|
+
'(pointerenter)': 'onPointerEnter($event)',
|
|
483
|
+
'(pointerleave)': 'onPointerLeave($event)',
|
|
484
|
+
'(pointerdown)': 'onPointerDown($event)',
|
|
485
|
+
'(pointerup)': 'onPointerRelease()',
|
|
486
|
+
'(pointercancel)': 'onPointerRelease()',
|
|
487
|
+
'(focus)': 'onFocus($event)',
|
|
488
|
+
'(blur)': 'onBlur($event)',
|
|
489
|
+
'(click)': 'onClick($event)',
|
|
490
|
+
},
|
|
491
|
+
}]
|
|
492
|
+
}], ctorParameters: () => [] });
|
|
493
|
+
/**
|
|
494
|
+
* The positioned layer, built from a template rather than from an element.
|
|
495
|
+
*
|
|
496
|
+
* `mount="active"` means the layer exists only while it is open, and a
|
|
497
|
+
* component cannot remove its own host element — so the consumer writes an
|
|
498
|
+
* `ng-template` and this directive builds the layer around the stamped view.
|
|
499
|
+
* It is the shape `ng-template[slCollapsibleContent]` already uses here, and
|
|
500
|
+
* Angular Material's `matExpansionPanelContent` before it.
|
|
501
|
+
*
|
|
502
|
+
* The element it builds is what `packages/core/src/positioner` writes
|
|
503
|
+
* `position`, `left` and `top` onto, and the one that scales and fades; its
|
|
504
|
+
* padding is the gap the pointer crosses onto a hoverable tooltip.
|
|
505
|
+
*/
|
|
506
|
+
class SlTooltipLayer {
|
|
507
|
+
tooltip = inject(SlTooltip);
|
|
508
|
+
template = inject((TemplateRef));
|
|
509
|
+
viewContainer = inject(ViewContainerRef);
|
|
510
|
+
comment = this.viewContainer.element.nativeElement;
|
|
511
|
+
/**
|
|
512
|
+
* Angular's server document is not the page. There the layer stays where the
|
|
513
|
+
* template wrote it, as React's server markup has it, and nothing measures,
|
|
514
|
+
* stacks or moves it into a portal.
|
|
515
|
+
*/
|
|
516
|
+
browser = isPlatformBrowser(inject(PLATFORM_ID));
|
|
517
|
+
/** Where the arrow stood in the layer while `arrow` is false. */
|
|
518
|
+
arrowPlace = null;
|
|
519
|
+
/**
|
|
520
|
+
* A signal rather than a field, and the reason is a defect the first spec run
|
|
521
|
+
* found: the effects that place, stack and paint the layer all read it, and
|
|
522
|
+
* with a plain field none of them re-ran when `build()` filled it in a later
|
|
523
|
+
* flush. The layer existed and carried no attribute the stylesheet reads.
|
|
524
|
+
*/
|
|
525
|
+
layerNode = signal(null, /* @ts-ignore */
|
|
526
|
+
...(ngDevMode ? [{ debugName: "layerNode" }] : /* istanbul ignore next */ []));
|
|
527
|
+
view = null;
|
|
528
|
+
portal = null;
|
|
529
|
+
positioner = null;
|
|
530
|
+
dismissable = null;
|
|
531
|
+
releaseBridge = null;
|
|
532
|
+
status = signal('unmounted', /* @ts-ignore */
|
|
533
|
+
...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
|
|
534
|
+
positioned = signal(false, /* @ts-ignore */
|
|
535
|
+
...(ngDevMode ? [{ debugName: "positioned" }] : /* istanbul ignore next */ []));
|
|
536
|
+
presence = createPresence({
|
|
537
|
+
present: false,
|
|
538
|
+
onStatusChange: (next) => this.status.set(next),
|
|
539
|
+
});
|
|
540
|
+
/**
|
|
541
|
+
* `active` drops the layer after the exit, `lazy` keeps it once it has been
|
|
542
|
+
* open, `eager` never removes it — which is what `describes="label"` forces,
|
|
543
|
+
* because an accessible name has to exist before it is read.
|
|
544
|
+
*/
|
|
545
|
+
mounted = computed(() => {
|
|
546
|
+
const mount = this.tooltip.resolvedMount();
|
|
547
|
+
if (mount === 'eager')
|
|
548
|
+
return true;
|
|
549
|
+
if (mount === 'lazy')
|
|
550
|
+
return this.tooltip.seen();
|
|
551
|
+
return this.status() !== 'unmounted';
|
|
552
|
+
}, /* @ts-ignore */
|
|
553
|
+
...(ngDevMode ? [{ debugName: "mounted" }] : /* istanbul ignore next */ []));
|
|
554
|
+
constructor() {
|
|
555
|
+
/* Injected for its side effect: the factory of
|
|
556
|
+
`provideSlottedPortalContainer` names the document's portal container,
|
|
557
|
+
and runs only when something asks for its token — before the first layer
|
|
558
|
+
asks `createPortalRoot` for a container. */
|
|
559
|
+
inject(SLOTTED_PORTAL_CONTAINER, { optional: true });
|
|
560
|
+
effect(() => this.presence.sync(this.tooltip.isOpen()));
|
|
561
|
+
effect(() => (this.mounted() ? this.build() : this.teardown()));
|
|
562
|
+
effect(() => this.place());
|
|
563
|
+
effect(() => this.stack());
|
|
564
|
+
effect(() => this.paint());
|
|
565
|
+
inject(DestroyRef).onDestroy(() => {
|
|
566
|
+
this.presence.destroy();
|
|
567
|
+
this.teardown();
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
/** Measures and places the layer again. The imperative action of this part. */
|
|
571
|
+
reposition() {
|
|
572
|
+
void this.positioner?.update();
|
|
573
|
+
}
|
|
574
|
+
build() {
|
|
575
|
+
if (this.layerNode() !== null)
|
|
576
|
+
return;
|
|
577
|
+
const document = this.comment.ownerDocument;
|
|
578
|
+
const layer = document.createElement('div');
|
|
579
|
+
layer.setAttribute('data-ui', 'tooltip');
|
|
580
|
+
layer.setAttribute('data-part', 'root');
|
|
581
|
+
const view = this.viewContainer.createEmbeddedView(this.template);
|
|
582
|
+
view.detectChanges();
|
|
583
|
+
for (const node of view.rootNodes)
|
|
584
|
+
layer.appendChild(node);
|
|
585
|
+
const portal = this.browser
|
|
586
|
+
? createPortalRoot({
|
|
587
|
+
origin: this.tooltip.triggerNode(),
|
|
588
|
+
disabled: !this.tooltip.resolvedPortal(),
|
|
589
|
+
})
|
|
590
|
+
: null;
|
|
591
|
+
const container = portal?.container ?? this.comment.parentNode;
|
|
592
|
+
if (container === this.comment.parentNode)
|
|
593
|
+
container?.insertBefore(layer, this.comment);
|
|
594
|
+
else
|
|
595
|
+
container?.appendChild(layer);
|
|
596
|
+
this.view = view;
|
|
597
|
+
this.portal = portal;
|
|
598
|
+
this.releaseBridge = bindHoverBridge(layer, this.tooltip);
|
|
599
|
+
this.presence.setNode(layer);
|
|
600
|
+
this.layerNode.set(layer);
|
|
601
|
+
}
|
|
602
|
+
teardown() {
|
|
603
|
+
this.releaseBridge?.();
|
|
604
|
+
this.releaseBridge = null;
|
|
605
|
+
this.positioner?.destroy();
|
|
606
|
+
this.positioner = null;
|
|
607
|
+
this.dismissable?.destroy();
|
|
608
|
+
this.dismissable = null;
|
|
609
|
+
this.presence.setNode(null);
|
|
610
|
+
this.layerNode()?.remove();
|
|
611
|
+
this.layerNode.set(null);
|
|
612
|
+
this.view?.destroy();
|
|
613
|
+
this.view = null;
|
|
614
|
+
this.portal?.release();
|
|
615
|
+
this.portal = null;
|
|
616
|
+
this.arrowPlace = null;
|
|
617
|
+
this.positioned.set(false);
|
|
618
|
+
}
|
|
619
|
+
/** Rebuilt whenever an option it was created with changes. */
|
|
620
|
+
place() {
|
|
621
|
+
const layer = this.layerNode();
|
|
622
|
+
const anchor = this.tooltip.triggerNode();
|
|
623
|
+
const options = {
|
|
624
|
+
align: this.tooltip.resolvedAlign(),
|
|
625
|
+
alignOffset: this.tooltip.resolvedAlignOffset(),
|
|
626
|
+
boundaryPadding: this.tooltip.resolvedCollisionPadding(),
|
|
627
|
+
flip: this.tooltip.resolvedFlip(),
|
|
628
|
+
hideWhenDetached: this.tooltip.resolvedHideWhenDetached(),
|
|
629
|
+
shift: this.tooltip.resolvedShift(),
|
|
630
|
+
side: this.tooltip.resolvedSide(),
|
|
631
|
+
sideOffset: this.tooltip.resolvedSideOffset(),
|
|
632
|
+
strategy: this.tooltip.resolvedStrategy(),
|
|
633
|
+
};
|
|
634
|
+
const arrow = this.tooltip.resolvedArrow() ? this.tooltip.arrowNode() : null;
|
|
635
|
+
this.positioner?.destroy();
|
|
636
|
+
this.positioner = null;
|
|
637
|
+
if (layer === null || anchor === null || !this.browser)
|
|
638
|
+
return;
|
|
639
|
+
this.positioner = createPositioner(anchor, layer, {
|
|
640
|
+
...options,
|
|
641
|
+
...(arrow ? { arrow, arrowPadding: this.tooltip.resolvedArrowPadding() } : {}),
|
|
642
|
+
});
|
|
643
|
+
void this.positioner.update().then(() => this.positioned.set(true));
|
|
644
|
+
}
|
|
645
|
+
/**
|
|
646
|
+
* The layer joins the single stack only while it is open, so its depth is its
|
|
647
|
+
* real position among the layers a reader has opened. Escape reaches the
|
|
648
|
+
* topmost layer alone; the trigger is a branch, so pressing it is not an
|
|
649
|
+
* outside press and the family closes on it deliberately instead.
|
|
650
|
+
*/
|
|
651
|
+
stack() {
|
|
652
|
+
const layer = this.layerNode();
|
|
653
|
+
const open = this.tooltip.isOpen();
|
|
654
|
+
const trigger = this.tooltip.triggerNode();
|
|
655
|
+
this.dismissable?.destroy();
|
|
656
|
+
this.dismissable = null;
|
|
657
|
+
if (layer === null || !open || !this.browser)
|
|
658
|
+
return;
|
|
659
|
+
this.dismissable = createDismissableLayer(layer, {
|
|
660
|
+
escape: true,
|
|
661
|
+
focusOutside: false,
|
|
662
|
+
modal: false,
|
|
663
|
+
outsidePress: true,
|
|
664
|
+
scrollLock: false,
|
|
665
|
+
...(trigger ? { branches: [trigger] } : {}),
|
|
666
|
+
onDismiss: (request) => {
|
|
667
|
+
this.tooltip.toggle(false, request.reason === 'escape' ? 'escape' : 'pointer', request.source);
|
|
668
|
+
},
|
|
669
|
+
});
|
|
670
|
+
}
|
|
671
|
+
/** Every attribute the stylesheet reads, and the two listeners hoverable needs. */
|
|
672
|
+
paint() {
|
|
673
|
+
const layer = this.layerNode();
|
|
674
|
+
if (layer === null)
|
|
675
|
+
return;
|
|
676
|
+
layer.setAttribute('data-align', this.tooltip.resolvedAlign());
|
|
677
|
+
layer.setAttribute('data-size', this.tooltip.resolvedSize());
|
|
678
|
+
layer.setAttribute('data-variant', this.tooltip.resolvedVariant());
|
|
679
|
+
toggleAttribute(layer, 'data-hoverable', this.tooltip.resolvedHoverable());
|
|
680
|
+
toggleAttribute(layer, 'data-open', this.tooltip.isOpen() && this.positioned());
|
|
681
|
+
this.showArrow(layer);
|
|
682
|
+
}
|
|
683
|
+
/**
|
|
684
|
+
* The arrow is the consumer's element inside the template, so under
|
|
685
|
+
* `arrow="false"` the layer takes it out — React's arrow renders nothing
|
|
686
|
+
* then — and puts it back in the same place under `true`.
|
|
687
|
+
*/
|
|
688
|
+
showArrow(layer) {
|
|
689
|
+
const arrow = this.tooltip.arrowNode();
|
|
690
|
+
if (arrow === null)
|
|
691
|
+
return;
|
|
692
|
+
if (this.tooltip.resolvedArrow()) {
|
|
693
|
+
this.arrowPlace?.replaceWith(arrow);
|
|
694
|
+
this.arrowPlace = null;
|
|
695
|
+
return;
|
|
696
|
+
}
|
|
697
|
+
if (this.arrowPlace !== null || !layer.contains(arrow))
|
|
698
|
+
return;
|
|
699
|
+
this.arrowPlace = layer.ownerDocument.createComment('');
|
|
700
|
+
arrow.replaceWith(this.arrowPlace);
|
|
701
|
+
}
|
|
702
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipLayer, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
703
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlTooltipLayer, isStandalone: true, selector: "ng-template[slTooltipLayer]", exportAs: ["slTooltipLayer"], ngImport: i0 });
|
|
704
|
+
}
|
|
705
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipLayer, decorators: [{
|
|
706
|
+
type: Directive,
|
|
707
|
+
args: [{
|
|
708
|
+
selector: 'ng-template[slTooltipLayer]',
|
|
709
|
+
standalone: true,
|
|
710
|
+
exportAs: 'slTooltipLayer',
|
|
711
|
+
}]
|
|
712
|
+
}], ctorParameters: () => [] });
|
|
713
|
+
function toggleAttribute(element, name, present) {
|
|
714
|
+
if (present)
|
|
715
|
+
element.setAttribute(name, '');
|
|
716
|
+
else
|
|
717
|
+
element.removeAttribute(name);
|
|
718
|
+
}
|
|
719
|
+
/**
|
|
720
|
+
* The painted surface, and the element the trigger's ARIA relationship names.
|
|
721
|
+
*
|
|
722
|
+
* It is the one part written as a component, because a component is what can
|
|
723
|
+
* carry `styleUrl`: this is where the family's single authored stylesheet
|
|
724
|
+
* enters an Angular application, exactly as every other family here does it.
|
|
725
|
+
*/
|
|
726
|
+
class SlTooltipContent {
|
|
727
|
+
tooltip = inject(SlTooltip);
|
|
728
|
+
/** Hidden from the reader under `none`, which is a hint shown and not read. */
|
|
729
|
+
hidden = computed(() => this.tooltip.resolvedDescribes() === 'none' ? true : null, /* @ts-ignore */
|
|
730
|
+
...(ngDevMode ? [{ debugName: "hidden" }] : /* istanbul ignore next */ []));
|
|
731
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
732
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.7", type: SlTooltipContent, isStandalone: true, selector: "[slTooltipContent]", host: { attributes: { "data-part": "content", "role": "tooltip" }, properties: { "attr.id": "tooltip.contentId", "attr.aria-hidden": "hidden()" } }, exportAs: ["slTooltipContent"], ngImport: i0, template: '<ng-content />', isInline: true, styles: ["@layer slotted.components{[data-ui=tooltip]{--_gap: var(--slotted-tooltip-gap, var(--slotted-space-4, .5rem));--_surface: var(--slotted-tooltip-surface, var(--slotted-surface-inverse, #172033));--_text: var(--slotted-tooltip-text, var(--slotted-text-inverse, #f8fafc));--_border-color: transparent;--_border-width: 0;--_radius: var(--slotted-tooltip-radius, var(--slotted-radius-sm, 4px));--_shadow: var(--slotted-tooltip-shadow, var(--slotted-shadow-xs));--_arrow-size: var(--slotted-tooltip-arrow-size, .5rem);--_arrow-tip-radius: var(--slotted-tooltip-arrow-tip-radius, var(--slotted-radius-xs, 2px));--_padding-inline: var(--slotted-control-padding-inline-md, .8125rem);--_padding-block: var(--slotted-control-gap-md, .5rem);--_font-size: var(--slotted-control-font-size-md, .8125rem);--_line-height: var(--slotted-line-height-sm, 1.45);--_measure: var(--slotted-tooltip-measure, 18rem);position:absolute;inset-block-start:0;z-index:calc(var(--slotted-z-index-popover, 1100) + var(--slotted-layer-depth, 0));isolation:isolate;box-sizing:border-box;padding:var(--_gap);inline-size:max-content;max-inline-size:min(var(--_measure),var(--slotted-positioner-available-width, 100vw));pointer-events:none;opacity:0;--_enter-distance: var(--slotted-space-2, .25rem);translate:0 calc(-1 * var(--_enter-distance));transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit),translate var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=tooltip][data-side=top]{translate:0 var(--_enter-distance)}[data-ui=tooltip]:is([data-side=left],[data-side=right]){translate:0 0}[data-ui=tooltip][data-open]{opacity:1;translate:0 0;transition:none}[data-ui=tooltip][data-open][data-positioned]{animation:slotted-tooltip-enter-down var(--slotted-duration-medium) var(--slotted-easing-enter)}[data-ui=tooltip][data-open][data-positioned][data-side=top]{animation-name:slotted-tooltip-enter-up}[data-ui=tooltip][data-open][data-positioned]:is([data-side=left],[data-side=right]){animation-name:slotted-tooltip-fade}@keyframes slotted-tooltip-enter-down{0%{opacity:0;translate:0 calc(-1 * var(--_enter-distance))}}@keyframes slotted-tooltip-enter-up{0%{opacity:0;translate:0 var(--_enter-distance)}}@keyframes slotted-tooltip-fade{0%{opacity:0}}@media(prefers-reduced-motion:reduce){[data-ui=tooltip],[data-ui=tooltip][data-side=top],[data-ui=tooltip][data-side=left],[data-ui=tooltip][data-side=right]{translate:0 0;transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=tooltip][data-open][data-positioned],[data-ui=tooltip][data-open][data-positioned][data-side=top],[data-ui=tooltip][data-open][data-positioned][data-side=left],[data-ui=tooltip][data-open][data-positioned][data-side=right]{animation-name:slotted-tooltip-fade}}[data-ui=tooltip][data-open][data-hoverable]{pointer-events:auto}[data-ui=tooltip][data-detached]{visibility:hidden}[data-ui=tooltip][data-size=sm]{--_padding-inline: var(--slotted-control-padding-inline-sm, .625rem);--_padding-block: var(--slotted-control-gap-sm, .375rem);--_font-size: var(--slotted-control-font-size-sm, .75rem);--_measure: var(--slotted-tooltip-measure-sm, 14rem)}[data-ui=tooltip][data-variant=surface]{--_surface: var(--slotted-tooltip-surface-raised, var(--slotted-surface-raised, #ffffff));--_text: var(--slotted-tooltip-text-raised, var(--slotted-text, #0f172a));--_border-color: var(--slotted-tooltip-border-color, var(--slotted-border-subtle, #e2e8f0));--_border-width: var(--slotted-border-width-thin, 1px)}[data-ui=tooltip]>[data-part=content]{box-sizing:border-box;display:block;max-inline-size:100%;border:var(--_border-width) solid var(--_border-color);border-radius:var(--_radius);background:var(--_surface);color:var(--_text);box-shadow:var(--_shadow);padding-block:var(--_padding-block);padding-inline:var(--_padding-inline);font-family:var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif);font-size:var(--_font-size);font-weight:var(--slotted-font-weight-regular, 400);line-height:var(--_line-height);text-align:start;overflow-wrap:anywhere;unicode-bidi:plaintext}[data-ui=tooltip]>[data-part=arrow]{position:absolute;z-index:1;inline-size:var(--_arrow-size);block-size:var(--_arrow-size);rotate:45deg;background:var(--_surface);border:0 solid var(--_border-color)}[data-ui=tooltip][data-side=top]>[data-part=arrow]{left:var(--slotted-positioner-arrow-x, 0);top:auto;bottom:calc(var(--_gap) - var(--_arrow-size) / 2);border-right-width:var(--_border-width);border-bottom-width:var(--_border-width);border-bottom-right-radius:var(--_arrow-tip-radius)}[data-ui=tooltip][data-side=bottom]>[data-part=arrow]{left:var(--slotted-positioner-arrow-x, 0);top:calc(var(--_gap) - var(--_arrow-size) / 2);bottom:auto;border-top-width:var(--_border-width);border-left-width:var(--_border-width);border-top-left-radius:var(--_arrow-tip-radius)}[data-ui=tooltip][data-side=left]>[data-part=arrow]{top:var(--slotted-positioner-arrow-y, 0);left:auto;right:calc(var(--_gap) - var(--_arrow-size) / 2);border-top-width:var(--_border-width);border-right-width:var(--_border-width);border-top-right-radius:var(--_arrow-tip-radius)}[data-ui=tooltip][data-side=right]>[data-part=arrow]{top:var(--slotted-positioner-arrow-y, 0);left:calc(var(--_gap) - var(--_arrow-size) / 2);right:auto;border-bottom-width:var(--_border-width);border-left-width:var(--_border-width);border-bottom-left-radius:var(--_arrow-tip-radius)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
733
|
+
}
|
|
734
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipContent, decorators: [{
|
|
735
|
+
type: Component,
|
|
736
|
+
args: [{ selector: '[slTooltipContent]', standalone: true, exportAs: 'slTooltipContent', template: '<ng-content />', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
737
|
+
'data-part': 'content',
|
|
738
|
+
role: 'tooltip',
|
|
739
|
+
'[attr.id]': 'tooltip.contentId',
|
|
740
|
+
'[attr.aria-hidden]': 'hidden()',
|
|
741
|
+
}, styles: ["@layer slotted.components{[data-ui=tooltip]{--_gap: var(--slotted-tooltip-gap, var(--slotted-space-4, .5rem));--_surface: var(--slotted-tooltip-surface, var(--slotted-surface-inverse, #172033));--_text: var(--slotted-tooltip-text, var(--slotted-text-inverse, #f8fafc));--_border-color: transparent;--_border-width: 0;--_radius: var(--slotted-tooltip-radius, var(--slotted-radius-sm, 4px));--_shadow: var(--slotted-tooltip-shadow, var(--slotted-shadow-xs));--_arrow-size: var(--slotted-tooltip-arrow-size, .5rem);--_arrow-tip-radius: var(--slotted-tooltip-arrow-tip-radius, var(--slotted-radius-xs, 2px));--_padding-inline: var(--slotted-control-padding-inline-md, .8125rem);--_padding-block: var(--slotted-control-gap-md, .5rem);--_font-size: var(--slotted-control-font-size-md, .8125rem);--_line-height: var(--slotted-line-height-sm, 1.45);--_measure: var(--slotted-tooltip-measure, 18rem);position:absolute;inset-block-start:0;z-index:calc(var(--slotted-z-index-popover, 1100) + var(--slotted-layer-depth, 0));isolation:isolate;box-sizing:border-box;padding:var(--_gap);inline-size:max-content;max-inline-size:min(var(--_measure),var(--slotted-positioner-available-width, 100vw));pointer-events:none;opacity:0;--_enter-distance: var(--slotted-space-2, .25rem);translate:0 calc(-1 * var(--_enter-distance));transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit),translate var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=tooltip][data-side=top]{translate:0 var(--_enter-distance)}[data-ui=tooltip]:is([data-side=left],[data-side=right]){translate:0 0}[data-ui=tooltip][data-open]{opacity:1;translate:0 0;transition:none}[data-ui=tooltip][data-open][data-positioned]{animation:slotted-tooltip-enter-down var(--slotted-duration-medium) var(--slotted-easing-enter)}[data-ui=tooltip][data-open][data-positioned][data-side=top]{animation-name:slotted-tooltip-enter-up}[data-ui=tooltip][data-open][data-positioned]:is([data-side=left],[data-side=right]){animation-name:slotted-tooltip-fade}@keyframes slotted-tooltip-enter-down{0%{opacity:0;translate:0 calc(-1 * var(--_enter-distance))}}@keyframes slotted-tooltip-enter-up{0%{opacity:0;translate:0 var(--_enter-distance)}}@keyframes slotted-tooltip-fade{0%{opacity:0}}@media(prefers-reduced-motion:reduce){[data-ui=tooltip],[data-ui=tooltip][data-side=top],[data-ui=tooltip][data-side=left],[data-ui=tooltip][data-side=right]{translate:0 0;transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=tooltip][data-open][data-positioned],[data-ui=tooltip][data-open][data-positioned][data-side=top],[data-ui=tooltip][data-open][data-positioned][data-side=left],[data-ui=tooltip][data-open][data-positioned][data-side=right]{animation-name:slotted-tooltip-fade}}[data-ui=tooltip][data-open][data-hoverable]{pointer-events:auto}[data-ui=tooltip][data-detached]{visibility:hidden}[data-ui=tooltip][data-size=sm]{--_padding-inline: var(--slotted-control-padding-inline-sm, .625rem);--_padding-block: var(--slotted-control-gap-sm, .375rem);--_font-size: var(--slotted-control-font-size-sm, .75rem);--_measure: var(--slotted-tooltip-measure-sm, 14rem)}[data-ui=tooltip][data-variant=surface]{--_surface: var(--slotted-tooltip-surface-raised, var(--slotted-surface-raised, #ffffff));--_text: var(--slotted-tooltip-text-raised, var(--slotted-text, #0f172a));--_border-color: var(--slotted-tooltip-border-color, var(--slotted-border-subtle, #e2e8f0));--_border-width: var(--slotted-border-width-thin, 1px)}[data-ui=tooltip]>[data-part=content]{box-sizing:border-box;display:block;max-inline-size:100%;border:var(--_border-width) solid var(--_border-color);border-radius:var(--_radius);background:var(--_surface);color:var(--_text);box-shadow:var(--_shadow);padding-block:var(--_padding-block);padding-inline:var(--_padding-inline);font-family:var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif);font-size:var(--_font-size);font-weight:var(--slotted-font-weight-regular, 400);line-height:var(--_line-height);text-align:start;overflow-wrap:anywhere;unicode-bidi:plaintext}[data-ui=tooltip]>[data-part=arrow]{position:absolute;z-index:1;inline-size:var(--_arrow-size);block-size:var(--_arrow-size);rotate:45deg;background:var(--_surface);border:0 solid var(--_border-color)}[data-ui=tooltip][data-side=top]>[data-part=arrow]{left:var(--slotted-positioner-arrow-x, 0);top:auto;bottom:calc(var(--_gap) - var(--_arrow-size) / 2);border-right-width:var(--_border-width);border-bottom-width:var(--_border-width);border-bottom-right-radius:var(--_arrow-tip-radius)}[data-ui=tooltip][data-side=bottom]>[data-part=arrow]{left:var(--slotted-positioner-arrow-x, 0);top:calc(var(--_gap) - var(--_arrow-size) / 2);bottom:auto;border-top-width:var(--_border-width);border-left-width:var(--_border-width);border-top-left-radius:var(--_arrow-tip-radius)}[data-ui=tooltip][data-side=left]>[data-part=arrow]{top:var(--slotted-positioner-arrow-y, 0);left:auto;right:calc(var(--_gap) - var(--_arrow-size) / 2);border-top-width:var(--_border-width);border-right-width:var(--_border-width);border-top-right-radius:var(--_arrow-tip-radius)}[data-ui=tooltip][data-side=right]>[data-part=arrow]{top:var(--slotted-positioner-arrow-y, 0);left:calc(var(--_gap) - var(--_arrow-size) / 2);right:auto;border-bottom-width:var(--_border-width);border-left-width:var(--_border-width);border-bottom-left-radius:var(--_arrow-tip-radius)}}\n"] }]
|
|
742
|
+
}] });
|
|
743
|
+
/**
|
|
744
|
+
* The mark that points at the anchor. The family draws it; the positioner
|
|
745
|
+
* measures it and says where it goes. It is hidden from assistive technology,
|
|
746
|
+
* because it is decoration a reader has no use for.
|
|
747
|
+
*/
|
|
748
|
+
class SlTooltipArrow {
|
|
749
|
+
constructor() {
|
|
750
|
+
const tooltip = inject(SlTooltip);
|
|
751
|
+
const native = inject(ElementRef).nativeElement;
|
|
752
|
+
tooltip.arrowNode.set(native);
|
|
753
|
+
inject(DestroyRef).onDestroy(() => tooltip.arrowNode.set(null));
|
|
754
|
+
}
|
|
755
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipArrow, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
756
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlTooltipArrow, isStandalone: true, selector: "[slTooltipArrow]", host: { attributes: { "data-part": "arrow", "aria-hidden": "true" } }, exportAs: ["slTooltipArrow"], ngImport: i0 });
|
|
757
|
+
}
|
|
758
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlTooltipArrow, decorators: [{
|
|
759
|
+
type: Directive,
|
|
760
|
+
args: [{
|
|
761
|
+
selector: '[slTooltipArrow]',
|
|
762
|
+
standalone: true,
|
|
763
|
+
exportAs: 'slTooltipArrow',
|
|
764
|
+
host: {
|
|
765
|
+
'data-part': 'arrow',
|
|
766
|
+
'aria-hidden': 'true',
|
|
767
|
+
},
|
|
768
|
+
}]
|
|
769
|
+
}], ctorParameters: () => [] });
|
|
770
|
+
/**
|
|
771
|
+
* The layer's own pointer handlers, written on the layer element rather than
|
|
772
|
+
* bound by a directive, because the element is built here rather than by the
|
|
773
|
+
* consumer. Entering the layer cancels the pending close; leaving it starts one
|
|
774
|
+
* again, which is the whole of `hoverable`.
|
|
775
|
+
*/
|
|
776
|
+
function bindHoverBridge(layer, tooltip) {
|
|
777
|
+
const enter = () => {
|
|
778
|
+
if (tooltip.resolvedHoverable())
|
|
779
|
+
tooltip.cancelPending();
|
|
780
|
+
};
|
|
781
|
+
const leave = (event) => {
|
|
782
|
+
if (tooltip.resolvedHoverable())
|
|
783
|
+
tooltip.closeAfterDelay(event);
|
|
784
|
+
};
|
|
785
|
+
layer.addEventListener('pointerenter', enter);
|
|
786
|
+
layer.addEventListener('pointerleave', leave);
|
|
787
|
+
return () => {
|
|
788
|
+
layer.removeEventListener('pointerenter', enter);
|
|
789
|
+
layer.removeEventListener('pointerleave', leave);
|
|
790
|
+
};
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
/**
|
|
794
|
+
* Generated bundle index. Do not edit.
|
|
795
|
+
*/
|
|
796
|
+
|
|
797
|
+
export { SlTooltip, SlTooltipArrow, SlTooltipContent, SlTooltipGroup, SlTooltipIdFactory, SlTooltipLayer, SlTooltipTrigger, TOOLTIP_DEFAULTS, TOOLTIP_FALLBACK, injectTooltipDefaults, provideSlottedPortalContainer, provideTooltipDefaults };
|
|
798
|
+
//# sourceMappingURL=slotted-angular-tooltip.mjs.map
|