@siemens/element-ng 49.16.0 → 51.0.0-rc.10
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/README.md +1 -1
- package/fesm2022/siemens-element-ng-about.mjs +41 -25
- package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-accordion.mjs +59 -41
- package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-action-modal.mjs +83 -53
- package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-ag-grid.mjs +143 -148
- package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-application-header.mjs +180 -188
- package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs +34 -28
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-autocomplete.mjs +27 -22
- package/fesm2022/siemens-element-ng-autocomplete.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-avatar.mjs +34 -24
- package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-badge.mjs +9 -8
- package/fesm2022/siemens-element-ng-badge.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +17 -14
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb.mjs +21 -17
- package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-card.mjs +72 -47
- package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-carousel.mjs +58 -34
- package/fesm2022/siemens-element-ng-carousel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-chat-messages.mjs +323 -215
- package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-circle-status.mjs +39 -25
- package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-color-picker.mjs +44 -34
- package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +58 -37
- package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-common.mjs +22 -22
- package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-connection-strength.mjs +14 -12
- package/fesm2022/siemens-element-ng-connection-strength.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-content-action-bar.mjs +37 -28
- package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-copyright-notice.mjs +19 -14
- package/fesm2022/siemens-element-ng-copyright-notice.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-dashboard.mjs +337 -223
- package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datatable.mjs +12 -15
- package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-date-range-filter.mjs +126 -76
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datepicker.mjs +393 -251
- package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-electron-titlebar.mjs +22 -17
- package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-empty-state.mjs +15 -12
- package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-file-uploader.mjs +105 -91
- package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filter-bar.mjs +33 -25
- package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filtered-search.mjs +274 -165
- package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-footer.mjs +12 -10
- package/fesm2022/siemens-element-ng-footer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-form.mjs +361 -116
- package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-formly-legacy.mjs +99 -0
- package/fesm2022/siemens-element-ng-formly-legacy.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-formly.mjs +224 -318
- package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-header-dropdown.mjs +40 -30
- package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-help-button.mjs +6 -6
- package/fesm2022/siemens-element-ng-help-button.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-icon.mjs +56 -57
- package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-info-page.mjs +17 -11
- package/fesm2022/siemens-element-ng-info-page.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-inline-notification.mjs +19 -14
- package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-ip-input.mjs +19 -15
- package/fesm2022/siemens-element-ng-ip-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-landing-page.mjs +121 -75
- package/fesm2022/siemens-element-ng-landing-page.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-language-switcher.mjs +16 -12
- package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-link.mjs +31 -21
- package/fesm2022/siemens-element-ng-link.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-list-details.mjs +132 -66
- package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-loading-spinner.mjs +51 -64
- package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-localization.mjs +14 -12
- package/fesm2022/siemens-element-ng-localization.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-main-detail-container.mjs +116 -51
- package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-maplibre.mjs +401 -0
- package/fesm2022/siemens-element-ng-maplibre.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-markdown-directives-tabs.mjs +70 -0
- package/fesm2022/siemens-element-ng-markdown-directives-tabs.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-markdown-extensions-citations.mjs +215 -0
- package/fesm2022/siemens-element-ng-markdown-extensions-citations.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-markdown-extensions-katex.mjs +76 -0
- package/fesm2022/siemens-element-ng-markdown-extensions-katex.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-markdown-extensions-mermaid.mjs +86 -0
- package/fesm2022/siemens-element-ng-markdown-extensions-mermaid.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-markdown-hightlighter-highlightjs.mjs +130 -0
- package/fesm2022/siemens-element-ng-markdown-hightlighter-highlightjs.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-markdown.mjs +800 -0
- package/fesm2022/siemens-element-ng-markdown.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-menu.mjs +71 -57
- package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-modal.mjs +14 -11
- package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +251 -206
- package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs +123 -86
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar.mjs +72 -45
- package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-notification-item.mjs +19 -11
- package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-number-input.mjs +41 -29
- package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-pagination.mjs +31 -20
- package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-password-strength.mjs +33 -24
- package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-password-toggle.mjs +19 -14
- package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-phone-number.mjs +144 -139
- package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-photo-upload.mjs +85 -52
- package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-pills-input.mjs +56 -41
- package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-popover-legacy.mjs +43 -28
- package/fesm2022/siemens-element-ng-popover-legacy.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-popover.mjs +35 -27
- package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-progressbar.mjs +23 -16
- package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-resize-observer.mjs +32 -43
- package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-result-details-list.mjs +12 -10
- package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-search-bar.mjs +38 -37
- package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-select.mjs +265 -170
- package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-shadow-root.mjs +4 -4
- package/fesm2022/siemens-element-ng-shadow-root.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-side-panel.mjs +181 -104
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-skip-links.mjs +21 -24
- package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-slider.mjs +45 -30
- package/fesm2022/siemens-element-ng-slider.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-source-chip.mjs +79 -0
- package/fesm2022/siemens-element-ng-source-chip.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-split.mjs +290 -306
- package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-bar.mjs +66 -52
- package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-counter.mjs +15 -11
- package/fesm2022/siemens-element-ng-status-counter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-toggle.mjs +26 -16
- package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-summary-chip.mjs +25 -16
- package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-summary-widget.mjs +27 -17
- package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-system-banner.mjs +13 -10
- package/fesm2022/siemens-element-ng-system-banner.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tabs-legacy.mjs +20 -17
- package/fesm2022/siemens-element-ng-tabs-legacy.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tabs.mjs +156 -131
- package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-theme.mjs +29 -6
- package/fesm2022/siemens-element-ng-theme.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-threshold.mjs +62 -42
- package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-toast-notification.mjs +59 -40
- package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tooltip.mjs +108 -82
- package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tour.mjs +36 -19
- package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-translate.mjs +0 -1
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +113 -84
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-typeahead.mjs +69 -49
- package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-wizard.mjs +95 -54
- package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
- package/formly-legacy/package.json +4 -0
- package/maplibre/package.json +4 -0
- package/maplibre/styles/_index.scss +1 -0
- package/maplibre/styles/maplibre-gl.scss +724 -0
- package/markdown/directives/tabs/package.json +4 -0
- package/markdown/extensions/citations/package.json +4 -0
- package/markdown/extensions/katex/package.json +4 -0
- package/markdown/extensions/mermaid/package.json +4 -0
- package/markdown/hightlighter/highlightjs/package.json +4 -0
- package/markdown/package.json +4 -0
- package/package.json +96 -25
- package/schematics/collection.json +5 -0
- package/schematics/{migrations/icon-path-migration → migrate-tabs-legacy}/index.js +1 -1
- package/schematics/migrate-tabs-legacy/migrate-tabs-legacy-rule.js +675 -0
- package/schematics/migrate-tabs-legacy/schema.json +14 -0
- package/schematics/migration.json +4 -4
- package/schematics/migrations/data/class-member-replacement.js +1 -19
- package/schematics/migrations/data/component-property-names.js +1 -25
- package/schematics/migrations/data/component-property-to-child.js +11 -0
- package/schematics/migrations/data/css-custom-properties.js +224 -0
- package/schematics/migrations/data/element-class-changes.js +116 -18
- package/schematics/migrations/data/element-migration-data.js +6 -0
- package/schematics/migrations/data/element-selectors.js +1 -9
- package/schematics/migrations/data/index.js +0 -4
- package/schematics/migrations/data/migration-test-data.js +49 -6
- package/schematics/migrations/data/provider-function-removals.js +7 -0
- package/schematics/migrations/data/symbol-removals.js +17 -7
- package/schematics/migrations/data/symbol-renaming.js +3 -44
- package/schematics/migrations/element-migration/element-migration.js +6 -6
- package/schematics/migrations/utilities/component-property-to-child.migration.js +73 -0
- package/schematics/migrations/utilities/css-custom-property.migration.js +51 -0
- package/schematics/migrations/utilities/element-class-change.migration.js +10 -5
- package/schematics/migrations/utilities/import-removal.js +39 -0
- package/schematics/migrations/utilities/index.js +4 -0
- package/schematics/migrations/utilities/provider-function-removal.migration.js +116 -0
- package/schematics/ng-update/index.js +1 -1
- package/schematics/ng-update/migrate-content-formatter.js +288 -0
- package/schematics/ng-update/migrate-list-details-units.js +86 -0
- package/schematics/ng-update/migrate-main-detail-units.js +89 -0
- package/schematics/ng-update/migrate-markdown-renderer.js +106 -0
- package/schematics/ng-update/migrate-spacers.js +32 -0
- package/schematics/ng-update/migrate-split-collapse.js +276 -0
- package/schematics/ng-update/migrate-split-scale.js +524 -0
- package/schematics/ng-update/migrate-split-sizes.js +107 -0
- package/schematics/ng-update/migrate-to-v51.js +35 -0
- package/schematics/utils/index.js +1 -0
- package/schematics/utils/template-edit-utils.js +35 -0
- package/schematics/utils/template-utils.js +31 -45
- package/source-chip/package.json +4 -0
- package/template-i18n.json +78 -47
- package/types/siemens-element-ng-application-header.d.ts +7 -33
- package/types/siemens-element-ng-avatar.d.ts +1 -1
- package/types/siemens-element-ng-breadcrumb.d.ts +1 -1
- package/types/siemens-element-ng-chat-messages.d.ts +118 -70
- package/types/siemens-element-ng-circle-status.d.ts +1 -1
- package/types/siemens-element-ng-content-action-bar.d.ts +1 -1
- package/types/siemens-element-ng-dashboard.d.ts +2 -2
- package/types/siemens-element-ng-datatable.d.ts +5 -56
- package/types/siemens-element-ng-date-range-filter.d.ts +1 -1
- package/types/siemens-element-ng-datepicker.d.ts +8 -15
- package/types/siemens-element-ng-electron-titlebar.d.ts +1 -1
- package/types/siemens-element-ng-file-uploader.d.ts +13 -31
- package/types/siemens-element-ng-filter-bar.d.ts +1 -1
- package/types/siemens-element-ng-filtered-search.d.ts +4 -4
- package/types/siemens-element-ng-form.d.ts +183 -44
- package/types/siemens-element-ng-formly-legacy.d.ts +40 -0
- package/types/siemens-element-ng-formly.d.ts +34 -167
- package/types/siemens-element-ng-icon.d.ts +2 -19
- package/types/siemens-element-ng-landing-page.d.ts +2 -2
- package/types/siemens-element-ng-list-details.d.ts +25 -3
- package/types/siemens-element-ng-loading-spinner.d.ts +11 -17
- package/types/siemens-element-ng-main-detail-container.d.ts +23 -3
- package/types/siemens-element-ng-maplibre.d.ts +190 -0
- package/types/siemens-element-ng-markdown-directives-tabs.d.ts +10 -0
- package/types/siemens-element-ng-markdown-extensions-citations.d.ts +11 -0
- package/types/siemens-element-ng-markdown-extensions-katex.d.ts +19 -0
- package/types/siemens-element-ng-markdown-extensions-mermaid.d.ts +11 -0
- package/types/siemens-element-ng-markdown-hightlighter-highlightjs.d.ts +48 -0
- package/types/siemens-element-ng-markdown.d.ts +367 -0
- package/types/siemens-element-ng-menu.d.ts +2 -0
- package/types/siemens-element-ng-navbar-vertical-next.d.ts +87 -39
- package/types/siemens-element-ng-navbar-vertical.d.ts +1 -1
- package/types/siemens-element-ng-navbar.d.ts +3 -3
- package/types/siemens-element-ng-notification-item.d.ts +12 -0
- package/types/siemens-element-ng-phone-number.d.ts +28 -10
- package/types/siemens-element-ng-photo-upload.d.ts +4 -4
- package/types/siemens-element-ng-resize-observer.d.ts +0 -17
- package/types/siemens-element-ng-search-bar.d.ts +2 -9
- package/types/siemens-element-ng-select.d.ts +32 -5
- package/types/siemens-element-ng-side-panel.d.ts +25 -11
- package/types/siemens-element-ng-source-chip.d.ts +53 -0
- package/types/siemens-element-ng-split.d.ts +101 -78
- package/types/siemens-element-ng-status-bar.d.ts +5 -13
- package/types/siemens-element-ng-status-counter.d.ts +1 -1
- package/types/siemens-element-ng-system-banner.d.ts +2 -2
- package/types/siemens-element-ng-tabs.d.ts +1 -2
- package/types/siemens-element-ng-theme.d.ts +12 -2
- package/types/siemens-element-ng-threshold.d.ts +1 -1
- package/types/siemens-element-ng-toast-notification.d.ts +0 -1
- package/types/siemens-element-ng-tooltip.d.ts +7 -7
- package/types/siemens-element-ng-translate.d.ts +35 -5
- package/types/siemens-element-ng-tree-view.d.ts +3 -0
- package/types/siemens-element-ng-wizard.d.ts +18 -3
- package/fesm2022/siemens-element-ng-icon-status.mjs +0 -46
- package/fesm2022/siemens-element-ng-icon-status.mjs.map +0 -1
- package/fesm2022/siemens-element-ng-markdown-renderer.mjs +0 -263
- package/fesm2022/siemens-element-ng-markdown-renderer.mjs.map +0 -1
- package/fesm2022/siemens-element-ng-sort-bar.mjs +0 -99
- package/fesm2022/siemens-element-ng-sort-bar.mjs.map +0 -1
- package/icon-status/package.json +0 -4
- package/markdown-renderer/package.json +0 -4
- package/schematics/migrations/icon-path-migration/icon-path-migration.js +0 -95
- package/schematics/ng-update/migrate-to-v49.js +0 -21
- package/schematics/vitest-setup.js +0 -5
- package/sort-bar/package.json +0 -4
- package/types/siemens-element-ng-icon-status.d.ts +0 -25
- package/types/siemens-element-ng-markdown-renderer.d.ts +0 -36
- package/types/siemens-element-ng-sort-bar.d.ts +0 -59
- /package/{LICENSE.md → LICENSE} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import { calculateOverlayArrowPosition, getOverlay, getPositionStrategy, defaultConnectedOverlayScrollStrategy } from '@siemens/element-ng/common';
|
|
2
|
+
import { input, signal, inject, ElementRef, afterRenderEffect, computed, TemplateRef, ChangeDetectionStrategy, Component, DestroyRef, effect, Injector, inputBinding, PLATFORM_ID, Injectable, booleanAttribute, Directive, NgModule } from '@angular/core';
|
|
3
|
+
import { calculateOverlayArrowPosition, getOverlay, getPositionStrategy, getOverlayPositions, defaultConnectedOverlayScrollStrategy } from '@siemens/element-ng/common';
|
|
4
4
|
import { OverlayRef, Overlay } from '@angular/cdk/overlay';
|
|
5
5
|
import { ComponentPortal } from '@angular/cdk/portal';
|
|
6
6
|
import { NgTemplateOutlet, NgComponentOutlet, isPlatformBrowser } from '@angular/common';
|
|
@@ -8,20 +8,24 @@ import { Subject, fromEvent, timer } from 'rxjs';
|
|
|
8
8
|
import { filter, takeUntil, delayWhen } from 'rxjs/operators';
|
|
9
9
|
import { SiTranslatePipe } from '@siemens/element-translate-ng/translate';
|
|
10
10
|
|
|
11
|
-
/**
|
|
12
|
-
* Copyright (c) Siemens 2016 - 2026
|
|
13
|
-
* SPDX-License-Identifier: MIT
|
|
14
|
-
*/
|
|
15
|
-
const SI_TOOLTIP_CONFIG = new InjectionToken('SiTooltipConfig');
|
|
16
|
-
|
|
17
11
|
/**
|
|
18
12
|
* Copyright (c) Siemens 2016 - 2026
|
|
19
13
|
* SPDX-License-Identifier: MIT
|
|
20
14
|
*/
|
|
21
15
|
class TooltipComponent {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
/** ID assigned to the tooltip element. */
|
|
17
|
+
id = input(/* @ts-ignore */
|
|
18
|
+
...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
|
|
19
|
+
/** Content rendered by the tooltip. */
|
|
20
|
+
tooltip = input(/* @ts-ignore */
|
|
21
|
+
...(ngDevMode ? [undefined, { debugName: "tooltip" }] : /* istanbul ignore next */ []));
|
|
22
|
+
/** Context passed to tooltip template content. */
|
|
23
|
+
tooltipContext = input(/* @ts-ignore */
|
|
24
|
+
...(ngDevMode ? [undefined, { debugName: "tooltipContext" }] : /* istanbul ignore next */ []));
|
|
25
|
+
tooltipPositionClass = signal('', /* @ts-ignore */
|
|
26
|
+
...(ngDevMode ? [{ debugName: "tooltipPositionClass" }] : /* istanbul ignore next */ []));
|
|
27
|
+
arrowPos = signal(undefined, /* @ts-ignore */
|
|
28
|
+
...(ngDevMode ? [{ debugName: "arrowPos" }] : /* istanbul ignore next */ []));
|
|
25
29
|
elementRef = inject(ElementRef);
|
|
26
30
|
overlayRef = inject(OverlayRef);
|
|
27
31
|
lastPositionChange;
|
|
@@ -29,8 +33,8 @@ class TooltipComponent {
|
|
|
29
33
|
constructor() {
|
|
30
34
|
let isFirstRun = true;
|
|
31
35
|
afterRenderEffect(() => {
|
|
32
|
-
this.
|
|
33
|
-
this.
|
|
36
|
+
this.tooltip();
|
|
37
|
+
this.tooltipContext();
|
|
34
38
|
if (isFirstRun) {
|
|
35
39
|
isFirstRun = false;
|
|
36
40
|
return;
|
|
@@ -42,7 +46,7 @@ class TooltipComponent {
|
|
|
42
46
|
});
|
|
43
47
|
}
|
|
44
48
|
tooltipText = computed(() => {
|
|
45
|
-
const tooltip = this.
|
|
49
|
+
const tooltip = this.tooltip();
|
|
46
50
|
if (typeof tooltip === 'string') {
|
|
47
51
|
return tooltip;
|
|
48
52
|
}
|
|
@@ -53,19 +57,22 @@ class TooltipComponent {
|
|
|
53
57
|
return tooltip.nativeElement.textContent.trim();
|
|
54
58
|
}
|
|
55
59
|
return null;
|
|
56
|
-
},
|
|
60
|
+
}, /* @ts-ignore */
|
|
61
|
+
...(ngDevMode ? [{ debugName: "tooltipText" }] : /* istanbul ignore next */ []));
|
|
57
62
|
tooltipTemplate = computed(() => {
|
|
58
|
-
const tooltip = this.
|
|
63
|
+
const tooltip = this.tooltip();
|
|
59
64
|
return tooltip instanceof TemplateRef ? tooltip : null;
|
|
60
|
-
},
|
|
65
|
+
}, /* @ts-ignore */
|
|
66
|
+
...(ngDevMode ? [{ debugName: "tooltipTemplate" }] : /* istanbul ignore next */ []));
|
|
61
67
|
tooltipComponent = computed(() => {
|
|
62
|
-
const tooltip = this.
|
|
68
|
+
const tooltip = this.tooltip();
|
|
63
69
|
return !(tooltip instanceof TemplateRef) &&
|
|
64
70
|
!(tooltip instanceof ElementRef) &&
|
|
65
71
|
typeof tooltip !== 'string'
|
|
66
72
|
? tooltip
|
|
67
73
|
: null;
|
|
68
|
-
},
|
|
74
|
+
}, /* @ts-ignore */
|
|
75
|
+
...(ngDevMode ? [{ debugName: "tooltipComponent" }] : /* istanbul ignore next */ []));
|
|
69
76
|
/** @internal */
|
|
70
77
|
updateTooltipPosition(change, anchor) {
|
|
71
78
|
this.lastPositionChange = change;
|
|
@@ -78,15 +85,15 @@ class TooltipComponent {
|
|
|
78
85
|
const arrowPos = calculateOverlayArrowPosition(change, this.elementRef, anchor);
|
|
79
86
|
this.arrowPos.set(arrowPos);
|
|
80
87
|
}
|
|
81
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
82
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
88
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
89
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: TooltipComponent, isStandalone: true, selector: "si-tooltip", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, tooltipContext: { classPropertyName: "tooltipContext", publicName: "tooltipContext", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "animate.leave": "tooltip-leave" } }, ngImport: i0, template: "<div\n class=\"tooltip show position-relative\"\n role=\"tooltip\"\n [id]=\"id()\"\n [class]=\"tooltipPositionClass()\"\n>\n <div\n class=\"tooltip-arrow\"\n [style.left.px]=\"arrowPos()?.left\"\n [style.right.px]=\"arrowPos()?.right\"\n ></div>\n <div class=\"tooltip-inner\">\n @if (tooltipText()) {\n <div class=\"si-body\">{{ tooltipText() | translate }}</div>\n } @else if (tooltipTemplate()) {\n <ng-template\n [ngTemplateOutlet]=\"tooltipTemplate()\"\n [ngTemplateOutletContext]=\"tooltipContext()\"\n />\n } @else if (tooltipComponent()) {\n <ng-container [ngComponentOutlet]=\"tooltipComponent()!\" />\n }\n </div>\n</div>\n", styles: [":host .tooltip,:host{transition:opacity calc(.15s * var(--element-animations-enabled, 1)) ease-out,transform calc(.15s * var(--element-animations-enabled, 1)) ease-out}:host{opacity:1;transform:scale(1)}:host.tooltip-leave{opacity:0;transform:scale(.8)}@starting-style{:host .tooltip{opacity:0;transform:scale(.8)}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
83
90
|
}
|
|
84
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TooltipComponent, decorators: [{
|
|
85
92
|
type: Component,
|
|
86
|
-
args: [{ selector: 'si-tooltip', imports: [NgTemplateOutlet, SiTranslatePipe, NgComponentOutlet], changeDetection: ChangeDetectionStrategy.
|
|
93
|
+
args: [{ selector: 'si-tooltip', imports: [NgTemplateOutlet, SiTranslatePipe, NgComponentOutlet], changeDetection: ChangeDetectionStrategy.Eager, host: {
|
|
87
94
|
'animate.leave': 'tooltip-leave'
|
|
88
|
-
}, template: "<div\n class=\"tooltip show position-relative\"\n role=\"tooltip\"\n [id]=\"
|
|
89
|
-
}], ctorParameters: () => [] });
|
|
95
|
+
}, template: "<div\n class=\"tooltip show position-relative\"\n role=\"tooltip\"\n [id]=\"id()\"\n [class]=\"tooltipPositionClass()\"\n>\n <div\n class=\"tooltip-arrow\"\n [style.left.px]=\"arrowPos()?.left\"\n [style.right.px]=\"arrowPos()?.right\"\n ></div>\n <div class=\"tooltip-inner\">\n @if (tooltipText()) {\n <div class=\"si-body\">{{ tooltipText() | translate }}</div>\n } @else if (tooltipTemplate()) {\n <ng-template\n [ngTemplateOutlet]=\"tooltipTemplate()\"\n [ngTemplateOutletContext]=\"tooltipContext()\"\n />\n } @else if (tooltipComponent()) {\n <ng-container [ngComponentOutlet]=\"tooltipComponent()!\" />\n }\n </div>\n</div>\n", styles: [":host .tooltip,:host{transition:opacity calc(.15s * var(--element-animations-enabled, 1)) ease-out,transform calc(.15s * var(--element-animations-enabled, 1)) ease-out}:host{opacity:1;transform:scale(1)}:host.tooltip-leave{opacity:0;transform:scale(.8)}@starting-style{:host .tooltip{opacity:0;transform:scale(.8)}}\n"] }]
|
|
96
|
+
}], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], tooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip", required: false }] }], tooltipContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipContext", required: false }] }] } });
|
|
90
97
|
|
|
91
98
|
/**
|
|
92
99
|
* Copyright (c) Siemens 2016 - 2026
|
|
@@ -108,14 +115,24 @@ class NoopTooltipRef {
|
|
|
108
115
|
*/
|
|
109
116
|
class BrowserTooltipRef {
|
|
110
117
|
config;
|
|
118
|
+
destroyRef = inject(DestroyRef);
|
|
111
119
|
destroy$ = new Subject();
|
|
112
120
|
isFocused = false;
|
|
113
121
|
isHovered = false;
|
|
114
122
|
overlayRef;
|
|
115
123
|
positionSubscription;
|
|
124
|
+
canShowEffect;
|
|
125
|
+
placementEffect;
|
|
116
126
|
constructor(config) {
|
|
117
127
|
this.config = config;
|
|
118
128
|
const nativeElement = this.config.element.nativeElement;
|
|
129
|
+
this.destroyRef.onDestroy(() => this.destroy());
|
|
130
|
+
if (this.config.canShow) {
|
|
131
|
+
this.canShowEffect = effect(() => this.updateCanShow(), /* @ts-ignore */
|
|
132
|
+
...(ngDevMode ? [{ debugName: "canShowEffect" }] : /* istanbul ignore next */ []));
|
|
133
|
+
}
|
|
134
|
+
this.placementEffect = effect(() => this.updatePlacement(this.config.placement()), /* @ts-ignore */
|
|
135
|
+
...(ngDevMode ? [{ debugName: "placementEffect" }] : /* istanbul ignore next */ []));
|
|
119
136
|
fromEvent(nativeElement, 'focus')
|
|
120
137
|
.pipe(filter(event => event instanceof FocusEvent), takeUntil(this.destroy$))
|
|
121
138
|
.subscribe(event => this.onFocus(event));
|
|
@@ -134,11 +151,22 @@ class BrowserTooltipRef {
|
|
|
134
151
|
fromEvent(nativeElement, 'touchstart')
|
|
135
152
|
.pipe(takeUntil(this.destroy$))
|
|
136
153
|
.subscribe(() => this.onTouchStart());
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
154
|
+
this.showForCurrentInteraction();
|
|
155
|
+
}
|
|
156
|
+
updateCanShow() {
|
|
157
|
+
if (!this.config.canShow()) {
|
|
158
|
+
this.isFocused = false;
|
|
159
|
+
this.isHovered = false;
|
|
160
|
+
this.hide();
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
this.showForCurrentInteraction();
|
|
164
|
+
}
|
|
165
|
+
showForCurrentInteraction() {
|
|
166
|
+
const nativeElement = this.config.element.nativeElement;
|
|
167
|
+
// The tooltip may become eligible after the element is already focused or
|
|
168
|
+
// hovered (e.g. validation errors appear on blur while the pointer still
|
|
169
|
+
// hovers the element). In that case show it based on the live interaction state.
|
|
142
170
|
if (nativeElement === document.activeElement && nativeElement.matches(':focus-visible')) {
|
|
143
171
|
this.isFocused = true;
|
|
144
172
|
this.show();
|
|
@@ -176,10 +204,13 @@ class BrowserTooltipRef {
|
|
|
176
204
|
this.hide();
|
|
177
205
|
}
|
|
178
206
|
getOrCreateOverlay() {
|
|
179
|
-
this.overlayRef ??= getOverlay(this.config.element, this.config.overlay, false, this.
|
|
207
|
+
this.overlayRef ??= getOverlay(this.config.element, this.config.overlay, false, this.getPlacement(), false, true, this.config.scrollStrategy?.());
|
|
180
208
|
return this.overlayRef;
|
|
181
209
|
}
|
|
182
210
|
show() {
|
|
211
|
+
if (this.config.canShow && !this.config.canShow()) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
183
214
|
const overlayRef = this.getOrCreateOverlay();
|
|
184
215
|
if (overlayRef.hasAttached()) {
|
|
185
216
|
return;
|
|
@@ -188,12 +219,26 @@ class BrowserTooltipRef {
|
|
|
188
219
|
parent: this.config.injector,
|
|
189
220
|
providers: [{ provide: OverlayRef, useValue: overlayRef }]
|
|
190
221
|
});
|
|
191
|
-
const toolTipPortal = new ComponentPortal(TooltipComponent, undefined, injector
|
|
222
|
+
const toolTipPortal = new ComponentPortal(TooltipComponent, undefined, injector, undefined, [
|
|
223
|
+
inputBinding('id', () => this.config.describedBy),
|
|
224
|
+
inputBinding('tooltip', this.config.tooltip),
|
|
225
|
+
inputBinding('tooltipContext', this.config.tooltipContext)
|
|
226
|
+
]);
|
|
192
227
|
const tooltipRef = overlayRef.attach(toolTipPortal);
|
|
193
228
|
const positionStrategy = getPositionStrategy(overlayRef);
|
|
194
229
|
this.positionSubscription?.unsubscribe();
|
|
195
230
|
this.positionSubscription = positionStrategy?.positionChanges.subscribe(change => tooltipRef.instance.updateTooltipPosition(change, this.config.element));
|
|
196
231
|
}
|
|
232
|
+
getPlacement() {
|
|
233
|
+
return this.config.placement();
|
|
234
|
+
}
|
|
235
|
+
updatePlacement(placement) {
|
|
236
|
+
const positionStrategy = this.overlayRef && getPositionStrategy(this.overlayRef);
|
|
237
|
+
if (positionStrategy) {
|
|
238
|
+
positionStrategy.withPositions(getOverlayPositions(this.config.element, placement));
|
|
239
|
+
this.overlayRef?.updatePosition();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
197
242
|
hide() {
|
|
198
243
|
if (this.isFocused || this.isHovered) {
|
|
199
244
|
return;
|
|
@@ -204,6 +249,8 @@ class BrowserTooltipRef {
|
|
|
204
249
|
destroy() {
|
|
205
250
|
this.destroy$.next();
|
|
206
251
|
this.destroy$.complete();
|
|
252
|
+
this.canShowEffect?.destroy();
|
|
253
|
+
this.placementEffect?.destroy();
|
|
207
254
|
this.overlayRef?.dispose();
|
|
208
255
|
this.positionSubscription?.unsubscribe();
|
|
209
256
|
}
|
|
@@ -223,29 +270,15 @@ class SiTooltipService {
|
|
|
223
270
|
if (!this.isBrowser) {
|
|
224
271
|
return new NoopTooltipRef();
|
|
225
272
|
}
|
|
226
|
-
const injector = Injector.create({
|
|
227
|
-
parent: config.injector,
|
|
228
|
-
providers: [
|
|
229
|
-
{
|
|
230
|
-
provide: SI_TOOLTIP_CONFIG,
|
|
231
|
-
useValue: {
|
|
232
|
-
id: config.describedBy,
|
|
233
|
-
tooltip: config.tooltip,
|
|
234
|
-
tooltipContext: config.tooltipContext
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
]
|
|
238
|
-
});
|
|
239
273
|
return new BrowserTooltipRef({
|
|
240
274
|
...config,
|
|
241
|
-
injector,
|
|
242
275
|
overlay: this.overlay
|
|
243
276
|
});
|
|
244
277
|
}
|
|
245
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
246
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
278
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTooltipService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
279
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTooltipService });
|
|
247
280
|
}
|
|
248
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
281
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTooltipService, decorators: [{
|
|
249
282
|
type: Injectable
|
|
250
283
|
}] });
|
|
251
284
|
|
|
@@ -260,60 +293,53 @@ class SiTooltipDirective {
|
|
|
260
293
|
*
|
|
261
294
|
* @defaultValue ''
|
|
262
295
|
*/
|
|
263
|
-
siTooltip = input('',
|
|
296
|
+
siTooltip = input('', /* @ts-ignore */
|
|
297
|
+
...(ngDevMode ? [{ debugName: "siTooltip" }] : /* istanbul ignore next */ []));
|
|
264
298
|
/**
|
|
265
299
|
* The placement of the tooltip. One of 'top', 'start', end', 'bottom'
|
|
266
300
|
*
|
|
267
301
|
* @defaultValue 'auto'
|
|
268
302
|
*/
|
|
269
|
-
placement = input('auto',
|
|
303
|
+
placement = input('auto', /* @ts-ignore */
|
|
304
|
+
...(ngDevMode ? [{ debugName: "placement" }] : /* istanbul ignore next */ []));
|
|
270
305
|
/**
|
|
271
306
|
* Allows the tooltip to be disabled
|
|
272
307
|
*
|
|
273
308
|
* @defaultValue false
|
|
274
309
|
*/
|
|
275
|
-
isDisabled = input(false, { ...(ngDevMode ? { debugName: "isDisabled" } : {}), transform: booleanAttribute });
|
|
310
|
+
isDisabled = input(false, { ...(ngDevMode ? { debugName: "isDisabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
276
311
|
/**
|
|
277
312
|
* CDK scroll strategy used for the tooltip overlay.
|
|
278
313
|
*
|
|
279
314
|
* @defaultValue defaultConnectedOverlayScrollStrategy()
|
|
280
315
|
*/
|
|
281
|
-
tooltipScrollStrategy = input(defaultConnectedOverlayScrollStrategy(),
|
|
316
|
+
tooltipScrollStrategy = input(defaultConnectedOverlayScrollStrategy(), /* @ts-ignore */
|
|
317
|
+
...(ngDevMode ? [{ debugName: "tooltipScrollStrategy" }] : /* istanbul ignore next */ []));
|
|
282
318
|
/**
|
|
283
319
|
* The context for the attached template
|
|
284
320
|
*/
|
|
285
|
-
tooltipContext = input(
|
|
321
|
+
tooltipContext = input(/* @ts-ignore */
|
|
322
|
+
...(ngDevMode ? [undefined, { debugName: "tooltipContext" }] : /* istanbul ignore next */ []));
|
|
286
323
|
describedBy = `__tooltip_${SiTooltipDirective.idCounter++}`;
|
|
287
|
-
|
|
324
|
+
canShow = computed(() => !!this.siTooltip() && !this.isDisabled(), /* @ts-ignore */
|
|
325
|
+
...(ngDevMode ? [{ debugName: "canShow" }] : /* istanbul ignore next */ []));
|
|
288
326
|
tooltipService = inject(SiTooltipService);
|
|
289
327
|
elementRef = inject(ElementRef);
|
|
290
328
|
constructor() {
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
tooltip: this.siTooltip,
|
|
300
|
-
tooltipContext: this.tooltipContext,
|
|
301
|
-
scrollStrategy: this.tooltipScrollStrategy
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
else if (this.tooltipRef) {
|
|
305
|
-
this.tooltipRef.destroy();
|
|
306
|
-
this.tooltipRef = undefined;
|
|
307
|
-
}
|
|
329
|
+
this.tooltipService.createTooltip({
|
|
330
|
+
describedBy: this.describedBy,
|
|
331
|
+
element: this.elementRef,
|
|
332
|
+
placement: this.placement,
|
|
333
|
+
canShow: this.canShow,
|
|
334
|
+
tooltip: this.siTooltip,
|
|
335
|
+
tooltipContext: this.tooltipContext,
|
|
336
|
+
scrollStrategy: this.tooltipScrollStrategy
|
|
308
337
|
});
|
|
309
338
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
}
|
|
313
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
314
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.8", type: SiTooltipDirective, isStandalone: true, selector: "[siTooltip]", inputs: { siTooltip: { classPropertyName: "siTooltip", publicName: "siTooltip", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, tooltipScrollStrategy: { classPropertyName: "tooltipScrollStrategy", publicName: "tooltipScrollStrategy", isSignal: true, isRequired: false, transformFunction: null }, tooltipContext: { classPropertyName: "tooltipContext", publicName: "tooltipContext", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-describedby": "isDisabled() ? null : describedBy" } }, providers: [SiTooltipService], ngImport: i0 });
|
|
339
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
340
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: SiTooltipDirective, isStandalone: true, selector: "[siTooltip]", inputs: { siTooltip: { classPropertyName: "siTooltip", publicName: "siTooltip", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, tooltipScrollStrategy: { classPropertyName: "tooltipScrollStrategy", publicName: "tooltipScrollStrategy", isSignal: true, isRequired: false, transformFunction: null }, tooltipContext: { classPropertyName: "tooltipContext", publicName: "tooltipContext", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-describedby": "isDisabled() ? null : describedBy" } }, providers: [SiTooltipService], ngImport: i0 });
|
|
315
341
|
}
|
|
316
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
342
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTooltipDirective, decorators: [{
|
|
317
343
|
type: Directive,
|
|
318
344
|
args: [{
|
|
319
345
|
selector: '[siTooltip]',
|
|
@@ -329,11 +355,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
|
|
|
329
355
|
* SPDX-License-Identifier: MIT
|
|
330
356
|
*/
|
|
331
357
|
class SiTooltipModule {
|
|
332
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
333
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
334
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
358
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
359
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: SiTooltipModule, imports: [SiTooltipDirective], exports: [SiTooltipDirective] });
|
|
360
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTooltipModule });
|
|
335
361
|
}
|
|
336
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
362
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTooltipModule, decorators: [{
|
|
337
363
|
type: NgModule,
|
|
338
364
|
args: [{
|
|
339
365
|
imports: [SiTooltipDirective],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-tooltip.mjs","sources":["../../../../projects/element-ng/tooltip/si-tooltip.model.ts","../../../../projects/element-ng/tooltip/si-tooltip.component.ts","../../../../projects/element-ng/tooltip/si-tooltip.component.html","../../../../projects/element-ng/tooltip/si-tooltip.service.ts","../../../../projects/element-ng/tooltip/si-tooltip.directive.ts","../../../../projects/element-ng/tooltip/si-tooltip.module.ts","../../../../projects/element-ng/tooltip/index.ts","../../../../projects/element-ng/tooltip/siemens-element-ng-tooltip.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ElementRef, InjectionToken, TemplateRef, Type } from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nexport type SiTooltipContent =\n | TranslatableString\n | TemplateRef<any>\n | Type<any>\n | ElementRef<Element>\n | null\n | undefined;\n\nexport interface SiTooltipConfig {\n id?: string;\n tooltip: () => SiTooltipContent;\n tooltipContext: () => unknown;\n}\n\nexport const SI_TOOLTIP_CONFIG = new InjectionToken<SiTooltipConfig>('SiTooltipConfig');\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ConnectedOverlayPositionChange, OverlayRef } from '@angular/cdk/overlay';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n signal,\n TemplateRef\n} from '@angular/core';\nimport { calculateOverlayArrowPosition, OverlayArrowPosition } from '@siemens/element-ng/common';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SI_TOOLTIP_CONFIG } from './si-tooltip.model';\n\n@Component({\n selector: 'si-tooltip',\n imports: [NgTemplateOutlet, SiTranslatePipe, NgComponentOutlet],\n templateUrl: './si-tooltip.component.html',\n styleUrl: './si-tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.Default,\n host: {\n 'animate.leave': 'tooltip-leave'\n }\n})\nexport class TooltipComponent {\n protected readonly tooltipPositionClass = signal('');\n protected readonly arrowPos = signal<OverlayArrowPosition | undefined>(undefined);\n\n protected readonly config = inject(SI_TOOLTIP_CONFIG);\n private readonly elementRef = inject(ElementRef);\n private readonly overlayRef = inject(OverlayRef);\n\n private lastPositionChange?: ConnectedOverlayPositionChange;\n private lastAnchor?: ElementRef;\n\n constructor() {\n let isFirstRun = true;\n afterRenderEffect(() => {\n this.config.tooltip();\n this.config.tooltipContext();\n if (isFirstRun) {\n isFirstRun = false;\n return;\n }\n this.overlayRef.updatePosition();\n if (this.lastPositionChange) {\n this.updateTooltipPosition(this.lastPositionChange, this.lastAnchor);\n }\n });\n }\n\n protected readonly tooltipText = computed<string | null>(() => {\n const tooltip = this.config.tooltip();\n if (typeof tooltip === 'string') {\n return tooltip;\n }\n // When an ElementRef is provided, read its current text content whenever the\n // tooltip is shown, so dynamic content is always reflected.\n // The tooltip content is not updated while being displayed.\n if (tooltip instanceof ElementRef) {\n return tooltip.nativeElement.textContent.trim();\n }\n return null;\n });\n\n protected readonly tooltipTemplate = computed<TemplateRef<any> | null>(() => {\n const tooltip = this.config.tooltip();\n return tooltip instanceof TemplateRef ? tooltip : null;\n });\n\n protected readonly tooltipComponent = computed(() => {\n const tooltip = this.config.tooltip();\n return !(tooltip instanceof TemplateRef) &&\n !(tooltip instanceof ElementRef) &&\n typeof tooltip !== 'string'\n ? tooltip\n : null;\n });\n\n /** @internal */\n updateTooltipPosition(change: ConnectedOverlayPositionChange, anchor?: ElementRef): void {\n this.lastPositionChange = change;\n this.lastAnchor = anchor;\n const arrowClassTooltip = `tooltip-${change.connectionPair.overlayX}-${change.connectionPair.overlayY}`;\n // need two updates as class changes affect the position\n if (arrowClassTooltip !== this.tooltipPositionClass()) {\n this.tooltipPositionClass.set(arrowClassTooltip);\n }\n const arrowPos = calculateOverlayArrowPosition(change, this.elementRef, anchor);\n this.arrowPos.set(arrowPos);\n }\n}\n","<div\n class=\"tooltip show position-relative\"\n role=\"tooltip\"\n [id]=\"config.id\"\n [class]=\"tooltipPositionClass()\"\n>\n <div\n class=\"tooltip-arrow\"\n [style.left.px]=\"arrowPos()?.left\"\n [style.right.px]=\"arrowPos()?.right\"\n ></div>\n <div class=\"tooltip-inner\">\n @if (tooltipText()) {\n <div class=\"si-body\">{{ tooltipText() | translate }}</div>\n } @else if (tooltipTemplate()) {\n <ng-template\n [ngTemplateOutlet]=\"tooltipTemplate()\"\n [ngTemplateOutletContext]=\"config.tooltipContext()\"\n />\n } @else if (tooltipComponent()) {\n <ng-container [ngComponentOutlet]=\"tooltipComponent()!\" />\n }\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Overlay, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { isPlatformBrowser } from '@angular/common';\nimport { ComponentRef, ElementRef, inject, Injectable, Injector, PLATFORM_ID } from '@angular/core';\nimport { getOverlay, getPositionStrategy, positions } from '@siemens/element-ng/common';\nimport { fromEvent, Subject, Subscription, timer } from 'rxjs';\nimport { delayWhen, filter, takeUntil } from 'rxjs/operators';\n\nimport { TooltipComponent } from './si-tooltip.component';\nimport { SI_TOOLTIP_CONFIG, SiTooltipContent } from './si-tooltip.model';\n\n/** @internal */\ninterface TooltipRef {\n destroy(): void;\n}\n\n/**\n * A no-op TooltipRef used on platform server where DOM APIs are unavailable.\n *\n * @internal\n */\nclass NoopTooltipRef {\n destroy(): void {}\n}\n\n/**\n * BrowserTooltipRef is attached to a specific element.\n * Use it to show or hide a tooltip for that element.\n *\n * @internal\n */\nclass BrowserTooltipRef {\n private readonly destroy$ = new Subject<void>();\n private isFocused = false;\n private isHovered = false;\n private overlayRef?: OverlayRef;\n private positionSubscription?: Subscription;\n\n constructor(\n private config: {\n describedBy?: string;\n element: ElementRef;\n injector?: Injector;\n overlay: Overlay;\n placement: keyof typeof positions;\n scrollStrategy?: () => ScrollStrategy | undefined;\n tooltip: () => SiTooltipContent;\n tooltipContext: () => unknown;\n }\n ) {\n const nativeElement = this.config.element.nativeElement;\n\n fromEvent(nativeElement, 'focus')\n .pipe(\n filter(event => event instanceof FocusEvent),\n takeUntil(this.destroy$)\n )\n .subscribe(event => this.onFocus(event));\n\n fromEvent(nativeElement, 'mouseenter')\n .pipe(\n delayWhen(() =>\n // UX Guideline: tooltips on hover should be delayed by 500ms\n timer(500).pipe(\n takeUntil(fromEvent(nativeElement, 'mouseleave')),\n takeUntil(fromEvent(nativeElement, 'focusout')) // user started using keyboard\n )\n ),\n takeUntil(this.destroy$)\n )\n .subscribe(() => this.onMouseEnter());\n\n fromEvent(nativeElement, 'focusout')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onFocusOut());\n\n fromEvent(nativeElement, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onMouseLeave());\n\n fromEvent(nativeElement, 'touchstart')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onTouchStart());\n\n // The tooltip may be created lazily, after the element is already focused or\n // hovered (e.g. when validation errors appear on blur while the pointer still\n // hovers the element). In that case the initial `focus`/`mouseenter` was\n // missed, so show the tooltip immediately based on the live `:focus-visible`\n // and `:hover` state.\n if (nativeElement === document.activeElement && nativeElement.matches(':focus-visible')) {\n this.isFocused = true;\n this.show();\n } else if (nativeElement.matches(':hover')) {\n this.onMouseEnter();\n }\n }\n\n private onFocus(event: FocusEvent): void {\n if (event.target instanceof Element) {\n if (event.target.matches(':focus-visible')) {\n this.isFocused = true;\n this.show();\n }\n }\n }\n\n private onFocusOut(): void {\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n }\n\n private onMouseEnter(): void {\n this.isHovered = true;\n this.show();\n }\n\n private onMouseLeave(): void {\n this.isHovered = false;\n this.hide();\n }\n\n private onTouchStart(): void {\n // On touch devices a tooltip is not useful and would obscure the content the\n // user just tapped. Reset the hover/focus state so it is hidden immediately.\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n }\n\n private getOrCreateOverlay(): OverlayRef {\n this.overlayRef ??= getOverlay(\n this.config.element,\n this.config.overlay,\n false,\n this.config.placement,\n false,\n true,\n this.config.scrollStrategy?.()\n );\n return this.overlayRef;\n }\n\n private show(): void {\n const overlayRef = this.getOrCreateOverlay();\n if (overlayRef.hasAttached()) {\n return;\n }\n\n const injector = Injector.create({\n parent: this.config.injector,\n providers: [{ provide: OverlayRef, useValue: overlayRef }]\n });\n\n const toolTipPortal = new ComponentPortal(TooltipComponent, undefined, injector);\n const tooltipRef: ComponentRef<TooltipComponent> = overlayRef.attach(toolTipPortal);\n\n const positionStrategy = getPositionStrategy(overlayRef);\n this.positionSubscription?.unsubscribe();\n this.positionSubscription = positionStrategy?.positionChanges.subscribe(change =>\n tooltipRef.instance.updateTooltipPosition(change, this.config.element)\n );\n }\n\n private hide(): void {\n if (this.isFocused || this.isHovered) {\n return;\n }\n this.overlayRef?.detach();\n this.positionSubscription?.unsubscribe();\n }\n\n destroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.overlayRef?.dispose();\n this.positionSubscription?.unsubscribe();\n }\n}\n\n/**\n * A service to create tooltips for specific elements.\n * Use this if the tooltip directive is not suitable.\n * Must not be used outside element-ng.\n *\n * @internal\n */\n// We cannot provide this in root, as people may override the cdk overlay creation.\n@Injectable()\nexport class SiTooltipService {\n private overlay = inject(Overlay);\n private isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n createTooltip(config: {\n describedBy?: string;\n element: ElementRef;\n placement: keyof typeof positions;\n injector?: Injector;\n tooltip: () => SiTooltipContent;\n tooltipContext: () => unknown;\n scrollStrategy?: () => ScrollStrategy | undefined;\n }): TooltipRef {\n if (!this.isBrowser) {\n return new NoopTooltipRef();\n }\n\n const injector = Injector.create({\n parent: config.injector,\n providers: [\n {\n provide: SI_TOOLTIP_CONFIG,\n useValue: {\n id: config.describedBy,\n tooltip: config.tooltip,\n tooltipContext: config.tooltipContext\n }\n }\n ]\n });\n\n return new BrowserTooltipRef({\n ...config,\n injector,\n overlay: this.overlay\n });\n }\n}\n\nexport type { TooltipRef };\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n TemplateRef\n} from '@angular/core';\nimport { defaultConnectedOverlayScrollStrategy, positions } from '@siemens/element-ng/common';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiTooltipService, TooltipRef } from './si-tooltip.service';\n\n@Directive({\n selector: '[siTooltip]',\n providers: [SiTooltipService],\n host: {\n '[attr.aria-describedby]': 'isDisabled() ? null : describedBy'\n }\n})\nexport class SiTooltipDirective implements OnDestroy {\n private static idCounter = 0;\n\n /**\n * The tooltip text to be displayed\n *\n * @defaultValue ''\n */\n readonly siTooltip = input<TranslatableString | TemplateRef<any>>('');\n\n /**\n * The placement of the tooltip. One of 'top', 'start', end', 'bottom'\n *\n * @defaultValue 'auto'\n */\n readonly placement = input<keyof typeof positions>('auto');\n\n /**\n * Allows the tooltip to be disabled\n *\n * @defaultValue false\n */\n readonly isDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * CDK scroll strategy used for the tooltip overlay.\n *\n * @defaultValue defaultConnectedOverlayScrollStrategy()\n */\n readonly tooltipScrollStrategy = input(defaultConnectedOverlayScrollStrategy());\n\n /**\n * The context for the attached template\n */\n readonly tooltipContext = input();\n\n protected describedBy = `__tooltip_${SiTooltipDirective.idCounter++}`;\n\n private tooltipRef?: TooltipRef;\n private tooltipService = inject(SiTooltipService);\n private elementRef = inject(ElementRef);\n\n constructor() {\n effect(() => {\n const tooltip = this.siTooltip();\n const disabled = this.isDisabled();\n\n if (tooltip && !disabled) {\n this.tooltipRef ??= this.tooltipService.createTooltip({\n describedBy: this.describedBy,\n element: this.elementRef,\n placement: this.placement(),\n tooltip: this.siTooltip,\n tooltipContext: this.tooltipContext,\n scrollStrategy: this.tooltipScrollStrategy\n });\n } else if (this.tooltipRef) {\n this.tooltipRef.destroy();\n this.tooltipRef = undefined;\n }\n });\n }\n\n ngOnDestroy(): void {\n this.tooltipRef?.destroy();\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiTooltipDirective } from './si-tooltip.directive';\n\n@NgModule({\n imports: [SiTooltipDirective],\n exports: [SiTooltipDirective]\n})\nexport class SiTooltipModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tooltip.module';\nexport * from './si-tooltip.directive';\nexport * from './si-tooltip.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-tooltip.mjs","sources":["../../../../projects/element-ng/tooltip/si-tooltip.component.ts","../../../../projects/element-ng/tooltip/si-tooltip.component.html","../../../../projects/element-ng/tooltip/si-tooltip.service.ts","../../../../projects/element-ng/tooltip/si-tooltip.directive.ts","../../../../projects/element-ng/tooltip/si-tooltip.module.ts","../../../../projects/element-ng/tooltip/index.ts","../../../../projects/element-ng/tooltip/siemens-element-ng-tooltip.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ConnectedOverlayPositionChange, OverlayRef } from '@angular/cdk/overlay';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n signal,\n TemplateRef\n} from '@angular/core';\nimport { calculateOverlayArrowPosition, OverlayArrowPosition } from '@siemens/element-ng/common';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiTooltipContent } from './si-tooltip.model';\n\n@Component({\n selector: 'si-tooltip',\n imports: [NgTemplateOutlet, SiTranslatePipe, NgComponentOutlet],\n templateUrl: './si-tooltip.component.html',\n styleUrl: './si-tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n 'animate.leave': 'tooltip-leave'\n }\n})\nexport class TooltipComponent {\n /** ID assigned to the tooltip element. */\n readonly id = input<string>();\n\n /** Content rendered by the tooltip. */\n readonly tooltip = input<SiTooltipContent>();\n\n /** Context passed to tooltip template content. */\n readonly tooltipContext = input<unknown>();\n\n protected readonly tooltipPositionClass = signal('');\n protected readonly arrowPos = signal<OverlayArrowPosition | undefined>(undefined);\n\n private readonly elementRef = inject(ElementRef);\n private readonly overlayRef = inject(OverlayRef);\n\n private lastPositionChange?: ConnectedOverlayPositionChange;\n private lastAnchor?: ElementRef;\n\n constructor() {\n let isFirstRun = true;\n afterRenderEffect(() => {\n this.tooltip();\n this.tooltipContext();\n if (isFirstRun) {\n isFirstRun = false;\n return;\n }\n this.overlayRef.updatePosition();\n if (this.lastPositionChange) {\n this.updateTooltipPosition(this.lastPositionChange, this.lastAnchor);\n }\n });\n }\n\n protected readonly tooltipText = computed<string | null>(() => {\n const tooltip = this.tooltip();\n if (typeof tooltip === 'string') {\n return tooltip;\n }\n // When an ElementRef is provided, read its current text content whenever the\n // tooltip is shown, so dynamic content is always reflected.\n // The tooltip content is not updated while being displayed.\n if (tooltip instanceof ElementRef) {\n return tooltip.nativeElement.textContent.trim();\n }\n return null;\n });\n\n protected readonly tooltipTemplate = computed<TemplateRef<any> | null>(() => {\n const tooltip = this.tooltip();\n return tooltip instanceof TemplateRef ? tooltip : null;\n });\n\n protected readonly tooltipComponent = computed(() => {\n const tooltip = this.tooltip();\n return !(tooltip instanceof TemplateRef) &&\n !(tooltip instanceof ElementRef) &&\n typeof tooltip !== 'string'\n ? tooltip\n : null;\n });\n\n /** @internal */\n updateTooltipPosition(change: ConnectedOverlayPositionChange, anchor?: ElementRef): void {\n this.lastPositionChange = change;\n this.lastAnchor = anchor;\n const arrowClassTooltip = `tooltip-${change.connectionPair.overlayX}-${change.connectionPair.overlayY}`;\n // need two updates as class changes affect the position\n if (arrowClassTooltip !== this.tooltipPositionClass()) {\n this.tooltipPositionClass.set(arrowClassTooltip);\n }\n const arrowPos = calculateOverlayArrowPosition(change, this.elementRef, anchor);\n this.arrowPos.set(arrowPos);\n }\n}\n","<div\n class=\"tooltip show position-relative\"\n role=\"tooltip\"\n [id]=\"id()\"\n [class]=\"tooltipPositionClass()\"\n>\n <div\n class=\"tooltip-arrow\"\n [style.left.px]=\"arrowPos()?.left\"\n [style.right.px]=\"arrowPos()?.right\"\n ></div>\n <div class=\"tooltip-inner\">\n @if (tooltipText()) {\n <div class=\"si-body\">{{ tooltipText() | translate }}</div>\n } @else if (tooltipTemplate()) {\n <ng-template\n [ngTemplateOutlet]=\"tooltipTemplate()\"\n [ngTemplateOutletContext]=\"tooltipContext()\"\n />\n } @else if (tooltipComponent()) {\n <ng-container [ngComponentOutlet]=\"tooltipComponent()!\" />\n }\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Overlay, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n ComponentRef,\n DestroyRef,\n effect,\n ElementRef,\n EffectRef,\n inject,\n Injectable,\n Injector,\n inputBinding,\n PLATFORM_ID\n} from '@angular/core';\nimport {\n getOverlay,\n getOverlayPositions,\n getPositionStrategy,\n positions\n} from '@siemens/element-ng/common';\nimport { fromEvent, Subject, Subscription, timer } from 'rxjs';\nimport { delayWhen, filter, takeUntil } from 'rxjs/operators';\n\nimport { TooltipComponent } from './si-tooltip.component';\nimport { SiTooltipContent } from './si-tooltip.model';\n\n/** @internal */\ninterface TooltipRef {\n destroy(): void;\n}\n\n/**\n * A no-op TooltipRef used on platform server where DOM APIs are unavailable.\n *\n * @internal\n */\nclass NoopTooltipRef {\n destroy(): void {}\n}\n\n/**\n * BrowserTooltipRef is attached to a specific element.\n * Use it to show or hide a tooltip for that element.\n *\n * @internal\n */\nclass BrowserTooltipRef {\n private readonly destroyRef = inject(DestroyRef);\n private readonly destroy$ = new Subject<void>();\n private isFocused = false;\n private isHovered = false;\n private overlayRef?: OverlayRef;\n private positionSubscription?: Subscription;\n private canShowEffect?: EffectRef;\n private placementEffect?: EffectRef;\n\n constructor(\n private config: {\n describedBy?: string;\n element: ElementRef;\n injector?: Injector;\n overlay: Overlay;\n placement: () => keyof typeof positions;\n canShow?: () => boolean;\n scrollStrategy?: () => ScrollStrategy | undefined;\n tooltip: () => SiTooltipContent;\n tooltipContext: () => unknown;\n }\n ) {\n const nativeElement = this.config.element.nativeElement;\n this.destroyRef.onDestroy(() => this.destroy());\n\n if (this.config.canShow) {\n this.canShowEffect = effect(() => this.updateCanShow());\n }\n\n this.placementEffect = effect(() => this.updatePlacement(this.config.placement()));\n\n fromEvent(nativeElement, 'focus')\n .pipe(\n filter(event => event instanceof FocusEvent),\n takeUntil(this.destroy$)\n )\n .subscribe(event => this.onFocus(event));\n\n fromEvent(nativeElement, 'mouseenter')\n .pipe(\n delayWhen(() =>\n // UX Guideline: tooltips on hover should be delayed by 500ms\n timer(500).pipe(\n takeUntil(fromEvent(nativeElement, 'mouseleave')),\n takeUntil(fromEvent(nativeElement, 'focusout')) // user started using keyboard\n )\n ),\n takeUntil(this.destroy$)\n )\n .subscribe(() => this.onMouseEnter());\n\n fromEvent(nativeElement, 'focusout')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onFocusOut());\n\n fromEvent(nativeElement, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onMouseLeave());\n\n fromEvent(nativeElement, 'touchstart')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onTouchStart());\n\n this.showForCurrentInteraction();\n }\n\n private updateCanShow(): void {\n if (!this.config.canShow!()) {\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n return;\n }\n\n this.showForCurrentInteraction();\n }\n\n private showForCurrentInteraction(): void {\n const nativeElement = this.config.element.nativeElement;\n // The tooltip may become eligible after the element is already focused or\n // hovered (e.g. validation errors appear on blur while the pointer still\n // hovers the element). In that case show it based on the live interaction state.\n if (nativeElement === document.activeElement && nativeElement.matches(':focus-visible')) {\n this.isFocused = true;\n this.show();\n } else if (nativeElement.matches(':hover')) {\n this.onMouseEnter();\n }\n }\n\n private onFocus(event: FocusEvent): void {\n if (event.target instanceof Element) {\n if (event.target.matches(':focus-visible')) {\n this.isFocused = true;\n this.show();\n }\n }\n }\n\n private onFocusOut(): void {\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n }\n\n private onMouseEnter(): void {\n this.isHovered = true;\n this.show();\n }\n\n private onMouseLeave(): void {\n this.isHovered = false;\n this.hide();\n }\n\n private onTouchStart(): void {\n // On touch devices a tooltip is not useful and would obscure the content the\n // user just tapped. Reset the hover/focus state so it is hidden immediately.\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n }\n\n private getOrCreateOverlay(): OverlayRef {\n this.overlayRef ??= getOverlay(\n this.config.element,\n this.config.overlay,\n false,\n this.getPlacement(),\n false,\n true,\n this.config.scrollStrategy?.()\n );\n return this.overlayRef;\n }\n\n private show(): void {\n if (this.config.canShow && !this.config.canShow()) {\n return;\n }\n\n const overlayRef = this.getOrCreateOverlay();\n if (overlayRef.hasAttached()) {\n return;\n }\n\n const injector = Injector.create({\n parent: this.config.injector,\n providers: [{ provide: OverlayRef, useValue: overlayRef }]\n });\n\n const toolTipPortal = new ComponentPortal(TooltipComponent, undefined, injector, undefined, [\n inputBinding('id', () => this.config.describedBy),\n inputBinding('tooltip', this.config.tooltip),\n inputBinding('tooltipContext', this.config.tooltipContext)\n ]);\n const tooltipRef: ComponentRef<TooltipComponent> = overlayRef.attach(toolTipPortal);\n\n const positionStrategy = getPositionStrategy(overlayRef);\n this.positionSubscription?.unsubscribe();\n this.positionSubscription = positionStrategy?.positionChanges.subscribe(change =>\n tooltipRef.instance.updateTooltipPosition(change, this.config.element)\n );\n }\n\n private getPlacement(): keyof typeof positions {\n return this.config.placement();\n }\n\n private updatePlacement(placement: keyof typeof positions): void {\n const positionStrategy = this.overlayRef && getPositionStrategy(this.overlayRef);\n if (positionStrategy) {\n positionStrategy.withPositions(getOverlayPositions(this.config.element, placement));\n this.overlayRef?.updatePosition();\n }\n }\n\n private hide(): void {\n if (this.isFocused || this.isHovered) {\n return;\n }\n this.overlayRef?.detach();\n this.positionSubscription?.unsubscribe();\n }\n\n destroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.canShowEffect?.destroy();\n this.placementEffect?.destroy();\n this.overlayRef?.dispose();\n this.positionSubscription?.unsubscribe();\n }\n}\n\n/**\n * A service to create tooltips for specific elements.\n * Use this if the tooltip directive is not suitable.\n * Must not be used outside element-ng.\n *\n * @internal\n */\n// We cannot provide this in root, as people may override the cdk overlay creation.\n@Injectable()\nexport class SiTooltipService {\n private overlay = inject(Overlay);\n private isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n createTooltip(config: {\n describedBy?: string;\n element: ElementRef;\n placement: () => keyof typeof positions;\n injector?: Injector;\n canShow?: () => boolean;\n tooltip: () => SiTooltipContent;\n tooltipContext: () => unknown;\n scrollStrategy?: () => ScrollStrategy | undefined;\n }): TooltipRef {\n if (!this.isBrowser) {\n return new NoopTooltipRef();\n }\n\n return new BrowserTooltipRef({\n ...config,\n overlay: this.overlay\n });\n }\n}\n\nexport type { TooltipRef };\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n TemplateRef\n} from '@angular/core';\nimport { defaultConnectedOverlayScrollStrategy, positions } from '@siemens/element-ng/common';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiTooltipService } from './si-tooltip.service';\n\n@Directive({\n selector: '[siTooltip]',\n providers: [SiTooltipService],\n host: {\n '[attr.aria-describedby]': 'isDisabled() ? null : describedBy'\n }\n})\nexport class SiTooltipDirective {\n private static idCounter = 0;\n\n /**\n * The tooltip text to be displayed\n *\n * @defaultValue ''\n */\n readonly siTooltip = input<TranslatableString | TemplateRef<any>>('');\n\n /**\n * The placement of the tooltip. One of 'top', 'start', end', 'bottom'\n *\n * @defaultValue 'auto'\n */\n readonly placement = input<keyof typeof positions>('auto');\n\n /**\n * Allows the tooltip to be disabled\n *\n * @defaultValue false\n */\n readonly isDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * CDK scroll strategy used for the tooltip overlay.\n *\n * @defaultValue defaultConnectedOverlayScrollStrategy()\n */\n readonly tooltipScrollStrategy = input(defaultConnectedOverlayScrollStrategy());\n\n /**\n * The context for the attached template\n */\n readonly tooltipContext = input();\n\n protected describedBy = `__tooltip_${SiTooltipDirective.idCounter++}`;\n\n private readonly canShow = computed(() => !!this.siTooltip() && !this.isDisabled());\n private readonly tooltipService = inject(SiTooltipService);\n private readonly elementRef = inject(ElementRef);\n\n constructor() {\n this.tooltipService.createTooltip({\n describedBy: this.describedBy,\n element: this.elementRef,\n placement: this.placement,\n canShow: this.canShow,\n tooltip: this.siTooltip,\n tooltipContext: this.tooltipContext,\n scrollStrategy: this.tooltipScrollStrategy\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiTooltipDirective } from './si-tooltip.directive';\n\n@NgModule({\n imports: [SiTooltipDirective],\n exports: [SiTooltipDirective]\n})\nexport class SiTooltipModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tooltip.module';\nexport * from './si-tooltip.directive';\nexport * from './si-tooltip.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|