@siemens/element-ng 47.2.0 → 47.4.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 +18 -6
- package/autocomplete/index.d.ts +8 -0
- package/autocomplete/package.json +3 -0
- package/autocomplete/si-autocomplete-listbox.directive.d.ts +31 -0
- package/autocomplete/si-autocomplete-option.directive.d.ts +31 -0
- package/autocomplete/si-autocomplete.directive.d.ts +14 -0
- package/autocomplete/si-autocomplete.model.d.ts +7 -0
- package/autocomplete/si-autocomplete.module.d.ts +9 -0
- package/badge/index.d.ts +5 -0
- package/badge/package.json +3 -0
- package/badge/si-badge.component.d.ts +17 -0
- package/breadcrumb/breadcrumb-item.model.d.ts +36 -0
- package/breadcrumb/index.d.ts +7 -0
- package/breadcrumb/package.json +3 -0
- package/breadcrumb/si-breadcrumb-item-template.directive.d.ts +10 -0
- package/breadcrumb/si-breadcrumb.component.d.ts +46 -0
- package/breadcrumb/si-breadcrumb.module.d.ts +7 -0
- package/card/index.d.ts +6 -0
- package/card/package.json +3 -0
- package/card/si-card.component.d.ts +79 -0
- package/card/si-card.module.d.ts +7 -0
- package/circle-status/index.d.ts +6 -0
- package/circle-status/package.json +3 -0
- package/circle-status/si-circle-status.component.d.ts +66 -0
- package/circle-status/si-circle-status.module.d.ts +7 -0
- package/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.d.ts +23 -0
- package/column-selection-dialog/index.d.ts +6 -0
- package/column-selection-dialog/package.json +3 -0
- package/column-selection-dialog/si-column-selection-dialog.component.d.ts +114 -0
- package/column-selection-dialog/si-column-selection-dialog.service.d.ts +20 -0
- package/column-selection-dialog/si-column-selection-dialog.types.d.ts +68 -0
- package/common/models/status-type.model.d.ts +2 -2
- package/content-action-bar/index.d.ts +7 -0
- package/content-action-bar/package.json +3 -0
- package/content-action-bar/si-content-action-bar-toggle.component.d.ts +6 -0
- package/content-action-bar/si-content-action-bar.component.d.ts +72 -0
- package/content-action-bar/si-content-action-bar.model.d.ts +9 -0
- package/content-action-bar/si-content-action-bar.module.d.ts +7 -0
- package/date-range-filter/index.d.ts +8 -0
- package/date-range-filter/package.json +3 -0
- package/date-range-filter/si-date-range-calculation.service.d.ts +33 -0
- package/date-range-filter/si-date-range-filter.component.d.ts +248 -0
- package/date-range-filter/si-date-range-filter.module.d.ts +7 -0
- package/date-range-filter/si-date-range-filter.types.d.ts +40 -0
- package/date-range-filter/si-relative-date.component.d.ts +31 -0
- package/datepicker/components/si-calendar-body.component.d.ts +137 -0
- package/datepicker/components/si-calendar-date-cell.directive.d.ts +16 -0
- package/datepicker/components/si-calendar-direction-button.component.d.ts +18 -0
- package/datepicker/components/si-compare-adapter.d.ts +37 -0
- package/datepicker/components/si-day-selection.component.d.ts +76 -0
- package/datepicker/components/si-initial-focus.component.d.ts +74 -0
- package/datepicker/components/si-month-selection.component.d.ts +62 -0
- package/datepicker/components/si-year-selection.component.d.ts +65 -0
- package/datepicker/date-time-helper.d.ts +302 -0
- package/datepicker/index.d.ts +15 -0
- package/datepicker/package.json +3 -0
- package/datepicker/si-calendar-button.component.d.ts +49 -0
- package/datepicker/si-date-input.directive.d.ts +114 -0
- package/datepicker/si-date-range.component.d.ts +150 -0
- package/datepicker/si-datepicker-overlay.component.d.ts +82 -0
- package/datepicker/si-datepicker-overlay.directive.d.ts +104 -0
- package/datepicker/si-datepicker.component.d.ts +228 -0
- package/datepicker/si-datepicker.directive.d.ts +62 -0
- package/datepicker/si-datepicker.model.d.ts +129 -0
- package/datepicker/si-datepicker.module.d.ts +12 -0
- package/datepicker/si-timepicker.component.d.ts +214 -0
- package/electron-titlebar/electron.helpers.d.ts +5 -0
- package/electron-titlebar/index.d.ts +7 -0
- package/electron-titlebar/package.json +3 -0
- package/electron-titlebar/si-electron-titlebar.component.d.ts +72 -0
- package/electron-titlebar/si-electron-titlebar.module.d.ts +7 -0
- package/fesm2022/siemens-element-ng-application-header.mjs +2 -2
- package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-autocomplete.mjs +235 -0
- package/fesm2022/siemens-element-ng-autocomplete.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-badge.mjs +59 -0
- package/fesm2022/siemens-element-ng-badge.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-breadcrumb.mjs +302 -0
- package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-card.mjs +122 -0
- package/fesm2022/siemens-element-ng-card.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-circle-status.mjs +146 -0
- package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +369 -0
- package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-common.mjs +1 -1
- package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-content-action-bar.mjs +200 -0
- package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-date-range-filter.mjs +649 -0
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-datepicker.mjs +4231 -0
- package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-electron-titlebar.mjs +142 -0
- package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-file-uploader.mjs +751 -0
- package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-filter-bar.mjs +153 -0
- package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-form.mjs +827 -0
- package/fesm2022/siemens-element-ng-form.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-icon-status.mjs +65 -0
- package/fesm2022/siemens-element-ng-icon-status.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-icon.mjs +22 -2
- package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-info-page.mjs +63 -0
- package/fesm2022/siemens-element-ng-info-page.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-inline-notification.mjs +4 -6
- package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-ip-input.mjs +451 -0
- package/fesm2022/siemens-element-ng-ip-input.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-language-switcher.mjs +90 -0
- package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-localization.mjs +306 -0
- package/fesm2022/siemens-element-ng-localization.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-number-input.mjs +267 -0
- package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-password-strength.mjs +177 -0
- package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-photo-upload.mjs +480 -0
- package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-pills-input.mjs +397 -0
- package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-popover-next.mjs +259 -0
- package/fesm2022/siemens-element-ng-popover-next.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-popover.mjs +256 -0
- package/fesm2022/siemens-element-ng-popover.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-progressbar.mjs +83 -0
- package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-search-bar.mjs +193 -0
- package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-select.mjs +1166 -0
- package/fesm2022/siemens-element-ng-select.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-skip-links.mjs +117 -0
- package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-slider.mjs +313 -0
- package/fesm2022/siemens-element-ng-slider.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-sort-bar.mjs +89 -0
- package/fesm2022/siemens-element-ng-sort-bar.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-split.mjs +575 -0
- package/fesm2022/siemens-element-ng-split.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-status-toggle.mjs +196 -0
- package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-summary-widget.mjs +77 -0
- package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-system-banner.mjs +47 -0
- package/fesm2022/siemens-element-ng-system-banner.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-tabs.mjs +395 -0
- package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-toast-notification.mjs +227 -0
- package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-typeahead.mjs +746 -0
- package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-unauthorized-page.mjs +76 -0
- package/fesm2022/siemens-element-ng-unauthorized-page.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-wizard.mjs +465 -0
- package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -0
- package/file-uploader/index.d.ts +8 -0
- package/file-uploader/package.json +3 -0
- package/file-uploader/si-file-dropzone.component.d.ts +106 -0
- package/file-uploader/si-file-uploader.component.d.ts +296 -0
- package/file-uploader/si-file-uploader.model.d.ts +12 -0
- package/file-uploader/si-file-uploader.module.d.ts +8 -0
- package/filter-bar/filter.d.ts +26 -0
- package/filter-bar/index.d.ts +8 -0
- package/filter-bar/package.json +3 -0
- package/filter-bar/si-filter-bar.component.d.ts +65 -0
- package/filter-bar/si-filter-bar.module.d.ts +7 -0
- package/filter-bar/si-filter-pill.component.d.ts +20 -0
- package/form/form-fieldset/si-form-fieldset.component.d.ts +40 -0
- package/form/index.d.ts +14 -0
- package/form/package.json +3 -0
- package/form/si-form-container/si-form-container.component.d.ts +155 -0
- package/form/si-form-item/si-form-field-native.control.d.ts +22 -0
- package/form/si-form-item/si-form-item.component.d.ts +90 -0
- package/form/si-form-item-control-input.directive.d.ts +18 -0
- package/form/si-form-item.control.d.ts +35 -0
- package/form/si-form-validation-error.model.d.ts +55 -0
- package/form/si-form-validation-error.provider.d.ts +11 -0
- package/form/si-form-validation-error.service.d.ts +42 -0
- package/form/si-form-validation-tooltip/si-form-validation-tooltip.component.d.ts +13 -0
- package/form/si-form-validation-tooltip/si-form-validation-tooltip.directive.d.ts +42 -0
- package/form/si-form.module.d.ts +25 -0
- package/icon/element-icons.d.ts +20 -0
- package/icon-status/index.d.ts +6 -0
- package/icon-status/package.json +3 -0
- package/icon-status/si-icon-status.component.d.ts +24 -0
- package/icon-status/si-icon-status.module.d.ts +7 -0
- package/info-page/index.d.ts +5 -0
- package/info-page/package.json +3 -0
- package/info-page/si-info-page.component.d.ts +38 -0
- package/inline-notification/si-inline-notification.component.d.ts +0 -2
- package/ip-input/address-utils.d.ts +28 -0
- package/ip-input/address-validators.d.ts +21 -0
- package/ip-input/index.d.ts +7 -0
- package/ip-input/package.json +3 -0
- package/ip-input/si-ip-input.directive.d.ts +53 -0
- package/ip-input/si-ip4-input.directive.d.ts +9 -0
- package/ip-input/si-ip6-input.directive.d.ts +10 -0
- package/language-switcher/index.d.ts +7 -0
- package/language-switcher/iso-language-value.d.ts +14 -0
- package/language-switcher/package.json +3 -0
- package/language-switcher/si-language-switcher.component.d.ts +32 -0
- package/language-switcher/si-language-switcher.module.d.ts +7 -0
- package/localization/index.d.ts +8 -0
- package/localization/package.json +3 -0
- package/localization/si-directionality.d.ts +41 -0
- package/localization/si-locale-id.d.ts +22 -0
- package/localization/si-locale-store.d.ts +16 -0
- package/localization/si-locale.service.d.ts +73 -0
- package/number-input/index.d.ts +6 -0
- package/number-input/package.json +3 -0
- package/number-input/si-number-input.component.d.ts +106 -0
- package/number-input/si-number-input.module.d.ts +7 -0
- package/package.json +163 -3
- package/password-strength/index.d.ts +7 -0
- package/password-strength/package.json +3 -0
- package/password-strength/si-password-strength.component.d.ts +25 -0
- package/password-strength/si-password-strength.directive.d.ts +54 -0
- package/password-strength/si-password-strength.module.d.ts +8 -0
- package/photo-upload/index.d.ts +6 -0
- package/photo-upload/package.json +3 -0
- package/photo-upload/si-image-cropper-style.component.d.ts +5 -0
- package/photo-upload/si-photo-upload.component.d.ts +298 -0
- package/pills-input/index.d.ts +9 -0
- package/pills-input/package.json +3 -0
- package/pills-input/si-input-pill.component.d.ts +9 -0
- package/pills-input/si-pills-input-csv.directive.d.ts +8 -0
- package/pills-input/si-pills-input-email.directive.d.ts +10 -0
- package/pills-input/si-pills-input-pattern-base.d.ts +19 -0
- package/pills-input/si-pills-input-value-handler.d.ts +12 -0
- package/pills-input/si-pills-input.component.d.ts +87 -0
- package/pills-input/si-pills-input.module.d.ts +9 -0
- package/popover/index.d.ts +6 -0
- package/popover/package.json +3 -0
- package/popover/si-popover.component.d.ts +26 -0
- package/popover/si-popover.directive.d.ts +89 -0
- package/popover/si-popover.module.d.ts +7 -0
- package/popover-next/index.d.ts +7 -0
- package/popover-next/package.json +3 -0
- package/popover-next/si-popover-description.directive.d.ts +7 -0
- package/popover-next/si-popover-next.directive.d.ts +61 -0
- package/popover-next/si-popover-title.directive.d.ts +7 -0
- package/popover-next/si-popover.component.d.ts +27 -0
- package/progressbar/index.d.ts +6 -0
- package/progressbar/package.json +3 -0
- package/progressbar/si-progressbar.component.d.ts +43 -0
- package/progressbar/si-progressbar.module.d.ts +7 -0
- package/search-bar/index.d.ts +6 -0
- package/search-bar/package.json +3 -0
- package/search-bar/si-search-bar.component.d.ts +87 -0
- package/search-bar/si-search-bar.module.d.ts +7 -0
- package/select/index.d.ts +18 -0
- package/select/options/si-select-complex-options.directive.d.ts +69 -0
- package/select/options/si-select-lazy-options.directive.d.ts +38 -0
- package/select/options/si-select-option.source.d.ts +49 -0
- package/select/options/si-select-options-strategy.base.d.ts +35 -0
- package/select/options/si-select-options-strategy.d.ts +37 -0
- package/select/options/si-select-simple-options.directive.d.ts +34 -0
- package/select/package.json +3 -0
- package/select/select-input/si-select-input.component.d.ts +43 -0
- package/select/select-list/si-select-list-has-filter.component.d.ts +20 -0
- package/select/select-list/si-select-list.base.d.ts +37 -0
- package/select/select-list/si-select-list.component.d.ts +15 -0
- package/select/select-option/si-select-option-row.component.d.ts +16 -0
- package/select/select-option/si-select-option.component.d.ts +9 -0
- package/select/selection/si-select-multi-value.directive.d.ts +26 -0
- package/select/selection/si-select-selection-strategy.d.ts +58 -0
- package/select/selection/si-select-single-value.directive.d.ts +26 -0
- package/select/si-select-action.directive.d.ts +12 -0
- package/select/si-select-actions.directive.d.ts +5 -0
- package/select/si-select-group-template.directive.d.ts +20 -0
- package/select/si-select-option-row-template.directive.d.ts +9 -0
- package/select/si-select-option-template.directive.d.ts +21 -0
- package/select/si-select.component.d.ts +96 -0
- package/select/si-select.module.d.ts +15 -0
- package/select/si-select.types.d.ts +65 -0
- package/skip-links/index.d.ts +5 -0
- package/skip-links/package.json +3 -0
- package/skip-links/si-skip-link-target.directive.d.ts +27 -0
- package/skip-links/si-skip-links.component.d.ts +9 -0
- package/skip-links/skip-link.service.d.ts +14 -0
- package/slider/index.d.ts +6 -0
- package/slider/package.json +3 -0
- package/slider/si-slider.component.d.ts +129 -0
- package/slider/si-slider.module.d.ts +7 -0
- package/sort-bar/index.d.ts +6 -0
- package/sort-bar/package.json +3 -0
- package/sort-bar/si-sort-bar.component.d.ts +42 -0
- package/sort-bar/si-sort-bar.module.d.ts +7 -0
- package/split/index.d.ts +8 -0
- package/split/package.json +3 -0
- package/split/si-split-part.component.d.ts +154 -0
- package/split/si-split.component.d.ts +48 -0
- package/split/si-split.interfaces.d.ts +17 -0
- package/split/si-split.module.d.ts +8 -0
- package/status-toggle/index.d.ts +6 -0
- package/status-toggle/package.json +3 -0
- package/status-toggle/si-status-toggle.component.d.ts +54 -0
- package/status-toggle/status-toggle.model.d.ts +26 -0
- package/summary-widget/index.d.ts +5 -0
- package/summary-widget/package.json +3 -0
- package/summary-widget/si-summary-widget.component.d.ts +44 -0
- package/system-banner/index.d.ts +5 -0
- package/system-banner/package.json +3 -0
- package/system-banner/system-banner.component.d.ts +23 -0
- package/tabs/index.d.ts +7 -0
- package/tabs/package.json +3 -0
- package/tabs/si-tab/index.d.ts +5 -0
- package/tabs/si-tab/si-tab.component.d.ts +58 -0
- package/tabs/si-tabs.module.d.ts +8 -0
- package/tabs/si-tabset/index.d.ts +5 -0
- package/tabs/si-tabset/si-tabset.component.d.ts +100 -0
- package/template-i18n.json +111 -1
- package/toast-notification/index.d.ts +6 -0
- package/toast-notification/package.json +3 -0
- package/toast-notification/si-toast-notification/si-toast-notification.component.d.ts +17 -0
- package/toast-notification/si-toast-notification-drawer/si-toast-notification-drawer.component.d.ts +9 -0
- package/toast-notification/si-toast-notification.service.d.ts +41 -0
- package/toast-notification/si-toast.model.d.ts +25 -0
- package/translate/si-translatable-keys.interface.d.ts +110 -0
- package/typeahead/index.d.ts +8 -0
- package/typeahead/package.json +3 -0
- package/typeahead/si-typeahead-item-template.directive.d.ts +7 -0
- package/typeahead/si-typeahead.component.d.ts +22 -0
- package/typeahead/si-typeahead.directive.d.ts +196 -0
- package/typeahead/si-typeahead.model.d.ts +60 -0
- package/typeahead/si-typeahead.module.d.ts +8 -0
- package/typeahead/si-typeahead.sorting.d.ts +10 -0
- package/unauthorized-page/index.d.ts +6 -0
- package/unauthorized-page/package.json +3 -0
- package/unauthorized-page/si-unauthorized-page.component.d.ts +35 -0
- package/unauthorized-page/si-unauthorized-page.module.d.ts +7 -0
- package/wizard/index.d.ts +7 -0
- package/wizard/package.json +3 -0
- package/wizard/si-wizard-step.component.d.ts +21 -0
- package/wizard/si-wizard.component.d.ts +196 -0
- package/wizard/si-wizard.module.d.ts +8 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-file-uploader.mjs","sources":["../../../../projects/element-ng/file-uploader/si-file-dropzone.component.ts","../../../../projects/element-ng/file-uploader/si-file-dropzone.component.html","../../../../projects/element-ng/file-uploader/si-file-uploader.component.ts","../../../../projects/element-ng/file-uploader/si-file-uploader.component.html","../../../../projects/element-ng/file-uploader/si-file-uploader.module.ts","../../../../projects/element-ng/file-uploader/index.ts","../../../../projects/element-ng/file-uploader/siemens-element-ng-file-uploader.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n LOCALE_ID,\n output,\n viewChild\n} from '@angular/core';\nimport { addIcons, elementUpload, SiIconNextComponent } from '@siemens/element-ng/icon';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\n\nimport { UploadFile } from './si-file-uploader.model';\n\n@Component({\n selector: 'si-file-dropzone',\n templateUrl: './si-file-dropzone.component.html',\n styleUrl: './si-file-dropzone.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SiIconNextComponent, SiTranslateModule]\n})\nexport class SiFileDropzoneComponent {\n /**\n * Text or translation key of the input file selector (is combined with the `uploadTextRest`).\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.FILE_SELECT:click to upload`\n * ```\n */\n readonly uploadTextFileSelect = input($localize`:@@SI_FILE_UPLOADER.FILE_SELECT:click to upload`);\n /**\n * Text or translation key of the drag&drop field (is combined with the `uploadTextFileSelect`).\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.DROP:Drop files here or`\n * ```\n */\n readonly uploadDropText = input($localize`:@@SI_FILE_UPLOADER.DROP:Drop files here or`);\n /**\n * Text or translation key for max file size.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.MAX_SIZE:Maximum upload size`\n * ```\n */\n readonly maxFileSizeText = input($localize`:@@SI_FILE_UPLOADER.MAX_SIZE:Maximum upload size`);\n /**\n * Text or translation key for accepted types.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.ACCEPTED_FILE_TYPES:Accepted file types`\n * ```\n */\n readonly acceptText = input(\n $localize`:@@SI_FILE_UPLOADER.ACCEPTED_FILE_TYPES:Accepted file types`\n );\n /**\n * Text or translation key of message title if incorrect file type is dragged / dropped.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.ERROR_FILE_TYPE:Incorrect file type selected`\n * ```\n */\n readonly errorTextFileType = input(\n $localize`:@@SI_FILE_UPLOADER.ERROR_FILE_TYPE:Incorrect file type selected`\n );\n /**\n * Message or translation key if file exceeds the maximum file size limit.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.ERROR_FILE_SIZE_EXCEEDED:File exceeds allowed maximum size`\n * ```\n */\n readonly errorTextFileMaxSize = input(\n $localize`:@@SI_FILE_UPLOADER.ERROR_FILE_SIZE_EXCEEDED:File exceeds allowed maximum size`\n );\n /**\n * Define which file types are suggested in file browser.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#attr-accept\n */\n readonly accept = input<string>();\n /**\n * Define maximal allowed file size in bytes.\n */\n readonly maxFileSize = input<number>();\n /**\n * Defines whether the file input allows selecting multiple files.\n * When {@link directoryUpload} is enabled, this will have no effect.\n *\n * @defaultValue false\n */\n readonly multiple = input(false, { transform: booleanAttribute });\n /**\n * Event emitted when files are added.\n */\n readonly filesAdded = output<UploadFile[]>();\n\n /**\n * Enable directory upload.\n *\n * @defaultValue false\n */\n readonly directoryUpload = input(false, { transform: booleanAttribute });\n\n protected readonly maxFileSizeString = computed(() => {\n const maxFileSize = this.maxFileSize();\n return maxFileSize ? this.fileSizeToString(maxFileSize) : '';\n });\n\n protected readonly icons = addIcons({ elementUpload });\n\n protected dragOver = false;\n\n private readonly fileInput = viewChild.required<ElementRef>('fileInput');\n private locale = inject(LOCALE_ID).toString();\n private numberFormat = new Intl.NumberFormat(this.locale, { maximumFractionDigits: 2 });\n\n protected dropHandler(event: DragEvent): void {\n event.preventDefault();\n if (this.directoryUpload()) {\n this.handleItems(event.dataTransfer!.items);\n } else {\n this.handleFiles(event.dataTransfer!.files);\n }\n this.dragOver = false;\n }\n\n protected dragOverHandler(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragOver = true;\n }\n\n protected inputEnterHandler(): void {\n this.fileInput().nativeElement.click();\n }\n\n protected inputHandler(event: Event): void {\n this.handleFiles((event.target as HTMLInputElement).files);\n }\n\n protected handleFiles(files: FileList | null): void {\n if (!files?.length) {\n return;\n }\n\n const newFiles: UploadFile[] = [];\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < files.length; i++) {\n newFiles.push(this.makeUploadFile(files[i]));\n }\n newFiles.sort((a, b) => a.fileName.localeCompare(b.fileName));\n\n this.filesAdded.emit(newFiles);\n this.reset();\n }\n\n /**\n * Reset all the files inside the native file input (and therefore the dropzone).\n */\n reset(): void {\n this.fileInput().nativeElement.value = '';\n }\n\n private makeUploadFile(file: File): UploadFile {\n const uploadFile: UploadFile = {\n fileName: file.name,\n file,\n size: this.fileSizeToString(file.size),\n progress: 0,\n status: 'added'\n };\n // use MIME type of file if set. Otherwise fall back to file name ending\n const ext = '.' + uploadFile.file.name.split('.').pop();\n if (!this.verifyFileType(uploadFile.file.type, ext)) {\n uploadFile.status = 'invalid';\n uploadFile.errorText = this.errorTextFileType();\n } else if (!this.verifyFileSize(uploadFile.file.size)) {\n uploadFile.status = 'invalid';\n uploadFile.errorText = this.errorTextFileMaxSize();\n }\n return uploadFile;\n }\n\n private verifyFileSize(size: number): boolean {\n const maxFileSize = this.maxFileSize();\n return !maxFileSize || size <= maxFileSize;\n }\n\n private verifyFileType(fileType: string | undefined, ext: string | undefined): boolean {\n const accept = this.accept();\n if (!accept) {\n return true;\n }\n if (fileType === undefined && ext === undefined) {\n return false;\n }\n // Spec says that comma is the delimiter for filetypes. Also allow pipe for compatibility\n return accept.split(/,|\\|/).some(acceptedType => {\n // convert accept glob into regex (example: images/* --> images/.*)\n const acceptedRegexStr = acceptedType.replace('.', '.').replace('*', '.*').trim();\n const acceptedRegex = new RegExp(acceptedRegexStr, 'i');\n\n // if fileType is set and accepted type looks like a MIME type, match that otherwise extension\n if (fileType && acceptedType.includes('/')) {\n return !!fileType.match(acceptedRegex);\n }\n return !!ext?.match(acceptedRegex);\n });\n }\n\n private fileSizeToString(num: number): string {\n let suffix = 'B';\n if (num >= 1_073_741_824) {\n num /= 1_073_741_824;\n suffix = 'GB';\n }\n if (num >= 1_048_576) {\n num /= 1_048_576;\n suffix = 'MB';\n } else if (num >= 1_024) {\n num /= 1_024;\n suffix = 'KB';\n }\n return this.numberFormat.format(num) + suffix;\n }\n\n private handleItems(items: DataTransferItemList): void {\n const newFiles: UploadFile[] = [];\n let pendingEntries = 0;\n\n const traverseFileTree = (item: FileSystemEntry): void => {\n if (item.isFile) {\n (item as FileSystemFileEntry).file(file => {\n newFiles.push(this.makeUploadFile(file));\n if (--pendingEntries === 0) {\n this.filesAdded.emit(newFiles);\n this.reset();\n }\n });\n } else if (item.isDirectory) {\n const dirReader = (item as FileSystemDirectoryEntry).createReader();\n dirReader.readEntries(entries => {\n for (const entry of entries) {\n pendingEntries++;\n traverseFileTree(entry);\n }\n if (--pendingEntries === 0) {\n this.filesAdded.emit(newFiles);\n this.reset();\n }\n });\n }\n };\n\n // items is not an array but of type DataTransferItemList\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < items.length; i++) {\n const item = items[i].webkitGetAsEntry();\n if (item) {\n pendingEntries++;\n traverseFileTree(item);\n }\n }\n }\n}\n","<div\n class=\"drag-and-drop rounded p-6\"\n [class.drag-over]=\"dragOver\"\n (drop)=\"dropHandler($event)\"\n (dragover)=\"dragOverHandler($event)\"\n (dragleave)=\"dragOver = false\"\n>\n <si-icon-next class=\"mb-6 si-display-3\" [icon]=\"icons.elementUpload\" />\n <span class=\"drag-and-drop-description si-title-2 d-flex\">\n <span>{{ uploadDropText() | translate }}</span>\n \n <label class=\"select-file si-title-2 mb-0\">\n <span tabindex=\"0\" (keydown.enter)=\"inputEnterHandler()\">{{\n uploadTextFileSelect() | translate\n }}</span>\n <input\n #fileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"d-none\"\n [attr.webkitdirectory]=\"directoryUpload() ? true : null\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n (change)=\"inputHandler($event)\"\n (cancel)=\"$event.stopPropagation()\"\n />\n </label>\n </span>\n @if (maxFileSize() || accept()) {\n <div class=\"allowed si-caption mt-6\">\n @if (maxFileSize()) {\n {{ maxFileSizeText() | translate }}: {{ maxFileSizeString() }}.\n }\n @if (accept()) {\n {{ acceptText() | translate }}: {{ accept() }}.\n }\n </div>\n }\n</div>\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgClass } from '@angular/common';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpEvent,\n HttpEventType,\n HttpHeaders,\n HttpRequest,\n HttpResponse\n} from '@angular/common/http';\nimport {\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n inject,\n input,\n numberAttribute,\n OnChanges,\n output,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport {\n addIcons,\n elementCancel,\n elementDelete,\n elementDocument,\n elementRedo,\n SiIconComponent,\n SiIconNextComponent\n} from '@siemens/element-ng/icon';\nimport { SiInlineNotificationComponent } from '@siemens/element-ng/inline-notification';\nimport { SiProgressbarComponent } from '@siemens/element-ng/progressbar';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\nimport { Observable, Subscription } from 'rxjs';\nimport { retry } from 'rxjs/operators';\n\nimport { SiFileDropzoneComponent } from './si-file-dropzone.component';\nimport { UploadFile } from './si-file-uploader.model';\n\n/**\n * The FileUploadResult is emitted at completion of the file uploading\n * via the `uploadCompleted` emitter. On success the Http `response` from\n * the backend is provided and on failure, the `error` object is available.\n */\nexport interface FileUploadResult {\n file: string;\n response?: HttpResponse<unknown>;\n error?: Error;\n}\n\nexport interface FileUploadConfig {\n headers: HttpHeaders | string | Record<string, string | number | (string | number)[]> | Headers;\n method: 'POST' | 'PUT' | 'PATCH';\n url: string;\n /** Form field name for the uploaded file. */\n fieldName: string;\n /**\n * Additional form fields added in the HTTP request.\n *\n * @example\n * ```json\n * { upload_user: 'Reiner Zufall', expiry_date: ' 21.12.2012' }\n * ```\n */\n additionalFields?: Record<string, string>;\n /** Specify the server response type */\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n /** A function to modify the HTTP request sent on the consumer side. */\n handler?: (req: HttpRequest<unknown>) => Observable<HttpEvent<unknown>>;\n /**\n * When `true`, the file will be sent directly w/o the use of `FormData`.\n * You will also need to set the `Content-Type` header when sending binary. See: {@link headers}\n */\n sendBinary?: boolean;\n}\n\ninterface ExtUploadFile extends UploadFile {\n httpErrorText?: string;\n subscription?: Subscription;\n successResponse?: HttpResponse<unknown>;\n fadeOut?: boolean;\n}\n\n@Component({\n selector: 'si-file-uploader',\n templateUrl: './si-file-uploader.component.html',\n styleUrl: './si-file-uploader.component.scss',\n imports: [\n NgClass,\n SiFileDropzoneComponent,\n SiIconComponent,\n SiIconNextComponent,\n SiInlineNotificationComponent,\n SiProgressbarComponent,\n SiTranslateModule\n ]\n})\nexport class SiFileUploaderComponent implements OnChanges {\n /**\n * Text of the link to open the file select dialog (follows `uploadDropText`).\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.FILE_SELECT:click to upload`\n * ```\n */\n readonly uploadTextFileSelect = input($localize`:@@SI_FILE_UPLOADER.FILE_SELECT:click to upload`);\n /**\n * Text instructing a user to drop the files inside the dropzone.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.DROP:Drop files here or`\n * ```\n */\n readonly uploadDropText = input($localize`:@@SI_FILE_UPLOADER.DROP:Drop files here or`);\n /**\n * Text to describe the maximum file size.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.MAX_SIZE:Maximum upload size`\n * ```\n */\n readonly maxFileSizeText = input($localize`:@@SI_FILE_UPLOADER.MAX_SIZE:Maximum upload size`);\n /**\n * Error message shown when the maximum number of files are reached.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.MAX_FILE_REACHED:Maximum number of files reached`\n * ```\n */\n readonly maxFilesReachedText = input(\n $localize`:@@SI_FILE_UPLOADER.MAX_FILE_REACHED:Maximum number of files reached`\n );\n /**\n * Text for the accepted file types.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.ACCEPTED_FILE_TYPES:Accepted file types`\n * ```\n */\n readonly acceptText = input(\n $localize`:@@SI_FILE_UPLOADER.ACCEPTED_FILE_TYPES:Accepted file types`\n );\n /**\n * Text used inside the upload button.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.UPLOAD:Upload`\n * ```\n */\n readonly uploadButtonText = input($localize`:@@SI_FILE_UPLOADER.UPLOAD:Upload`);\n /**\n * Text used inside the clear button.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.CLEAR:Clear`\n * ```\n */\n readonly clearButtonText = input($localize`:@@SI_FILE_UPLOADER.CLEAR:Clear`);\n /**\n * Text shown during the file upload.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.UPLOADING:Uploading`\n * ```\n */\n readonly uploadingText = input($localize`:@@SI_FILE_UPLOADER.UPLOADING:Uploading`);\n /**\n * Text shown to remove a file from the file list. Required for a11y.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.REMOVE:Remove`\n * ```\n */\n readonly removeButtonText = input($localize`:@@SI_FILE_UPLOADER.REMOVE:Remove`);\n /**\n * Text of cancel button. Shown during upload. Required for a11y.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.CANCEL:Cancel`\n * ```\n */\n readonly cancelButtonText = input($localize`:@@SI_FILE_UPLOADER.CANCEL:Cancel`);\n /**\n * Text shown if the upload was successful.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.UPLOAD_COMPLETED:Upload completed`\n * ```\n */\n readonly successTextTitle = input(\n $localize`:@@SI_FILE_UPLOADER.UPLOAD_COMPLETED:Upload completed`\n );\n /**\n * Text shown if the upload failed.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.UPLOAD_FAILED:Upload failed`\n * ```\n */\n readonly errorUploadFailed = input($localize`:@@SI_FILE_UPLOADER.UPLOAD_FAILED:Upload failed`);\n /**\n * On failed upload, show the error received from the server.\n *\n * @defaultValue false\n */\n readonly showHttpError = input(false, { transform: booleanAttribute });\n /**\n * Text shown to indicate that an incorrect file type was added to file list.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.ERROR_FILE_TYPE:Incorrect file type selected`\n * ```\n */\n readonly errorTextFileType = input(\n $localize`:@@SI_FILE_UPLOADER.ERROR_FILE_TYPE:Incorrect file type selected`\n );\n /**\n * Message or translation key if file exceeds the maximum file size limit.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILE_UPLOADER.ERROR_FILE_SIZE_EXCEEDED:File exceeds allowed maximum size`\n * ```\n */\n readonly errorTextFileMaxSize = input(\n $localize`:@@SI_FILE_UPLOADER.ERROR_FILE_SIZE_EXCEEDED:File exceeds allowed maximum size`\n );\n /**\n * Config for HTTP request to upload file.\n *\n * @defaultValue\n * ```\n * {\n * headers: new HttpHeaders({ 'Accept': 'application/json' }),\n * method: 'POST',\n * url: '',\n * fieldName: 'upload_file',\n * responseType: 'json'\n * }\n * ```\n */\n readonly uploadConfig = input<FileUploadConfig>({\n headers: new HttpHeaders({ 'Accept': 'application/json' }),\n method: 'POST',\n url: '',\n fieldName: 'upload_file',\n responseType: 'json'\n });\n /**\n * Define which file types are suggested in file browser.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#attr-accept\n */\n readonly accept = input<string>();\n /**\n * Define maximal allowed file size in bytes.\n *\n * @defaultValue undefined\n */\n readonly maxFileSize = input<number | undefined, unknown>(undefined, {\n transform: numberAttribute\n });\n /**\n * Define maximal allowed number of files.\n * When {@link directoryUpload} is enabled, this will have no effect.\n * @defaultValue 10\n */\n readonly maxFiles = input(10, { transform: numberAttribute });\n /**\n * Maximum number of concurrent uploads.\n *\n * @defaultValue 3\n */\n readonly maxConcurrentUploads = input(3, { transform: numberAttribute });\n /**\n * Numbers of retries for failed uploads.\n *\n * @defaultValue 0\n */\n readonly retries = input(0, { transform: numberAttribute });\n /**\n * Auto-upload mode - automatically start upload once files are added.\n *\n * @defaultValue false\n */\n readonly autoUpload = input(false, { transform: booleanAttribute });\n /**\n * Disable the upload button.\n *\n * @defaultValue false\n */\n readonly disableUpload = input(false, { transform: booleanAttribute });\n\n /**\n * Enable directory upload mode.\n * When enabled, the file input will accept directories and upload all files within as a flat list.\n * The hierarchy of the directory will not be preserved.\n * The `maxFiles` property will have no effect when `directoryUpload` is enabled.\n *\n * **Note:** This feature is not yet available for safari (iOS)\n *\n * @defaultValue false\n */\n readonly directoryUpload = input(false, { transform: booleanAttribute });\n\n /**\n * Emits when a user press cancel during upload. The event provides the file details.\n */\n readonly uploadCanceled = output<UploadFile>();\n\n /**\n * Output callback event will provide you if upload is finished. If an error\n * occurred it will be emitted.\n */\n readonly uploadCompleted = output<FileUploadResult>();\n\n /**\n * Output which fires whenever new files are added to or removed from the uploader.\n */\n readonly filesChanges = output<UploadFile[]>();\n\n protected readonly icons = addIcons({\n elementCancel,\n elementDelete,\n elementDocument,\n elementRedo\n });\n protected files: ExtUploadFile[] = [];\n protected pending = 0;\n protected uploading = 0;\n protected uploadEnabled = false;\n protected maxFilesReached = false;\n\n private readonly dropZone = viewChild.required<SiFileDropzoneComponent>('dropZone');\n private cdRef = inject(ChangeDetectorRef);\n private http? = inject(HttpClient, { optional: true });\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.maxFiles || changes.disableUpload) {\n this.updateStates();\n }\n }\n\n protected handleFiles(files: UploadFile[]): void {\n if (!files?.length) {\n return;\n }\n\n const maxFiles = this.maxFiles();\n // for single-file case, replace exiting file if any\n if (maxFiles === 1 && this.files.length) {\n this.reset(false);\n }\n\n let numValid = this.countValid();\n for (const file of files) {\n const duplicate = this.isDuplicate(file);\n if (duplicate) {\n // in case this is duplicated: reset if already uploaded or not handled yet\n if (duplicate.status !== 'uploading' && duplicate.status !== 'queued') {\n Object.assign(duplicate, file);\n }\n continue;\n }\n\n const canAdd = numValid + 1 <= maxFiles;\n const valid = file.status === 'added';\n if (valid && !canAdd) {\n this.maxFilesReached = true;\n break;\n } else if (valid) {\n numValid++;\n }\n this.files.push(file);\n }\n\n this.files.sort((a, b) => a.fileName.localeCompare(b.fileName));\n\n this.filesChanges.emit(this.files.slice());\n\n this.updateStates();\n\n // needed for drag drop of directory\n this.cdRef.markForCheck();\n\n if (this.autoUpload()) {\n this.fileUpload(false);\n }\n }\n\n protected removeFile(index: number): void {\n if (index >= 0) {\n this.files.splice(index, 1);\n this.filesChanges.emit(this.files.slice());\n this.dropZone().reset();\n this.updateStates();\n }\n }\n\n protected cancelUpload(file: ExtUploadFile): void {\n if (file.subscription) {\n file.subscription.unsubscribe();\n file.subscription = undefined;\n this.uploading--;\n }\n this.pending--;\n file.status = 'added';\n file.progress = 0;\n this.updateStates();\n\n const { status, fileName, size, progress } = file;\n this.uploadCanceled.emit({\n status,\n fileName,\n size,\n progress,\n file: file.file\n });\n }\n\n protected retryUpload(file: UploadFile): void {\n file.status = 'added';\n this.doUpload([file], true);\n }\n\n /**\n * Reset the state.\n */\n reset(emit = true): void {\n this.files.forEach(f => f.subscription?.unsubscribe());\n this.files = [];\n this.dropZone().reset();\n this.updateStates();\n if (emit) {\n this.filesChanges.emit([]);\n }\n }\n\n /**\n * Uploads the file\n */\n fileUpload(doRetry = true): void {\n if (!this.uploadEnabled) {\n return;\n }\n this.uploadEnabled = false;\n this.doUpload(this.files, doRetry);\n }\n\n private doUpload(files: UploadFile[], doRetry: boolean): void {\n for (const file of files) {\n if (file.status !== 'added' && (!doRetry || file.status !== 'error')) {\n continue;\n }\n this.pending++;\n file.status = 'queued';\n }\n this.processQueue();\n }\n\n private processQueue(): void {\n for (let i = 0; i < this.files.length && this.uploading < this.maxConcurrentUploads(); i++) {\n const file = this.files[i];\n if (file.status === 'queued') {\n this.uploading++;\n this.uploadOneFile(file);\n }\n }\n }\n\n private uploadOneFile(file: ExtUploadFile): void {\n let formData: FormData | undefined;\n const config = this.uploadConfig();\n if (!config.sendBinary) {\n formData = new FormData();\n\n if (config.additionalFields) {\n Object.keys(config.additionalFields).forEach(key => {\n formData!.append(key, config.additionalFields![key]);\n });\n }\n // this needs to be last for AWS\n formData.append(config.fieldName, file.file, file.fileName);\n }\n const headers =\n config.headers instanceof HttpHeaders ? config.headers : new HttpHeaders(config.headers);\n\n const req = new HttpRequest(config.method, config.url, formData ?? file.file, {\n headers,\n responseType: config.responseType,\n reportProgress: true\n });\n\n file.status = 'uploading';\n file.errorText = undefined;\n file.httpErrorText = undefined;\n\n const requestHandler =\n config.handler ??\n (this.http ? (r: HttpRequest<unknown>) => this.http!.request(r) : undefined);\n if (!requestHandler) {\n return;\n }\n\n file.subscription = requestHandler(req)\n .pipe(retry(this.retries()))\n .subscribe({\n next: event => this.handleUploadEvent(file, event),\n error: (error: HttpErrorResponse) => this.handleUploadError(file, error),\n complete: () => this.handleUploadComplete(file)\n });\n }\n\n // this is a light check for duplicate file - name and size only, not content!\n private isDuplicate(file: UploadFile): UploadFile | null {\n for (const uploadFile of this.files) {\n if (uploadFile.file.name === file.file.name && uploadFile.file.size === file.file.size) {\n return uploadFile;\n }\n }\n return null;\n }\n\n private handleUploadEvent(file: ExtUploadFile, httpEvent: HttpEvent<unknown>): void {\n if (httpEvent instanceof HttpResponse) {\n file.successResponse = httpEvent as HttpResponse<unknown>;\n } else if (httpEvent.type === HttpEventType.UploadProgress && httpEvent.total) {\n file.progress = Math.floor((100 * httpEvent.loaded) / httpEvent.total);\n this.cdRef.markForCheck();\n }\n }\n\n private handleUploadError(file: ExtUploadFile, error: HttpErrorResponse): void {\n this.uploadCompleted.emit({ file: file.fileName, error });\n file.status = 'error';\n file.errorText = this.errorUploadFailed();\n if (this.showHttpError() && error.status && error.statusText) {\n file.httpErrorText = `${error.status}: ${error.statusText}`;\n }\n this.oneUploadDone(file);\n }\n\n private handleUploadComplete(file: ExtUploadFile): void {\n this.uploadCompleted.emit({ file: file.fileName, response: file.successResponse });\n file.status = 'success';\n file.progress = 100;\n file.successResponse = undefined;\n if (this.autoUpload()) {\n this.fadeOut(file);\n }\n this.oneUploadDone(file);\n }\n\n private oneUploadDone(file: ExtUploadFile): void {\n file.subscription = undefined;\n this.pending--;\n this.uploading--;\n this.updateStates();\n this.processQueue();\n }\n\n private fadeOut(file: ExtUploadFile): void {\n setTimeout(() => {\n file.fadeOut = true;\n this.cdRef.markForCheck();\n setTimeout(() => {\n this.removeFile(this.files.indexOf(file));\n this.cdRef.markForCheck();\n }, 500);\n this.cdRef.markForCheck();\n }, 3500);\n }\n\n private updateStates(): void {\n this.uploadEnabled =\n !this.disableUpload() &&\n !this.pending &&\n this.files.some(f => f.status === 'added' || f.status === 'error');\n if (this.maxFilesReached && this.countValid() < this.maxFiles()) {\n this.maxFilesReached = false;\n }\n }\n\n private countValid(): number {\n return this.files.reduce<number>((acc, f) => acc + (f.status !== 'invalid' ? 1 : 0), 0);\n }\n}\n","<si-file-dropzone\n #dropZone\n [ngClass]=\"autoUpload() ? 'mb-8' : 'mb-4'\"\n [uploadTextFileSelect]=\"uploadTextFileSelect()\"\n [uploadDropText]=\"uploadDropText()\"\n [multiple]=\"maxFiles() > 1\"\n [directoryUpload]=\"directoryUpload()\"\n [maxFileSizeText]=\"maxFileSizeText()\"\n [acceptText]=\"acceptText()\"\n [errorTextFileType]=\"errorTextFileType()\"\n [errorTextFileMaxSize]=\"errorTextFileMaxSize()\"\n [accept]=\"accept()\"\n [maxFileSize]=\"maxFileSize()\"\n (filesAdded)=\"handleFiles($event)\"\n/>\n\n@if (maxFilesReached) {\n <si-inline-notification class=\"mb-4\" severity=\"info\" [message]=\"maxFilesReachedText()\" />\n}\n\n<div class=\"file-list\">\n @for (file of files; track file) {\n <div\n class=\"file d-flex\"\n [ngClass]=\"autoUpload() ? 'mb-8' : 'mb-4'\"\n [class.fade-out]=\"file.fadeOut\"\n >\n <si-icon-next class=\"icon align-self-center ms-6 me-4\" [icon]=\"icons.elementDocument\" />\n <div class=\"flex-fill overflow-hidden\">\n <div class=\"file-info\">\n <div class=\"file-name text-truncate si-title-2\">{{ file.fileName }}</div>\n <div class=\"file-size text-secondary\">{{ file.size }}</div>\n </div>\n @if (file.errorText) {\n <div\n class=\"error text-truncate d-flex align-items-center\"\n [class.text-warning]=\"file.status === 'invalid'\"\n [class.text-danger]=\"file.status === 'error'\"\n >\n <si-icon\n class=\"d-inline-block my-n2 me-2\"\n size=\"icon-small\"\n stackedIcon=\"element-state-exclamation-mark smooth-auto\"\n alt=\"\"\n [icon]=\"\n file.status === 'invalid' ? 'element-triangle-filled' : 'element-circle-filled'\n \"\n [color]=\"file.status === 'invalid' ? 'status-warning' : 'status-danger'\"\n [stackedColor]=\"\n file.status === 'invalid' ? 'status-warning-contrast' : 'status-danger-contrast'\n \"\n />\n {{ file.errorText | translate }}\n @if (file.httpErrorText) {\n : {{ file.httpErrorText }}\n }\n </div>\n }\n @if (!file.errorText) {\n <div class=\"position-relative\">\n <div class=\"position-absolute si-caption end-0 mt-n8\">{{ file.progress }} %</div>\n <si-progressbar\n height=\"small\"\n [value]=\"file.progress\"\n [ariaLabel]=\"uploadingText() | translate\"\n />\n </div>\n }\n </div>\n <div class=\"status align-self-center text-nowrap ps-4 pe-6\">\n @if (file.status === 'error') {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-tertiary me-4\"\n [disabled]=\"!uploadEnabled\"\n [title]=\"uploadButtonText() | translate\"\n [attr.aria-label]=\"uploadButtonText() | translate\"\n (click)=\"retryUpload(file)\"\n >\n <si-icon-next [icon]=\"icons.elementRedo\" />\n </button>\n }\n @if (file.status === 'added' || file.status === 'error' || file.status === 'invalid') {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-ghost\"\n [title]=\"removeButtonText() | translate\"\n [attr.aria-label]=\"removeButtonText() | translate\"\n (click)=\"removeFile($index)\"\n >\n <si-icon-next [icon]=\"icons.elementDelete\" />\n </button>\n }\n @if (file.status === 'uploading' || file.status === 'queued') {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-tertiary\"\n [title]=\"cancelButtonText() | translate\"\n [attr.aria-label]=\"cancelButtonText() | translate\"\n (click)=\"cancelUpload(file)\"\n >\n <si-icon-next [icon]=\"icons.elementCancel\" />\n </button>\n }\n @if (file.status === 'success') {\n <si-icon\n class=\"mx-2\"\n icon=\"element-circle-filled\"\n color=\"status-success\"\n stackedIcon=\"element-state-tick smooth-auto\"\n stackedColor=\"status-success-contrast\"\n [alt]=\"successTextTitle()\"\n />\n }\n </div>\n </div>\n }\n</div>\n\n@if (!autoUpload()) {\n <div class=\"buttons text-end\">\n <button\n type=\"button\"\n class=\"btn btn-secondary me-4\"\n [disabled]=\"pending || !files.length\"\n (click)=\"reset()\"\n >{{ clearButtonText() | translate }}</button\n >\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n [disabled]=\"!uploadEnabled\"\n (click)=\"fileUpload()\"\n >{{ uploadButtonText() | translate }}</button\n >\n </div>\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiFileDropzoneComponent } from './si-file-dropzone.component';\nimport { SiFileUploaderComponent } from './si-file-uploader.component';\n\n@NgModule({\n imports: [SiFileDropzoneComponent, SiFileUploaderComponent],\n exports: [SiFileDropzoneComponent, SiFileUploaderComponent]\n})\nexport class SiFileUploaderModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-file-uploader.model';\nexport * from './si-file-dropzone.component';\nexport * from './si-file-uploader.component';\nexport * from './si-file-uploader.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, booleanAttribute, output, Component, model, viewChild, NgModule } from '@angular/core';
|
|
3
|
+
import { SiAutoCollapsableListDirective, SiAutoCollapsableListItemDirective, SiAutoCollapsableListOverflowItemDirective, SiAutoCollapsableListAdditionalContentDirective } from '@siemens/element-ng/auto-collapsable-list';
|
|
4
|
+
import * as i1 from '@siemens/element-translate-ng/translate';
|
|
5
|
+
import { SiTranslateModule } from '@siemens/element-translate-ng/translate';
|
|
6
|
+
import { NgClass, NgTemplateOutlet } from '@angular/common';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Copyright Siemens 2016 - 2025.
|
|
10
|
+
* SPDX-License-Identifier: MIT
|
|
11
|
+
*/
|
|
12
|
+
class SiFilterPillComponent {
|
|
13
|
+
/**
|
|
14
|
+
* Settings of the filter pill.
|
|
15
|
+
*/
|
|
16
|
+
filter = input.required();
|
|
17
|
+
/** @defaultValue false */
|
|
18
|
+
disabled = input(false, { transform: booleanAttribute });
|
|
19
|
+
/** @defaultValue 0 */
|
|
20
|
+
totalPills = input(0);
|
|
21
|
+
/**
|
|
22
|
+
* Output callback event which will provide you the name of the deleted filter
|
|
23
|
+
* pill if a filter was deleted.
|
|
24
|
+
*/
|
|
25
|
+
deleteFilters = output();
|
|
26
|
+
deleteClicked() {
|
|
27
|
+
this.deleteFilters.emit(this.filter());
|
|
28
|
+
}
|
|
29
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFilterPillComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiFilterPillComponent, isStandalone: true, selector: "si-filter-pill", inputs: { filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, totalPills: { classPropertyName: "totalPills", publicName: "totalPills", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { deleteFilters: "deleteFilters" }, ngImport: i0, template: "<div\n class=\"pill responsive\"\n [class.pe-0]=\"!disabled()\"\n [class.disabled]=\"disabled()\"\n [ngClass]=\"filter().status ? 'pill-' + filter().status : ''\"\n [attr.aria-disabled]=\"disabled()\"\n>\n <div class=\"wrapper\">\n @if (filter().title) {\n <div class=\"name\">{{ filter().title | translate }}</div>\n }\n @if (filter().title && filter().description) {\n <span class=\"name pe-4\">:</span>\n }\n <div class=\"value\">{{ filter().description | translate }}</div>\n </div>\n @if (!disabled()) {\n <ng-container *ngTemplateOutlet=\"remove\" />\n }\n</div>\n<ng-template #remove>\n <button\n type=\"button\"\n class=\"btn-remove element-cancel btn btn-circle btn-ghost focus-inside ms-0 btn-xs\"\n role=\"button\"\n aria-label=\"Remove\"\n [disabled]=\"disabled()\"\n (keydown.enter)=\"deleteClicked()\"\n (click)=\"deleteClicked()\"\n >\n </button>\n</ng-template>\n", styles: [":host{--filter-pill-background-color: var(--element-base-1)}:host.dark-background{--filter-pill-background-color: var(--element-base-0)}.pill{margin-inline-start:8px;background:var(--filter-pill-background-color)}.wrapper{display:flex;flex-direction:column}.pill.responsive .wrapper{flex-direction:row}.pill.responsive .name{font-weight:700;white-space:nowrap}.pill.responsive .value{color:var(--element-text-primary);white-space:nowrap;margin-inline-end:4px}.pill.responsive.disabled,.pill.responsive.disabled .value{padding-inline-end:2px;color:var(--element-text-disabled)}.pill .value,.pill-default .value{color:var(--element-text-active)}.pill-success .value{color:var(--element-text-success)}.pill-info .value{color:var(--element-text-information)}.pill-warning .value{color:var(--element-text-warning)}.pill-danger .value{color:var(--element-text-danger)}.pill-inactive .value{color:var(--element-text-secondary)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
|
|
31
|
+
}
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFilterPillComponent, decorators: [{
|
|
33
|
+
type: Component,
|
|
34
|
+
args: [{ selector: 'si-filter-pill', imports: [NgClass, NgTemplateOutlet, SiTranslateModule], template: "<div\n class=\"pill responsive\"\n [class.pe-0]=\"!disabled()\"\n [class.disabled]=\"disabled()\"\n [ngClass]=\"filter().status ? 'pill-' + filter().status : ''\"\n [attr.aria-disabled]=\"disabled()\"\n>\n <div class=\"wrapper\">\n @if (filter().title) {\n <div class=\"name\">{{ filter().title | translate }}</div>\n }\n @if (filter().title && filter().description) {\n <span class=\"name pe-4\">:</span>\n }\n <div class=\"value\">{{ filter().description | translate }}</div>\n </div>\n @if (!disabled()) {\n <ng-container *ngTemplateOutlet=\"remove\" />\n }\n</div>\n<ng-template #remove>\n <button\n type=\"button\"\n class=\"btn-remove element-cancel btn btn-circle btn-ghost focus-inside ms-0 btn-xs\"\n role=\"button\"\n aria-label=\"Remove\"\n [disabled]=\"disabled()\"\n (keydown.enter)=\"deleteClicked()\"\n (click)=\"deleteClicked()\"\n >\n </button>\n</ng-template>\n", styles: [":host{--filter-pill-background-color: var(--element-base-1)}:host.dark-background{--filter-pill-background-color: var(--element-base-0)}.pill{margin-inline-start:8px;background:var(--filter-pill-background-color)}.wrapper{display:flex;flex-direction:column}.pill.responsive .wrapper{flex-direction:row}.pill.responsive .name{font-weight:700;white-space:nowrap}.pill.responsive .value{color:var(--element-text-primary);white-space:nowrap;margin-inline-end:4px}.pill.responsive.disabled,.pill.responsive.disabled .value{padding-inline-end:2px;color:var(--element-text-disabled)}.pill .value,.pill-default .value{color:var(--element-text-active)}.pill-success .value{color:var(--element-text-success)}.pill-info .value{color:var(--element-text-information)}.pill-warning .value{color:var(--element-text-warning)}.pill-danger .value{color:var(--element-text-danger)}.pill-inactive .value{color:var(--element-text-secondary)}\n"] }]
|
|
35
|
+
}] });
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Copyright Siemens 2016 - 2025.
|
|
39
|
+
* SPDX-License-Identifier: MIT
|
|
40
|
+
*/
|
|
41
|
+
class SiFilterBarComponent {
|
|
42
|
+
/**
|
|
43
|
+
* Custom text if no filters are selected.
|
|
44
|
+
*
|
|
45
|
+
* @defaultValue
|
|
46
|
+
* ```
|
|
47
|
+
* $localize`:@@SI_FILTER_BAR.NO_FILTERS:No filters applied`
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
filterDefaultText = input($localize `:@@SI_FILTER_BAR.NO_FILTERS:No filters applied`);
|
|
51
|
+
/**
|
|
52
|
+
* Array of filter items to show
|
|
53
|
+
*
|
|
54
|
+
* @defaultValue []
|
|
55
|
+
*/
|
|
56
|
+
filters = model([]);
|
|
57
|
+
/**
|
|
58
|
+
* Text for reset button
|
|
59
|
+
*
|
|
60
|
+
* @defaultValue
|
|
61
|
+
* ```
|
|
62
|
+
* $localize`:@@SI_FILTER_BAR.RESET_FILTERS:Reset filters`
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
resetText = input($localize `:@@SI_FILTER_BAR.RESET_FILTERS:Reset filters`);
|
|
66
|
+
/**
|
|
67
|
+
* Set false to hide reset filters button
|
|
68
|
+
*
|
|
69
|
+
* @defaultValue true
|
|
70
|
+
*/
|
|
71
|
+
allowReset = input(true, { transform: booleanAttribute });
|
|
72
|
+
/**
|
|
73
|
+
* Color to use for component background
|
|
74
|
+
*
|
|
75
|
+
* @defaultValue 'base-1'
|
|
76
|
+
*/
|
|
77
|
+
colorVariant = input('base-1');
|
|
78
|
+
/**
|
|
79
|
+
* Set to true to disable component
|
|
80
|
+
*
|
|
81
|
+
* @defaultValue false
|
|
82
|
+
*/
|
|
83
|
+
disabled = input(false, { transform: booleanAttribute });
|
|
84
|
+
/**
|
|
85
|
+
* Custom text for the collapsed filters.
|
|
86
|
+
* @defaultValue
|
|
87
|
+
* ```
|
|
88
|
+
* $localize`:@@SI_FILTER_BAR.COLLAPSED_FILTERS_DESCRIPTION:+ {{count}} filters`
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
collapsedFiltersDescription = input($localize `:@@SI_FILTER_BAR.COLLAPSED_FILTERS_DESCRIPTION:+ {{count}} filters`);
|
|
92
|
+
/**
|
|
93
|
+
* Output callback to be executed when the reset filter is clicked
|
|
94
|
+
*/
|
|
95
|
+
resetFilters = output();
|
|
96
|
+
collapsableListDirective = viewChild.required(SiAutoCollapsableListDirective);
|
|
97
|
+
deleteFilters(deletedPill) {
|
|
98
|
+
this.filters.set(this.filters().filter(filter => filter !== deletedPill));
|
|
99
|
+
}
|
|
100
|
+
onResetFilters() {
|
|
101
|
+
this.filters.set([]);
|
|
102
|
+
this.resetFilters.emit();
|
|
103
|
+
}
|
|
104
|
+
deleteOverflowFilter() {
|
|
105
|
+
this.filters.update(filters => filters.slice(0, this.collapsableListDirective()
|
|
106
|
+
.items.toArray()
|
|
107
|
+
.findIndex(item => !item.isVisible())));
|
|
108
|
+
}
|
|
109
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFilterBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
110
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiFilterBarComponent, isStandalone: true, selector: "si-filter-bar", inputs: { filterDefaultText: { classPropertyName: "filterDefaultText", publicName: "filterDefaultText", isSignal: true, isRequired: false, transformFunction: null }, filters: { classPropertyName: "filters", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, resetText: { classPropertyName: "resetText", publicName: "resetText", isSignal: true, isRequired: false, transformFunction: null }, allowReset: { classPropertyName: "allowReset", publicName: "allowReset", isSignal: true, isRequired: false, transformFunction: null }, colorVariant: { classPropertyName: "colorVariant", publicName: "colorVariant", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, collapsedFiltersDescription: { classPropertyName: "collapsedFiltersDescription", publicName: "collapsedFiltersDescription", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filters: "filtersChange", resetFilters: "resetFilters" }, host: { properties: { "class.reset": "allowReset()" } }, viewQueries: [{ propertyName: "collapsableListDirective", first: true, predicate: SiAutoCollapsableListDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"responsive py-2\" siAutoCollapsableList>\n @if (!this.filters().length) {\n <span class=\"list-text\">{{ filterDefaultText() | translate }}</span>\n }\n @for (filter of filters(); track $index) {\n <div class=\"pill-wrapper\" siAutoCollapsableListItem>\n <si-filter-pill\n [class.dark-background]=\"colorVariant() === 'base-0'\"\n [totalPills]=\"$count\"\n [filter]=\"filter\"\n [disabled]=\"disabled()\"\n (deleteFilters)=\"deleteFilters($event)\"\n />\n </div>\n }\n <si-filter-pill\n #overflowItem=\"siAutoCollapsableListOverflowItem\"\n siAutoCollapsableListOverflowItem\n [class.dark-background]=\"colorVariant() === 'base-0'\"\n [disabled]=\"disabled()\"\n [filter]=\"{\n description:\n collapsedFiltersDescription()\n | translate\n : {\n count: overflowItem.hiddenItemCount\n },\n title: '',\n status: 'default',\n filterName: ''\n }\"\n (deleteFilters)=\"deleteOverflowFilter()\"\n />\n @if (allowReset() && this.filters().length) {\n <button\n siAutoCollapsableListAdditionalContent\n type=\"button\"\n class=\"text-nowrap btn btn-tertiary\"\n [disabled]=\"disabled()\"\n (click)=\"onResetFilters()\"\n >\n {{ resetText() | translate }}\n </button>\n }\n</div>\n", styles: [":host.reset .responsive .list-text{line-height:calc(1rem + 16px)}.list-text{line-height:24px}.pill-wrapper{display:inline-block;vertical-align:middle}.responsive{overflow:hidden;display:flex;align-items:center;gap:8px}.responsive .list-text{color:var(--element-text-disabled)}.responsive .invisible{position:absolute}.responsive si-filter-pill::ng-deep .pill{margin-inline-start:0}\n"], dependencies: [{ kind: "directive", type: SiAutoCollapsableListDirective, selector: "[siAutoCollapsableList]", inputs: ["siAutoCollapsableList", "gap", "siAutoCollapsableListContainerElement"], exportAs: ["siAutoCollapsableList"] }, { kind: "directive", type: SiAutoCollapsableListItemDirective, selector: "[siAutoCollapsableListItem]", inputs: ["forceHide"], exportAs: ["siAutoCollapsableListItem"] }, { kind: "directive", type: SiAutoCollapsableListOverflowItemDirective, selector: "[siAutoCollapsableListOverflowItem]", exportAs: ["siAutoCollapsableListOverflowItem"] }, { kind: "directive", type: SiAutoCollapsableListAdditionalContentDirective, selector: "[siAutoCollapsableListAdditionalContent]" }, { kind: "component", type: SiFilterPillComponent, selector: "si-filter-pill", inputs: ["filter", "disabled", "totalPills"], outputs: ["deleteFilters"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
|
|
111
|
+
}
|
|
112
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFilterBarComponent, decorators: [{
|
|
113
|
+
type: Component,
|
|
114
|
+
args: [{ selector: 'si-filter-bar', imports: [
|
|
115
|
+
SiAutoCollapsableListDirective,
|
|
116
|
+
SiAutoCollapsableListItemDirective,
|
|
117
|
+
SiAutoCollapsableListOverflowItemDirective,
|
|
118
|
+
SiAutoCollapsableListAdditionalContentDirective,
|
|
119
|
+
SiFilterPillComponent,
|
|
120
|
+
SiTranslateModule
|
|
121
|
+
], host: {
|
|
122
|
+
'[class.reset]': 'allowReset()'
|
|
123
|
+
}, template: "<div class=\"responsive py-2\" siAutoCollapsableList>\n @if (!this.filters().length) {\n <span class=\"list-text\">{{ filterDefaultText() | translate }}</span>\n }\n @for (filter of filters(); track $index) {\n <div class=\"pill-wrapper\" siAutoCollapsableListItem>\n <si-filter-pill\n [class.dark-background]=\"colorVariant() === 'base-0'\"\n [totalPills]=\"$count\"\n [filter]=\"filter\"\n [disabled]=\"disabled()\"\n (deleteFilters)=\"deleteFilters($event)\"\n />\n </div>\n }\n <si-filter-pill\n #overflowItem=\"siAutoCollapsableListOverflowItem\"\n siAutoCollapsableListOverflowItem\n [class.dark-background]=\"colorVariant() === 'base-0'\"\n [disabled]=\"disabled()\"\n [filter]=\"{\n description:\n collapsedFiltersDescription()\n | translate\n : {\n count: overflowItem.hiddenItemCount\n },\n title: '',\n status: 'default',\n filterName: ''\n }\"\n (deleteFilters)=\"deleteOverflowFilter()\"\n />\n @if (allowReset() && this.filters().length) {\n <button\n siAutoCollapsableListAdditionalContent\n type=\"button\"\n class=\"text-nowrap btn btn-tertiary\"\n [disabled]=\"disabled()\"\n (click)=\"onResetFilters()\"\n >\n {{ resetText() | translate }}\n </button>\n }\n</div>\n", styles: [":host.reset .responsive .list-text{line-height:calc(1rem + 16px)}.list-text{line-height:24px}.pill-wrapper{display:inline-block;vertical-align:middle}.responsive{overflow:hidden;display:flex;align-items:center;gap:8px}.responsive .list-text{color:var(--element-text-disabled)}.responsive .invisible{position:absolute}.responsive si-filter-pill::ng-deep .pill{margin-inline-start:0}\n"] }]
|
|
124
|
+
}] });
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Copyright Siemens 2016 - 2025.
|
|
128
|
+
* SPDX-License-Identifier: MIT
|
|
129
|
+
*/
|
|
130
|
+
class SiFilterBarModule {
|
|
131
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFilterBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
132
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiFilterBarModule, imports: [SiFilterBarComponent], exports: [SiFilterBarComponent] });
|
|
133
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFilterBarModule, imports: [SiFilterBarComponent] });
|
|
134
|
+
}
|
|
135
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiFilterBarModule, decorators: [{
|
|
136
|
+
type: NgModule,
|
|
137
|
+
args: [{
|
|
138
|
+
imports: [SiFilterBarComponent],
|
|
139
|
+
exports: [SiFilterBarComponent]
|
|
140
|
+
}]
|
|
141
|
+
}] });
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Copyright Siemens 2016 - 2025.
|
|
145
|
+
* SPDX-License-Identifier: MIT
|
|
146
|
+
*/
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Generated bundle index. Do not edit.
|
|
150
|
+
*/
|
|
151
|
+
|
|
152
|
+
export { SiFilterBarComponent, SiFilterBarModule, SiFilterPillComponent };
|
|
153
|
+
//# sourceMappingURL=siemens-element-ng-filter-bar.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-filter-bar.mjs","sources":["../../../../projects/element-ng/filter-bar/si-filter-pill.component.ts","../../../../projects/element-ng/filter-bar/si-filter-pill.component.html","../../../../projects/element-ng/filter-bar/si-filter-bar.component.ts","../../../../projects/element-ng/filter-bar/si-filter-bar.component.html","../../../../projects/element-ng/filter-bar/si-filter-bar.module.ts","../../../../projects/element-ng/filter-bar/index.ts","../../../../projects/element-ng/filter-bar/siemens-element-ng-filter-bar.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { booleanAttribute, Component, input, output } from '@angular/core';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\n\nimport { Filter } from './filter';\n\n@Component({\n selector: 'si-filter-pill',\n templateUrl: './si-filter-pill.component.html',\n styleUrl: './si-filter-pill.component.scss',\n imports: [NgClass, NgTemplateOutlet, SiTranslateModule]\n})\nexport class SiFilterPillComponent {\n /**\n * Settings of the filter pill.\n */\n readonly filter = input.required<Filter>();\n\n /** @defaultValue false */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** @defaultValue 0 */\n readonly totalPills = input(0);\n\n /**\n * Output callback event which will provide you the name of the deleted filter\n * pill if a filter was deleted.\n */\n readonly deleteFilters = output<Filter>();\n\n protected deleteClicked(): void {\n this.deleteFilters.emit(this.filter());\n }\n}\n","<div\n class=\"pill responsive\"\n [class.pe-0]=\"!disabled()\"\n [class.disabled]=\"disabled()\"\n [ngClass]=\"filter().status ? 'pill-' + filter().status : ''\"\n [attr.aria-disabled]=\"disabled()\"\n>\n <div class=\"wrapper\">\n @if (filter().title) {\n <div class=\"name\">{{ filter().title | translate }}</div>\n }\n @if (filter().title && filter().description) {\n <span class=\"name pe-4\">:</span>\n }\n <div class=\"value\">{{ filter().description | translate }}</div>\n </div>\n @if (!disabled()) {\n <ng-container *ngTemplateOutlet=\"remove\" />\n }\n</div>\n<ng-template #remove>\n <button\n type=\"button\"\n class=\"btn-remove element-cancel btn btn-circle btn-ghost focus-inside ms-0 btn-xs\"\n role=\"button\"\n aria-label=\"Remove\"\n [disabled]=\"disabled()\"\n (keydown.enter)=\"deleteClicked()\"\n (click)=\"deleteClicked()\"\n >\n </button>\n</ng-template>\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { booleanAttribute, Component, input, model, output, viewChild } from '@angular/core';\nimport {\n SiAutoCollapsableListAdditionalContentDirective,\n SiAutoCollapsableListDirective,\n SiAutoCollapsableListItemDirective,\n SiAutoCollapsableListOverflowItemDirective\n} from '@siemens/element-ng/auto-collapsable-list';\nimport { BackgroundColorVariant } from '@siemens/element-ng/common';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\n\nimport { Filter } from './filter';\nimport { SiFilterPillComponent } from './si-filter-pill.component';\n\n@Component({\n selector: 'si-filter-bar',\n templateUrl: './si-filter-bar.component.html',\n styleUrl: './si-filter-bar.component.scss',\n imports: [\n SiAutoCollapsableListDirective,\n SiAutoCollapsableListItemDirective,\n SiAutoCollapsableListOverflowItemDirective,\n SiAutoCollapsableListAdditionalContentDirective,\n SiFilterPillComponent,\n SiTranslateModule\n ],\n host: {\n '[class.reset]': 'allowReset()'\n }\n})\nexport class SiFilterBarComponent {\n /**\n * Custom text if no filters are selected.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILTER_BAR.NO_FILTERS:No filters applied`\n * ```\n */\n readonly filterDefaultText = input($localize`:@@SI_FILTER_BAR.NO_FILTERS:No filters applied`);\n /**\n * Array of filter items to show\n *\n * @defaultValue []\n */\n readonly filters = model<Filter[]>([]);\n /**\n * Text for reset button\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_FILTER_BAR.RESET_FILTERS:Reset filters`\n * ```\n */\n readonly resetText = input($localize`:@@SI_FILTER_BAR.RESET_FILTERS:Reset filters`);\n /**\n * Set false to hide reset filters button\n *\n * @defaultValue true\n */\n readonly allowReset = input(true, { transform: booleanAttribute });\n /**\n * Color to use for component background\n *\n * @defaultValue 'base-1'\n */\n readonly colorVariant = input<BackgroundColorVariant>('base-1');\n\n /**\n * Set to true to disable component\n *\n * @defaultValue false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Custom text for the collapsed filters.\n * @defaultValue\n * ```\n * $localize`:@@SI_FILTER_BAR.COLLAPSED_FILTERS_DESCRIPTION:+ {{count}} filters`\n * ```\n */\n readonly collapsedFiltersDescription = input(\n $localize`:@@SI_FILTER_BAR.COLLAPSED_FILTERS_DESCRIPTION:+ {{count}} filters`\n );\n\n /**\n * Output callback to be executed when the reset filter is clicked\n */\n readonly resetFilters = output<void>();\n\n private readonly collapsableListDirective = viewChild.required(SiAutoCollapsableListDirective);\n\n protected deleteFilters(deletedPill: Filter): void {\n this.filters.set(this.filters().filter(filter => filter !== deletedPill));\n }\n\n protected onResetFilters(): void {\n this.filters.set([]);\n this.resetFilters.emit();\n }\n\n protected deleteOverflowFilter(): void {\n this.filters.update(filters =>\n filters.slice(\n 0,\n this.collapsableListDirective()\n .items.toArray()\n .findIndex(item => !item.isVisible())\n )\n );\n }\n}\n","<div class=\"responsive py-2\" siAutoCollapsableList>\n @if (!this.filters().length) {\n <span class=\"list-text\">{{ filterDefaultText() | translate }}</span>\n }\n @for (filter of filters(); track $index) {\n <div class=\"pill-wrapper\" siAutoCollapsableListItem>\n <si-filter-pill\n [class.dark-background]=\"colorVariant() === 'base-0'\"\n [totalPills]=\"$count\"\n [filter]=\"filter\"\n [disabled]=\"disabled()\"\n (deleteFilters)=\"deleteFilters($event)\"\n />\n </div>\n }\n <si-filter-pill\n #overflowItem=\"siAutoCollapsableListOverflowItem\"\n siAutoCollapsableListOverflowItem\n [class.dark-background]=\"colorVariant() === 'base-0'\"\n [disabled]=\"disabled()\"\n [filter]=\"{\n description:\n collapsedFiltersDescription()\n | translate\n : {\n count: overflowItem.hiddenItemCount\n },\n title: '',\n status: 'default',\n filterName: ''\n }\"\n (deleteFilters)=\"deleteOverflowFilter()\"\n />\n @if (allowReset() && this.filters().length) {\n <button\n siAutoCollapsableListAdditionalContent\n type=\"button\"\n class=\"text-nowrap btn btn-tertiary\"\n [disabled]=\"disabled()\"\n (click)=\"onResetFilters()\"\n >\n {{ resetText() | translate }}\n </button>\n }\n</div>\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiFilterBarComponent } from './si-filter-bar.component';\n\n@NgModule({\n imports: [SiFilterBarComponent],\n exports: [SiFilterBarComponent]\n})\nexport class SiFilterBarModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './filter';\nexport * from './si-filter-bar.component';\nexport * from './si-filter-bar.module';\nexport * from './si-filter-pill.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|