@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
|
@@ -3,7 +3,7 @@ import { CdkMenuTrigger } from '@angular/cdk/menu';
|
|
|
3
3
|
import { DomPortal, CdkPortalOutlet } from '@angular/cdk/portal';
|
|
4
4
|
import { NgTemplateOutlet } from '@angular/common';
|
|
5
5
|
import * as i0 from '@angular/core';
|
|
6
|
-
import { input,
|
|
6
|
+
import { input, Component, InjectionToken, booleanAttribute, output, inject, ElementRef, viewChild, TemplateRef, computed, effect, untracked, Directive, model, contentChildren, INJECTOR, signal } from '@angular/core';
|
|
7
7
|
import * as i1 from '@angular/router';
|
|
8
8
|
import { Router, RouterLink, RouterLinkActive } from '@angular/router';
|
|
9
9
|
import { elementCancel, elementOptions } from '@siemens/element-icons';
|
|
@@ -25,19 +25,21 @@ class SiTabBadgeComponent {
|
|
|
25
25
|
/**
|
|
26
26
|
* Content displayed in the tab badge. Set to `true` to display a red dot.
|
|
27
27
|
*/
|
|
28
|
-
badgeContent = input(
|
|
28
|
+
badgeContent = input(/* @ts-ignore */
|
|
29
|
+
...(ngDevMode ? [undefined, { debugName: "badgeContent" }] : /* istanbul ignore next */ []));
|
|
29
30
|
/**
|
|
30
31
|
* Background color of the badge. When omitted, string content is displayed in a red dot badge.
|
|
31
32
|
*/
|
|
32
|
-
badgeColor = input(
|
|
33
|
-
|
|
34
|
-
static
|
|
33
|
+
badgeColor = input(/* @ts-ignore */
|
|
34
|
+
...(ngDevMode ? [undefined, { debugName: "badgeColor" }] : /* istanbul ignore next */ []));
|
|
35
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
36
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiTabBadgeComponent, isStandalone: true, selector: "si-tab-badge", inputs: { badgeContent: { classPropertyName: "badgeContent", publicName: "badgeContent", isSignal: true, isRequired: false, transformFunction: null }, badgeColor: { classPropertyName: "badgeColor", publicName: "badgeColor", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "d-contents" }, ngImport: i0, template: "@let badgeContent = this.badgeContent();\n@if (badgeContent === true) {\n <span class=\"badge-dot\"></span>\n} @else if (badgeContent && badgeColor()) {\n <span class=\"badge\" [class]=\"`bg-${badgeColor() || 'default'}`\">\n {{ badgeContent ?? '' | translate }}\n </span>\n} @else if (badgeContent && !badgeColor()) {\n <span class=\"badge-text\"> {{ badgeContent ?? '' | translate }}</span>\n}\n", styles: [".badge-dot{inset-block-end:calc(.625rem + 8px);inset-inline-start:.75rem;margin-inline-end:.75rem}.badge-text{inset-block-start:-11px;inset-inline-start:2px}:host-context(.cdk-menu-item) .badge-dot{inset-block-end:.3125rem;min-inline-size:12px}:host-context(.cdk-menu-item) .badge-text{inset-block-start:0;inset-inline-start:0}:host-context(.cdk-menu-item) .badge{margin-inline-end:calc(var(--si-sys-sizing-spacing-x-30) * -1)}\n"], dependencies: [{ kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
|
|
35
37
|
}
|
|
36
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabBadgeComponent, decorators: [{
|
|
37
39
|
type: Component,
|
|
38
|
-
args: [{ selector: 'si-tab-badge', imports: [SiTranslatePipe],
|
|
40
|
+
args: [{ selector: 'si-tab-badge', imports: [SiTranslatePipe], host: {
|
|
39
41
|
'class': 'd-contents'
|
|
40
|
-
}, template: "@let badgeContent = this.badgeContent();\n@if (badgeContent === true) {\n <span class=\"badge-dot\"></span>\n} @else if (badgeContent && badgeColor()) {\n <span class=\"badge\" [class]=\"`bg-${badgeColor() || 'default'}`\">\n {{ badgeContent ?? '' | translate }}\n </span>\n} @else if (badgeContent && !badgeColor()) {\n <span class=\"badge-text\"> {{ badgeContent ?? '' | translate }}</span>\n}\n", styles: [".badge-dot{inset-block-end:calc(.625rem + 8px);inset-inline-start:.75rem;margin-inline-end:.75rem}.badge-text{inset-block-start:-11px;inset-inline-start:2px}:host-context(.cdk-menu-item) .badge-dot{inset-block-end:.3125rem;min-inline-size:12px}:host-context(.cdk-menu-item) .badge-text{inset-block-start:0;inset-inline-start:0}:host-context(.cdk-menu-item) .badge{margin-inline
|
|
42
|
+
}, template: "@let badgeContent = this.badgeContent();\n@if (badgeContent === true) {\n <span class=\"badge-dot\"></span>\n} @else if (badgeContent && badgeColor()) {\n <span class=\"badge\" [class]=\"`bg-${badgeColor() || 'default'}`\">\n {{ badgeContent ?? '' | translate }}\n </span>\n} @else if (badgeContent && !badgeColor()) {\n <span class=\"badge-text\"> {{ badgeContent ?? '' | translate }}</span>\n}\n", styles: [".badge-dot{inset-block-end:calc(.625rem + 8px);inset-inline-start:.75rem;margin-inline-end:.75rem}.badge-text{inset-block-start:-11px;inset-inline-start:2px}:host-context(.cdk-menu-item) .badge-dot{inset-block-end:.3125rem;min-inline-size:12px}:host-context(.cdk-menu-item) .badge-text{inset-block-start:0;inset-inline-start:0}:host-context(.cdk-menu-item) .badge{margin-inline-end:calc(var(--si-sys-sizing-spacing-x-30) * -1)}\n"] }]
|
|
41
43
|
}], propDecorators: { badgeContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeContent", required: false }] }], badgeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeColor", required: false }] }] } });
|
|
42
44
|
|
|
43
45
|
/**
|
|
@@ -48,30 +50,34 @@ const SI_TABSET = new InjectionToken('SiTabsetComponent');
|
|
|
48
50
|
|
|
49
51
|
class SiTabBaseDirective {
|
|
50
52
|
/** Title of the tab item. */
|
|
51
|
-
heading = input.required(
|
|
53
|
+
heading = input.required(/* @ts-ignore */
|
|
54
|
+
...(ngDevMode ? [{ debugName: "heading" }] : /* istanbul ignore next */ []));
|
|
52
55
|
/**
|
|
53
56
|
* Icon of the tab item.
|
|
54
57
|
* If provided, heading text will be ignored and only icon will be displayed.
|
|
55
58
|
*/
|
|
56
|
-
icon = input(
|
|
59
|
+
icon = input(/* @ts-ignore */
|
|
60
|
+
...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
57
61
|
/**
|
|
58
62
|
* Additional badge content. A value of
|
|
59
63
|
* - `true` will render a red dot
|
|
60
64
|
* - any string without a `badgeColor` will render a red dot with text
|
|
61
65
|
* - any string with a `badgeColor` will render a normal badge
|
|
62
66
|
*/
|
|
63
|
-
badgeContent = input(
|
|
67
|
+
badgeContent = input(/* @ts-ignore */
|
|
68
|
+
...(ngDevMode ? [undefined, { debugName: "badgeContent" }] : /* istanbul ignore next */ []));
|
|
64
69
|
/**
|
|
65
70
|
* Background color of the badge.
|
|
66
71
|
* If no color is provided a red dot badge will be rendered.
|
|
67
72
|
*/
|
|
68
|
-
badgeColor = input(
|
|
73
|
+
badgeColor = input(/* @ts-ignore */
|
|
74
|
+
...(ngDevMode ? [undefined, { debugName: "badgeColor" }] : /* istanbul ignore next */ []));
|
|
69
75
|
/**
|
|
70
76
|
* Disables the tab.
|
|
71
77
|
*
|
|
72
78
|
* @defaultValue false
|
|
73
79
|
*/
|
|
74
|
-
disabledTab = input(false, { ...(ngDevMode ? { debugName: "disabledTab" } : {}), transform: booleanAttribute,
|
|
80
|
+
disabledTab = input(false, { ...(ngDevMode ? { debugName: "disabledTab" } : /* istanbul ignore next */ {}), transform: booleanAttribute,
|
|
75
81
|
// eslint-disable-next-line @angular-eslint/no-input-rename
|
|
76
82
|
alias: 'disabled' });
|
|
77
83
|
/**
|
|
@@ -79,25 +85,36 @@ class SiTabBaseDirective {
|
|
|
79
85
|
*
|
|
80
86
|
* @defaultValue false
|
|
81
87
|
*/
|
|
82
|
-
closable = input(false, { ...(ngDevMode ? { debugName: "closable" } : {}), transform: booleanAttribute });
|
|
88
|
+
closable = input(false, { ...(ngDevMode ? { debugName: "closable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
83
89
|
/** Event emitter to notify when a tab is closed. */
|
|
84
90
|
closeTriggered = output();
|
|
85
91
|
/** @internal */
|
|
86
92
|
tabButton = inject(ElementRef);
|
|
87
93
|
/** @internal */
|
|
88
|
-
tabContent = viewChild('tabContent', { ...(ngDevMode ? { debugName: "tabContent" } : {}), read: TemplateRef });
|
|
94
|
+
tabContent = viewChild('tabContent', { ...(ngDevMode ? { debugName: "tabContent" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
89
95
|
static tabCounter = 0;
|
|
90
96
|
indexBeforeClose = -1;
|
|
91
97
|
tooltipService = inject(SiTooltipService);
|
|
92
98
|
existingTooltip = inject(SiTooltipDirective, { optional: true });
|
|
93
|
-
|
|
99
|
+
canShowTooltip = computed(() => !!this.icon() &&
|
|
100
|
+
(!this.existingTooltip ||
|
|
101
|
+
this.existingTooltip.isDisabled() ||
|
|
102
|
+
!this.existingTooltip.siTooltip()), /* @ts-ignore */
|
|
103
|
+
...(ngDevMode ? [{ debugName: "canShowTooltip" }] : /* istanbul ignore next */ []));
|
|
94
104
|
/** @internal */
|
|
95
105
|
tabId = `${SiTabBaseDirective.tabCounter++}`;
|
|
96
106
|
icons = addIcons({ elementCancel });
|
|
97
107
|
tabset = inject(SI_TABSET);
|
|
98
|
-
index = computed(() => this.tabset.tabPanels().indexOf(this),
|
|
108
|
+
index = computed(() => this.tabset.tabPanels().indexOf(this), /* @ts-ignore */
|
|
109
|
+
...(ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []));
|
|
99
110
|
constructor() {
|
|
100
|
-
this.
|
|
111
|
+
this.tooltipService.createTooltip({
|
|
112
|
+
element: this.tabButton,
|
|
113
|
+
placement: () => 'auto',
|
|
114
|
+
canShow: this.canShowTooltip,
|
|
115
|
+
tooltip: this.heading,
|
|
116
|
+
tooltipContext: () => undefined
|
|
117
|
+
});
|
|
101
118
|
// Update the focusKeyManager if a tab is added that is active or if the tab is set active by the app.
|
|
102
119
|
// This effect should not run, if active was already applied to the focusKeyManager.
|
|
103
120
|
effect(() => {
|
|
@@ -110,28 +127,6 @@ class SiTabBaseDirective {
|
|
|
110
127
|
});
|
|
111
128
|
});
|
|
112
129
|
}
|
|
113
|
-
setupIconTooltip() {
|
|
114
|
-
effect(onCleanup => {
|
|
115
|
-
const icon = this.icon();
|
|
116
|
-
// Only add an automatic tooltip if the consumer has not already applied an
|
|
117
|
-
// active `siTooltip` directive (i.e. one that is not disabled and has a tooltip).
|
|
118
|
-
const hasActiveTooltip = !!this.existingTooltip &&
|
|
119
|
-
!this.existingTooltip.isDisabled() &&
|
|
120
|
-
!!this.existingTooltip.siTooltip();
|
|
121
|
-
if (icon && !hasActiveTooltip) {
|
|
122
|
-
this.tooltipRef = this.tooltipService.createTooltip({
|
|
123
|
-
element: this.tabButton,
|
|
124
|
-
placement: 'auto',
|
|
125
|
-
tooltip: () => this.heading(),
|
|
126
|
-
tooltipContext: () => undefined
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
onCleanup(() => {
|
|
130
|
-
this.tooltipRef?.destroy();
|
|
131
|
-
this.tooltipRef = undefined;
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
130
|
ngOnDestroy() {
|
|
136
131
|
if (this.indexBeforeClose >= 0) {
|
|
137
132
|
this.tabset.removedTabByUser(this.indexBeforeClose, this.active());
|
|
@@ -177,10 +172,10 @@ class SiTabBaseDirective {
|
|
|
177
172
|
behavior: 'instant'
|
|
178
173
|
});
|
|
179
174
|
}
|
|
180
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
181
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "
|
|
175
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabBaseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
176
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.8", type: SiTabBaseDirective, isStandalone: true, selector: "[siTabNextBase]", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, badgeContent: { classPropertyName: "badgeContent", publicName: "badgeContent", isSignal: true, isRequired: false, transformFunction: null }, badgeColor: { classPropertyName: "badgeColor", publicName: "badgeColor", isSignal: true, isRequired: false, transformFunction: null }, disabledTab: { classPropertyName: "disabledTab", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeTriggered: "closeTriggered" }, host: { attributes: { "role": "tab" }, listeners: { "keydown.delete": "closeTab($event)" }, properties: { "class.disabled": "disabledTab()", "class.icon-only": "!!icon()", "class.pe-3": "closable()", "class.active": "active()", "attr.id": "'tab-' + tabId", "attr.aria-selected": "active()", "attr.aria-disabled": "disabledTab()", "attr.tabindex": "tabset.focusKeyManager.activeItem === this && !disabledTab() ? 0 : -1", "attr.aria-controls": "'content-' + tabId" }, classAttribute: "nav-link focus-inside px-5" }, viewQueries: [{ propertyName: "tabContent", first: true, predicate: ["tabContent"], descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0 });
|
|
182
177
|
}
|
|
183
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
178
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabBaseDirective, decorators: [{
|
|
184
179
|
type: Directive,
|
|
185
180
|
args: [{
|
|
186
181
|
selector: '[siTabNextBase]',
|
|
@@ -236,18 +231,88 @@ class SiTabLinkComponent extends SiTabBaseDirective {
|
|
|
236
231
|
}
|
|
237
232
|
super.selectTab(retainFocus);
|
|
238
233
|
}
|
|
239
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
240
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
234
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabLinkComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
235
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiTabLinkComponent, isStandalone: true, selector: "a[si-tab][routerLink]", providers: [SiTooltipService, { provide: SiTabBaseDirective, useExisting: SiTabLinkComponent }], usesInheritance: true, hostDirectives: [{ directive: i1.RouterLinkActive }], ngImport: i0, template: "@let icon = this.icon();\n<span class=\"text-truncate\" [class.visually-hidden]=\"!!icon\">{{ heading() | translate }}</span>\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" />\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-sm btn-tertiary-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:1.5rem}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "component", type: SiTabBadgeComponent, selector: "si-tab-badge", inputs: ["badgeContent", "badgeColor"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
|
|
241
236
|
}
|
|
242
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabLinkComponent, decorators: [{
|
|
243
238
|
type: Component,
|
|
244
|
-
args: [{ selector: 'a[si-tab][routerLink]', imports: [SiIconComponent, SiTranslatePipe, SiTabBadgeComponent], providers: [SiTooltipService, { provide: SiTabBaseDirective, useExisting: SiTabLinkComponent }],
|
|
239
|
+
args: [{ selector: 'a[si-tab][routerLink]', imports: [SiIconComponent, SiTranslatePipe, SiTabBadgeComponent], providers: [SiTooltipService, { provide: SiTabBaseDirective, useExisting: SiTabLinkComponent }], hostDirectives: [
|
|
245
240
|
{
|
|
246
241
|
directive: RouterLinkActive
|
|
247
242
|
}
|
|
248
243
|
], template: "@let icon = this.icon();\n<span class=\"text-truncate\" [class.visually-hidden]=\"!!icon\">{{ heading() | translate }}</span>\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" />\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-sm btn-tertiary-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:1.5rem}\n"] }]
|
|
249
244
|
}] });
|
|
250
245
|
|
|
246
|
+
/**
|
|
247
|
+
* Copyright (c) Siemens 2016 - 2026
|
|
248
|
+
* SPDX-License-Identifier: MIT
|
|
249
|
+
*/
|
|
250
|
+
/**
|
|
251
|
+
* Creates a normal tab that can contain any content.
|
|
252
|
+
*
|
|
253
|
+
* @example
|
|
254
|
+
* ```html
|
|
255
|
+
* <si-tabset>
|
|
256
|
+
* <si-tab heading="Tab 1">
|
|
257
|
+
* <p>Content of Tab 1</p>
|
|
258
|
+
* </si-tab>
|
|
259
|
+
* </si-tabset>
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
class SiTabComponent extends SiTabBaseDirective {
|
|
263
|
+
/**
|
|
264
|
+
* Whether the tab is active or not.
|
|
265
|
+
* If set to `true`, the tab will be selected and its content will be displayed.
|
|
266
|
+
* @defaultValue false
|
|
267
|
+
* */
|
|
268
|
+
active = model(false, /* @ts-ignore */
|
|
269
|
+
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
270
|
+
/**
|
|
271
|
+
* Guard to check if the tab can be activated.
|
|
272
|
+
* If not provided, the tab can always be activated.
|
|
273
|
+
*/
|
|
274
|
+
canActivate = input(/* @ts-ignore */
|
|
275
|
+
...(ngDevMode ? [undefined, { debugName: "canActivate" }] : /* istanbul ignore next */ []));
|
|
276
|
+
/**
|
|
277
|
+
* Guard to check if the tab can be deactivated.
|
|
278
|
+
* If not provided, the tab can always be deactivated.
|
|
279
|
+
*/
|
|
280
|
+
canDeactivate = input(/* @ts-ignore */
|
|
281
|
+
...(ngDevMode ? [undefined, { debugName: "canDeactivate" }] : /* istanbul ignore next */ []));
|
|
282
|
+
selectTabByUser() {
|
|
283
|
+
const canActivate = this.canActivate();
|
|
284
|
+
if (!this.active() && (canActivate ? canActivate() : true)) {
|
|
285
|
+
this.selectTab();
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/** {@inheritDoc} */
|
|
289
|
+
selectTab(retainFocus) {
|
|
290
|
+
const activeTab = this.tabset.activeTab();
|
|
291
|
+
if (activeTab instanceof SiTabComponent) {
|
|
292
|
+
const canDeactivate = activeTab?.canDeactivate();
|
|
293
|
+
if (canDeactivate ? !canDeactivate() : false) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
this.tabset.activeTab()?.deSelectTab();
|
|
298
|
+
this.active.set(true);
|
|
299
|
+
super.selectTab(retainFocus);
|
|
300
|
+
}
|
|
301
|
+
/** @internal */
|
|
302
|
+
deSelectTab() {
|
|
303
|
+
this.active.set(false);
|
|
304
|
+
}
|
|
305
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
306
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiTabComponent, isStandalone: true, selector: "si-tab", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, canActivate: { classPropertyName: "canActivate", publicName: "canActivate", isSignal: true, isRequired: false, transformFunction: null }, canDeactivate: { classPropertyName: "canDeactivate", publicName: "canDeactivate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange" }, host: { listeners: { "click": "selectTabByUser()", "keydown.enter": "selectTabByUser()" } }, providers: [SiTooltipService, { provide: SiTabBaseDirective, useExisting: SiTabComponent }], usesInheritance: true, ngImport: i0, template: "@let icon = this.icon();\n<span class=\"text-truncate\" [class.visually-hidden]=\"!!icon\">{{ heading() | translate }}</span>\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" />\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-sm btn-tertiary-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:1.5rem}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "component", type: SiTabBadgeComponent, selector: "si-tab-badge", inputs: ["badgeContent", "badgeColor"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
|
|
307
|
+
}
|
|
308
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabComponent, decorators: [{
|
|
309
|
+
type: Component,
|
|
310
|
+
args: [{ selector: 'si-tab', imports: [SiIconComponent, SiTranslatePipe, SiTabBadgeComponent], providers: [SiTooltipService, { provide: SiTabBaseDirective, useExisting: SiTabComponent }], host: {
|
|
311
|
+
'(click)': 'selectTabByUser()',
|
|
312
|
+
'(keydown.enter)': 'selectTabByUser()'
|
|
313
|
+
}, template: "@let icon = this.icon();\n<span class=\"text-truncate\" [class.visually-hidden]=\"!!icon\">{{ heading() | translate }}</span>\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" />\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-sm btn-tertiary-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:1.5rem}\n"] }]
|
|
314
|
+
}], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }, { type: i0.Output, args: ["activeChange"] }], canActivate: [{ type: i0.Input, args: [{ isSignal: true, alias: "canActivate", required: false }] }], canDeactivate: [{ type: i0.Input, args: [{ isSignal: true, alias: "canDeactivate", required: false }] }] } });
|
|
315
|
+
|
|
251
316
|
/**
|
|
252
317
|
* Copyright (c) Siemens 2016 - 2026
|
|
253
318
|
* SPDX-License-Identifier: MIT
|
|
@@ -261,30 +326,57 @@ class SiTabsetComponent {
|
|
|
261
326
|
* When set, the overflowing content inside the tab will automatically scroll
|
|
262
327
|
* @defaultValue false
|
|
263
328
|
**/
|
|
264
|
-
contentOverflowAuto = input(false, { ...(ngDevMode ? { debugName: "contentOverflowAuto" } : {}), transform: booleanAttribute });
|
|
329
|
+
contentOverflowAuto = input(false, { ...(ngDevMode ? { debugName: "contentOverflowAuto" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
265
330
|
icons = addIcons({ elementOptions });
|
|
266
|
-
contentNode = viewChild.required('contentNode'
|
|
331
|
+
contentNode = viewChild.required('contentNode', /* @ts-ignore */
|
|
332
|
+
...(ngDevMode ? [{ debugName: "contentNode" }] : /* istanbul ignore next */ []));
|
|
267
333
|
/**
|
|
268
334
|
* A `DomPortal` wrapping the tab panel container. Used by {@link SiTabPortalComponent}
|
|
269
335
|
* to render the active tab's content at a remote location in the DOM.
|
|
270
336
|
*
|
|
271
337
|
* @internal
|
|
272
338
|
*/
|
|
273
|
-
contentPortal = computed(() => new DomPortal(this.contentNode()),
|
|
339
|
+
contentPortal = computed(() => new DomPortal(this.contentNode()), /* @ts-ignore */
|
|
340
|
+
...(ngDevMode ? [{ debugName: "contentPortal" }] : /* istanbul ignore next */ []));
|
|
274
341
|
/** @internal */
|
|
275
|
-
activeTab = computed(() => this.tabPanels().find(tab => tab.active()),
|
|
342
|
+
activeTab = computed(() => this.tabPanels().find(tab => tab.active()), /* @ts-ignore */
|
|
343
|
+
...(ngDevMode ? [{ debugName: "activeTab" }] : /* istanbul ignore next */ []));
|
|
276
344
|
/** @internal */
|
|
277
|
-
tabPanels = contentChildren(SiTabBaseDirective,
|
|
345
|
+
tabPanels = contentChildren(SiTabBaseDirective, /* @ts-ignore */
|
|
346
|
+
...(ngDevMode ? [{ debugName: "tabPanels" }] : /* istanbul ignore next */ []));
|
|
278
347
|
/** @internal */
|
|
279
348
|
focusKeyManager = new FocusKeyManager(this.tabPanels, inject(INJECTOR))
|
|
280
349
|
.withHorizontalOrientation(isRTL() ? 'rtl' : 'ltr')
|
|
281
350
|
.withWrap(true);
|
|
282
351
|
/** @internal */
|
|
283
|
-
showMenuButton = signal(false,
|
|
352
|
+
showMenuButton = signal(false, /* @ts-ignore */
|
|
353
|
+
...(ngDevMode ? [{ debugName: "showMenuButton" }] : /* istanbul ignore next */ []));
|
|
284
354
|
tabIsLink(tab) {
|
|
285
355
|
return tab instanceof SiTabLinkComponent;
|
|
286
356
|
}
|
|
287
357
|
constructor() {
|
|
358
|
+
// Per the ARIA tabs pattern, at least one tab should be active. If the app
|
|
359
|
+
// does not provide an active tab, activate the first non-disabled content
|
|
360
|
+
// tab so the tablist stays keyboard reachable.
|
|
361
|
+
effect(() => {
|
|
362
|
+
const hasActiveTab = !!this.activeTab();
|
|
363
|
+
untracked(() => {
|
|
364
|
+
if (hasActiveTab) {
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
const tabToActivate = this.tabPanels().find(tab => {
|
|
368
|
+
if (tab.disabledTab()) {
|
|
369
|
+
return false;
|
|
370
|
+
}
|
|
371
|
+
if (tab instanceof SiTabComponent) {
|
|
372
|
+
const canActivate = tab.canActivate();
|
|
373
|
+
return canActivate ? canActivate() : true;
|
|
374
|
+
}
|
|
375
|
+
return true;
|
|
376
|
+
});
|
|
377
|
+
tabToActivate?.selectTab();
|
|
378
|
+
});
|
|
379
|
+
});
|
|
288
380
|
effect(() => {
|
|
289
381
|
if (this.showMenuButton() && this.activeTab()) {
|
|
290
382
|
// wait for menu button to render on DOM
|
|
@@ -323,15 +415,15 @@ class SiTabsetComponent {
|
|
|
323
415
|
keydown(event) {
|
|
324
416
|
this.focusKeyManager.onKeydown(event);
|
|
325
417
|
}
|
|
326
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
327
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
418
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabsetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
419
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiTabsetComponent, isStandalone: true, selector: "si-tabset", inputs: { contentOverflowAuto: { classPropertyName: "contentOverflowAuto", publicName: "contentOverflowAuto", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
328
420
|
{
|
|
329
421
|
provide: SI_TABSET,
|
|
330
422
|
useExisting: SiTabsetComponent
|
|
331
423
|
}
|
|
332
|
-
], queries: [{ propertyName: "tabPanels", predicate: SiTabBaseDirective, isSignal: true }], viewQueries: [{ propertyName: "contentNode", first: true, predicate: ["contentNode"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n (keydown)=\"keydown($event)\"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n >\n <si-icon class=\"icon m-0\" [icon]=\"icons.elementOptions\" />\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n <div #contentNode class=\"d-contents\">\n @if (activeTab) {\n <div\n class=\"tab-content focus-inside\"\n role=\"tabpanel\"\n [id]=\"`content-${activeTab.tabId}`\"\n [class.tab-scroll]=\"contentOverflowAuto()\"\n [attr.tabindex]=\"contentOverflowAuto() ? '0' : null\"\n [attr.aria-labelledby]=\"`tab-${activeTab.tabId}`\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template #tabsMenu>\n <si-menu>\n @for (tab of tabPanels(); track tab) {\n @if (tabIsLink(tab)) {\n <a\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tab.routerLink.urlTree\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </button>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n <si-tab-badge [badgeContent]=\"tab.badgeContent()\" [badgeColor]=\"tab.badgeColor()\" />\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-direction:column;overflow:hidden;block-size:100%}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.btn.dropdown{color:var(--
|
|
424
|
+
], queries: [{ propertyName: "tabPanels", predicate: SiTabBaseDirective, isSignal: true }], viewQueries: [{ propertyName: "contentNode", first: true, predicate: ["contentNode"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n (keydown)=\"keydown($event)\"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n >\n <si-icon class=\"icon m-0\" [icon]=\"icons.elementOptions\" />\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n <div #contentNode class=\"d-contents\">\n @if (activeTab) {\n <div\n class=\"tab-content focus-inside\"\n role=\"tabpanel\"\n [id]=\"`content-${activeTab.tabId}`\"\n [class.tab-scroll]=\"contentOverflowAuto()\"\n [attr.tabindex]=\"contentOverflowAuto() ? '0' : null\"\n [attr.aria-labelledby]=\"`tab-${activeTab.tabId}`\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template #tabsMenu>\n <si-menu>\n @for (tab of tabPanels(); track tab) {\n @if (tabIsLink(tab)) {\n <a\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tab.routerLink.urlTree\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </button>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n <si-tab-badge [badgeContent]=\"tab.badgeContent()\" [badgeColor]=\"tab.badgeColor()\" />\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-direction:column;overflow:hidden;block-size:100%}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.btn.dropdown{color:var(--si-sys-text-primary);min-inline-size:0;border-block-end:1px solid var(--si-sys-border-4);padding-inline:var(--si-sys-sizing-spacing-x-50);flex-shrink:0}.btn.dropdown:hover{border-color:var(--si-sys-border-4);color:var(--si-sys-text-accent-hover)}.tab-content{flex-grow:1}.tab-scroll{flex-basis:0;overflow:auto}.tabs-wrapper{overflow-y:hidden;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}\n"], dependencies: [{ kind: "directive", type: SiMenuDirective, selector: "si-menu" }, { kind: "component", type: SiMenuItemComponent, selector: "si-menu-item, a[si-menu-item], button[si-menu-item]" }, { kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData", "cdkMenuTriggerTransformOriginOn"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SiResizeObserverModule }, { kind: "directive", type: i1$1.SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "component", type: SiTabBadgeComponent, selector: "si-tab-badge", inputs: ["badgeContent", "badgeColor"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }] });
|
|
333
425
|
}
|
|
334
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
426
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabsetComponent, decorators: [{
|
|
335
427
|
type: Component,
|
|
336
428
|
args: [{ selector: 'si-tabset', imports: [
|
|
337
429
|
SiMenuDirective,
|
|
@@ -347,76 +439,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
|
|
|
347
439
|
provide: SI_TABSET,
|
|
348
440
|
useExisting: SiTabsetComponent
|
|
349
441
|
}
|
|
350
|
-
],
|
|
442
|
+
], template: "<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n (keydown)=\"keydown($event)\"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n >\n <si-icon class=\"icon m-0\" [icon]=\"icons.elementOptions\" />\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n <div #contentNode class=\"d-contents\">\n @if (activeTab) {\n <div\n class=\"tab-content focus-inside\"\n role=\"tabpanel\"\n [id]=\"`content-${activeTab.tabId}`\"\n [class.tab-scroll]=\"contentOverflowAuto()\"\n [attr.tabindex]=\"contentOverflowAuto() ? '0' : null\"\n [attr.aria-labelledby]=\"`tab-${activeTab.tabId}`\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template #tabsMenu>\n <si-menu>\n @for (tab of tabPanels(); track tab) {\n @if (tabIsLink(tab)) {\n <a\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tab.routerLink.urlTree\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </button>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n <si-tab-badge [badgeContent]=\"tab.badgeContent()\" [badgeColor]=\"tab.badgeColor()\" />\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-direction:column;overflow:hidden;block-size:100%}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.btn.dropdown{color:var(--si-sys-text-primary);min-inline-size:0;border-block-end:1px solid var(--si-sys-border-4);padding-inline:var(--si-sys-sizing-spacing-x-50);flex-shrink:0}.btn.dropdown:hover{border-color:var(--si-sys-border-4);color:var(--si-sys-text-accent-hover)}.tab-content{flex-grow:1}.tab-scroll{flex-basis:0;overflow:auto}.tabs-wrapper{overflow-y:hidden;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}\n"] }]
|
|
351
443
|
}], ctorParameters: () => [], propDecorators: { contentOverflowAuto: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentOverflowAuto", required: false }] }], contentNode: [{ type: i0.ViewChild, args: ['contentNode', { isSignal: true }] }], tabPanels: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SiTabBaseDirective), { isSignal: true }] }] } });
|
|
352
444
|
|
|
353
|
-
/**
|
|
354
|
-
* Copyright (c) Siemens 2016 - 2026
|
|
355
|
-
* SPDX-License-Identifier: MIT
|
|
356
|
-
*/
|
|
357
|
-
/**
|
|
358
|
-
* Creates a normal tab that can contain any content.
|
|
359
|
-
*
|
|
360
|
-
* @example
|
|
361
|
-
* ```html
|
|
362
|
-
* <si-tabset>
|
|
363
|
-
* <si-tab heading="Tab 1">
|
|
364
|
-
* <p>Content of Tab 1</p>
|
|
365
|
-
* </si-tab>
|
|
366
|
-
* </si-tabset>
|
|
367
|
-
* ```
|
|
368
|
-
*/
|
|
369
|
-
class SiTabComponent extends SiTabBaseDirective {
|
|
370
|
-
/**
|
|
371
|
-
* Whether the tab is active or not.
|
|
372
|
-
* If set to `true`, the tab will be selected and its content will be displayed.
|
|
373
|
-
* @defaultValue false
|
|
374
|
-
* */
|
|
375
|
-
active = model(false, ...(ngDevMode ? [{ debugName: "active" }] : []));
|
|
376
|
-
/**
|
|
377
|
-
* Guard to check if the tab can be activated.
|
|
378
|
-
* If not provided, the tab can always be activated.
|
|
379
|
-
*/
|
|
380
|
-
canActivate = input(...(ngDevMode ? [undefined, { debugName: "canActivate" }] : []));
|
|
381
|
-
/**
|
|
382
|
-
* Guard to check if the tab can be deactivated.
|
|
383
|
-
* If not provided, the tab can always be deactivated.
|
|
384
|
-
*/
|
|
385
|
-
canDeactivate = input(...(ngDevMode ? [undefined, { debugName: "canDeactivate" }] : []));
|
|
386
|
-
selectTabByUser() {
|
|
387
|
-
const canActivate = this.canActivate();
|
|
388
|
-
if (!this.active() && (canActivate ? canActivate() : true)) {
|
|
389
|
-
this.selectTab();
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
/** {@inheritDoc} */
|
|
393
|
-
selectTab(retainFocus) {
|
|
394
|
-
const activeTab = this.tabset.activeTab();
|
|
395
|
-
if (activeTab instanceof SiTabComponent) {
|
|
396
|
-
const canDeactivate = activeTab?.canDeactivate();
|
|
397
|
-
if (canDeactivate ? !canDeactivate() : false) {
|
|
398
|
-
return;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
this.tabset.activeTab()?.deSelectTab();
|
|
402
|
-
this.active.set(true);
|
|
403
|
-
super.selectTab(retainFocus);
|
|
404
|
-
}
|
|
405
|
-
/** @internal */
|
|
406
|
-
deSelectTab() {
|
|
407
|
-
this.active.set(false);
|
|
408
|
-
}
|
|
409
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiTabComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
410
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiTabComponent, isStandalone: true, selector: "si-tab", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, canActivate: { classPropertyName: "canActivate", publicName: "canActivate", isSignal: true, isRequired: false, transformFunction: null }, canDeactivate: { classPropertyName: "canDeactivate", publicName: "canDeactivate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange" }, host: { listeners: { "click": "selectTabByUser()", "keydown.enter": "selectTabByUser()" } }, providers: [SiTooltipService, { provide: SiTabBaseDirective, useExisting: SiTabComponent }], usesInheritance: true, ngImport: i0, template: "@let icon = this.icon();\n<span class=\"text-truncate\" [class.visually-hidden]=\"!!icon\">{{ heading() | translate }}</span>\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" />\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-sm btn-tertiary-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:1.5rem}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "component", type: SiTabBadgeComponent, selector: "si-tab-badge", inputs: ["badgeContent", "badgeColor"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
411
|
-
}
|
|
412
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiTabComponent, decorators: [{
|
|
413
|
-
type: Component,
|
|
414
|
-
args: [{ selector: 'si-tab', imports: [SiIconComponent, SiTranslatePipe, SiTabBadgeComponent], providers: [SiTooltipService, { provide: SiTabBaseDirective, useExisting: SiTabComponent }], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
415
|
-
'(click)': 'selectTabByUser()',
|
|
416
|
-
'(keydown.enter)': 'selectTabByUser()'
|
|
417
|
-
}, template: "@let icon = this.icon();\n<span class=\"text-truncate\" [class.visually-hidden]=\"!!icon\">{{ heading() | translate }}</span>\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" />\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-sm btn-tertiary-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n", styles: [":host.nav-link{flex-shrink:0;transform:translate(0)}:host.nav-link.icon-only{min-inline-size:auto}.tab-icon{font-size:1.5rem}\n"] }]
|
|
418
|
-
}], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }, { type: i0.Output, args: ["activeChange"] }], canActivate: [{ type: i0.Input, args: [{ isSignal: true, alias: "canActivate", required: false }] }], canDeactivate: [{ type: i0.Input, args: [{ isSignal: true, alias: "canDeactivate", required: false }] }] } });
|
|
419
|
-
|
|
420
445
|
/**
|
|
421
446
|
* Copyright (c) Siemens 2016 - 2026
|
|
422
447
|
* SPDX-License-Identifier: MIT
|
|
@@ -451,17 +476,17 @@ class SiTabPortalComponent {
|
|
|
451
476
|
* The tabset's tab panel container, including the `role="tabpanel"` element
|
|
452
477
|
* with proper ARIA attributes, is transported to this component's location.
|
|
453
478
|
*/
|
|
454
|
-
tabset = input.required(
|
|
455
|
-
|
|
456
|
-
static
|
|
479
|
+
tabset = input.required(/* @ts-ignore */
|
|
480
|
+
...(ngDevMode ? [{ debugName: "tabset" }] : /* istanbul ignore next */ []));
|
|
481
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabPortalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
482
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.8", type: SiTabPortalComponent, isStandalone: true, selector: "si-tab-portal", inputs: { tabset: { classPropertyName: "tabset", publicName: "tabset", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: ` <ng-template [cdkPortalOutlet]="tabset().contentPortal()" /> `, isInline: true, dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
|
|
457
483
|
}
|
|
458
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
484
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTabPortalComponent, decorators: [{
|
|
459
485
|
type: Component,
|
|
460
486
|
args: [{
|
|
461
487
|
selector: 'si-tab-portal',
|
|
462
488
|
imports: [CdkPortalOutlet],
|
|
463
|
-
template: ` <ng-template [cdkPortalOutlet]="tabset().contentPortal()" />
|
|
464
|
-
changeDetection: ChangeDetectionStrategy.OnPush
|
|
489
|
+
template: ` <ng-template [cdkPortalOutlet]="tabset().contentPortal()" /> `
|
|
465
490
|
}]
|
|
466
491
|
}], propDecorators: { tabset: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabset", required: true }] }] } });
|
|
467
492
|
|