@siemens/element-ng 47.6.0 → 47.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/about/index.d.ts +7 -0
- package/about/package.json +3 -0
- package/about/si-about-data.model.d.ts +49 -0
- package/about/si-about.component.d.ts +71 -0
- package/about/si-about.module.d.ts +7 -0
- package/accordion/index.d.ts +1 -1
- package/accordion/si-accordion.component.d.ts +1 -1
- package/accordion/si-collapsible-panel.component.d.ts +1 -1
- package/action-modal/index.d.ts +1 -1
- package/action-modal/si-action-dialog.types.d.ts +1 -1
- package/application-header/index.d.ts +1 -1
- package/application-header/launchpad/si-launchpad.model.d.ts +1 -1
- package/application-header/si-header-action-item-icon-base.directive.d.ts +1 -1
- package/application-header/si-header-action-item.base.d.ts +1 -1
- package/application-header/si-header-logo.directive.d.ts +1 -1
- package/assets/images/landing-page-steel.webp +0 -0
- package/auto-collapsable-list/index.d.ts +1 -1
- package/auto-collapsable-list/si-auto-collapsable-list-item.directive.d.ts +1 -1
- package/auto-collapsable-list/si-auto-collapsable-list-measurable.class.d.ts +1 -1
- package/auto-collapsable-list/si-auto-collapsable-list.directive.d.ts +1 -1
- package/autocomplete/index.d.ts +1 -1
- package/autocomplete/si-autocomplete-option.directive.d.ts +1 -1
- package/autocomplete/si-autocomplete.model.d.ts +1 -1
- package/avatar/index.d.ts +1 -1
- package/avatar/si-avatar-background-color.directive.d.ts +1 -1
- package/badge/index.d.ts +1 -1
- package/breadcrumb/breadcrumb-item.model.d.ts +1 -1
- package/breadcrumb/index.d.ts +1 -1
- package/breadcrumb-router/index.d.ts +1 -1
- package/breadcrumb-router/si-breadcrumb-router.component.d.ts +1 -1
- package/breadcrumb-router/si-breadcrumb-router.model.d.ts +1 -1
- package/card/index.d.ts +1 -1
- package/circle-status/index.d.ts +1 -1
- package/color-picker/index.d.ts +1 -1
- package/column-selection-dialog/index.d.ts +1 -1
- package/column-selection-dialog/si-column-selection-dialog.types.d.ts +1 -1
- package/common/decorators/index.d.ts +1 -1
- package/common/decorators/webcomponent.decorator.d.ts +1 -1
- package/common/helpers/animation.helpers.d.ts +1 -1
- package/common/helpers/global-events.helpers.d.ts +1 -1
- package/common/helpers/index.d.ts +1 -1
- package/common/helpers/overlay-helper.d.ts +1 -1
- package/common/helpers/rtl.d.ts +1 -1
- package/common/helpers/track-by.helper.d.ts +1 -1
- package/common/index.d.ts +1 -1
- package/common/models/color-variant.model.d.ts +1 -1
- package/common/models/index.d.ts +1 -1
- package/common/models/menu.model.d.ts +1 -1
- package/common/models/positions.model.d.ts +1 -1
- package/common/models/status-type.model.d.ts +1 -1
- package/common/services/index.d.ts +1 -1
- package/connection-strength/index.d.ts +1 -1
- package/content-action-bar/index.d.ts +1 -1
- package/content-action-bar/si-content-action-bar.component.d.ts +1 -1
- package/content-action-bar/si-content-action-bar.model.d.ts +3 -3
- package/copyright-notice/index.d.ts +1 -1
- package/copyright-notice/si-copyright-notice.d.ts +1 -1
- package/dashboard/index.d.ts +17 -0
- package/dashboard/package.json +3 -0
- package/dashboard/si-dashboard-card.component.d.ts +82 -0
- package/dashboard/si-dashboard.component.d.ts +75 -0
- package/dashboard/si-dashboard.module.d.ts +8 -0
- package/dashboard/si-dashboard.service.d.ts +21 -0
- package/dashboard/widgets/si-link-widget.component.d.ts +25 -0
- package/dashboard/widgets/si-list-widget/si-list-widget-body.component.d.ts +98 -0
- package/dashboard/widgets/si-list-widget/si-list-widget-item.component.d.ts +39 -0
- package/dashboard/widgets/si-list-widget/si-list-widget.component.d.ts +115 -0
- package/dashboard/widgets/si-timeline-widget/si-timeline-widget-body.component.d.ts +21 -0
- package/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.d.ts +103 -0
- package/dashboard/widgets/si-timeline-widget/si-timeline-widget.component.d.ts +52 -0
- package/dashboard/widgets/si-value-widget-body.component.d.ts +33 -0
- package/dashboard/widgets/si-value-widget.component.d.ts +115 -0
- package/dashboard/widgets/si-widget-base.component.d.ts +48 -0
- package/datatable/index.d.ts +1 -1
- package/datatable/si-datatable-interaction.directive.d.ts +1 -1
- package/date-range-filter/index.d.ts +1 -1
- package/date-range-filter/si-date-range-filter.types.d.ts +1 -1
- package/date-range-filter/si-relative-date.component.d.ts +1 -1
- package/datepicker/components/si-calendar-date-cell.directive.d.ts +1 -1
- package/datepicker/components/si-initial-focus.component.d.ts +1 -1
- package/datepicker/index.d.ts +1 -1
- package/datepicker/si-datepicker.directive.d.ts +1 -1
- package/datepicker/si-datepicker.model.d.ts +1 -1
- package/datepicker/si-timepicker.component.d.ts +1 -1
- package/electron-titlebar/electron.helpers.d.ts +1 -1
- package/electron-titlebar/index.d.ts +1 -1
- package/empty-state/index.d.ts +1 -1
- package/fesm2022/siemens-element-ng-about.mjs +157 -0
- package/fesm2022/siemens-element-ng-about.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-accordion.mjs +16 -17
- package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-action-modal.mjs +15 -16
- package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-application-header.mjs +37 -38
- package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs +11 -11
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-autocomplete.mjs +12 -12
- package/fesm2022/siemens-element-ng-autocomplete.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-avatar.mjs +7 -7
- package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-badge.mjs +2 -2
- package/fesm2022/siemens-element-ng-badge.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +5 -5
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb.mjs +8 -9
- package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-card.mjs +7 -8
- package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-circle-status.mjs +6 -7
- package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-color-picker.mjs +5 -6
- package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +11 -12
- package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-common.mjs +14 -14
- package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-connection-strength.mjs +3 -3
- package/fesm2022/siemens-element-ng-connection-strength.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-content-action-bar.mjs +10 -11
- package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-copyright-notice.mjs +4 -4
- package/fesm2022/siemens-element-ng-copyright-notice.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-dashboard.mjs +1170 -0
- package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-datatable.mjs +2 -2
- package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-date-range-filter.mjs +13 -15
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datepicker.mjs +60 -66
- package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-electron-titlebar.mjs +7 -8
- package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-empty-state.mjs +6 -7
- package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-file-uploader.mjs +9 -10
- package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filter-bar.mjs +11 -12
- package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filtered-search.mjs +19 -20
- package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-footer.mjs +7 -8
- package/fesm2022/siemens-element-ng-footer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-form.mjs +22 -24
- package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-formly.mjs +48 -55
- package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-header-dropdown.mjs +14 -15
- package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-icon-status.mjs +3 -3
- package/fesm2022/siemens-element-ng-icon-status.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-icon.mjs +22 -19
- package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-info-page.mjs +5 -6
- package/fesm2022/siemens-element-ng-info-page.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-inline-notification.mjs +6 -7
- package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-ip-input.mjs +8 -8
- package/fesm2022/siemens-element-ng-ip-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-landing-page.mjs +121 -0
- package/fesm2022/siemens-element-ng-landing-page.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-language-switcher.mjs +9 -10
- package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-link.mjs +8 -8
- package/fesm2022/siemens-element-ng-link.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-list-details.mjs +24 -25
- package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-loading-spinner.mjs +13 -14
- package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-localization.mjs +6 -6
- package/fesm2022/siemens-element-ng-localization.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-main-detail-container.mjs +6 -7
- package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-menu.mjs +26 -26
- package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-modal.mjs +4 -4
- package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs +34 -35
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar.mjs +11 -12
- package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-number-input.mjs +7 -8
- package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-pagination.mjs +6 -7
- package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-password-strength.mjs +6 -6
- package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-password-toggle.mjs +8 -9
- package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-phone-number.mjs +17 -18
- package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-photo-upload.mjs +8 -10
- package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-pills-input.mjs +13 -14
- package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-popover-next.mjs +7 -7
- package/fesm2022/siemens-element-ng-popover-next.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-popover.mjs +3 -3
- package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-progressbar.mjs +7 -8
- package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-resize-observer.mjs +7 -7
- package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-result-details-list.mjs +6 -7
- package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-search-bar.mjs +6 -6
- package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-select.mjs +46 -47
- package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-shadow-root.mjs +2 -2
- package/fesm2022/siemens-element-ng-shadow-root.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-side-panel.mjs +12 -13
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-skip-links.mjs +7 -8
- package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-slider.mjs +7 -8
- package/fesm2022/siemens-element-ng-slider.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-sort-bar.mjs +6 -7
- package/fesm2022/siemens-element-ng-sort-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-split.mjs +6 -7
- package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-bar.mjs +13 -14
- package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-toggle.mjs +6 -7
- package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-summary-chip.mjs +5 -6
- package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-summary-widget.mjs +5 -6
- package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-system-banner.mjs +5 -6
- package/fesm2022/siemens-element-ng-system-banner.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tabs-next.mjs +16 -17
- package/fesm2022/siemens-element-ng-tabs-next.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tabs.mjs +9 -16
- package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-theme.mjs +3 -3
- package/fesm2022/siemens-element-ng-theme.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-threshold.mjs +11 -12
- package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-toast-notification.mjs +11 -12
- package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tooltip.mjs +9 -10
- package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tour.mjs +7 -8
- package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-translate.mjs +1 -1
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +53 -68
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-typeahead.mjs +15 -16
- package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-unauthorized-page.mjs +6 -7
- package/fesm2022/siemens-element-ng-unauthorized-page.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-wizard.mjs +9 -10
- package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
- package/fesm2022/siemens-element-ng.mjs +1 -1
- package/fesm2022/siemens-element-ng.mjs.map +1 -1
- package/file-uploader/index.d.ts +1 -1
- package/file-uploader/si-file-uploader.model.d.ts +1 -1
- package/filter-bar/filter.d.ts +1 -1
- package/filter-bar/index.d.ts +1 -1
- package/filtered-search/index.d.ts +1 -1
- package/filtered-search/si-filtered-search-value.component.d.ts +1 -1
- package/filtered-search/si-filtered-search.component.d.ts +1 -1
- package/filtered-search/si-filtered-search.model.d.ts +1 -1
- package/filtered-search/values/si-filtered-search-value.base.d.ts +1 -1
- package/filtered-search/values/typeahead/si-filtered-search-typeahead.component.d.ts +1 -1
- package/footer/index.d.ts +1 -1
- package/form/form-fieldset/si-form-fieldset.component.d.ts +1 -1
- package/form/index.d.ts +1 -1
- package/form/si-form-container/si-form-container.component.d.ts +24 -24
- package/form/si-form-item/si-form-field-native.control.d.ts +1 -1
- package/form/si-form-item.control.d.ts +1 -1
- package/form/si-form-validation-error.model.d.ts +1 -1
- package/form/si-form-validation-error.provider.d.ts +1 -1
- package/form/si-form-validation-tooltip/si-form-validation-tooltip.component.d.ts +1 -1
- package/form/si-form-validation-tooltip/si-form-validation-tooltip.directive.d.ts +1 -1
- package/form/si-form.module.d.ts +1 -1
- package/formly/fields/datetime/si-formly-datetime.component.d.ts +1 -1
- package/formly/fields/textarea/si-formly-textarea.component.d.ts +1 -1
- package/formly/fields/time/si-formly-time.component.d.ts +1 -1
- package/formly/index.d.ts +1 -1
- package/formly/si-formly-translate.extension.d.ts +1 -3
- package/formly/si-formly.component.d.ts +1 -1
- package/formly/structural/si-formly-accordion/si-formly-accordion.component.d.ts +1 -1
- package/formly/structural/si-formly-object-grid/si-formly-object-grid.component.d.ts +1 -1
- package/formly/structural/si-formly-object-grid/si-formly-object-grid.model.d.ts +1 -1
- package/formly/utils.d.ts +1 -1
- package/formly/wrapper/si-formly-form-field-provider.directive.d.ts +1 -1
- package/header-dropdown/index.d.ts +1 -1
- package/header-dropdown/si-header.model.d.ts +1 -1
- package/icon/element-icons.d.ts +5 -1
- package/icon/icon-status.d.ts +1 -1
- package/icon/index.d.ts +1 -1
- package/icon-status/index.d.ts +1 -1
- package/info-page/index.d.ts +1 -1
- package/inline-notification/index.d.ts +1 -1
- package/ip-input/address-utils.d.ts +1 -1
- package/ip-input/address-validators.d.ts +1 -1
- package/ip-input/index.d.ts +1 -1
- package/ip-input/si-ip-input.directive.d.ts +1 -1
- package/landing-page/alert-config.model.d.ts +15 -0
- package/landing-page/index.d.ts +7 -0
- package/landing-page/package.json +3 -0
- package/landing-page/si-landing-page.component.d.ts +74 -0
- package/landing-page/si-landing-page.module.d.ts +7 -0
- package/language-switcher/index.d.ts +1 -1
- package/language-switcher/iso-language-value.d.ts +1 -1
- package/language-switcher/si-language-switcher.component.d.ts +1 -2
- package/link/aria-current.model.d.ts +1 -1
- package/link/index.d.ts +1 -1
- package/link/link.model.d.ts +1 -1
- package/list-details/index.d.ts +1 -1
- package/list-details/si-details-pane-header/si-details-pane-header.component.d.ts +1 -1
- package/loading-spinner/index.d.ts +1 -1
- package/localization/index.d.ts +1 -1
- package/localization/si-directionality.d.ts +1 -1
- package/localization/si-locale-store.d.ts +1 -1
- package/main-detail-container/index.d.ts +1 -1
- package/menu/index.d.ts +1 -1
- package/menu/si-menu-action.service.d.ts +1 -1
- package/menu/si-menu-factory.component.d.ts +1 -1
- package/menu/si-menu-item-checkbox.component.d.ts +2 -1
- package/menu/si-menu-model.d.ts +1 -1
- package/modal/index.d.ts +1 -1
- package/modal/modal.helpers.d.ts +1 -1
- package/modal/modalref.d.ts +1 -1
- package/navbar/account.model.d.ts +1 -1
- package/navbar/index.d.ts +1 -1
- package/navbar/si-navbar-item/index.d.ts +1 -1
- package/navbar/si-navbar-primary/index.d.ts +1 -1
- package/navbar/si-navbar-primary/si-navbar-primary.model.d.ts +1 -1
- package/navbar-vertical/index.d.ts +1 -1
- package/navbar-vertical/si-navbar-vertical.model.d.ts +1 -1
- package/navbar-vertical/si-navbar-vertical.provider.d.ts +1 -1
- package/number-input/index.d.ts +1 -1
- package/number-input/si-number-input.component.d.ts +1 -1
- package/package.json +15 -3
- package/pagination/index.d.ts +1 -1
- package/password-strength/index.d.ts +1 -1
- package/password-strength/si-password-strength.component.d.ts +1 -1
- package/password-toggle/index.d.ts +1 -1
- package/phone-number/index.d.ts +1 -1
- package/phone-number/si-phone-number-input.models.d.ts +1 -1
- package/photo-upload/index.d.ts +1 -1
- package/pills-input/index.d.ts +1 -1
- package/pills-input/si-pills-input-pattern-base.d.ts +1 -1
- package/pills-input/si-pills-input.component.d.ts +1 -1
- package/popover/index.d.ts +1 -1
- package/popover/si-popover.component.d.ts +1 -1
- package/popover-next/index.d.ts +1 -1
- package/progressbar/index.d.ts +1 -1
- package/public-api.d.ts +1 -1
- package/resize-observer/index.d.ts +1 -1
- package/resize-observer/si-resize-observer.directive.d.ts +1 -1
- package/resize-observer/si-responsive-container.directive.d.ts +1 -1
- package/result-details-list/index.d.ts +1 -1
- package/result-details-list/si-result-details-list.datamodel.d.ts +1 -1
- package/search-bar/index.d.ts +1 -1
- package/search-bar/si-search-bar.component.d.ts +1 -1
- package/select/index.d.ts +1 -1
- package/select/options/si-select-complex-options.directive.d.ts +1 -1
- package/select/options/si-select-lazy-options.directive.d.ts +1 -1
- package/select/options/si-select-option.source.d.ts +1 -1
- package/select/options/si-select-options-strategy.base.d.ts +1 -1
- package/select/options/si-select-options-strategy.d.ts +1 -1
- package/select/options/si-select-simple-options.directive.d.ts +1 -1
- package/select/select-input/si-select-input.component.d.ts +1 -1
- package/select/select-list/si-select-list.base.d.ts +1 -1
- package/select/select-list/si-select-list.component.d.ts +1 -1
- package/select/select-option/si-select-option-row.component.d.ts +1 -1
- package/select/selection/si-select-selection-strategy.d.ts +1 -1
- package/select/si-select.types.d.ts +1 -1
- package/shadow-root/index.d.ts +1 -1
- package/shadow-root/si-shadow-root.directive.d.ts +1 -1
- package/side-panel/index.d.ts +1 -1
- package/side-panel/si-side-panel.service.d.ts +1 -1
- package/side-panel/side-panel.model.d.ts +1 -1
- package/skip-links/index.d.ts +1 -1
- package/skip-links/si-skip-link-target.directive.d.ts +1 -1
- package/slider/index.d.ts +1 -1
- package/sort-bar/index.d.ts +1 -1
- package/sort-bar/si-sort-bar.component.d.ts +1 -1
- package/split/index.d.ts +1 -1
- package/split/si-split.interfaces.d.ts +1 -1
- package/status-bar/index.d.ts +1 -1
- package/status-bar/si-status-bar-item/index.d.ts +1 -1
- package/status-bar/si-status-bar-item/si-status-bar-item.model.d.ts +1 -1
- package/status-toggle/index.d.ts +1 -1
- package/status-toggle/status-toggle.model.d.ts +1 -1
- package/summary-chip/index.d.ts +1 -1
- package/summary-widget/index.d.ts +1 -1
- package/system-banner/index.d.ts +1 -1
- package/tabs/index.d.ts +1 -1
- package/tabs/si-tab/index.d.ts +1 -1
- package/tabs/si-tab/si-tab.component.d.ts +1 -1
- package/tabs/si-tabset/index.d.ts +1 -1
- package/tabs-next/index.d.ts +1 -1
- package/tabs-next/si-tab-next-base.directive.d.ts +1 -1
- package/tabs-next/si-tabs-tokens.d.ts +1 -1
- package/tabs-next/si-tabset-next.component.d.ts +1 -1
- package/template-i18n.json +5 -0
- package/theme/index.d.ts +1 -1
- package/theme/si-theme-store.d.ts +1 -1
- package/theme/si-theme.model.d.ts +1 -1
- package/threshold/index.d.ts +1 -1
- package/toast-notification/index.d.ts +1 -1
- package/toast-notification/si-toast.model.d.ts +1 -1
- package/tooltip/index.d.ts +1 -1
- package/tooltip/si-tooltip.component.d.ts +1 -1
- package/tooltip/si-tooltip.directive.d.ts +1 -1
- package/tooltip/si-tooltip.service.d.ts +1 -1
- package/tour/index.d.ts +1 -1
- package/tour/si-tour-token.model.d.ts +1 -1
- package/tour/si-tour.model.d.ts +1 -1
- package/translate/index.d.ts +1 -1
- package/translate/si-translatable-keys.interface.d.ts +5 -0
- package/translate/si-translatable-overrides.provider.d.ts +1 -1
- package/tree-view/drag-drop.util.d.ts +1 -1
- package/tree-view/index.d.ts +1 -1
- package/tree-view/si-tree-view-item/si-tree-view-item.component.d.ts +4 -5
- package/tree-view/si-tree-view-item/si-tree-view-item.directive.d.ts +1 -1
- package/tree-view/si-tree-view-item-context.d.ts +1 -1
- package/tree-view/si-tree-view-item-height.service.d.ts +1 -1
- package/tree-view/si-tree-view-item-template.directive.d.ts +1 -1
- package/tree-view/si-tree-view.component.d.ts +9 -8
- package/tree-view/si-tree-view.model.d.ts +1 -1
- package/tree-view/si-tree-view.service.d.ts +1 -1
- package/tree-view/si-tree-view.utils.d.ts +1 -1
- package/typeahead/index.d.ts +1 -1
- package/typeahead/si-typeahead.directive.d.ts +1 -1
- package/typeahead/si-typeahead.model.d.ts +1 -1
- package/typeahead/si-typeahead.sorting.d.ts +1 -1
- package/unauthorized-page/index.d.ts +1 -1
- package/wizard/index.d.ts +1 -1
|
@@ -0,0 +1,1170 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, input, booleanAttribute, output, signal, computed, inject, ElementRef, Component, viewChild, ChangeDetectorRef, NgModule, model } from '@angular/core';
|
|
3
|
+
import { SiCardComponent } from '@siemens/element-ng/card';
|
|
4
|
+
import { SiContentActionBarComponent } from '@siemens/element-ng/content-action-bar';
|
|
5
|
+
import * as i1 from '@siemens/element-translate-ng/translate';
|
|
6
|
+
import { SiTranslateModule } from '@siemens/element-translate-ng/translate';
|
|
7
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
8
|
+
import * as i1$1 from '@angular/cdk/portal';
|
|
9
|
+
import { CdkPortalOutlet, DomPortal, PortalModule } from '@angular/cdk/portal';
|
|
10
|
+
import { ViewportScroller, DOCUMENT, NgClass } from '@angular/common';
|
|
11
|
+
import { ScrollbarHelper } from '@siemens/element-ng/common';
|
|
12
|
+
import { ResizeObserverService, BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';
|
|
13
|
+
import { takeUntil } from 'rxjs/operators';
|
|
14
|
+
import { addIcons, elementRight2, SiIconNextComponent, elementSortUp, elementSortDown, SiIconComponent, SiStatusIconComponent } from '@siemens/element-ng/icon';
|
|
15
|
+
import { SiLinkDirective } from '@siemens/element-ng/link';
|
|
16
|
+
import * as i2 from '@angular/forms';
|
|
17
|
+
import { FormsModule } from '@angular/forms';
|
|
18
|
+
import { SiSearchBarComponent } from '@siemens/element-ng/search-bar';
|
|
19
|
+
import { A11yModule } from '@angular/cdk/a11y';
|
|
20
|
+
import { CdkMenuTrigger } from '@angular/cdk/menu';
|
|
21
|
+
import { ActivatedRoute, RouterLink } from '@angular/router';
|
|
22
|
+
import * as i2$1 from '@siemens/element-ng/menu';
|
|
23
|
+
import { SiMenuModule } from '@siemens/element-ng/menu';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
27
|
+
* SPDX-License-Identifier: MIT
|
|
28
|
+
*/
|
|
29
|
+
class SiDashboardService {
|
|
30
|
+
cards = new BehaviorSubject([]);
|
|
31
|
+
/**
|
|
32
|
+
* Subject containing the current dashboard cards as a list.
|
|
33
|
+
*
|
|
34
|
+
* @defaultValue this.cards.asObservable()
|
|
35
|
+
*/
|
|
36
|
+
cards$ = this.cards.asObservable();
|
|
37
|
+
/**
|
|
38
|
+
* Registers a new dashboard card.
|
|
39
|
+
*/
|
|
40
|
+
register(card) {
|
|
41
|
+
const nextCards = this.cards.value;
|
|
42
|
+
nextCards.push(card);
|
|
43
|
+
this.cards.next(nextCards);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Removes a registered dashboard card.
|
|
47
|
+
*/
|
|
48
|
+
unregister(card) {
|
|
49
|
+
const nextCards = this.cards.value;
|
|
50
|
+
const index = nextCards.indexOf(card);
|
|
51
|
+
if (index > -1) {
|
|
52
|
+
nextCards.splice(index, 1);
|
|
53
|
+
this.cards.next(nextCards);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
57
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardService });
|
|
58
|
+
}
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardService, decorators: [{
|
|
60
|
+
type: Injectable
|
|
61
|
+
}] });
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
65
|
+
* SPDX-License-Identifier: MIT
|
|
66
|
+
*/
|
|
67
|
+
class SiDashboardCardComponent extends SiCardComponent {
|
|
68
|
+
/**
|
|
69
|
+
* Description of cancel button & action.
|
|
70
|
+
*
|
|
71
|
+
* @defaultValue
|
|
72
|
+
* ```
|
|
73
|
+
* $localize`:@@SI_DASHBOARD.RESTORE:Restore`
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
restoreText = input($localize `:@@SI_DASHBOARD.RESTORE:Restore`);
|
|
77
|
+
/**
|
|
78
|
+
* Description of expand button & action.
|
|
79
|
+
*
|
|
80
|
+
* @defaultValue
|
|
81
|
+
* ```
|
|
82
|
+
* $localize`:@@SI_DASHBOARD.EXPAND:Expand`
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
expandText = input($localize `:@@SI_DASHBOARD.EXPAND:Expand`);
|
|
86
|
+
/**
|
|
87
|
+
* Option to enable and show the UI controls for card expand functionality.
|
|
88
|
+
* `Expand` and `restore` action items will be added to the content action bar.
|
|
89
|
+
* The expand resizing has to be implemented by the container of the card.
|
|
90
|
+
*
|
|
91
|
+
* @defaultValue false
|
|
92
|
+
*/
|
|
93
|
+
enableExpandInteraction = input(false, { transform: booleanAttribute });
|
|
94
|
+
/**
|
|
95
|
+
* Used in combination with si-dashboard to show filters when a card is expanded or not.
|
|
96
|
+
*
|
|
97
|
+
* @defaultValue true
|
|
98
|
+
*/
|
|
99
|
+
showMenubar = input(true, { transform: booleanAttribute });
|
|
100
|
+
/**
|
|
101
|
+
* Emitter for size state change
|
|
102
|
+
*/
|
|
103
|
+
expandChange = output();
|
|
104
|
+
/**
|
|
105
|
+
* Whether the card is currently expanded.
|
|
106
|
+
*
|
|
107
|
+
* @defaultValue false
|
|
108
|
+
*/
|
|
109
|
+
isExpanded = signal(false);
|
|
110
|
+
/** @internal */
|
|
111
|
+
hide = false;
|
|
112
|
+
/** @internal */
|
|
113
|
+
enableExpandInteractionInternal = signal(false);
|
|
114
|
+
enableExpandInteractionComputed = computed(() => this.enableExpandInteraction() || this.enableExpandInteractionInternal());
|
|
115
|
+
/** @internal */
|
|
116
|
+
element = inject(ElementRef);
|
|
117
|
+
displayContentActionBar = computed(() => this.primaryActionsComputed()?.length > 0 || this.secondaryActions()?.length > 0);
|
|
118
|
+
actionBarViewTypeComputed = computed(() => {
|
|
119
|
+
if (!this.hasContentBarActions()) {
|
|
120
|
+
if (this.enableExpandInteractionComputed()) {
|
|
121
|
+
return 'expanded';
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
return this.actionBarViewType();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
return this.actionBarViewType();
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
actionBarTitleComputed = computed(() => {
|
|
132
|
+
if (!this.hasContentBarActions()) {
|
|
133
|
+
if (this.enableExpandInteractionComputed()) {
|
|
134
|
+
return this.expandRestoreIconTooltip();
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
return this.actionBarTitle();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
return this.actionBarTitle();
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
primaryActionsComputed = computed(() => {
|
|
145
|
+
const expandRestoreButtonActions = [
|
|
146
|
+
{
|
|
147
|
+
type: 'action',
|
|
148
|
+
label: this.isExpanded() ? this.restoreText() : this.expandText(),
|
|
149
|
+
icon: this.isExpanded() ? 'element-pinch' : 'element-zoom',
|
|
150
|
+
iconOnly: true,
|
|
151
|
+
action: () => this.expandCard(!this.isExpanded())
|
|
152
|
+
}
|
|
153
|
+
];
|
|
154
|
+
if (!this.hasContentBarActions()) {
|
|
155
|
+
if (this.enableExpandInteractionComputed()) {
|
|
156
|
+
return expandRestoreButtonActions;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
return [];
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
if (!this.enableExpandInteractionComputed()) {
|
|
164
|
+
return this.primaryActions();
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
const action = this.isExpanded() ? this.restoreActionItem() : this.expandActionItem();
|
|
168
|
+
if (this.primaryActions() && this.primaryActions().length > 0) {
|
|
169
|
+
return [...this.primaryActions(), action];
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
return [action];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
expandRestoreIconTooltip = computed(() => {
|
|
178
|
+
return this.isExpanded() ? this.restoreText() : this.expandText();
|
|
179
|
+
});
|
|
180
|
+
expandActionItem = computed(() => {
|
|
181
|
+
return {
|
|
182
|
+
type: 'action',
|
|
183
|
+
label: this.expandText(),
|
|
184
|
+
icon: 'element-zoom',
|
|
185
|
+
iconOnly: true,
|
|
186
|
+
action: () => this.expandCard(true)
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
restoreActionItem = computed(() => {
|
|
190
|
+
return {
|
|
191
|
+
type: 'action',
|
|
192
|
+
label: this.restoreText(),
|
|
193
|
+
icon: 'element-pinch',
|
|
194
|
+
iconOnly: true,
|
|
195
|
+
action: () => this.expandCard(false)
|
|
196
|
+
};
|
|
197
|
+
});
|
|
198
|
+
hasContentBarActions = computed(() => {
|
|
199
|
+
return this.primaryActions()?.length > 0 || this.secondaryActions()?.length > 0;
|
|
200
|
+
});
|
|
201
|
+
dashboardService = inject(SiDashboardService, { optional: true });
|
|
202
|
+
constructor() {
|
|
203
|
+
super();
|
|
204
|
+
this.dashboardService?.register(this);
|
|
205
|
+
}
|
|
206
|
+
ngOnDestroy() {
|
|
207
|
+
this.dashboardService?.unregister(this);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Expand the dashboard card.
|
|
211
|
+
*/
|
|
212
|
+
expand() {
|
|
213
|
+
this.expandCard(true);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Restore the dashboard card to the original, non-expanded state.
|
|
217
|
+
*/
|
|
218
|
+
restore() {
|
|
219
|
+
this.expandCard(false);
|
|
220
|
+
}
|
|
221
|
+
expandCard(expand) {
|
|
222
|
+
this.isExpanded.set(expand);
|
|
223
|
+
this.expandChange.emit(expand);
|
|
224
|
+
}
|
|
225
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
226
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiDashboardCardComponent, isStandalone: true, selector: "si-dashboard-card", inputs: { restoreText: { classPropertyName: "restoreText", publicName: "restoreText", isSignal: true, isRequired: false, transformFunction: null }, expandText: { classPropertyName: "expandText", publicName: "expandText", isSignal: true, isRequired: false, transformFunction: null }, enableExpandInteraction: { classPropertyName: "enableExpandInteraction", publicName: "enableExpandInteraction", isSignal: true, isRequired: false, transformFunction: null }, showMenubar: { classPropertyName: "showMenubar", publicName: "showMenubar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expandChange: "expandChange" }, host: { properties: { "class.elevation-2": "isExpanded()", "class.expanded": "isExpanded()", "class.d-none": "hide" } }, usesInheritance: true, ngImport: i0, template: "@if (imgSrc()) {\n <img\n class=\"card-content-split\"\n [class.card-img-top]=\"imgDir() !== 'horizontal'\"\n [class.card-img-start]=\"imgDir() === 'horizontal'\"\n [attr.src]=\"imgSrc()\"\n [attr.alt]=\"imgAlt() | translate\"\n />\n}\n\n<div class=\"content-container\" [class.card-content-split]=\"imgSrc()\">\n @if (heading() || displayContentActionBar()) {\n <div class=\"card-header d-flex justify-content-between\">\n <ng-content #cardHeaderIcon select=\"[headerIcon]\" />\n @if (heading()) {\n <div class=\"text-truncate\">{{ heading() | translate }}</div>\n }\n\n <div class=\"cab d-flex ms-6 my-n4 me-n5\">\n @if (displayContentActionBar()) {\n <si-content-action-bar\n class=\"ms-auto\"\n [primaryActions]=\"primaryActionsComputed()\"\n [secondaryActions]=\"secondaryActions()\"\n [actionParam]=\"actionParam()\"\n [viewType]=\"actionBarViewTypeComputed()\"\n [attr.title]=\"actionBarTitleComputed() | translate\"\n />\n }\n </div>\n </div>\n }\n <ng-content #cardBody select=\"[body]\" />\n <ng-content #cardFooter select=\"[footer]\" />\n</div>\n", styles: [":host{block-size:100%}:host.card-horizontal{flex-direction:row}:host.expanded{position:absolute;inset:0}.card-header{block-size:40px}.text-truncate{flex:0 1 auto}.cab{flex:1 0 0;min-inline-size:40px}.card-img-top{block-size:50%;inline-size:auto;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, center top)}.card-img-start{block-size:auto;inline-size:50%;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, left center)}.card-content-split{flex:0 0 50%}.content-container{overflow:hidden;position:relative;display:flex;flex-direction:column;flex:1 1 auto;min-inline-size:0;word-wrap:break-word;border-radius:inherit}\n"], dependencies: [{ kind: "component", type: SiContentActionBarComponent, selector: "si-content-action-bar", inputs: ["primaryActions", "secondaryActions", "actionParam", "viewType", "toggleItemLabel", "preventIconsInDropdownMenus", "disabled"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
|
|
227
|
+
}
|
|
228
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardCardComponent, decorators: [{
|
|
229
|
+
type: Component,
|
|
230
|
+
args: [{ selector: 'si-dashboard-card', imports: [SiContentActionBarComponent, SiTranslateModule], host: {
|
|
231
|
+
'[class.elevation-2]': 'isExpanded()',
|
|
232
|
+
'[class.expanded]': 'isExpanded()',
|
|
233
|
+
'[class.d-none]': 'hide'
|
|
234
|
+
}, template: "@if (imgSrc()) {\n <img\n class=\"card-content-split\"\n [class.card-img-top]=\"imgDir() !== 'horizontal'\"\n [class.card-img-start]=\"imgDir() === 'horizontal'\"\n [attr.src]=\"imgSrc()\"\n [attr.alt]=\"imgAlt() | translate\"\n />\n}\n\n<div class=\"content-container\" [class.card-content-split]=\"imgSrc()\">\n @if (heading() || displayContentActionBar()) {\n <div class=\"card-header d-flex justify-content-between\">\n <ng-content #cardHeaderIcon select=\"[headerIcon]\" />\n @if (heading()) {\n <div class=\"text-truncate\">{{ heading() | translate }}</div>\n }\n\n <div class=\"cab d-flex ms-6 my-n4 me-n5\">\n @if (displayContentActionBar()) {\n <si-content-action-bar\n class=\"ms-auto\"\n [primaryActions]=\"primaryActionsComputed()\"\n [secondaryActions]=\"secondaryActions()\"\n [actionParam]=\"actionParam()\"\n [viewType]=\"actionBarViewTypeComputed()\"\n [attr.title]=\"actionBarTitleComputed() | translate\"\n />\n }\n </div>\n </div>\n }\n <ng-content #cardBody select=\"[body]\" />\n <ng-content #cardFooter select=\"[footer]\" />\n</div>\n", styles: [":host{block-size:100%}:host.card-horizontal{flex-direction:row}:host.expanded{position:absolute;inset:0}.card-header{block-size:40px}.text-truncate{flex:0 1 auto}.cab{flex:1 0 0;min-inline-size:40px}.card-img-top{block-size:50%;inline-size:auto;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, center top)}.card-img-start{block-size:auto;inline-size:50%;object-fit:var(--si-card-img-object-fit, scale-down);object-position:var(--si-card-img-object-position, left center)}.card-content-split{flex:0 0 50%}.content-container{overflow:hidden;position:relative;display:flex;flex-direction:column;flex:1 1 auto;min-inline-size:0;word-wrap:break-word;border-radius:inherit}\n"] }]
|
|
235
|
+
}], ctorParameters: () => [] });
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
239
|
+
* SPDX-License-Identifier: MIT
|
|
240
|
+
*/
|
|
241
|
+
const FIX_SCROLL_PADDING_RESIZE_OBSERVER_THROTTLE = 10;
|
|
242
|
+
class SiDashboardComponent {
|
|
243
|
+
/**
|
|
244
|
+
* Heading for the dashboard page.
|
|
245
|
+
*/
|
|
246
|
+
heading = input();
|
|
247
|
+
/**
|
|
248
|
+
* Opt-in to enable expand interaction for all cards.
|
|
249
|
+
*
|
|
250
|
+
* @defaultValue false
|
|
251
|
+
*/
|
|
252
|
+
enableExpandInteractions = input(false, { transform: booleanAttribute });
|
|
253
|
+
/**
|
|
254
|
+
* Option to turn off the sticky behavior of the heading and menu bar.
|
|
255
|
+
*
|
|
256
|
+
* @defaultValue true
|
|
257
|
+
*/
|
|
258
|
+
sticky = input(true, { transform: booleanAttribute });
|
|
259
|
+
/**
|
|
260
|
+
* Option to hide the menu bar.
|
|
261
|
+
*
|
|
262
|
+
* @defaultValue false
|
|
263
|
+
*/
|
|
264
|
+
hideMenubar = input(false, { transform: booleanAttribute });
|
|
265
|
+
/**
|
|
266
|
+
* Is `true` if a card is expanded.
|
|
267
|
+
* @defaultref {@link _isExpanded}
|
|
268
|
+
*/
|
|
269
|
+
get isExpanded() {
|
|
270
|
+
return this._isExpanded;
|
|
271
|
+
}
|
|
272
|
+
dashboardFrameEndPadding = null;
|
|
273
|
+
hideMenubarComputed = computed(() => this.hideMenubar() || this.hideMenubarInternal());
|
|
274
|
+
_isExpanded = false;
|
|
275
|
+
unsubscribe = new Subject();
|
|
276
|
+
scrollPosition = [0, 0];
|
|
277
|
+
cards = [];
|
|
278
|
+
expandedPortalOutlet = viewChild.required('expandedPortalOutlet', {
|
|
279
|
+
read: CdkPortalOutlet
|
|
280
|
+
});
|
|
281
|
+
dashboardFrame = viewChild.required('dashboardFrame');
|
|
282
|
+
dashboard = viewChild.required('dashboard');
|
|
283
|
+
dashboardFrameDimensions;
|
|
284
|
+
dashboardDimensions;
|
|
285
|
+
scroller = inject(ViewportScroller);
|
|
286
|
+
dashboardService = inject(SiDashboardService);
|
|
287
|
+
resizeObserver = inject(ResizeObserverService);
|
|
288
|
+
scrollbarHelper = inject(ScrollbarHelper);
|
|
289
|
+
cdRef = inject(ChangeDetectorRef);
|
|
290
|
+
document = inject(DOCUMENT);
|
|
291
|
+
hideMenubarInternal = signal(false);
|
|
292
|
+
constructor() {
|
|
293
|
+
this.dashboardService.cards$
|
|
294
|
+
.pipe(takeUntil(this.unsubscribe))
|
|
295
|
+
.subscribe(cards => this.subscribeToCards(cards));
|
|
296
|
+
}
|
|
297
|
+
ngOnChanges(changes) {
|
|
298
|
+
if (changes.enableExpandInteractions) {
|
|
299
|
+
this.initCards();
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
ngAfterViewInit() {
|
|
303
|
+
this.resizeObserver
|
|
304
|
+
.observe(this.dashboard().nativeElement, FIX_SCROLL_PADDING_RESIZE_OBSERVER_THROTTLE)
|
|
305
|
+
.pipe(takeUntil(this.unsubscribe))
|
|
306
|
+
.subscribe(x => this.setDashboardFrameEndPadding(this.dashboardFrameDimensions, x));
|
|
307
|
+
this.resizeObserver
|
|
308
|
+
.observe(this.dashboardFrame().nativeElement, FIX_SCROLL_PADDING_RESIZE_OBSERVER_THROTTLE)
|
|
309
|
+
.pipe(takeUntil(this.unsubscribe))
|
|
310
|
+
.subscribe(dims => this.setDashboardFrameEndPadding(dims, this.dashboardDimensions));
|
|
311
|
+
}
|
|
312
|
+
ngOnDestroy() {
|
|
313
|
+
this.unsubscribe.next();
|
|
314
|
+
this.unsubscribe.complete();
|
|
315
|
+
}
|
|
316
|
+
subscribeToCards(cards) {
|
|
317
|
+
this.cards = cards;
|
|
318
|
+
this.initCards();
|
|
319
|
+
}
|
|
320
|
+
initCards() {
|
|
321
|
+
for (const card of this.cards) {
|
|
322
|
+
// We only enforce expand if the dashboard value is true, otherwise we would remove the individual
|
|
323
|
+
// card settings.
|
|
324
|
+
const enableExpandInteractions = this.enableExpandInteractions();
|
|
325
|
+
if (enableExpandInteractions) {
|
|
326
|
+
card.enableExpandInteractionInternal.set(enableExpandInteractions);
|
|
327
|
+
}
|
|
328
|
+
card.expandChange.subscribe((expand) => {
|
|
329
|
+
if (expand) {
|
|
330
|
+
this.expand(card);
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
this.restoreDashboard();
|
|
334
|
+
}
|
|
335
|
+
this.cdRef.markForCheck();
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Expands the provided card to full size in the dashboard.
|
|
341
|
+
* @param card - The card to be expanded.
|
|
342
|
+
*/
|
|
343
|
+
expand(card) {
|
|
344
|
+
if (this.isExpanded) {
|
|
345
|
+
this.restoreDashboard();
|
|
346
|
+
}
|
|
347
|
+
if (this.sticky()) {
|
|
348
|
+
this.scrollPosition = [
|
|
349
|
+
this.dashboardFrame().nativeElement.scrollLeft,
|
|
350
|
+
this.dashboardFrame().nativeElement.scrollTop
|
|
351
|
+
];
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
this.scrollPosition = this.scroller.getScrollPosition();
|
|
355
|
+
}
|
|
356
|
+
// Make sure card.expand() is called first and prevent recursions.
|
|
357
|
+
if (!card.isExpanded()) {
|
|
358
|
+
card.expand();
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
if (!card.showMenubar()) {
|
|
362
|
+
this.hideMenubarInternal.set(true);
|
|
363
|
+
}
|
|
364
|
+
this._isExpanded = true;
|
|
365
|
+
this.expandedPortalOutlet().detach();
|
|
366
|
+
this.expandedPortalOutlet().attach(new DomPortal(card.element.nativeElement));
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Restores the expanded card to it's previous position.
|
|
371
|
+
*/
|
|
372
|
+
restore() {
|
|
373
|
+
// Restore all cards
|
|
374
|
+
for (const card of this.cards) {
|
|
375
|
+
if (card.isExpanded()) {
|
|
376
|
+
card.restore();
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
// Restore the dashboard and scroll to previous position
|
|
380
|
+
this.restoreDashboard();
|
|
381
|
+
// Subscribe to cards events again
|
|
382
|
+
this.initCards();
|
|
383
|
+
this.cdRef.markForCheck();
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Restored the UI state of the dashboard. This method is only part
|
|
387
|
+
* of restoring a card and needs to be invoked after the card.restore()
|
|
388
|
+
* method. In general this is achieved by listening to card events.
|
|
389
|
+
*/
|
|
390
|
+
restoreDashboard() {
|
|
391
|
+
this.expandedPortalOutlet().detach();
|
|
392
|
+
this.hideMenubarInternal.set(false);
|
|
393
|
+
this.toggleCardsHide(false);
|
|
394
|
+
const scrollBehavior = this.document.documentElement.style.scrollBehavior;
|
|
395
|
+
this.document.documentElement.style.scrollBehavior = 'auto';
|
|
396
|
+
setTimeout(() => {
|
|
397
|
+
if (this.sticky()) {
|
|
398
|
+
this.dashboardFrame().nativeElement.scrollTo({
|
|
399
|
+
left: this.scrollPosition[0],
|
|
400
|
+
top: this.scrollPosition[1],
|
|
401
|
+
behavior: 'auto'
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
this.scroller.scrollToPosition(this.scrollPosition);
|
|
406
|
+
this.document.documentElement.style.scrollBehavior = scrollBehavior;
|
|
407
|
+
}
|
|
408
|
+
this.cdRef.markForCheck();
|
|
409
|
+
});
|
|
410
|
+
this._isExpanded = false;
|
|
411
|
+
}
|
|
412
|
+
toggleCardsHide(expand) {
|
|
413
|
+
for (const card of this.cards) {
|
|
414
|
+
card.hide = !card.isExpanded() && expand;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
setDashboardFrameEndPadding(dashboardFrameDimensions, dashboardDimensions) {
|
|
418
|
+
if (!this.sticky()) {
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
if (this.dashboardDimensions === dashboardDimensions &&
|
|
422
|
+
this.dashboardFrameDimensions === dashboardFrameDimensions) {
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
this.dashboardDimensions = dashboardDimensions;
|
|
426
|
+
this.dashboardFrameDimensions = dashboardFrameDimensions;
|
|
427
|
+
let padding = this.document.body.offsetWidth >= BOOTSTRAP_BREAKPOINTS.mdMinimum ? 32 : 16;
|
|
428
|
+
if (dashboardDimensions &&
|
|
429
|
+
dashboardFrameDimensions &&
|
|
430
|
+
dashboardDimensions.height > dashboardFrameDimensions.height) {
|
|
431
|
+
padding = padding - this.scrollbarHelper.width;
|
|
432
|
+
}
|
|
433
|
+
this.dashboardFrameEndPadding = padding;
|
|
434
|
+
this.cdRef.markForCheck();
|
|
435
|
+
}
|
|
436
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
437
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiDashboardComponent, isStandalone: true, selector: "si-dashboard", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, enableExpandInteractions: { classPropertyName: "enableExpandInteractions", publicName: "enableExpandInteractions", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, hideMenubar: { classPropertyName: "hideMenubar", publicName: "hideMenubar", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "si-layout-fixed-height" }, providers: [SiDashboardService], viewQueries: [{ propertyName: "expandedPortalOutlet", first: true, predicate: ["expandedPortalOutlet"], descendants: true, read: CdkPortalOutlet, isSignal: true }, { propertyName: "dashboardFrame", first: true, predicate: ["dashboardFrame"], descendants: true, isSignal: true }, { propertyName: "dashboard", first: true, predicate: ["dashboard"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"si-layout-fixed-height si-dashboard si-layout-main-padding py-6\"\n [class.sticky]=\"sticky()\"\n>\n <div class=\"si-dashboard-header\" [class.sticky]=\"sticky()\">\n @if (heading()) {\n <div class=\"si-layout-header\">\n <h2 class=\"si-layout-title si-layout-top-element\">{{ heading() | translate }}</h2>\n </div>\n }\n @if (!hideMenubarComputed()) {\n <div class=\"mb-6\" [class.si-layout-top-element]=\"!heading()\">\n <ng-content select=\"[menubar]\" />\n </div>\n }\n </div>\n <div\n #dashboardFrame\n class=\"si-layout-fixed-height si-dashboard-content ps-2 pt-2 ms-n2 mt-n2\"\n [class.sticky]=\"sticky()\"\n [style.padding-inline-end.px]=\"dashboardFrameEndPadding\"\n >\n <div class=\"si-layout-fixed-height\" [class.d-none]=\"isExpanded\">\n <div #dashboard class=\"si-layout-fixed-height fix-si-layout-fixed-height\">\n <ng-content select=\"[dashboard]\" />\n </div>\n </div>\n <div class=\"position-relative flex-grow-1 flex-shrink-1 mb-6\" [class.d-none]=\"!isExpanded\">\n <ng-container #expandedPortalOutlet cdkPortalOutlet />\n </div>\n </div>\n</div>\n", styles: [".si-dashboard.sticky{padding-inline-end:0;overflow-x:hidden}.si-dashboard .si-dashboard-header.sticky{padding-inline-end:16px}@media (min-width: 768px){.si-dashboard .si-dashboard-header.sticky{padding-inline-end:32px}}.si-dashboard .si-dashboard-content.sticky{overflow-y:auto;overflow-x:hidden}.si-dashboard .fix-si-layout-fixed-height{min-block-size:auto}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1$1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
|
|
438
|
+
}
|
|
439
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardComponent, decorators: [{
|
|
440
|
+
type: Component,
|
|
441
|
+
args: [{ selector: 'si-dashboard', imports: [PortalModule, SiTranslateModule], providers: [SiDashboardService], host: { class: 'si-layout-fixed-height' }, template: "<div\n class=\"si-layout-fixed-height si-dashboard si-layout-main-padding py-6\"\n [class.sticky]=\"sticky()\"\n>\n <div class=\"si-dashboard-header\" [class.sticky]=\"sticky()\">\n @if (heading()) {\n <div class=\"si-layout-header\">\n <h2 class=\"si-layout-title si-layout-top-element\">{{ heading() | translate }}</h2>\n </div>\n }\n @if (!hideMenubarComputed()) {\n <div class=\"mb-6\" [class.si-layout-top-element]=\"!heading()\">\n <ng-content select=\"[menubar]\" />\n </div>\n }\n </div>\n <div\n #dashboardFrame\n class=\"si-layout-fixed-height si-dashboard-content ps-2 pt-2 ms-n2 mt-n2\"\n [class.sticky]=\"sticky()\"\n [style.padding-inline-end.px]=\"dashboardFrameEndPadding\"\n >\n <div class=\"si-layout-fixed-height\" [class.d-none]=\"isExpanded\">\n <div #dashboard class=\"si-layout-fixed-height fix-si-layout-fixed-height\">\n <ng-content select=\"[dashboard]\" />\n </div>\n </div>\n <div class=\"position-relative flex-grow-1 flex-shrink-1 mb-6\" [class.d-none]=\"!isExpanded\">\n <ng-container #expandedPortalOutlet cdkPortalOutlet />\n </div>\n </div>\n</div>\n", styles: [".si-dashboard.sticky{padding-inline-end:0;overflow-x:hidden}.si-dashboard .si-dashboard-header.sticky{padding-inline-end:16px}@media (min-width: 768px){.si-dashboard .si-dashboard-header.sticky{padding-inline-end:32px}}.si-dashboard .si-dashboard-content.sticky{overflow-y:auto;overflow-x:hidden}.si-dashboard .fix-si-layout-fixed-height{min-block-size:auto}\n"] }]
|
|
442
|
+
}], ctorParameters: () => [] });
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
446
|
+
* SPDX-License-Identifier: MIT
|
|
447
|
+
*/
|
|
448
|
+
class SiDashboardModule {
|
|
449
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
450
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardModule, imports: [SiDashboardCardComponent, SiDashboardComponent], exports: [SiDashboardCardComponent, SiDashboardComponent] });
|
|
451
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardModule, imports: [SiDashboardCardComponent, SiDashboardComponent] });
|
|
452
|
+
}
|
|
453
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDashboardModule, decorators: [{
|
|
454
|
+
type: NgModule,
|
|
455
|
+
args: [{
|
|
456
|
+
imports: [SiDashboardCardComponent, SiDashboardComponent],
|
|
457
|
+
exports: [SiDashboardCardComponent, SiDashboardComponent]
|
|
458
|
+
}]
|
|
459
|
+
}] });
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
463
|
+
* SPDX-License-Identifier: MIT
|
|
464
|
+
*/
|
|
465
|
+
/**
|
|
466
|
+
* The SiWidgetBaseComponent<T> implements the timing for the skeleton loading
|
|
467
|
+
* indicator of widgets. It supports a generic value input property that represents
|
|
468
|
+
* the main value to be displayed by a widget. When the value is not set, the `showLoadingIndicator`
|
|
469
|
+
* changes after the `initialLoadingIndicatorDebounceTime` delay to `true` and subclasses
|
|
470
|
+
* should show the skeleton loading indicator.
|
|
471
|
+
*/
|
|
472
|
+
class SiWidgetBaseComponent {
|
|
473
|
+
/**
|
|
474
|
+
* The main value to be displayed. If no value is set,
|
|
475
|
+
* the skeleton indicates the loading of the value. Disable
|
|
476
|
+
* the automatic loading mechanism by setting `SiWidgetBodyBaseComponent.disableAutoLoadingIndicator`.
|
|
477
|
+
*/
|
|
478
|
+
value = input.required();
|
|
479
|
+
/**
|
|
480
|
+
* Option to disable automatic start of skeleton loading indication.
|
|
481
|
+
*
|
|
482
|
+
* @defaultValue false
|
|
483
|
+
*/
|
|
484
|
+
disableAutoLoadingIndicator = input(false, { transform: booleanAttribute });
|
|
485
|
+
/**
|
|
486
|
+
* Input to start and stop the skeleton loading indication.
|
|
487
|
+
*
|
|
488
|
+
* @defaultValue false
|
|
489
|
+
*/
|
|
490
|
+
showLoadingIndicatorInput = input(false, {
|
|
491
|
+
// eslint-disable-next-line @angular-eslint/no-input-rename
|
|
492
|
+
alias: 'showLoadingIndicator',
|
|
493
|
+
transform: booleanAttribute
|
|
494
|
+
});
|
|
495
|
+
showLoadingIndicatorInternal = signal(false);
|
|
496
|
+
showLoadingIndicator = computed(() => {
|
|
497
|
+
return this.showLoadingIndicatorInternal() ?? this.showLoadingIndicatorInput();
|
|
498
|
+
});
|
|
499
|
+
/**
|
|
500
|
+
* Initial delay time in milliseconds before enabling loading indicator.
|
|
501
|
+
* Only used once initially during construction.
|
|
502
|
+
*
|
|
503
|
+
* @defaultValue 300
|
|
504
|
+
*/
|
|
505
|
+
initialLoadingIndicatorDebounceTime = input(300);
|
|
506
|
+
cdRef = inject(ChangeDetectorRef);
|
|
507
|
+
loadingTimer;
|
|
508
|
+
ngOnChanges(changes) {
|
|
509
|
+
if (!this.disableAutoLoadingIndicator() &&
|
|
510
|
+
!changes.value?.firstChange &&
|
|
511
|
+
changes.value?.currentValue) {
|
|
512
|
+
if (this.loadingTimer) {
|
|
513
|
+
clearTimeout(this.loadingTimer);
|
|
514
|
+
this.loadingTimer = undefined;
|
|
515
|
+
}
|
|
516
|
+
this.showLoadingIndicatorInternal.set(false);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
ngOnInit() {
|
|
520
|
+
if (!this.disableAutoLoadingIndicator() && !this.value()) {
|
|
521
|
+
this.loadingTimer = setTimeout(() => {
|
|
522
|
+
this.showLoadingIndicatorInternal.set(!this.value());
|
|
523
|
+
}, this.initialLoadingIndicatorDebounceTime());
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiWidgetBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
527
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.6", type: SiWidgetBaseComponent, isStandalone: true, selector: "ng-component", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disableAutoLoadingIndicator: { classPropertyName: "disableAutoLoadingIndicator", publicName: "disableAutoLoadingIndicator", isSignal: true, isRequired: false, transformFunction: null }, showLoadingIndicatorInput: { classPropertyName: "showLoadingIndicatorInput", publicName: "showLoadingIndicator", isSignal: true, isRequired: false, transformFunction: null }, initialLoadingIndicatorDebounceTime: { classPropertyName: "initialLoadingIndicatorDebounceTime", publicName: "initialLoadingIndicatorDebounceTime", isSignal: true, isRequired: false, transformFunction: null } }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
|
|
528
|
+
}
|
|
529
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiWidgetBaseComponent, decorators: [{
|
|
530
|
+
type: Component,
|
|
531
|
+
args: [{
|
|
532
|
+
template: ''
|
|
533
|
+
}]
|
|
534
|
+
}] });
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
538
|
+
* SPDX-License-Identifier: MIT
|
|
539
|
+
*/
|
|
540
|
+
/**
|
|
541
|
+
* The `<si-link-widget>` supports an easy composition of links and actions
|
|
542
|
+
* with support for skeleton loading indicator.
|
|
543
|
+
*/
|
|
544
|
+
class SiLinkWidgetComponent extends SiWidgetBaseComponent {
|
|
545
|
+
/**
|
|
546
|
+
* Option to enable trailing link arrow icons for each link.
|
|
547
|
+
*
|
|
548
|
+
* @defaultValue false
|
|
549
|
+
*/
|
|
550
|
+
showLinkIcons = input(false, { transform: booleanAttribute });
|
|
551
|
+
/**
|
|
552
|
+
* The number of skeleton progress indication rows.
|
|
553
|
+
*
|
|
554
|
+
* @defaultValue 3
|
|
555
|
+
*/
|
|
556
|
+
numberOfLinks = input(3);
|
|
557
|
+
ghosts = computed(() => new Array(this.numberOfLinks() ?? 3));
|
|
558
|
+
icons = addIcons({ elementRight2 });
|
|
559
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiLinkWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
560
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiLinkWidgetComponent, isStandalone: true, selector: "si-link-widget", inputs: { showLinkIcons: { classPropertyName: "showLinkIcons", publicName: "showLinkIcons", isSignal: true, isRequired: false, transformFunction: null }, numberOfLinks: { classPropertyName: "numberOfLinks", publicName: "numberOfLinks", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "si-link-widget" }, usesInheritance: true, ngImport: i0, template: "@if (!showLoadingIndicator() && value()) {\n @for (link of value(); track link) {\n @if (link.action) {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"link\">{{\n link.title | translate\n }}</button>\n } @else {\n <a [siLink]=\"link\">\n {{ link.title | translate }}\n @if (showLinkIcons()) {\n <si-icon-next class=\"link-icon link-end flip-rtl\" [icon]=\"icons.elementRight2\" />\n }\n </a>\n }\n }\n} @else {\n @for (some of ghosts(); track $index) {\n <div class=\"si-link-widget-skeleton\"></div>\n }\n}\n", dependencies: [{ kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
|
|
561
|
+
}
|
|
562
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiLinkWidgetComponent, decorators: [{
|
|
563
|
+
type: Component,
|
|
564
|
+
args: [{ selector: 'si-link-widget', imports: [SiIconNextComponent, SiLinkDirective, SiTranslateModule], host: { class: 'si-link-widget' }, template: "@if (!showLoadingIndicator() && value()) {\n @for (link of value(); track link) {\n @if (link.action) {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"link\">{{\n link.title | translate\n }}</button>\n } @else {\n <a [siLink]=\"link\">\n {{ link.title | translate }}\n @if (showLinkIcons()) {\n <si-icon-next class=\"link-icon link-end flip-rtl\" [icon]=\"icons.elementRight2\" />\n }\n </a>\n }\n }\n} @else {\n @for (some of ghosts(); track $index) {\n <div class=\"si-link-widget-skeleton\"></div>\n }\n}\n" }]
|
|
565
|
+
}] });
|
|
566
|
+
|
|
567
|
+
/**
|
|
568
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
569
|
+
* SPDX-License-Identifier: MIT
|
|
570
|
+
*/
|
|
571
|
+
/**
|
|
572
|
+
* The `<si-link-widget>` supports an easy composition of links and actions
|
|
573
|
+
* with support for skeleton loading indicator.
|
|
574
|
+
*/
|
|
575
|
+
class SiListWidgetItemComponent extends SiWidgetBaseComponent {
|
|
576
|
+
isLink = computed(() => {
|
|
577
|
+
return typeof this.value()?.label === 'object';
|
|
578
|
+
});
|
|
579
|
+
badgeColor = computed(() => {
|
|
580
|
+
return this.value()?.badgeColor ? 'bg-' + this.value()?.badgeColor : 'bg-default';
|
|
581
|
+
});
|
|
582
|
+
link = computed(() => {
|
|
583
|
+
return this.value()?.label;
|
|
584
|
+
});
|
|
585
|
+
label = computed(() => {
|
|
586
|
+
return this.value()?.label;
|
|
587
|
+
});
|
|
588
|
+
icons = addIcons({ elementRight2 });
|
|
589
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
590
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiListWidgetItemComponent, isStandalone: true, selector: "si-list-widget-item", host: { attributes: { "role": "listitem" }, classAttribute: "list-group-item d-flex align-items-center" }, usesInheritance: true, ngImport: i0, template: "@let valueObject = value();\n@if (!showLoadingIndicator() && valueObject) {\n @if (valueObject.badge) {\n <span class=\"mx-0 badge me-4\" [ngClass]=\"badgeColor()\">{{\n valueObject.badge | translate\n }}</span>\n }\n <span class=\"me-auto\">\n @if (!isLink()) {\n <span class=\"si-title-2\">{{ label() | translate }}</span>\n } @else {\n <a class=\"\" [siLink]=\"link()\"\n >{{ link().title | translate\n }}<si-icon-next class=\"link-icon link-start flip-rtl\" [icon]=\"icons.elementRight2\" />\n </a>\n }\n @if (valueObject.description) {\n <div class=\"mt-1 si-body-2 text-secondary\">{{ valueObject.description | translate }}</div>\n }\n </span>\n <span>{{ valueObject.text | translate }}</span>\n @if (valueObject.action) {\n @if (valueObject.action.action) {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-tertiary ms-4 p-2\"\n [attr.aria-label]=\"valueObject.action.title | translate\"\n [siLink]=\"valueObject.action\"\n >\n @if (valueObject.actionIcon) {\n <si-icon-next class=\"icon\" [icon]=\"valueObject.actionIcon\" />\n }\n </button>\n } @else {\n <a\n class=\"ms-4 p-2\"\n [siLink]=\"valueObject.action\"\n [attr.aria-label]=\"valueObject.action.title | translate\"\n >\n @if (valueObject.actionIcon) {\n <si-icon-next class=\"icon\" [icon]=\"valueObject.actionIcon\" />\n }\n </a>\n }\n }\n} @else {\n <div class=\"si-link-widget-skeleton my-4\"></div>\n}\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
|
|
591
|
+
}
|
|
592
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetItemComponent, decorators: [{
|
|
593
|
+
type: Component,
|
|
594
|
+
args: [{ selector: 'si-list-widget-item', imports: [NgClass, SiIconNextComponent, SiLinkDirective, SiTranslateModule], host: {
|
|
595
|
+
class: 'list-group-item d-flex align-items-center',
|
|
596
|
+
role: 'listitem'
|
|
597
|
+
}, template: "@let valueObject = value();\n@if (!showLoadingIndicator() && valueObject) {\n @if (valueObject.badge) {\n <span class=\"mx-0 badge me-4\" [ngClass]=\"badgeColor()\">{{\n valueObject.badge | translate\n }}</span>\n }\n <span class=\"me-auto\">\n @if (!isLink()) {\n <span class=\"si-title-2\">{{ label() | translate }}</span>\n } @else {\n <a class=\"\" [siLink]=\"link()\"\n >{{ link().title | translate\n }}<si-icon-next class=\"link-icon link-start flip-rtl\" [icon]=\"icons.elementRight2\" />\n </a>\n }\n @if (valueObject.description) {\n <div class=\"mt-1 si-body-2 text-secondary\">{{ valueObject.description | translate }}</div>\n }\n </span>\n <span>{{ valueObject.text | translate }}</span>\n @if (valueObject.action) {\n @if (valueObject.action.action) {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-tertiary ms-4 p-2\"\n [attr.aria-label]=\"valueObject.action.title | translate\"\n [siLink]=\"valueObject.action\"\n >\n @if (valueObject.actionIcon) {\n <si-icon-next class=\"icon\" [icon]=\"valueObject.actionIcon\" />\n }\n </button>\n } @else {\n <a\n class=\"ms-4 p-2\"\n [siLink]=\"valueObject.action\"\n [attr.aria-label]=\"valueObject.action.title | translate\"\n >\n @if (valueObject.actionIcon) {\n <si-icon-next class=\"icon\" [icon]=\"valueObject.actionIcon\" />\n }\n </a>\n }\n }\n} @else {\n <div class=\"si-link-widget-skeleton my-4\"></div>\n}\n" }]
|
|
598
|
+
}] });
|
|
599
|
+
|
|
600
|
+
/**
|
|
601
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
602
|
+
* SPDX-License-Identifier: MIT
|
|
603
|
+
*/
|
|
604
|
+
/**
|
|
605
|
+
* The `<si-list-widget-body>` implements the body of the <si-list-widget> that can be
|
|
606
|
+
* used for composition within other components.
|
|
607
|
+
*/
|
|
608
|
+
class SiListWidgetBodyComponent extends SiWidgetBaseComponent {
|
|
609
|
+
/** Optional footer link for the list widget */
|
|
610
|
+
link = input();
|
|
611
|
+
/**
|
|
612
|
+
* label for the "search placeholder" name
|
|
613
|
+
*
|
|
614
|
+
* @defaultValue
|
|
615
|
+
* ```
|
|
616
|
+
* $localize`:@@SI_LIST_WIDGET.SEARCH_PLACEHOLDER:Search...`
|
|
617
|
+
* ```
|
|
618
|
+
*/
|
|
619
|
+
searchPlaceholderLabel = input($localize `:@@SI_LIST_WIDGET.SEARCH_PLACEHOLDER:Search...`);
|
|
620
|
+
/**
|
|
621
|
+
* Enable ascending and descending SiListWidgetItem sorting. If enabled,
|
|
622
|
+
* items are initially ascending sorted.
|
|
623
|
+
*/
|
|
624
|
+
sort = input();
|
|
625
|
+
/**
|
|
626
|
+
* Enables the search functionality.
|
|
627
|
+
*
|
|
628
|
+
* @defaultValue false
|
|
629
|
+
*/
|
|
630
|
+
search = input(false, { transform: booleanAttribute });
|
|
631
|
+
/**
|
|
632
|
+
* Compare function of for two `SiListWidgetItem`s that is used to sort
|
|
633
|
+
* the array of items. The default compares the item labels by using the
|
|
634
|
+
* string `localeCompare()` function.
|
|
635
|
+
*
|
|
636
|
+
* @param a - first `SiListWidgetItem` of the comparison.
|
|
637
|
+
*
|
|
638
|
+
* @param b - second `SiListWidgetItem` of the comparison.
|
|
639
|
+
*
|
|
640
|
+
* @returns A value `< 0` if `a` is smaller, `> 0` if `b` is smaller, otherwise `0`.
|
|
641
|
+
*
|
|
642
|
+
* @defaultValue
|
|
643
|
+
* ```
|
|
644
|
+
* (
|
|
645
|
+
* a: SiListWidgetItem,
|
|
646
|
+
* b: SiListWidgetItem
|
|
647
|
+
* ) => {
|
|
648
|
+
* const aLabel = typeof a.label === 'object' ? a.label.title! : a.label;
|
|
649
|
+
* const bLabel = typeof b.label === 'object' ? b.label.title! : b.label;
|
|
650
|
+
* return aLabel.localeCompare(bLabel);
|
|
651
|
+
* }
|
|
652
|
+
* ```
|
|
653
|
+
*/
|
|
654
|
+
compareFn = input((a, b) => {
|
|
655
|
+
const aLabel = typeof a.label === 'object' ? a.label.title : a.label;
|
|
656
|
+
const bLabel = typeof b.label === 'object' ? b.label.title : b.label;
|
|
657
|
+
return aLabel.localeCompare(bLabel);
|
|
658
|
+
});
|
|
659
|
+
/**
|
|
660
|
+
* Filter function that is used to filter down the list items when the user enters
|
|
661
|
+
* a term in the search bar. Default function.
|
|
662
|
+
*
|
|
663
|
+
* @param item - The item be checked if it matches the searchTerm.
|
|
664
|
+
*
|
|
665
|
+
* @param searchTerm - The string the user typed in the search bar.
|
|
666
|
+
*
|
|
667
|
+
* @returns `true` if the `searchTerm` matches the `item` and the `item` shall be kept in the list.
|
|
668
|
+
*
|
|
669
|
+
* @defaultValue
|
|
670
|
+
* ```
|
|
671
|
+
* (
|
|
672
|
+
* item: SiListWidgetItem,
|
|
673
|
+
* searchTerm: string
|
|
674
|
+
* ) => {
|
|
675
|
+
* const aLabel = typeof item.label === 'object' ? item.label.title! : item.label;
|
|
676
|
+
* return aLabel.toLowerCase().includes(searchTerm.toLowerCase());
|
|
677
|
+
* }
|
|
678
|
+
* ```
|
|
679
|
+
*/
|
|
680
|
+
filterFn = input((item, searchTerm) => {
|
|
681
|
+
const aLabel = typeof item.label === 'object' ? item.label.title : item.label;
|
|
682
|
+
return aLabel.toLowerCase().includes(searchTerm.toLowerCase());
|
|
683
|
+
});
|
|
684
|
+
/**
|
|
685
|
+
* The number of skeleton progress indication rows.
|
|
686
|
+
*
|
|
687
|
+
* @defaultValue 6
|
|
688
|
+
*/
|
|
689
|
+
numberOfLinks = input(6);
|
|
690
|
+
/** Used to display the defined number of ghost items */
|
|
691
|
+
ghosts = computed(() => new Array(this.numberOfLinks() ?? 6));
|
|
692
|
+
/** Holds the list items that are displayed. May be filtered and sorted. */
|
|
693
|
+
filteredListWidgetItems = computed(() => {
|
|
694
|
+
const value = this.value();
|
|
695
|
+
const sort = this.sort();
|
|
696
|
+
const searchText = this.searchText();
|
|
697
|
+
let filteredListWidgetItems = value;
|
|
698
|
+
if (searchText.length > 0) {
|
|
699
|
+
filteredListWidgetItems = value?.filter((item) => this.filterFn()(item, searchText));
|
|
700
|
+
}
|
|
701
|
+
else {
|
|
702
|
+
filteredListWidgetItems = value ? [...value] : undefined;
|
|
703
|
+
}
|
|
704
|
+
if (sort) {
|
|
705
|
+
const factor = sort === 'ASC' ? 1 : -1;
|
|
706
|
+
filteredListWidgetItems = filteredListWidgetItems?.sort((a, b) => (this.compareFn()(a, b) ?? 0) * factor);
|
|
707
|
+
}
|
|
708
|
+
return filteredListWidgetItems;
|
|
709
|
+
});
|
|
710
|
+
searchText = model('');
|
|
711
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetBodyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
712
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiListWidgetBodyComponent, isStandalone: true, selector: "si-list-widget-body", inputs: { link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholderLabel: { classPropertyName: "searchPlaceholderLabel", publicName: "searchPlaceholderLabel", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, compareFn: { classPropertyName: "compareFn", publicName: "compareFn", isSignal: true, isRequired: false, transformFunction: null }, filterFn: { classPropertyName: "filterFn", publicName: "filterFn", isSignal: true, isRequired: false, transformFunction: null }, numberOfLinks: { classPropertyName: "numberOfLinks", publicName: "numberOfLinks", isSignal: true, isRequired: false, transformFunction: null }, searchText: { classPropertyName: "searchText", publicName: "searchText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchText: "searchTextChange" }, usesInheritance: true, ngImport: i0, template: "@if (search()) {\n <si-search-bar\n class=\"px-6 py-4\"\n showIcon\n colorVariant=\"base-0\"\n [debounceTime]=\"400\"\n [placeholder]=\"searchPlaceholderLabel() | translate\"\n [(ngModel)]=\"searchText\"\n />\n}\n@let filteredListWidgetItemsList = filteredListWidgetItems();\n@if (!showLoadingIndicator() && filteredListWidgetItemsList) {\n @if (filteredListWidgetItemsList.length > 0) {\n <div class=\"list-group list-group-lg\" role=\"list\">\n @for (item of filteredListWidgetItemsList; track $index) {\n <si-list-widget-item [value]=\"item\" />\n }\n </div>\n } @else {\n <ng-content select=\"[empty-state]\" />\n }\n} @else {\n <div class=\"list-group list-group-lg\" role=\"list\">\n @for (some of ghosts(); track $index) {\n <si-list-widget-item [value]=\"undefined\" />\n }\n </div>\n}\n", styles: [":host{background-color:var(--element-base-1);border-radius:var(--element-radius-3);display:flex;flex-direction:column;flex:1 1 auto;overflow:hidden}:host:has(si-search-bar){padding-block-start:8px}:host-context(si-card,si-dashboard-card){padding-block-start:unset!important}.list-group{border-radius:inherit;overflow-y:auto;overflow-x:hidden}\n"], dependencies: [{ kind: "component", type: SiListWidgetItemComponent, selector: "si-list-widget-item" }, { kind: "component", type: SiSearchBarComponent, selector: "si-search-bar", inputs: ["debounceTime", "prohibitedCharacters", "placeholder", "showIcon", "tabbable", "value", "readonly", "colorVariant", "disabled"], outputs: ["searchChange"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
713
|
+
}
|
|
714
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetBodyComponent, decorators: [{
|
|
715
|
+
type: Component,
|
|
716
|
+
args: [{ selector: 'si-list-widget-body', imports: [SiListWidgetItemComponent, SiSearchBarComponent, SiTranslateModule, FormsModule], host: { class: '' }, template: "@if (search()) {\n <si-search-bar\n class=\"px-6 py-4\"\n showIcon\n colorVariant=\"base-0\"\n [debounceTime]=\"400\"\n [placeholder]=\"searchPlaceholderLabel() | translate\"\n [(ngModel)]=\"searchText\"\n />\n}\n@let filteredListWidgetItemsList = filteredListWidgetItems();\n@if (!showLoadingIndicator() && filteredListWidgetItemsList) {\n @if (filteredListWidgetItemsList.length > 0) {\n <div class=\"list-group list-group-lg\" role=\"list\">\n @for (item of filteredListWidgetItemsList; track $index) {\n <si-list-widget-item [value]=\"item\" />\n }\n </div>\n } @else {\n <ng-content select=\"[empty-state]\" />\n }\n} @else {\n <div class=\"list-group list-group-lg\" role=\"list\">\n @for (some of ghosts(); track $index) {\n <si-list-widget-item [value]=\"undefined\" />\n }\n </div>\n}\n", styles: [":host{background-color:var(--element-base-1);border-radius:var(--element-radius-3);display:flex;flex-direction:column;flex:1 1 auto;overflow:hidden}:host:has(si-search-bar){padding-block-start:8px}:host-context(si-card,si-dashboard-card){padding-block-start:unset!important}.list-group{border-radius:inherit;overflow-y:auto;overflow-x:hidden}\n"] }]
|
|
717
|
+
}] });
|
|
718
|
+
|
|
719
|
+
/**
|
|
720
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
721
|
+
* SPDX-License-Identifier: MIT
|
|
722
|
+
*/
|
|
723
|
+
/**
|
|
724
|
+
* The `<si-list-widget>` supports an easy composition of links and actions
|
|
725
|
+
* with support for skeleton loading indicator, wrapped in a card.
|
|
726
|
+
*/
|
|
727
|
+
class SiListWidgetComponent extends SiWidgetBaseComponent {
|
|
728
|
+
icons = addIcons({ elementRight2, elementSortDown, elementSortUp });
|
|
729
|
+
/** List widget heading. */
|
|
730
|
+
heading = input();
|
|
731
|
+
/** Optional footer link for the list widget */
|
|
732
|
+
link = input();
|
|
733
|
+
/**
|
|
734
|
+
* label for the "search placeholder" name
|
|
735
|
+
*
|
|
736
|
+
* @defaultValue
|
|
737
|
+
* ```
|
|
738
|
+
* $localize`:@@SI_LIST_WIDGET.SEARCH_PLACEHOLDER:Search...`
|
|
739
|
+
* ```
|
|
740
|
+
*/
|
|
741
|
+
searchPlaceholderLabel = input($localize `:@@SI_LIST_WIDGET.SEARCH_PLACEHOLDER:Search...`);
|
|
742
|
+
/**
|
|
743
|
+
* @defaultValue
|
|
744
|
+
* ```
|
|
745
|
+
* $localize`:@@SI_LIST_WIDGET.SORT_ASCENDING:Sort ascending`
|
|
746
|
+
* ```
|
|
747
|
+
*/
|
|
748
|
+
sortAscendingLabel = input($localize `:@@SI_LIST_WIDGET.SORT_ASCENDING:Sort ascending`);
|
|
749
|
+
/**
|
|
750
|
+
* @defaultValue
|
|
751
|
+
* ```
|
|
752
|
+
* $localize`:@@SI_LIST_WIDGET.SORT_DESCENDING:Sort descending`
|
|
753
|
+
* ```
|
|
754
|
+
*/
|
|
755
|
+
sortDescendingLabel = input($localize `:@@SI_LIST_WIDGET.SORT_DESCENDING:Sort descending`);
|
|
756
|
+
/**
|
|
757
|
+
* Set `ASC` of ascending sorting, `DSC` for descending sorting and `undefined` for no sorting.
|
|
758
|
+
*/
|
|
759
|
+
sort = model();
|
|
760
|
+
/**
|
|
761
|
+
* Enables the search functionality.
|
|
762
|
+
*
|
|
763
|
+
* @defaultValue false
|
|
764
|
+
*/
|
|
765
|
+
search = input(false, { transform: booleanAttribute });
|
|
766
|
+
/**
|
|
767
|
+
* Compare function of for two `SiListWidgetItem`s that is used to sort
|
|
768
|
+
* the array of items. The default compares the item labels by using the
|
|
769
|
+
* string `localeCompare()` function.
|
|
770
|
+
*
|
|
771
|
+
* @param a - first `SiListWidgetItem` of the comparison.
|
|
772
|
+
*
|
|
773
|
+
* @param b - second `SiListWidgetItem` of the comparison.
|
|
774
|
+
*
|
|
775
|
+
* @returns A value `< 0` if `a` is smaller, `> 0` if `b` is smaller, otherwise `0`.
|
|
776
|
+
*
|
|
777
|
+
* @defaultValue
|
|
778
|
+
* ```
|
|
779
|
+
* (
|
|
780
|
+
* a: SiListWidgetItem,
|
|
781
|
+
* b: SiListWidgetItem
|
|
782
|
+
* ) => {
|
|
783
|
+
* const aLabel = typeof a.label === 'object' ? a.label.title! : a.label;
|
|
784
|
+
* const bLabel = typeof b.label === 'object' ? b.label.title! : b.label;
|
|
785
|
+
* return aLabel.localeCompare(bLabel);
|
|
786
|
+
* }
|
|
787
|
+
* ```
|
|
788
|
+
*/
|
|
789
|
+
compareFn = input((a, b) => {
|
|
790
|
+
const aLabel = typeof a.label === 'object' ? a.label.title : a.label;
|
|
791
|
+
const bLabel = typeof b.label === 'object' ? b.label.title : b.label;
|
|
792
|
+
return aLabel.localeCompare(bLabel);
|
|
793
|
+
});
|
|
794
|
+
/**
|
|
795
|
+
* Filter function that is used to filter down the list items when the user enters
|
|
796
|
+
* a term in the search bar. Default function.
|
|
797
|
+
*
|
|
798
|
+
* @param item - The item be checked if it matches the searchTerm.
|
|
799
|
+
*
|
|
800
|
+
* @param searchTerm - The string the user typed in the search bar.
|
|
801
|
+
*
|
|
802
|
+
* @returns `true` if the `searchTerm` matches the `item` and the `item` shall be kept in the list.
|
|
803
|
+
*
|
|
804
|
+
* @defaultValue
|
|
805
|
+
* ```
|
|
806
|
+
* (
|
|
807
|
+
* item: SiListWidgetItem,
|
|
808
|
+
* searchTerm: string
|
|
809
|
+
* ) => {
|
|
810
|
+
* const aLabel = typeof item.label === 'object' ? item.label.title! : item.label;
|
|
811
|
+
* return aLabel.toLowerCase().includes(searchTerm.toLowerCase());
|
|
812
|
+
* }
|
|
813
|
+
* ```
|
|
814
|
+
*/
|
|
815
|
+
filterFn = input((item, searchTerm) => {
|
|
816
|
+
const aLabel = typeof item.label === 'object' ? item.label.title : item.label;
|
|
817
|
+
return aLabel.toLowerCase().includes(searchTerm.toLowerCase());
|
|
818
|
+
});
|
|
819
|
+
/**
|
|
820
|
+
* The number of skeleton progress indication rows.
|
|
821
|
+
*
|
|
822
|
+
* @defaultValue 6
|
|
823
|
+
*/
|
|
824
|
+
numberOfLinks = input(6);
|
|
825
|
+
/**
|
|
826
|
+
* Optional accent line
|
|
827
|
+
*/
|
|
828
|
+
accentLine = input();
|
|
829
|
+
accentClass = computed(() => {
|
|
830
|
+
const accentLine = this.accentLine();
|
|
831
|
+
return accentLine ? 'accent-' + accentLine : '';
|
|
832
|
+
});
|
|
833
|
+
/** The menu item array used to display the sort button. */
|
|
834
|
+
sortAction = computed(() => {
|
|
835
|
+
const sortAction = [
|
|
836
|
+
{
|
|
837
|
+
label: this.sortDescendingLabel(),
|
|
838
|
+
type: 'action',
|
|
839
|
+
icon: this.icons.elementSortUp,
|
|
840
|
+
iconOnly: true,
|
|
841
|
+
action: () => this.doSort()
|
|
842
|
+
}
|
|
843
|
+
];
|
|
844
|
+
if (this.sort() === 'ASC') {
|
|
845
|
+
sortAction[0].label = this.sortDescendingLabel();
|
|
846
|
+
sortAction[0].icon = this.icons.elementSortUp;
|
|
847
|
+
}
|
|
848
|
+
else {
|
|
849
|
+
sortAction[0].label = this.sortAscendingLabel();
|
|
850
|
+
sortAction[0].icon = this.icons.elementSortDown;
|
|
851
|
+
}
|
|
852
|
+
return sortAction;
|
|
853
|
+
});
|
|
854
|
+
doSort() {
|
|
855
|
+
if (this.sort() === 'ASC') {
|
|
856
|
+
this.sort.set('DSC');
|
|
857
|
+
}
|
|
858
|
+
else {
|
|
859
|
+
this.sort.set('ASC');
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
863
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiListWidgetComponent, isStandalone: true, selector: "si-list-widget", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholderLabel: { classPropertyName: "searchPlaceholderLabel", publicName: "searchPlaceholderLabel", isSignal: true, isRequired: false, transformFunction: null }, sortAscendingLabel: { classPropertyName: "sortAscendingLabel", publicName: "sortAscendingLabel", isSignal: true, isRequired: false, transformFunction: null }, sortDescendingLabel: { classPropertyName: "sortDescendingLabel", publicName: "sortDescendingLabel", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, compareFn: { classPropertyName: "compareFn", publicName: "compareFn", isSignal: true, isRequired: false, transformFunction: null }, filterFn: { classPropertyName: "filterFn", publicName: "filterFn", isSignal: true, isRequired: false, transformFunction: null }, numberOfLinks: { classPropertyName: "numberOfLinks", publicName: "numberOfLinks", isSignal: true, isRequired: false, transformFunction: null }, accentLine: { classPropertyName: "accentLine", publicName: "accentLine", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sort: "sortChange" }, host: { classAttribute: "si-list-widget" }, usesInheritance: true, ngImport: i0, template: "<si-card\n class=\"h-100\"\n actionBarViewType=\"expanded\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"sort() ? sortAction() : []\"\n>\n <si-list-widget-body\n body\n [compareFn]=\"compareFn()\"\n [filterFn]=\"filterFn()\"\n [numberOfLinks]=\"numberOfLinks()\"\n [searchPlaceholderLabel]=\"searchPlaceholderLabel()\"\n [search]=\"search()\"\n [sort]=\"sort()\"\n [value]=\"value()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n >\n <ng-content select=\"[empty-state]\" empty-state />\n </si-list-widget-body>\n\n @let linkValue = link();\n @if (linkValue) {\n <div class=\"card-footer\" footer>\n @if (!linkValue.action) {\n <a [siLink]=\"linkValue\">\n {{ linkValue.title }}\n <si-icon-next class=\"link-icon link-end flip-rtl\" [icon]=\"icons.elementRight2\" />\n </a>\n } @else {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"linkValue\"\n >{{ linkValue.title }}\n </button>\n }\n </div>\n }\n</si-card>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiCardComponent, selector: "si-card", inputs: ["heading", "primaryActions", "secondaryActions", "actionParam", "actionBarViewType", "actionBarTitle", "imgSrc", "imgAlt", "imgDir", "imgObjectFit", "imgObjectPosition"] }, { kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "component", type: SiListWidgetBodyComponent, selector: "si-list-widget-body", inputs: ["link", "searchPlaceholderLabel", "sort", "search", "compareFn", "filterFn", "numberOfLinks", "searchText"], outputs: ["searchTextChange"] }, { kind: "ngmodule", type: SiTranslateModule }] });
|
|
864
|
+
}
|
|
865
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiListWidgetComponent, decorators: [{
|
|
866
|
+
type: Component,
|
|
867
|
+
args: [{ selector: 'si-list-widget', imports: [
|
|
868
|
+
NgClass,
|
|
869
|
+
SiCardComponent,
|
|
870
|
+
SiIconNextComponent,
|
|
871
|
+
SiLinkDirective,
|
|
872
|
+
SiListWidgetBodyComponent,
|
|
873
|
+
SiTranslateModule
|
|
874
|
+
], host: { class: 'si-list-widget' }, template: "<si-card\n class=\"h-100\"\n actionBarViewType=\"expanded\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"sort() ? sortAction() : []\"\n>\n <si-list-widget-body\n body\n [compareFn]=\"compareFn()\"\n [filterFn]=\"filterFn()\"\n [numberOfLinks]=\"numberOfLinks()\"\n [searchPlaceholderLabel]=\"searchPlaceholderLabel()\"\n [search]=\"search()\"\n [sort]=\"sort()\"\n [value]=\"value()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n >\n <ng-content select=\"[empty-state]\" empty-state />\n </si-list-widget-body>\n\n @let linkValue = link();\n @if (linkValue) {\n <div class=\"card-footer\" footer>\n @if (!linkValue.action) {\n <a [siLink]=\"linkValue\">\n {{ linkValue.title }}\n <si-icon-next class=\"link-icon link-end flip-rtl\" [icon]=\"icons.elementRight2\" />\n </a>\n } @else {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"linkValue\"\n >{{ linkValue.title }}\n </button>\n }\n </div>\n }\n</si-card>\n" }]
|
|
875
|
+
}] });
|
|
876
|
+
|
|
877
|
+
/**
|
|
878
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
879
|
+
* SPDX-License-Identifier: MIT
|
|
880
|
+
*/
|
|
881
|
+
/**
|
|
882
|
+
* The items of the `<si-timeline-widget>`.
|
|
883
|
+
*/
|
|
884
|
+
class SiTimelineWidgetItemComponent extends SiWidgetBaseComponent {
|
|
885
|
+
/**
|
|
886
|
+
* Whether to show or hide the description row during skeleton progress indication.
|
|
887
|
+
*
|
|
888
|
+
* @defaultValue `true`
|
|
889
|
+
*/
|
|
890
|
+
showDescription = input(true);
|
|
891
|
+
activatedRoute = inject(ActivatedRoute, { optional: true });
|
|
892
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
893
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiTimelineWidgetItemComponent, isStandalone: true, selector: "si-timeline-widget-item", inputs: { showDescription: { classPropertyName: "showDescription", publicName: "showDescription", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "listitem" } }, usesInheritance: true, ngImport: i0, template: "@let valueObject = value();\n@if (!showLoadingIndicator() && valueObject) {\n <div class=\"d-flex flex-row gap-4\" [class.pe-4]=\"!valueObject.action\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4\">\n <si-icon\n [icon]=\"valueObject.icon\"\n [color]=\"valueObject.iconColor\"\n [stackedIcon]=\"valueObject.stackedIcon\"\n [stackedColor]=\"valueObject.stackedIconColor\"\n [alt]=\"valueObject.iconAlt\"\n />\n <div class=\"si-timeline-widget-item-lower-line\"></div>\n </div>\n <div class=\"d-flex flex-column gap-1 py-4 flex-grow-1\">\n <span class=\"si-caption text-secondary\">{{ valueObject.timeStamp | translate }}</span>\n <span class=\"si-title-2\">{{ valueObject.title | translate }}</span>\n @if (valueObject.description) {\n <span class=\"si-body-2 text-secondary\">{{ valueObject.description | translate }}</span>\n }\n </div>\n @if (valueObject.action) {\n @let action = valueObject.action;\n <div class=\"si-timeline-widget-item-action align-self-center\">\n @if (action.type === 'action') {\n <button\n type=\"button\"\n class=\"d-flex btn\"\n [ngClass]=\"action.customClass ?? 'btn-tertiary'\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n (click)=\"action.action(action)\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span>\n </button>\n } @else if (action.type === 'router-link') {\n <a\n class=\"d-flex btn btn-ghost\"\n [routerLink]=\"action.routerLink\"\n [queryParams]=\"action.extras?.queryParams\"\n [queryParamsHandling]=\"action.extras?.queryParamsHandling\"\n [fragment]=\"action.extras?.fragment\"\n [state]=\"action.extras?.state\"\n [relativeTo]=\"action.extras?.relativeTo ?? activatedRoute\"\n [preserveFragment]=\"action.extras?.preserveFragment\"\n [skipLocationChange]=\"action.extras?.skipLocationChange\"\n [replaceUrl]=\"action.extras?.replaceUrl\"\n [attr.aria-label]=\"action.label\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'link') {\n <a\n class=\"d-flex btn btn-ghost\"\n [href]=\"action.href\"\n [target]=\"action.target\"\n [attr.aria-label]=\"action.label\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'menu') {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-tertiary element-options-vertical\"\n [attr.aria-label]=\"valueObject.title + ' dropdown'\"\n [cdkMenuTriggerFor]=\"actionMenu\"\n ></button>\n\n <ng-template #actionMenu>\n <si-menu-factory [items]=\"action.menuItems\" />\n </ng-template>\n }\n </div>\n }\n </div>\n} @else {\n <div class=\"d-flex flex-row\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4 pe-4\">\n <div class=\"p-5 si-skeleton\"></div>\n </div>\n <div class=\"d-flex flex-column flex-grow-1 gap-1 py-4\">\n <span class=\"si-link-widget-skeleton\"></span>\n <span class=\"si-link-widget-skeleton\" [class.w-50]=\"!showDescription()\"></span>\n @if (showDescription()) {\n <span class=\"si-link-widget-skeleton w-50\"></span>\n }\n </div>\n </div>\n}\n", dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon", "color", "stackedIcon", "stackedColor", "alt", "size"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: SiMenuModule }, { kind: "component", type: i2$1.SiMenuFactoryComponent, selector: "si-menu-factory", inputs: ["items", "actionParam"] }, { kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }] });
|
|
894
|
+
}
|
|
895
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetItemComponent, decorators: [{
|
|
896
|
+
type: Component,
|
|
897
|
+
args: [{ selector: 'si-timeline-widget-item', imports: [
|
|
898
|
+
SiIconComponent,
|
|
899
|
+
SiTranslateModule,
|
|
900
|
+
NgClass,
|
|
901
|
+
A11yModule,
|
|
902
|
+
RouterLink,
|
|
903
|
+
SiMenuModule,
|
|
904
|
+
CdkMenuTrigger
|
|
905
|
+
], host: {
|
|
906
|
+
role: 'listitem'
|
|
907
|
+
}, template: "@let valueObject = value();\n@if (!showLoadingIndicator() && valueObject) {\n <div class=\"d-flex flex-row gap-4\" [class.pe-4]=\"!valueObject.action\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4\">\n <si-icon\n [icon]=\"valueObject.icon\"\n [color]=\"valueObject.iconColor\"\n [stackedIcon]=\"valueObject.stackedIcon\"\n [stackedColor]=\"valueObject.stackedIconColor\"\n [alt]=\"valueObject.iconAlt\"\n />\n <div class=\"si-timeline-widget-item-lower-line\"></div>\n </div>\n <div class=\"d-flex flex-column gap-1 py-4 flex-grow-1\">\n <span class=\"si-caption text-secondary\">{{ valueObject.timeStamp | translate }}</span>\n <span class=\"si-title-2\">{{ valueObject.title | translate }}</span>\n @if (valueObject.description) {\n <span class=\"si-body-2 text-secondary\">{{ valueObject.description | translate }}</span>\n }\n </div>\n @if (valueObject.action) {\n @let action = valueObject.action;\n <div class=\"si-timeline-widget-item-action align-self-center\">\n @if (action.type === 'action') {\n <button\n type=\"button\"\n class=\"d-flex btn\"\n [ngClass]=\"action.customClass ?? 'btn-tertiary'\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n (click)=\"action.action(action)\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span>\n </button>\n } @else if (action.type === 'router-link') {\n <a\n class=\"d-flex btn btn-ghost\"\n [routerLink]=\"action.routerLink\"\n [queryParams]=\"action.extras?.queryParams\"\n [queryParamsHandling]=\"action.extras?.queryParamsHandling\"\n [fragment]=\"action.extras?.fragment\"\n [state]=\"action.extras?.state\"\n [relativeTo]=\"action.extras?.relativeTo ?? activatedRoute\"\n [preserveFragment]=\"action.extras?.preserveFragment\"\n [skipLocationChange]=\"action.extras?.skipLocationChange\"\n [replaceUrl]=\"action.extras?.replaceUrl\"\n [attr.aria-label]=\"action.label\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'link') {\n <a\n class=\"d-flex btn btn-ghost\"\n [href]=\"action.href\"\n [target]=\"action.target\"\n [attr.aria-label]=\"action.label\"\n [class.btn-circle]=\"action.iconOnly\"\n [class.btn-sm]=\"action.iconOnly\"\n >\n @if (action.icon) {\n <i class=\"icon\" [ngClass]=\"action.icon\"></i>\n }\n <span [class.visually-hidden]=\"action.iconOnly\">\n {{ action.label | translate }}\n </span></a\n >\n } @else if (action.type === 'menu') {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-tertiary element-options-vertical\"\n [attr.aria-label]=\"valueObject.title + ' dropdown'\"\n [cdkMenuTriggerFor]=\"actionMenu\"\n ></button>\n\n <ng-template #actionMenu>\n <si-menu-factory [items]=\"action.menuItems\" />\n </ng-template>\n }\n </div>\n }\n </div>\n} @else {\n <div class=\"d-flex flex-row\">\n <div class=\"d-flex flex-column align-items-center gap-1 pt-4 pe-4\">\n <div class=\"p-5 si-skeleton\"></div>\n </div>\n <div class=\"d-flex flex-column flex-grow-1 gap-1 py-4\">\n <span class=\"si-link-widget-skeleton\"></span>\n <span class=\"si-link-widget-skeleton\" [class.w-50]=\"!showDescription()\"></span>\n @if (showDescription()) {\n <span class=\"si-link-widget-skeleton w-50\"></span>\n }\n </div>\n </div>\n}\n" }]
|
|
908
|
+
}] });
|
|
909
|
+
|
|
910
|
+
/**
|
|
911
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
912
|
+
* SPDX-License-Identifier: MIT
|
|
913
|
+
*/
|
|
914
|
+
class SiTimelineWidgetBodyComponent extends SiWidgetBaseComponent {
|
|
915
|
+
/**
|
|
916
|
+
* Number of skeleton progress indication items.
|
|
917
|
+
*
|
|
918
|
+
* @defaultValue 4
|
|
919
|
+
*/
|
|
920
|
+
numberOfItems = input(4);
|
|
921
|
+
/**
|
|
922
|
+
* Whether to show or hide the description row during skeleton progress indication.
|
|
923
|
+
*
|
|
924
|
+
* @defaultValue `true`
|
|
925
|
+
*/
|
|
926
|
+
showDescription = input(true);
|
|
927
|
+
/** Used to display the defined number of ghost items */
|
|
928
|
+
ghosts = computed(() => {
|
|
929
|
+
return new Array(this.numberOfItems() ?? 4);
|
|
930
|
+
});
|
|
931
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetBodyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
932
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiTimelineWidgetBodyComponent, isStandalone: true, selector: "si-timeline-widget-body", inputs: { numberOfItems: { classPropertyName: "numberOfItems", publicName: "numberOfItems", isSignal: true, isRequired: false, transformFunction: null }, showDescription: { classPropertyName: "showDescription", publicName: "showDescription", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "@let valueObject = value();\n<div\n class=\"focus-inside\"\n tabindex=\"0\"\n [attr.role]=\"\n (!showLoadingIndicator() && valueObject && valueObject.length > 0) || showLoadingIndicator()\n ? 'list'\n : null\n \"\n>\n @if (!showLoadingIndicator() && valueObject) {\n @if (valueObject && valueObject.length > 0) {\n @for (item of valueObject; track $index) {\n <si-timeline-widget-item [value]=\"item\" />\n }\n } @else {\n <ng-content select=\"[empty-state]\" />\n }\n } @else {\n @for (some of ghosts(); track $index) {\n <si-timeline-widget-item [value]=\"undefined\" [showDescription]=\"showDescription()\" />\n }\n }\n</div>\n", styles: [":host{background-color:var(--element-base-1);flex:auto;overflow:hidden}:host si-timeline-widget-item:last-child ::ng-deep .si-timeline-widget-item-lower-line{display:none}div{block-size:100%;padding-inline:16px 8px;overflow-y:auto;overflow-x:hidden}\n"], dependencies: [{ kind: "component", type: SiTimelineWidgetItemComponent, selector: "si-timeline-widget-item", inputs: ["showDescription"] }] });
|
|
933
|
+
}
|
|
934
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetBodyComponent, decorators: [{
|
|
935
|
+
type: Component,
|
|
936
|
+
args: [{ selector: 'si-timeline-widget-body', imports: [SiTimelineWidgetItemComponent], template: "@let valueObject = value();\n<div\n class=\"focus-inside\"\n tabindex=\"0\"\n [attr.role]=\"\n (!showLoadingIndicator() && valueObject && valueObject.length > 0) || showLoadingIndicator()\n ? 'list'\n : null\n \"\n>\n @if (!showLoadingIndicator() && valueObject) {\n @if (valueObject && valueObject.length > 0) {\n @for (item of valueObject; track $index) {\n <si-timeline-widget-item [value]=\"item\" />\n }\n } @else {\n <ng-content select=\"[empty-state]\" />\n }\n } @else {\n @for (some of ghosts(); track $index) {\n <si-timeline-widget-item [value]=\"undefined\" [showDescription]=\"showDescription()\" />\n }\n }\n</div>\n", styles: [":host{background-color:var(--element-base-1);flex:auto;overflow:hidden}:host si-timeline-widget-item:last-child ::ng-deep .si-timeline-widget-item-lower-line{display:none}div{block-size:100%;padding-inline:16px 8px;overflow-y:auto;overflow-x:hidden}\n"] }]
|
|
937
|
+
}] });
|
|
938
|
+
|
|
939
|
+
/**
|
|
940
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
941
|
+
* SPDX-License-Identifier: MIT
|
|
942
|
+
*/
|
|
943
|
+
class SiTimelineWidgetComponent extends SiWidgetBaseComponent {
|
|
944
|
+
/**
|
|
945
|
+
* Timeline widget header text.
|
|
946
|
+
*/
|
|
947
|
+
heading = input();
|
|
948
|
+
/**
|
|
949
|
+
* Input list of primary action items. Supports up to **4** actions and omits additional ones.
|
|
950
|
+
*
|
|
951
|
+
* @defaultValue []
|
|
952
|
+
*/
|
|
953
|
+
primaryActions = input([]);
|
|
954
|
+
/**
|
|
955
|
+
* Input list of secondary action items.
|
|
956
|
+
*
|
|
957
|
+
* @defaultValue []
|
|
958
|
+
*/
|
|
959
|
+
secondaryActions = input([]);
|
|
960
|
+
/**
|
|
961
|
+
* Link that leads the user to more information
|
|
962
|
+
* or triggers and action. The `link.title` is displayed.
|
|
963
|
+
* The title will be translated.
|
|
964
|
+
*/
|
|
965
|
+
link = input();
|
|
966
|
+
/**
|
|
967
|
+
* Number of skeleton progress indication items.
|
|
968
|
+
*
|
|
969
|
+
* @defaultValue 4
|
|
970
|
+
*/
|
|
971
|
+
numberOfItems = input(4);
|
|
972
|
+
/**
|
|
973
|
+
* Whether to show or hide the description row during skeleton progress indication.
|
|
974
|
+
*
|
|
975
|
+
* @defaultValue `true`
|
|
976
|
+
*/
|
|
977
|
+
showDescription = input(true);
|
|
978
|
+
/**
|
|
979
|
+
* Optional accent line
|
|
980
|
+
*/
|
|
981
|
+
accentLine = input();
|
|
982
|
+
accentClass = computed(() => {
|
|
983
|
+
const accentLine = this.accentLine();
|
|
984
|
+
return accentLine ? 'accent-' + accentLine : '';
|
|
985
|
+
});
|
|
986
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
987
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiTimelineWidgetComponent, isStandalone: true, selector: "si-timeline-widget", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, primaryActions: { classPropertyName: "primaryActions", publicName: "primaryActions", isSignal: true, isRequired: false, transformFunction: null }, secondaryActions: { classPropertyName: "secondaryActions", publicName: "secondaryActions", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, numberOfItems: { classPropertyName: "numberOfItems", publicName: "numberOfItems", isSignal: true, isRequired: false, transformFunction: null }, showDescription: { classPropertyName: "showDescription", publicName: "showDescription", isSignal: true, isRequired: false, transformFunction: null }, accentLine: { classPropertyName: "accentLine", publicName: "accentLine", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<si-card\n class=\"h-100\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n>\n <si-timeline-widget-body\n body\n [value]=\"value()\"\n [showDescription]=\"showDescription()\"\n [numberOfItems]=\"numberOfItems()\"\n [class.pb-6]=\"!link()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n >\n <ng-content select=\"[empty-state]\" empty-state />\n </si-timeline-widget-body>\n @let linkValue = link();\n @if (linkValue) {\n <div class=\"card-footer\" footer>\n @if (!linkValue.action) {\n <a [siLink]=\"linkValue\">\n {{ linkValue.title }}\n <i class=\"link-icon link-end element-right-2 flip-rtl\"></i>\n </a>\n } @else {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"linkValue\">{{\n linkValue.title\n }}</button>\n }\n </div>\n }\n</si-card>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "component", type: SiCardComponent, selector: "si-card", inputs: ["heading", "primaryActions", "secondaryActions", "actionParam", "actionBarViewType", "actionBarTitle", "imgSrc", "imgAlt", "imgDir", "imgObjectFit", "imgObjectPosition"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "component", type: SiTimelineWidgetBodyComponent, selector: "si-timeline-widget-body", inputs: ["numberOfItems", "showDescription"] }] });
|
|
988
|
+
}
|
|
989
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTimelineWidgetComponent, decorators: [{
|
|
990
|
+
type: Component,
|
|
991
|
+
args: [{ selector: 'si-timeline-widget', imports: [
|
|
992
|
+
NgClass,
|
|
993
|
+
SiLinkDirective,
|
|
994
|
+
SiCardComponent,
|
|
995
|
+
SiTranslateModule,
|
|
996
|
+
SiTimelineWidgetBodyComponent
|
|
997
|
+
], template: "<si-card\n class=\"h-100\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n>\n <si-timeline-widget-body\n body\n [value]=\"value()\"\n [showDescription]=\"showDescription()\"\n [numberOfItems]=\"numberOfItems()\"\n [class.pb-6]=\"!link()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n >\n <ng-content select=\"[empty-state]\" empty-state />\n </si-timeline-widget-body>\n @let linkValue = link();\n @if (linkValue) {\n <div class=\"card-footer\" footer>\n @if (!linkValue.action) {\n <a [siLink]=\"linkValue\">\n {{ linkValue.title }}\n <i class=\"link-icon link-end element-right-2 flip-rtl\"></i>\n </a>\n } @else {\n <button type=\"button\" class=\"btn btn-link\" [siLink]=\"linkValue\">{{\n linkValue.title\n }}</button>\n }\n </div>\n }\n</si-card>\n" }]
|
|
998
|
+
}] });
|
|
999
|
+
|
|
1000
|
+
/**
|
|
1001
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
1002
|
+
* SPDX-License-Identifier: MIT
|
|
1003
|
+
*/
|
|
1004
|
+
/**
|
|
1005
|
+
* The body of the `<si-value-widget>`. Useful for compositions.
|
|
1006
|
+
*/
|
|
1007
|
+
class SiValueWidgetBodyComponent extends SiWidgetBaseComponent {
|
|
1008
|
+
/**
|
|
1009
|
+
* The unit of the value (e.g. kWh or users). Only visible if `value` is available.
|
|
1010
|
+
*/
|
|
1011
|
+
unit = input();
|
|
1012
|
+
/**
|
|
1013
|
+
* The element icon name. Only visible if `value` is available.
|
|
1014
|
+
*/
|
|
1015
|
+
icon = input();
|
|
1016
|
+
/**
|
|
1017
|
+
* Show a status icon instead of the {@link icon}.
|
|
1018
|
+
*/
|
|
1019
|
+
status = input();
|
|
1020
|
+
/**
|
|
1021
|
+
* Short description of the value. A description is mandatory
|
|
1022
|
+
* to show an icon. Only visible if `value` is available.
|
|
1023
|
+
*/
|
|
1024
|
+
description = input();
|
|
1025
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiValueWidgetBodyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1026
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiValueWidgetBodyComponent, isStandalone: true, selector: "si-value-widget-body", inputs: { unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "@if (!showLoadingIndicator()) {\n @if (value()) {\n <span class=\"si-value-widget-value\">{{ value() | translate }}</span>\n <span class=\"si-value-widget-unit\">{{ unit() | translate }}</span>\n @if (description()) {\n <div class=\"si-value-widget-description\">\n @let statusValue = status();\n @let iconValue = icon();\n @if (statusValue) {\n <si-status-icon class=\"icon\" [status]=\"statusValue\" />\n } @else if (iconValue) {\n <si-icon-next class=\"icon\" [icon]=\"iconValue\" />\n }\n <span>{{ description() | translate }}</span>\n </div>\n }\n }\n} @else {\n <span class=\"si-value-widget-value w-100\">\n <div class=\"si-value-widget-value-skeleton\"></div>\n </span>\n <div class=\"si-value-widget-description si-skeleton w-100\"></div>\n}\n", dependencies: [{ kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "component", type: SiStatusIconComponent, selector: "si-status-icon", inputs: ["status"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
|
|
1027
|
+
}
|
|
1028
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiValueWidgetBodyComponent, decorators: [{
|
|
1029
|
+
type: Component,
|
|
1030
|
+
args: [{ selector: 'si-value-widget-body', imports: [SiIconNextComponent, SiStatusIconComponent, SiTranslateModule], template: "@if (!showLoadingIndicator()) {\n @if (value()) {\n <span class=\"si-value-widget-value\">{{ value() | translate }}</span>\n <span class=\"si-value-widget-unit\">{{ unit() | translate }}</span>\n @if (description()) {\n <div class=\"si-value-widget-description\">\n @let statusValue = status();\n @let iconValue = icon();\n @if (statusValue) {\n <si-status-icon class=\"icon\" [status]=\"statusValue\" />\n } @else if (iconValue) {\n <si-icon-next class=\"icon\" [icon]=\"iconValue\" />\n }\n <span>{{ description() | translate }}</span>\n </div>\n }\n }\n} @else {\n <span class=\"si-value-widget-value w-100\">\n <div class=\"si-value-widget-value-skeleton\"></div>\n </span>\n <div class=\"si-value-widget-description si-skeleton w-100\"></div>\n}\n" }]
|
|
1031
|
+
}] });
|
|
1032
|
+
|
|
1033
|
+
/**
|
|
1034
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
1035
|
+
* SPDX-License-Identifier: MIT
|
|
1036
|
+
*/
|
|
1037
|
+
/**
|
|
1038
|
+
* Is a dynamic UI component that not only displays information, but also includes
|
|
1039
|
+
* embedded actions which the user can interact with to perform tasks directly
|
|
1040
|
+
* related to the card's content. Actions might include editing settings,
|
|
1041
|
+
* initiating processes, or deleting resources.
|
|
1042
|
+
*
|
|
1043
|
+
* The actionable widget turns data representation into an interactive hub,
|
|
1044
|
+
* streamlining the user's tasks and decisions associated with the card's content.
|
|
1045
|
+
*
|
|
1046
|
+
* This component is a wrapper using the `.si-value-widget` CSS classes and the
|
|
1047
|
+
* `<si-card>` component. For more configuration options, use the CSS classes directly.
|
|
1048
|
+
*/
|
|
1049
|
+
class SiValueWidgetComponent {
|
|
1050
|
+
/**
|
|
1051
|
+
* Value widget header text.
|
|
1052
|
+
*/
|
|
1053
|
+
heading = input();
|
|
1054
|
+
/**
|
|
1055
|
+
* Input list of primary action items. Supports up to **4** actions and omits additional ones.
|
|
1056
|
+
*
|
|
1057
|
+
* @defaultValue []
|
|
1058
|
+
*/
|
|
1059
|
+
primaryActions = input([]);
|
|
1060
|
+
/**
|
|
1061
|
+
* Input list of secondary action items.
|
|
1062
|
+
*
|
|
1063
|
+
* @defaultValue []
|
|
1064
|
+
*/
|
|
1065
|
+
secondaryActions = input([]);
|
|
1066
|
+
/**
|
|
1067
|
+
* The main value to be displayed. If no value is set,
|
|
1068
|
+
* the skeleton indicates the loading of the value. Disable
|
|
1069
|
+
* the automatic loading mechanism by setting `SiValueWidgetComponent.disableAutoLoadingIndicator`.
|
|
1070
|
+
*/
|
|
1071
|
+
value = input();
|
|
1072
|
+
/**
|
|
1073
|
+
* The unit of the value (e.g. kWh or users). Only visible if `value` is available.
|
|
1074
|
+
*/
|
|
1075
|
+
unit = input();
|
|
1076
|
+
/**
|
|
1077
|
+
* The element icon name. Only visible if `value` is available.
|
|
1078
|
+
*/
|
|
1079
|
+
icon = input();
|
|
1080
|
+
/**
|
|
1081
|
+
* Show a status icon instead of the {@link icon}.
|
|
1082
|
+
*/
|
|
1083
|
+
status = input();
|
|
1084
|
+
/**
|
|
1085
|
+
* Short description of the value. A description is mandatory
|
|
1086
|
+
* to show an icon. Only visible if `value` is available.
|
|
1087
|
+
*/
|
|
1088
|
+
description = input();
|
|
1089
|
+
/**
|
|
1090
|
+
* Link that leads the user to more information
|
|
1091
|
+
* or triggers and action. The `link.title` is displayed.
|
|
1092
|
+
* The title will be translated.
|
|
1093
|
+
*/
|
|
1094
|
+
link = input();
|
|
1095
|
+
/**
|
|
1096
|
+
* Option to disable automatic start of skeleton loading indication.
|
|
1097
|
+
*
|
|
1098
|
+
* @defaultValue false
|
|
1099
|
+
*/
|
|
1100
|
+
disableAutoLoadingIndicator = input(false, { transform: booleanAttribute });
|
|
1101
|
+
/**
|
|
1102
|
+
* Input to start and stop the skeleton loading indication.
|
|
1103
|
+
*
|
|
1104
|
+
* @defaultValue false
|
|
1105
|
+
*/
|
|
1106
|
+
showLoadingIndicator = input(false, { transform: booleanAttribute });
|
|
1107
|
+
/**
|
|
1108
|
+
* Initial delay time in milliseconds before enabling loading indicator.
|
|
1109
|
+
* Only used once initially during construction.
|
|
1110
|
+
*
|
|
1111
|
+
* @defaultValue 300
|
|
1112
|
+
*/
|
|
1113
|
+
initialLoadingIndicatorDebounceTime = input(300);
|
|
1114
|
+
/**
|
|
1115
|
+
* Image source for the card.
|
|
1116
|
+
*/
|
|
1117
|
+
imgSrc = input();
|
|
1118
|
+
/**
|
|
1119
|
+
* Alt text for a provided image.
|
|
1120
|
+
*/
|
|
1121
|
+
imgAlt = input();
|
|
1122
|
+
/**
|
|
1123
|
+
* Defines if an image is placed on top or start (left) of the card.
|
|
1124
|
+
*
|
|
1125
|
+
* @defaultValue 'vertical'
|
|
1126
|
+
*/
|
|
1127
|
+
imgDir = input('vertical');
|
|
1128
|
+
/**
|
|
1129
|
+
* Sets the image [object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) CSS property.
|
|
1130
|
+
*
|
|
1131
|
+
* @defaultValue 'scale-down'
|
|
1132
|
+
*/
|
|
1133
|
+
imgObjectFit = input('scale-down');
|
|
1134
|
+
/**
|
|
1135
|
+
* Sets the image [object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) CSS property.
|
|
1136
|
+
*/
|
|
1137
|
+
imgObjectPosition = input();
|
|
1138
|
+
/**
|
|
1139
|
+
* Optional accent line
|
|
1140
|
+
*/
|
|
1141
|
+
accentLine = input();
|
|
1142
|
+
accentClass = computed(() => {
|
|
1143
|
+
const accentLine = this.accentLine();
|
|
1144
|
+
return accentLine ? 'accent-' + accentLine : '';
|
|
1145
|
+
});
|
|
1146
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiValueWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1147
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiValueWidgetComponent, isStandalone: true, selector: "si-value-widget", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, primaryActions: { classPropertyName: "primaryActions", publicName: "primaryActions", isSignal: true, isRequired: false, transformFunction: null }, secondaryActions: { classPropertyName: "secondaryActions", publicName: "secondaryActions", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, disableAutoLoadingIndicator: { classPropertyName: "disableAutoLoadingIndicator", publicName: "disableAutoLoadingIndicator", isSignal: true, isRequired: false, transformFunction: null }, showLoadingIndicator: { classPropertyName: "showLoadingIndicator", publicName: "showLoadingIndicator", isSignal: true, isRequired: false, transformFunction: null }, initialLoadingIndicatorDebounceTime: { classPropertyName: "initialLoadingIndicatorDebounceTime", publicName: "initialLoadingIndicatorDebounceTime", isSignal: true, isRequired: false, transformFunction: null }, imgSrc: { classPropertyName: "imgSrc", publicName: "imgSrc", isSignal: true, isRequired: false, transformFunction: null }, imgAlt: { classPropertyName: "imgAlt", publicName: "imgAlt", isSignal: true, isRequired: false, transformFunction: null }, imgDir: { classPropertyName: "imgDir", publicName: "imgDir", isSignal: true, isRequired: false, transformFunction: null }, imgObjectFit: { classPropertyName: "imgObjectFit", publicName: "imgObjectFit", isSignal: true, isRequired: false, transformFunction: null }, imgObjectPosition: { classPropertyName: "imgObjectPosition", publicName: "imgObjectPosition", isSignal: true, isRequired: false, transformFunction: null }, accentLine: { classPropertyName: "accentLine", publicName: "accentLine", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<si-card\n class=\"h-100\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n [imgSrc]=\"imgSrc()\"\n [imgDir]=\"imgDir()\"\n [imgAlt]=\"imgAlt()\"\n [imgObjectFit]=\"imgObjectFit()\"\n [imgObjectPosition]=\"imgObjectPosition()\"\n>\n <div class=\"card-body\" body>\n <si-value-widget-body\n [value]=\"value()\"\n [unit]=\"unit()\"\n [icon]=\"icon()\"\n [status]=\"status()\"\n [description]=\"description()\"\n [disableAutoLoadingIndicator]=\"disableAutoLoadingIndicator()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n [initialLoadingIndicatorDebounceTime]=\"initialLoadingIndicatorDebounceTime()\"\n />\n </div>\n @let linkObject = link();\n @if (linkObject) {\n <div class=\"card-footer\" footer>\n <a [siLink]=\"linkObject\">{{ linkObject.title | translate }}</a>\n </div>\n }\n</si-card>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SiCardComponent, selector: "si-card", inputs: ["heading", "primaryActions", "secondaryActions", "actionParam", "actionBarViewType", "actionBarTitle", "imgSrc", "imgAlt", "imgDir", "imgObjectFit", "imgObjectPosition"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }, { kind: "component", type: SiValueWidgetBodyComponent, selector: "si-value-widget-body", inputs: ["unit", "icon", "status", "description"] }] });
|
|
1148
|
+
}
|
|
1149
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiValueWidgetComponent, decorators: [{
|
|
1150
|
+
type: Component,
|
|
1151
|
+
args: [{ selector: 'si-value-widget', imports: [
|
|
1152
|
+
NgClass,
|
|
1153
|
+
SiCardComponent,
|
|
1154
|
+
SiLinkDirective,
|
|
1155
|
+
SiTranslateModule,
|
|
1156
|
+
SiValueWidgetBodyComponent
|
|
1157
|
+
], template: "<si-card\n class=\"h-100\"\n [ngClass]=\"accentClass()\"\n [heading]=\"heading()\"\n [primaryActions]=\"primaryActions()\"\n [secondaryActions]=\"secondaryActions()\"\n [imgSrc]=\"imgSrc()\"\n [imgDir]=\"imgDir()\"\n [imgAlt]=\"imgAlt()\"\n [imgObjectFit]=\"imgObjectFit()\"\n [imgObjectPosition]=\"imgObjectPosition()\"\n>\n <div class=\"card-body\" body>\n <si-value-widget-body\n [value]=\"value()\"\n [unit]=\"unit()\"\n [icon]=\"icon()\"\n [status]=\"status()\"\n [description]=\"description()\"\n [disableAutoLoadingIndicator]=\"disableAutoLoadingIndicator()\"\n [showLoadingIndicator]=\"showLoadingIndicator()\"\n [initialLoadingIndicatorDebounceTime]=\"initialLoadingIndicatorDebounceTime()\"\n />\n </div>\n @let linkObject = link();\n @if (linkObject) {\n <div class=\"card-footer\" footer>\n <a [siLink]=\"linkObject\">{{ linkObject.title | translate }}</a>\n </div>\n }\n</si-card>\n" }]
|
|
1158
|
+
}] });
|
|
1159
|
+
|
|
1160
|
+
/**
|
|
1161
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
1162
|
+
* SPDX-License-Identifier: MIT
|
|
1163
|
+
*/
|
|
1164
|
+
|
|
1165
|
+
/**
|
|
1166
|
+
* Generated bundle index. Do not edit.
|
|
1167
|
+
*/
|
|
1168
|
+
|
|
1169
|
+
export { SiDashboardCardComponent, SiDashboardComponent, SiDashboardModule, SiDashboardService, SiLinkWidgetComponent, SiListWidgetBodyComponent, SiListWidgetComponent, SiListWidgetItemComponent, SiTimelineWidgetBodyComponent, SiTimelineWidgetComponent, SiTimelineWidgetItemComponent, SiValueWidgetBodyComponent, SiValueWidgetComponent };
|
|
1170
|
+
//# sourceMappingURL=siemens-element-ng-dashboard.mjs.map
|