@siemens/element-ng 48.0.3 → 48.2.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/accordion/index.d.ts +2 -1
- package/avatar/index.d.ts +3 -4
- package/card/index.d.ts +68 -29
- package/circle-status/index.d.ts +2 -1
- package/common/index.d.ts +11 -0
- package/dashboard/index.d.ts +6 -1
- package/datepicker/index.d.ts +32 -32
- package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-avatar.mjs +32 -36
- package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb.mjs +2 -2
- package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-card.mjs +103 -37
- package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +2 -2
- package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-common.mjs +6 -0
- package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-connection-strength.mjs +2 -2
- package/fesm2022/siemens-element-ng-connection-strength.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-content-action-bar.mjs +2 -2
- package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-dashboard.mjs +34 -35
- package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datatable.mjs +5 -0
- package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-date-range-filter.mjs +1 -1
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datepicker.mjs +176 -142
- package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-file-uploader.mjs +9 -2
- package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filter-bar.mjs +5 -5
- package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filtered-search.mjs +34 -13
- package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-form.mjs +7 -1
- package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-formly.mjs +18 -18
- package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-ip-input.mjs +38 -0
- package/fesm2022/siemens-element-ng-ip-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-language-switcher.mjs +1 -1
- package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-list-details.mjs +9 -4
- package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs +16 -3
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-notification-item.mjs +71 -0
- package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-pagination.mjs +2 -2
- package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-photo-upload.mjs +1 -1
- package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-resize-observer.mjs +0 -1
- package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-result-details-list.mjs +5 -0
- package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-search-bar.mjs +14 -4
- package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-side-panel.mjs +2 -2
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-sort-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-bar.mjs +2 -2
- package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tabs-legacy.mjs +2 -2
- package/fesm2022/siemens-element-ng-tabs-legacy.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tabs.mjs +45 -12
- package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tooltip.mjs +5 -6
- package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +4 -4
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-typeahead.mjs +329 -257
- package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
- package/file-uploader/index.d.ts +3 -1
- package/filter-bar/index.d.ts +13 -5
- package/form/index.d.ts +28 -29
- package/inline-notification/index.d.ts +3 -2
- package/ip-input/index.d.ts +42 -4
- package/landing-page/index.d.ts +3 -2
- package/language-switcher/index.d.ts +3 -1
- package/list-details/index.d.ts +2 -0
- package/main-detail-container/index.d.ts +4 -4
- package/navbar/index.d.ts +1 -1
- package/notification-item/index.d.ts +141 -0
- package/notification-item/package.json +3 -0
- package/package.json +19 -11
- package/progressbar/index.d.ts +3 -3
- package/result-details-list/index.d.ts +4 -2
- package/schematics/collection.json +28 -0
- package/schematics/ng-add/index.js +16 -0
- package/schematics/ng-add/schema.json +16 -0
- package/schematics/scss-import-to-siemens-migration/index.js +101 -0
- package/schematics/scss-import-to-siemens-migration/schema.json +16 -0
- package/schematics/scss-import-to-siemens-migration/style-mappings.js +46 -0
- package/schematics/simpl-siemens-migration/index.js +17 -0
- package/schematics/simpl-siemens-migration/schema.json +16 -0
- package/schematics/ts-import-to-siemens-migration/index.js +118 -0
- package/schematics/ts-import-to-siemens-migration/mappings/charts-ng-mappings.js +70 -0
- package/schematics/ts-import-to-siemens-migration/mappings/dashboards-ng-mappings.js +52 -0
- package/schematics/ts-import-to-siemens-migration/mappings/element-ng-mappings.js +651 -0
- package/schematics/ts-import-to-siemens-migration/mappings/element-translate-ng-mappings.js +21 -0
- package/schematics/ts-import-to-siemens-migration/mappings/index.js +9 -0
- package/schematics/ts-import-to-siemens-migration/mappings/maps-ng-mappings.js +46 -0
- package/schematics/ts-import-to-siemens-migration/model.js +4 -0
- package/schematics/ts-import-to-siemens-migration/schema.json +16 -0
- package/schematics/utils/index.js +8 -0
- package/schematics/utils/project-utils.js +75 -0
- package/schematics/utils/schematics-file-system.js +22 -0
- package/schematics/utils/testing.js +41 -0
- package/schematics/utils/ts-utils.js +99 -0
- package/search-bar/index.d.ts +11 -1
- package/select/index.d.ts +7 -5
- package/sort-bar/index.d.ts +3 -3
- package/split/index.d.ts +3 -2
- package/status-bar/index.d.ts +3 -2
- package/tabs/index.d.ts +15 -1
- package/template-i18n.json +8 -0
- package/tooltip/index.d.ts +1 -1
- package/translate/index.d.ts +8 -0
- package/tree-view/index.d.ts +4 -4
- package/typeahead/index.d.ts +85 -4
- package/wizard/index.d.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-typeahead.mjs","sources":["../../../../projects/element-ng/typeahead/si-typeahead.component.ts","../../../../projects/element-ng/typeahead/si-typeahead.component.html","../../../../projects/element-ng/typeahead/si-typeahead.sorting.ts","../../../../projects/element-ng/typeahead/si-typeahead.directive.ts","../../../../projects/element-ng/typeahead/si-typeahead-item-template.directive.ts","../../../../projects/element-ng/typeahead/si-typeahead.module.ts","../../../../projects/element-ng/typeahead/index.ts","../../../../projects/element-ng/typeahead/siemens-element-ng-typeahead.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n HostListener,\n inject,\n viewChild\n} from '@angular/core';\nimport {\n SiAutocompleteDirective,\n SiAutocompleteListboxDirective,\n SiAutocompleteOptionDirective\n} from '@siemens/element-ng/autocomplete';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiTypeaheadDirective } from './si-typeahead.directive';\nimport { TypeaheadMatch } from './si-typeahead.model';\n\n@Component({\n selector: 'si-typeahead',\n imports: [\n SiAutocompleteListboxDirective,\n SiAutocompleteOptionDirective,\n SiIconComponent,\n NgTemplateOutlet,\n SiTranslatePipe\n ],\n templateUrl: './si-typeahead.component.html',\n styleUrl: './si-typeahead.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'w-100' }\n})\nexport class SiTypeaheadComponent implements AfterViewInit {\n protected parent = inject(SiTypeaheadDirective);\n protected readonly matches = computed(() =>\n this.parent.typeaheadOptionsLimit()\n ? this.parent.foundMatches().slice(0, this.parent.typeaheadOptionsLimit())\n : this.parent.foundMatches()\n );\n\n protected readonly multiselect = computed(() => this.parent.typeaheadMultiSelect());\n\n private readonly typeaheadElement = viewChild.required('typeahead', {\n read: ElementRef\n });\n\n protected autocompleteDirective = inject(SiAutocompleteDirective);\n\n ngAfterViewInit(): void {\n this.setHeight(this.typeaheadElement());\n }\n\n @HostListener('mousedown', ['$event'])\n protected onMouseDown(event: Event): void {\n event.preventDefault();\n }\n\n /*\n * Set the height of the element passed to it (typeahead) if there are items displayed,\n * the number of displayed items changed and it is scrollable.\n */\n private setHeight(element: ElementRef): void {\n if (this.matches().length) {\n if (\n this.parent.typeaheadScrollable() &&\n this.parent.typeaheadOptionsInScrollableView() < this.matches().length\n ) {\n const computedStyle = getComputedStyle(element.nativeElement);\n const matchComputedStyle = getComputedStyle(element.nativeElement.firstElementChild);\n const matchHeight = parseFloat(matchComputedStyle.height || '0');\n const paddingTop = parseFloat(computedStyle.paddingTop || '0');\n const paddingBottom = parseFloat(computedStyle.paddingBottom || '');\n const height = this.parent.typeaheadOptionsInScrollableView() * matchHeight;\n element.nativeElement.style.maxBlockSize = `${\n height + paddingTop + paddingBottom + this.parent.typeaheadScrollableAdditionalHeight()\n }px`;\n } else {\n element.nativeElement.style.maxBlockSize = 'auto';\n }\n }\n }\n\n // Gets called when a match is selected by clicking on it.\n protected selectMatch(match: TypeaheadMatch): void {\n this.parent.selectMatch(match);\n }\n}\n","<!-- Template to be used for every match, can be replaced using an input. -->\n<ng-template #defaultItemTemplate let-match=\"match\" siTypeaheadTemplate>\n @if (multiselect()) {\n <div class=\"d-flex pe-4\" aria-hidden=\"true\">\n <span class=\"form-check-input si-form-checkbox\" [class.checked]=\"match.itemSelected\"></span>\n </div>\n }\n @if (match.iconClass) {\n <si-icon class=\"icon me-2\" [icon]=\"match.iconClass\" />\n }\n @for (segment of match.result; track $index) {\n <span [class.typeahead-match-segment-matching]=\"segment.isMatching\">{{ segment.text }}</span>\n }\n</ng-template>\n\n<!-- Only display the component if there are any matches and set the CSS transform to properly position the typeahead -->\n<ul\n #typeahead\n class=\"typeahead dropdown-menu\"\n [siAutocompleteListboxFor]=\"autocompleteDirective\"\n [siAutocompleteDefaultIndex]=\"parent.typeaheadAutoSelectIndex()\"\n [attr.aria-label]=\"parent.typeaheadAutocompleteListLabel() | translate\"\n [class.d-none]=\"!matches().length\"\n (siAutocompleteOptionSubmitted)=\"selectMatch($event)\"\n>\n <!-- Loop through every match and bind events, the mousedown prevent default is to prevent the host from losing focus on click -->\n @for (match of matches(); track $index) {\n <li\n #typeaheadMatch\n class=\"dropdown-item me-4\"\n [siAutocompleteOption]=\"match\"\n [attr.aria-label]=\"match.text\"\n [attr.aria-selected]=\"multiselect() ? match.itemSelected : null\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <!-- Display either a template set as the input or the template above -->\n <ng-template\n [ngTemplateOutlet]=\"parent.typeaheadItemTemplate() || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: match.option,\n index: $index,\n match: match,\n query: parent.query()\n }\"\n />\n </li>\n }\n</ul>\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { TypeaheadMatch } from './si-typeahead.model';\n\nexport class SiTypeaheadSorting {\n sortMatches(matches: TypeaheadMatch[]): TypeaheadMatch[] {\n // Sort the matches,\n // first is the option and query an exact match.\n // then according to whether it is matching in the beginning,\n // then whether it matches the entire untokenized query.\n // then according to how many unique separate matches it contains.\n // then according to how many unique matches it contains.\n // then according to how many matches it contains.\n return matches.sort((matchA, matchB) => {\n if (matchA.stringMatch || matchB.stringMatch) {\n return matchA.stringMatch ? -1 : 1;\n }\n if (matchA.atBeginning) {\n return !matchB.atBeginning ? -1 : this.compareMatches(matchA, matchB);\n } else {\n return matchB.atBeginning ? 1 : this.compareMatches(matchA, matchB);\n }\n });\n }\n\n private compareMatchesNumbers(matchA: TypeaheadMatch, matchB: TypeaheadMatch): number {\n return (\n matchB.uniqueSeparateMatches - matchA.uniqueSeparateMatches ||\n matchB.uniqueMatches - matchA.uniqueMatches ||\n matchB.matches - matchA.matches\n );\n }\n\n private compareMatches(matchA: TypeaheadMatch, matchB: TypeaheadMatch): number {\n if (matchA.matchesEntireQuery) {\n return !matchB.matchesEntireQuery ? -1 : this.compareMatchesNumbers(matchA, matchB);\n } else {\n return matchB.matchesEntireQuery ? 1 : this.compareMatchesNumbers(matchA, matchB);\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { ConnectionPositionPair, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n numberAttribute,\n OnChanges,\n OnDestroy,\n output,\n signal,\n SimpleChanges,\n TemplateRef\n} from '@angular/core';\nimport { SiAutocompleteDirective } from '@siemens/element-ng/autocomplete';\nimport { t } from '@siemens/element-translate-ng/translate';\nimport { isObservable, Observable, of, ReplaySubject, Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { SiTypeaheadComponent } from './si-typeahead.component';\nimport {\n Typeahead,\n TypeaheadArray,\n TypeaheadMatch,\n TypeaheadObservable,\n TypeaheadOption,\n TypeaheadOptionItemContext\n} from './si-typeahead.model';\nimport { SiTypeaheadSorting } from './si-typeahead.sorting';\n\n@Directive({\n selector: '[siTypeahead]',\n host: {\n class: 'si-typeahead'\n },\n hostDirectives: [SiAutocompleteDirective],\n exportAs: 'si-typeahead'\n})\nexport class SiTypeaheadDirective implements OnChanges, OnDestroy {\n protected static readonly overlayPositions: ConnectionPositionPair[] = [\n {\n overlayX: 'start',\n overlayY: 'top',\n originX: 'start',\n originY: 'bottom',\n offsetY: 2\n },\n {\n overlayX: 'start',\n overlayY: 'bottom',\n originX: 'start',\n originY: 'top',\n offsetY: -4\n },\n {\n overlayX: 'end',\n overlayY: 'top',\n originX: 'end',\n originY: 'bottom',\n offsetY: 2\n },\n {\n overlayX: 'end',\n overlayY: 'bottom',\n originX: 'end',\n originY: 'top',\n offsetY: -4\n }\n ];\n\n /**\n * Set the options of the typeahead.\n * Has to be either an Array or an Observable of an Array\n * of options (string or object)\n */\n readonly siTypeahead = input.required<Typeahead>();\n\n /**\n * Turns on/off the processing (searching and sorting) of the typeahead options.\n * Is used when searching and sorting is done externally.\n *\n * @defaultValue true\n */\n readonly typeaheadProcess = input(true, {\n transform: booleanAttribute\n });\n /**\n * Makes the typeahead scrollable and sets its height.\n * Uses {@link typeaheadOptionsInScrollableView} and {@link typeaheadScrollableAdditionalHeight}.\n *\n * @defaultValue false\n */\n readonly typeaheadScrollable = input(false, { transform: booleanAttribute });\n\n /**\n * If {@link typeaheadScrollable} is `true`, defines the number of items visible at once.\n *\n * @defaultValue 10\n */\n readonly typeaheadOptionsInScrollableView = input(10);\n\n /**\n * Defines the maximum number of items added into the DOM. Default is 20 and 0 means unlimited.\n *\n * @defaultValue 20\n */\n readonly typeaheadOptionsLimit = input(20);\n\n /**\n * If {@link typeaheadScrollable} is `true`, defines the number of additional pixels\n * to be added the the bottom of the typeahead to show users that it is scrollable.\n *\n * @defaultValue 13\n */\n readonly typeaheadScrollableAdditionalHeight = input(13);\n\n /**\n * Defines the index of the item which should automatically be selected.\n *\n * @defaultValue 0\n */\n readonly typeaheadAutoSelectIndex = input(0, { transform: numberAttribute });\n /**\n * Defines whether the typeahead can be closed using escape.\n *\n * @defaultValue true\n */\n readonly typeaheadCloseOnEsc = input(true, { transform: booleanAttribute });\n /**\n * Defines whether the host value should be cleared when a value is selected.\n *\n * @defaultValue false\n */\n readonly typeaheadClearValueOnSelect = input(false, { transform: booleanAttribute });\n /**\n * Defines the number of milliseconds to wait before displaying a typeahead after the host was\n * focused or a value inputted.\n *\n * @defaultValue 0\n */\n readonly typeaheadWaitMs = input(0);\n\n /**\n * Defines the number of characters the value of the host needs to be before a typeahead is displayed.\n * Use `0` to have it display when focussing the host (clicking or tabbing into it).\n *\n * @defaultValue 1\n */\n readonly typeaheadMinLength = input(1);\n\n /**\n * Defines the name of the field/property the option string is in when the typeahead options are objects.\n *\n * @defaultValue 'name'\n */\n readonly typeaheadOptionField = input('name');\n /**\n * Defines whether multiselection of typeahead is possible with checkboxes.\n *\n * @defaultValue false\n */\n readonly typeaheadMultiSelect = input(false, { transform: booleanAttribute });\n\n /**\n * Defines whether to tokenize the search or match the whole search.\n *\n * @defaultValue true\n */\n readonly typeaheadTokenize = input(true, { transform: booleanAttribute });\n /**\n * Defines whether and how to require to match with all the tokens if {@link typeaheadTokenize} is enabled.\n * - `no` does not require all of the tokens to match.\n * - `once` requires all of the parts to be found in the search.\n * - `separately` requires all of the parts to be found in the search where there is not an overlapping different result.\n * - `independently` requires all of the parts to be found in the search where there is not an overlapping or adjacent different result.\n * ('independently' also slightly changes sorting behavior in the same way.)\n *\n * @defaultValue 'separately'\n */\n readonly typeaheadMatchAllTokens = input<'no' | 'once' | 'separately' | 'independently'>(\n 'separately'\n );\n /**\n * Defines an optional template to use as the typeahead match item instead of the one built in.\n * Gets the {@link TypeaheadOptionItemContext} passed to it.\n */\n readonly typeaheadItemTemplate = input<TemplateRef<TypeaheadOptionItemContext>>();\n /**\n * Skip the sorting of matches.\n * If the value is `true`, the matches are sorted according to {@link SiTypeaheadSorting}.\n *\n * @defaultValue false\n */\n readonly typeaheadSkipSortingMatches = input(false, { transform: booleanAttribute });\n\n /**\n * Screen reader only label for the autocomplete list.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_TYPEAHEAD.AUTOCOMPLETE_LIST_LABEL:Suggestions`)\n * ```\n */\n readonly typeaheadAutocompleteListLabel = input(\n t(() => $localize`:@@SI_TYPEAHEAD.AUTOCOMPLETE_LIST_LABEL:Suggestions`)\n );\n\n /**\n * If set, the typeahead will at minium have the width of the connected input field.\n *\n * @defaultValue false\n */\n readonly typeaheadFullWidth = input(false, { transform: booleanAttribute });\n /**\n * Emits an Event when the input field is changed.\n */\n readonly typeaheadOnInput = output<string>();\n /**\n * Emits an Event when a typeahead match is selected.\n * The event is a {@link TypeaheadMatch}\n */\n readonly typeaheadOnSelect = output<TypeaheadMatch>();\n\n /**\n * Emits an Event when a typeahead full match exists. A full match occurs when the entered text\n * is equal to one of the typeahead options.\n * The event is a {@link TypeaheadMatch}\n */\n readonly typeaheadOnFullMatch = output<TypeaheadMatch>();\n\n /** Emits whenever the typeahead overlay is opened or closed. */\n readonly typeaheadOpenChange = output<boolean>();\n\n /** @internal */\n readonly foundMatches = signal<TypeaheadMatch[]>([]);\n /** @internal */\n readonly query = signal<string>('');\n /**\n * Indicates whether the typeahead is shown.\n */\n get typeaheadOpen(): boolean {\n return !!this.componentRef;\n }\n private overlay = inject(Overlay);\n private elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private injector = inject(Injector);\n private autoComplete = inject<SiAutocompleteDirective<TypeaheadMatch>>(SiAutocompleteDirective);\n\n private $typeahead = new ReplaySubject<TypeaheadArray>(1);\n private componentRef?: ComponentRef<SiTypeaheadComponent>;\n private component?: SiTypeaheadComponent;\n private inputTimer: any;\n\n private sourceSubscription?: Subscription;\n private subscription?: Subscription;\n private matchSorter = new SiTypeaheadSorting();\n\n private overlayRef?: OverlayRef;\n\n // Every time the main input changes, detect whether it is async and if it is not make an observable out of the array.\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.siTypeahead) {\n this.sourceSubscription?.unsubscribe();\n const typeahead = this.siTypeahead();\n if (isObservable(typeahead)) {\n this.sourceSubscription = typeahead.subscribe(this.$typeahead);\n } else {\n this.$typeahead.next(typeahead);\n }\n }\n }\n\n // Clear the current input timeout (if set) and remove the component when the focus of the host is lost.\n @HostListener('focusout')\n protected onBlur(): void {\n this.clearTimer();\n if (this.component) {\n this.removeComponent();\n }\n this.subscription?.unsubscribe();\n }\n\n // Start the input timeout to display the typeahead when the host is focussed or a value is inputted into it.\n @HostListener('focusin', ['$event'])\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n if (!target) {\n return;\n }\n\n // Get the value or otherwise textContent of the host element now, because later it could be reset.\n const firstValue = target.value || target.textContent;\n this.inputTimer ??= setTimeout(() => {\n this.inputTimer = undefined;\n const value = (target.value || target.textContent) ?? firstValue ?? '';\n this.query.set(value);\n this.subscription?.unsubscribe();\n // The value needs to fulfil the minimum length requirement set.\n if (value.length >= this.typeaheadMinLength()) {\n this.subscription = this.getMatches(this.$typeahead, value).subscribe(matches => {\n this.foundMatches.set(matches);\n const escapedQuery = this.escapeRegex(value);\n const equalsExp = new RegExp(`^${escapedQuery}$`, 'i');\n const fullMatches = matches.filter(\n match => match.result.length === 1 && equalsExp.test(match.text)\n );\n if (fullMatches.length > 0) {\n this.typeaheadOnFullMatch.emit(fullMatches[0]);\n }\n if (matches.length) {\n this.loadComponent();\n } else {\n this.removeComponent();\n }\n });\n } else {\n this.removeComponent();\n }\n this.typeaheadOnInput.emit(value ?? '');\n }, this.typeaheadWaitMs());\n }\n\n @HostListener('keydown.escape')\n protected onKeydownEscape(): void {\n if (this.typeaheadCloseOnEsc()) {\n this.subscription?.unsubscribe();\n this.clearTimer();\n this.removeComponent();\n }\n }\n\n @HostListener('keydown.space', ['$event'])\n protected onKeydownSpace(event: Event): void {\n if (this.typeaheadMultiSelect()) {\n // Avoid space character to be inserted into the input field\n event.preventDefault();\n const value = this.autoComplete.active?.value();\n if (value) {\n this.selectMatch(value);\n // this forces change detection in the typeahead component.\n this.foundMatches.update(matches => [...matches]);\n }\n }\n }\n\n ngOnDestroy(): void {\n this.clearTimer();\n this.sourceSubscription?.unsubscribe();\n this.subscription?.unsubscribe();\n\n this.overlayRef?.dispose();\n }\n\n // Dynamically create the typeahead component and then set the matches and the query.\n private loadComponent(): void {\n if (!this.overlayRef?.hasAttached()) {\n this.overlayRef?.dispose();\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement)\n .withPositions(SiTypeaheadDirective.overlayPositions),\n minWidth: this.typeaheadFullWidth()\n ? this.elementRef.nativeElement.getBoundingClientRect().width + 2 // 2px border\n : 0\n });\n }\n\n if (this.overlayRef.hasAttached()) {\n return;\n }\n const typeaheadPortal = new ComponentPortal(SiTypeaheadComponent, null, this.injector);\n this.componentRef = this.overlayRef.attach(typeaheadPortal);\n this.component = this.componentRef.instance;\n this.typeaheadOpenChange.emit(true);\n }\n\n // Get the matches and push them to the subject of the component, then set the query of the component.\n // If the typeahead options are objects, pick the specified field/property.\n private getOptionValue(option: TypeaheadOption, field: string): string {\n return typeof option !== 'object' ? option.toString() : (option[field] ?? '');\n }\n\n // If enabled, process the matches and sort through them.\n private getMatches(\n observableList: TypeaheadObservable,\n query: string\n ): Observable<TypeaheadMatch[]> {\n try {\n const entireQueryRegex = new RegExp(this.escapeRegex(query), 'gi');\n\n const queryParts = this.typeaheadTokenize()\n ? query.split(/\\s+/g).filter(queryPart => queryPart)\n : query\n ? [query]\n : [];\n\n const queryRegexes = queryParts.map(\n queryPart => new RegExp(this.escapeRegex(queryPart), 'gi')\n );\n return observableList.pipe(\n map(options => {\n // Check if the options need to be processed, if not just return an unprocessed object.\n if (!this.typeaheadProcess()) {\n return options.map(option => {\n const optionValue = this.getOptionValue(option, this.typeaheadOptionField());\n const itemSelected = this.typeaheadMultiSelect()\n ? this.getOptionValue(option, 'selected')\n : false;\n const iconClass = this.getOptionValue(option, 'iconClass');\n return {\n option,\n itemSelected,\n text: optionValue,\n iconClass,\n result: optionValue\n ? [{ text: optionValue, isMatching: false, matches: 0, uniqueMatches: 0 }]\n : [],\n stringMatch: false,\n atBeginning: false,\n matches: 0,\n uniqueMatches: 0,\n uniqueSeparateMatches: 0,\n matchesEntireQuery: false,\n matchesAllParts: false,\n matchesAllPartsSeparately: false,\n active: false\n } as TypeaheadMatch;\n });\n } else {\n // Process the options.\n const matches: TypeaheadMatch[] = [];\n options.forEach(option => {\n const optionValue = this.getOptionValue(option, this.typeaheadOptionField());\n const stringMatch =\n optionValue.toLocaleLowerCase().trim() === query.toLocaleLowerCase().trim();\n const itemSelected = this.typeaheadMultiSelect()\n ? option['selected' as keyof TypeaheadOption]\n : false;\n const iconClass = this.getOptionValue(option, 'iconClass');\n const candidate: TypeaheadMatch = {\n option,\n itemSelected,\n text: optionValue,\n iconClass,\n result: [],\n stringMatch,\n atBeginning: false,\n matches: 0,\n uniqueMatches: 0,\n uniqueSeparateMatches: 0,\n matchesEntireQuery: false,\n matchesAllParts: false,\n matchesAllPartsSeparately: false\n };\n\n // Only search the options if a part of the query is at least one character long to prevent an endless loop.\n if (queryParts.length === 0) {\n if (optionValue) {\n candidate.result.push({\n text: optionValue,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n matches.push(candidate);\n } else {\n const allResults: { index: number; start: number; end: number; result: string }[] =\n [];\n const allIndexes: number[] = [];\n\n candidate.matchesEntireQuery = !!optionValue.match(entireQueryRegex);\n\n // Loop through the option value to find multiple matches, then store every segment (matching or non-matching) in the results.\n queryRegexes.forEach((queryRegex, index) => {\n let regexMatch = queryRegex.exec(optionValue);\n\n while (regexMatch) {\n allResults.push({\n index,\n start: regexMatch.index,\n end: regexMatch.index + regexMatch[0].length,\n result: regexMatch[0]\n });\n if (!regexMatch.index) {\n candidate.atBeginning = true;\n }\n if (!allIndexes.includes(index)) {\n allIndexes.push(index);\n }\n regexMatch = queryRegex.exec(optionValue);\n }\n });\n\n candidate.matchesAllParts = allIndexes.length === queryParts.length;\n\n // Check if all parts of the query match at least once (if required).\n if (this.typeaheadMatchAllTokens() === 'no' || candidate.matchesAllParts) {\n const combinedResults: {\n indexes: number[];\n uniqueIndexes: number[];\n start: number;\n end: number;\n result: string;\n }[] = [];\n\n // First combine intersecting (or if set to independently adjacent) results to combined results.\n // We achieve this by first sorting them by the starting index, then by the ending index and then looking for overlaps.\n allResults\n .sort((a, b) => a.start - b.start || a.end - b.end)\n .forEach(result => {\n if (combinedResults.length) {\n const foundPreviousResult = combinedResults.find(previousResult =>\n this.typeaheadMatchAllTokens() === 'independently'\n ? result.start <= previousResult.end\n : result.start < previousResult.end\n );\n if (foundPreviousResult) {\n foundPreviousResult.result += result.result.slice(\n foundPreviousResult.end - result.start,\n result.result.length\n );\n if (result.end > foundPreviousResult.end) {\n foundPreviousResult.end = result.end;\n }\n foundPreviousResult.indexes.push(result.index);\n if (!foundPreviousResult.uniqueIndexes.includes(result.index)) {\n foundPreviousResult.uniqueIndexes.push(result.index);\n }\n return;\n }\n }\n combinedResults.push({\n ...result,\n indexes: [result.index],\n uniqueIndexes: [result.index]\n });\n });\n\n // Recursively go through all unique combinations of the unique indexes to get the option which has the most indexes.\n const countUniqueSubindexes = (\n indexIndex = 0,\n previousIndexes: number[] = []\n ): number =>\n indexIndex === combinedResults.length\n ? previousIndexes.length\n : Math.max(\n previousIndexes.length,\n ...combinedResults[indexIndex].uniqueIndexes\n .filter(index => !previousIndexes.includes(index))\n .map(index =>\n countUniqueSubindexes(indexIndex + 1, [index, ...previousIndexes])\n )\n );\n\n candidate.uniqueSeparateMatches = countUniqueSubindexes();\n candidate.matchesAllPartsSeparately =\n candidate.uniqueSeparateMatches === queryParts.length;\n\n let currentPreviousEnd = 0;\n\n // Add the combined results to the candidate including the non-matching parts in between.\n combinedResults.forEach(result => {\n const textBefore = optionValue.slice(currentPreviousEnd, result.start);\n if (textBefore) {\n candidate.result.push({\n text: textBefore,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n candidate.result.push({\n text: result.result,\n isMatching: true,\n matches: result.indexes.length,\n uniqueMatches: result.uniqueIndexes.length\n });\n currentPreviousEnd = result.end;\n candidate.matches += result.indexes.length;\n candidate.uniqueMatches += result.uniqueIndexes.length;\n });\n\n // Check if there are result segments and all parts are matched independently (if required).\n if (\n candidate.result.length !== 0 &&\n ((this.typeaheadMatchAllTokens() !== 'separately' &&\n this.typeaheadMatchAllTokens() !== 'independently') ||\n candidate.matchesAllPartsSeparately)\n ) {\n const textAtEnd = optionValue.slice(currentPreviousEnd);\n if (textAtEnd) {\n candidate.result.push({\n text: textAtEnd,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n matches.push(candidate);\n }\n }\n }\n });\n\n if (this.typeaheadSkipSortingMatches()) {\n return matches;\n } else {\n return this.matchSorter.sortMatches(matches);\n }\n }\n })\n );\n } catch {\n // Could not create regex (only in extremely rare cases, maybe even impossible), so return an empty array.\n return of([]);\n }\n }\n\n // Select a match, either gets called due to a enter keypress or from the component due to a click.\n /** @internal */\n selectMatch(match: TypeaheadMatch): void {\n match.itemSelected = !match.itemSelected;\n if (!this.typeaheadMultiSelect()) {\n const inputElement =\n this.elementRef.nativeElement.querySelector('input')! ?? this.elementRef.nativeElement;\n inputElement.value = this.typeaheadClearValueOnSelect() ? '' : match.text;\n inputElement.dispatchEvent(new Event('input'));\n }\n\n // Clear the current input timeout (if set) and remove the typeahead.\n this.clearTimer();\n this.typeaheadOnSelect.emit(match);\n if (!this.typeaheadMultiSelect()) {\n this.removeComponent();\n }\n }\n\n // Remove the component by clearing the viewContainerRef\n private removeComponent(): void {\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef?.detach();\n this.typeaheadOpenChange.emit(false);\n }\n\n this.componentRef?.destroy();\n this.componentRef = undefined;\n this.component = undefined;\n }\n\n private clearTimer(): void {\n if (this.inputTimer) {\n clearTimeout(this.inputTimer);\n this.inputTimer = undefined;\n }\n }\n\n private escapeRegex(query: string): string {\n return query.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { Directive } from '@angular/core';\n\nimport { TypeaheadOptionItemContext } from './si-typeahead.model';\n\n@Directive({\n selector: '[siTypeaheadItemTemplate]'\n})\nexport class SiTypeaheadItemTemplateDirective {\n static ngTemplateContextGuard(\n dir: SiTypeaheadItemTemplateDirective,\n ctx: any\n ): ctx is TypeaheadOptionItemContext {\n return true;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiTypeaheadItemTemplateDirective } from './si-typeahead-item-template.directive';\nimport { SiTypeaheadDirective } from './si-typeahead.directive';\n\n@NgModule({\n imports: [SiTypeaheadDirective, SiTypeaheadItemTemplateDirective],\n exports: [SiTypeaheadDirective, SiTypeaheadItemTemplateDirective]\n})\nexport class SiTypeaheadModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-typeahead.directive';\nexport * from './si-typeahead.model';\nexport * from './si-typeahead.module';\nexport * from './si-typeahead-item-template.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-typeahead.mjs","sources":["../../../../projects/element-ng/typeahead/si-typeahead-item-template.directive.ts","../../../../projects/element-ng/typeahead/si-typeahead.component.ts","../../../../projects/element-ng/typeahead/si-typeahead.component.html","../../../../projects/element-ng/typeahead/si-typeahead.search.ts","../../../../projects/element-ng/typeahead/si-typeahead.sorting.ts","../../../../projects/element-ng/typeahead/si-typeahead.directive.ts","../../../../projects/element-ng/typeahead/si-typeahead.module.ts","../../../../projects/element-ng/typeahead/index.ts","../../../../projects/element-ng/typeahead/siemens-element-ng-typeahead.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { Directive } from '@angular/core';\n\nimport { TypeaheadOptionItemContext } from './si-typeahead.model';\n\n@Directive({\n selector: '[siTypeaheadItemTemplate]'\n})\nexport class SiTypeaheadItemTemplateDirective {\n static ngTemplateContextGuard(\n dir: SiTypeaheadItemTemplateDirective,\n ctx: any\n ): ctx is TypeaheadOptionItemContext {\n return true;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n HostListener,\n inject,\n viewChild\n} from '@angular/core';\nimport {\n SiAutocompleteDirective,\n SiAutocompleteListboxDirective,\n SiAutocompleteOptionDirective\n} from '@siemens/element-ng/autocomplete';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiTypeaheadItemTemplateDirective } from './si-typeahead-item-template.directive';\nimport { SiTypeaheadDirective } from './si-typeahead.directive';\nimport { TypeaheadMatch } from './si-typeahead.model';\n\n@Component({\n selector: 'si-typeahead',\n imports: [\n SiAutocompleteListboxDirective,\n SiAutocompleteOptionDirective,\n SiIconComponent,\n NgTemplateOutlet,\n SiTranslatePipe,\n SiTypeaheadItemTemplateDirective\n ],\n templateUrl: './si-typeahead.component.html',\n styleUrl: './si-typeahead.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'w-100' }\n})\nexport class SiTypeaheadComponent implements AfterViewInit {\n protected parent = inject(SiTypeaheadDirective);\n protected readonly matches = computed(() =>\n this.parent.typeaheadOptionsLimit()\n ? this.parent.foundMatches().slice(0, this.parent.typeaheadOptionsLimit())\n : this.parent.foundMatches()\n );\n\n protected readonly multiselect = computed(() => this.parent.typeaheadMultiSelect());\n\n private readonly typeaheadElement = viewChild.required('typeahead', {\n read: ElementRef\n });\n\n protected autocompleteDirective = inject(SiAutocompleteDirective);\n\n ngAfterViewInit(): void {\n this.setHeight(this.typeaheadElement());\n }\n\n @HostListener('mousedown', ['$event'])\n protected onMouseDown(event: Event): void {\n event.preventDefault();\n }\n\n /*\n * Set the height of the element passed to it (typeahead) if there are items displayed,\n * the number of displayed items changed and it is scrollable.\n */\n private setHeight(element: ElementRef): void {\n if (this.matches().length) {\n if (\n this.parent.typeaheadScrollable() &&\n this.parent.typeaheadOptionsInScrollableView() < this.matches().length\n ) {\n const computedStyle = getComputedStyle(element.nativeElement);\n const matchComputedStyle = getComputedStyle(element.nativeElement.firstElementChild);\n const matchHeight = parseFloat(matchComputedStyle.height || '0');\n const paddingTop = parseFloat(computedStyle.paddingTop || '0');\n const paddingBottom = parseFloat(computedStyle.paddingBottom || '');\n const height = this.parent.typeaheadOptionsInScrollableView() * matchHeight;\n element.nativeElement.style.maxBlockSize = `${\n height + paddingTop + paddingBottom + this.parent.typeaheadScrollableAdditionalHeight()\n }px`;\n } else {\n element.nativeElement.style.maxBlockSize = 'auto';\n }\n }\n }\n\n // Gets called when a match is selected by clicking on it.\n protected selectMatch(match: TypeaheadMatch): void {\n this.parent.selectMatch(match);\n }\n}\n","<!-- Template to be used for every match, can be replaced using an input. -->\n<ng-template #defaultItemTemplate let-match=\"match\" siTypeaheadItemTemplate>\n @if (multiselect()) {\n <div class=\"d-flex pe-4\" aria-hidden=\"true\">\n <span class=\"form-check-input si-form-checkbox\" [class.checked]=\"match.itemSelected\"></span>\n </div>\n }\n @if (match.iconClass) {\n <si-icon class=\"icon me-2\" [icon]=\"match.iconClass\" />\n }\n @for (segment of match.result; track $index) {\n <span [class.typeahead-match-segment-matching]=\"segment.isMatching\">{{ segment.text }}</span>\n }\n</ng-template>\n\n<!-- Only display the component if there are any matches and set the CSS transform to properly position the typeahead -->\n<ul\n #typeahead\n class=\"typeahead dropdown-menu\"\n [siAutocompleteListboxFor]=\"autocompleteDirective\"\n [siAutocompleteDefaultIndex]=\"parent.typeaheadAutoSelectIndex()\"\n [attr.aria-label]=\"parent.typeaheadAutocompleteListLabel() | translate\"\n [class.d-none]=\"!matches().length\"\n (siAutocompleteOptionSubmitted)=\"selectMatch($event)\"\n>\n <!-- Loop through every match and bind events, the mousedown prevent default is to prevent the host from losing focus on click -->\n @for (match of matches(); track $index) {\n <li\n #typeaheadMatch\n class=\"dropdown-item\"\n [siAutocompleteOption]=\"match\"\n [attr.aria-label]=\"match.text\"\n [attr.aria-selected]=\"multiselect() ? match.itemSelected : null\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <!-- Display either a template set as the input or the template above -->\n <ng-template\n [ngTemplateOutlet]=\"parent.typeaheadItemTemplate() || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: match.option,\n index: $index,\n match: match,\n query: parent.query()\n }\"\n />\n </li>\n }\n</ul>\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { computed, Signal } from '@angular/core';\n\nexport interface SearchOptions<T> {\n /** The text that will be used for searching. */\n text: string;\n /** The raw option that will be also included in the Match results */\n option: T;\n}\n\nexport interface MatchSegment {\n text: string;\n isMatching: boolean;\n matches: number;\n uniqueMatches: number;\n}\n\nexport interface Match<T> {\n option: T;\n text: string;\n result: MatchSegment[];\n stringMatch: boolean;\n atBeginning: boolean;\n matches: number;\n uniqueMatches: number;\n uniqueSeparateMatches: number;\n matchesEntireQuery: boolean;\n matchesAllParts: boolean;\n matchesAllPartsSeparately: boolean;\n}\n\nexport interface SearchConfig {\n /** Defines whether to tokenize the search or match the whole search. */\n disableTokenizing?: boolean;\n /**\n * Defines whether and how to require to match with all the tokens if {@link typeaheadTokenize} is enabled.\n * - `no` does not require all of the tokens to match.\n * - `once` requires all of the parts to be found in the search.\n * - `separately` requires all of the parts to be found in the search where there is not an overlapping different result.\n * - `independently` requires all of the parts to be found in the search where there is not an overlapping or adjacent different result.\n * ('independently' also slightly changes sorting behavior in the same way.)\n */\n matchAllTokens: 'no' | 'once' | 'separately' | 'independently';\n}\n\n/**\n * Constructs a typeahead search and provides the matches as a signal.\n *\n * @param options - Factory function that should return the array of options to search in.\n * Is run in a reactive context.\n * @param query - Factory function that should return the current search query. Is run in a reactive context.\n * @param config - Configuration for the search. Is run in a reactive context.\n *\n * @example\n * In a real world, myOptions and mayQuery would be signals.\n * ```ts\n * const search = typeaheadSearch(\n * () => myOptions().map(...),\n * () => myQuery().toLowerCase(),\n * () => ({ matchAllTokens: 'separately' })\n * )\n * ```\n */\nexport const typeaheadSearch = <T>(\n options: () => SearchOptions<T>[],\n query: () => string,\n config: () => SearchConfig\n): Signal<Match<T>[]> => computed(() => new TypeaheadSearch<T>(options, query, config()).matches());\n\nclass TypeaheadSearch<T> {\n readonly matches = computed<Match<T>[]>(() => this.search(this.datasource(), this.query()));\n\n constructor(\n private readonly datasource: () => SearchOptions<T>[],\n private readonly query: () => string,\n private readonly options: SearchConfig\n ) {}\n\n private escapeRegex(query: string): string {\n return query.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n }\n\n private search(options: SearchOptions<T>[], query: string): Match<T>[] {\n try {\n const entireQueryRegex = new RegExp(this.escapeRegex(query), 'gi');\n\n const queryParts = !this.options.disableTokenizing\n ? query.split(/\\s+/g).filter(queryPart => queryPart)\n : query\n ? [query]\n : [];\n\n const queryRegexes = queryParts.map(\n queryPart => new RegExp(this.escapeRegex(queryPart), 'gi')\n );\n // Process the options.\n const matches: Match<T>[] = [];\n options.forEach(option => {\n const optionValue = option.text;\n const stringMatch =\n optionValue.toLocaleLowerCase().trim() === query.toLocaleLowerCase().trim();\n const candidate: Match<T> = {\n option: option.option,\n text: optionValue,\n result: [],\n stringMatch,\n atBeginning: false,\n matches: 0,\n uniqueMatches: 0,\n uniqueSeparateMatches: 0,\n matchesEntireQuery: false,\n matchesAllParts: false,\n matchesAllPartsSeparately: false\n };\n\n // Only search the options if a part of the query is at least one character long to prevent an endless loop.\n if (queryParts.length === 0) {\n if (optionValue) {\n candidate.result.push({\n text: optionValue,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n matches.push(candidate);\n } else {\n const allResults: { index: number; start: number; end: number; result: string }[] = [];\n const allIndexes: number[] = [];\n\n candidate.matchesEntireQuery = !!optionValue.match(entireQueryRegex);\n\n // Loop through the option value to find multiple matches, then store every segment (matching or non-matching) in the results.\n queryRegexes.forEach((queryRegex, index) => {\n let regexMatch = queryRegex.exec(optionValue);\n\n while (regexMatch) {\n allResults.push({\n index,\n start: regexMatch.index,\n end: regexMatch.index + regexMatch[0].length,\n result: regexMatch[0]\n });\n if (!regexMatch.index) {\n candidate.atBeginning = true;\n }\n if (!allIndexes.includes(index)) {\n allIndexes.push(index);\n }\n regexMatch = queryRegex.exec(optionValue);\n }\n });\n\n candidate.matchesAllParts = allIndexes.length === queryParts.length;\n\n // Check if all parts of the query match at least once (if required).\n if (this.options.matchAllTokens === 'no' || candidate.matchesAllParts) {\n const combinedResults: {\n indexes: number[];\n uniqueIndexes: number[];\n start: number;\n end: number;\n result: string;\n }[] = [];\n\n // First combine intersecting (or if set to independently adjacent) results to combined results.\n // We achieve this by first sorting them by the starting index, then by the ending index and then looking for overlaps.\n allResults\n .sort((a, b) => a.start - b.start || a.end - b.end)\n .forEach(result => {\n if (combinedResults.length) {\n const foundPreviousResult = combinedResults.find(previousResult =>\n this.options.matchAllTokens === 'independently'\n ? result.start <= previousResult.end\n : result.start < previousResult.end\n );\n if (foundPreviousResult) {\n foundPreviousResult.result += result.result.slice(\n foundPreviousResult.end - result.start,\n result.result.length\n );\n if (result.end > foundPreviousResult.end) {\n foundPreviousResult.end = result.end;\n }\n foundPreviousResult.indexes.push(result.index);\n if (!foundPreviousResult.uniqueIndexes.includes(result.index)) {\n foundPreviousResult.uniqueIndexes.push(result.index);\n }\n return;\n }\n }\n combinedResults.push({\n ...result,\n indexes: [result.index],\n uniqueIndexes: [result.index]\n });\n });\n\n // Recursively go through all unique combinations of the unique indexes to get the option which has the most indexes.\n const countUniqueSubindexes = (\n indexIndex = 0,\n previousIndexes: number[] = []\n ): number =>\n indexIndex === combinedResults.length\n ? previousIndexes.length\n : Math.max(\n previousIndexes.length,\n ...combinedResults[indexIndex].uniqueIndexes\n .filter(index => !previousIndexes.includes(index))\n .map(index =>\n countUniqueSubindexes(indexIndex + 1, [index, ...previousIndexes])\n )\n );\n\n candidate.uniqueSeparateMatches = countUniqueSubindexes();\n candidate.matchesAllPartsSeparately =\n candidate.uniqueSeparateMatches === queryParts.length;\n\n let currentPreviousEnd = 0;\n\n // Add the combined results to the candidate including the non-matching parts in between.\n combinedResults.forEach(result => {\n const textBefore = optionValue.slice(currentPreviousEnd, result.start);\n if (textBefore) {\n candidate.result.push({\n text: textBefore,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n candidate.result.push({\n text: result.result,\n isMatching: true,\n matches: result.indexes.length,\n uniqueMatches: result.uniqueIndexes.length\n });\n currentPreviousEnd = result.end;\n candidate.matches += result.indexes.length;\n candidate.uniqueMatches += result.uniqueIndexes.length;\n });\n\n // Check if there are result segments and all parts are matched independently (if required).\n if (\n candidate.result.length !== 0 &&\n ((this.options.matchAllTokens !== 'separately' &&\n this.options.matchAllTokens !== 'independently') ||\n candidate.matchesAllPartsSeparately)\n ) {\n const textAtEnd = optionValue.slice(currentPreviousEnd);\n if (textAtEnd) {\n candidate.result.push({\n text: textAtEnd,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n matches.push(candidate);\n }\n }\n }\n });\n\n return matches;\n } catch {\n // Could not create regex (only in extremely rare cases, maybe even impossible), so return an empty array.\n return [];\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { TypeaheadMatch } from './si-typeahead.model';\n\nexport class SiTypeaheadSorting {\n sortMatches(matches: TypeaheadMatch[]): TypeaheadMatch[] {\n // Sort the matches,\n // first is the option and query an exact match.\n // then according to whether it is matching in the beginning,\n // then whether it matches the entire untokenized query.\n // then according to how many unique separate matches it contains.\n // then according to how many unique matches it contains.\n // then according to how many matches it contains.\n return matches.sort((matchA, matchB) => {\n if (matchA.stringMatch || matchB.stringMatch) {\n return matchA.stringMatch ? -1 : 1;\n }\n if (matchA.atBeginning) {\n return !matchB.atBeginning ? -1 : this.compareMatches(matchA, matchB);\n } else {\n return matchB.atBeginning ? 1 : this.compareMatches(matchA, matchB);\n }\n });\n }\n\n private compareMatchesNumbers(matchA: TypeaheadMatch, matchB: TypeaheadMatch): number {\n return (\n matchB.uniqueSeparateMatches - matchA.uniqueSeparateMatches ||\n matchB.uniqueMatches - matchA.uniqueMatches ||\n matchB.matches - matchA.matches\n );\n }\n\n private compareMatches(matchA: TypeaheadMatch, matchB: TypeaheadMatch): number {\n if (matchA.matchesEntireQuery) {\n return !matchB.matchesEntireQuery ? -1 : this.compareMatchesNumbers(matchA, matchB);\n } else {\n return matchB.matchesEntireQuery ? 1 : this.compareMatchesNumbers(matchA, matchB);\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { ConnectionPositionPair, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\n ComponentRef,\n computed,\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n numberAttribute,\n OnChanges,\n OnDestroy,\n output,\n signal,\n SimpleChanges,\n TemplateRef\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { SiAutocompleteDirective } from '@siemens/element-ng/autocomplete';\nimport { t } from '@siemens/element-translate-ng/translate';\nimport { isObservable, ReplaySubject, Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { SiTypeaheadComponent } from './si-typeahead.component';\nimport {\n Typeahead,\n TypeaheadArray,\n TypeaheadMatch,\n TypeaheadOption,\n TypeaheadOptionItemContext\n} from './si-typeahead.model';\nimport { typeaheadSearch } from './si-typeahead.search';\nimport { SiTypeaheadSorting } from './si-typeahead.sorting';\n\n@Directive({\n selector: '[siTypeahead]',\n host: {\n class: 'si-typeahead'\n },\n hostDirectives: [SiAutocompleteDirective],\n exportAs: 'si-typeahead'\n})\nexport class SiTypeaheadDirective implements OnChanges, OnDestroy {\n protected static readonly overlayPositions: ConnectionPositionPair[] = [\n {\n overlayX: 'start',\n overlayY: 'top',\n originX: 'start',\n originY: 'bottom',\n offsetY: 2\n },\n {\n overlayX: 'start',\n overlayY: 'bottom',\n originX: 'start',\n originY: 'top',\n offsetY: -4\n },\n {\n overlayX: 'end',\n overlayY: 'top',\n originX: 'end',\n originY: 'bottom',\n offsetY: 2\n },\n {\n overlayX: 'end',\n overlayY: 'bottom',\n originX: 'end',\n originY: 'top',\n offsetY: -4\n }\n ];\n\n /**\n * Set the options of the typeahead.\n * Has to be either an Array or an Observable of an Array\n * of options (string or object)\n */\n readonly siTypeahead = input.required<Typeahead>();\n\n /**\n * Turns on/off the processing (searching and sorting) of the typeahead options.\n * Is used when searching and sorting is done externally.\n *\n * @defaultValue true\n */\n readonly typeaheadProcess = input(true, {\n transform: booleanAttribute\n });\n /**\n * Makes the typeahead scrollable and sets its height.\n * Uses {@link typeaheadOptionsInScrollableView} and {@link typeaheadScrollableAdditionalHeight}.\n *\n * @defaultValue false\n */\n readonly typeaheadScrollable = input(false, { transform: booleanAttribute });\n\n /**\n * If {@link typeaheadScrollable} is `true`, defines the number of items visible at once.\n *\n * @defaultValue 10\n */\n readonly typeaheadOptionsInScrollableView = input(10);\n\n /**\n * Defines the maximum number of items added into the DOM. Default is 20 and 0 means unlimited.\n *\n * @defaultValue 20\n */\n readonly typeaheadOptionsLimit = input(20);\n\n /**\n * If {@link typeaheadScrollable} is `true`, defines the number of additional pixels\n * to be added the the bottom of the typeahead to show users that it is scrollable.\n *\n * @defaultValue 13\n */\n readonly typeaheadScrollableAdditionalHeight = input(13);\n\n /**\n * Defines the index of the item which should automatically be selected.\n *\n * @defaultValue 0\n */\n readonly typeaheadAutoSelectIndex = input(0, { transform: numberAttribute });\n /**\n * Defines whether the typeahead can be closed using escape.\n *\n * @defaultValue true\n */\n readonly typeaheadCloseOnEsc = input(true, { transform: booleanAttribute });\n /**\n * Defines whether the host value should be cleared when a value is selected.\n *\n * @defaultValue false\n */\n readonly typeaheadClearValueOnSelect = input(false, { transform: booleanAttribute });\n /**\n * Defines the number of milliseconds to wait before displaying a typeahead after the host was\n * focused or a value inputted.\n *\n * @defaultValue 0\n */\n readonly typeaheadWaitMs = input(0);\n\n /**\n * Defines the number of characters the value of the host needs to be before a typeahead is displayed.\n * Use `0` to have it display when focussing the host (clicking or tabbing into it).\n *\n * @defaultValue 1\n */\n readonly typeaheadMinLength = input(1);\n\n /**\n * Defines the name of the field/property the option string is in when the typeahead options are objects.\n *\n * @defaultValue 'name'\n */\n readonly typeaheadOptionField = input('name');\n /**\n * Defines whether multiselection of typeahead is possible with checkboxes.\n *\n * @defaultValue false\n */\n readonly typeaheadMultiSelect = input(false, { transform: booleanAttribute });\n\n /**\n * Defines whether to tokenize the search or match the whole search.\n *\n * @defaultValue true\n */\n readonly typeaheadTokenize = input(true, { transform: booleanAttribute });\n /**\n * Defines whether and how to require to match with all the tokens if {@link typeaheadTokenize} is enabled.\n * - `no` does not require all of the tokens to match.\n * - `once` requires all of the parts to be found in the search.\n * - `separately` requires all of the parts to be found in the search where there is not an overlapping different result.\n * - `independently` requires all of the parts to be found in the search where there is not an overlapping or adjacent different result.\n * ('independently' also slightly changes sorting behavior in the same way.)\n *\n * @defaultValue 'separately'\n */\n readonly typeaheadMatchAllTokens = input<'no' | 'once' | 'separately' | 'independently'>(\n 'separately'\n );\n /**\n * Defines an optional template to use as the typeahead match item instead of the one built in.\n * Gets the {@link TypeaheadOptionItemContext} passed to it.\n */\n readonly typeaheadItemTemplate = input<TemplateRef<TypeaheadOptionItemContext>>();\n /**\n * Skip the sorting of matches.\n * If the value is `true`, the matches are sorted according to {@link SiTypeaheadSorting}.\n *\n * @defaultValue false\n */\n readonly typeaheadSkipSortingMatches = input(false, { transform: booleanAttribute });\n\n /**\n * Screen reader only label for the autocomplete list.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_TYPEAHEAD.AUTOCOMPLETE_LIST_LABEL:Suggestions`)\n * ```\n */\n readonly typeaheadAutocompleteListLabel = input(\n t(() => $localize`:@@SI_TYPEAHEAD.AUTOCOMPLETE_LIST_LABEL:Suggestions`)\n );\n\n /**\n * If set, the typeahead will at minium have the width of the connected input field.\n *\n * @defaultValue false\n */\n readonly typeaheadFullWidth = input(false, { transform: booleanAttribute });\n /**\n * Emits an Event when the input field is changed.\n */\n readonly typeaheadOnInput = output<string>();\n /**\n * Emits an Event when a typeahead match is selected.\n * The event is a {@link TypeaheadMatch}\n */\n readonly typeaheadOnSelect = output<TypeaheadMatch>();\n\n /**\n * Emits an Event when a typeahead full match exists. A full match occurs when the entered text\n * is equal to one of the typeahead options.\n * The event is a {@link TypeaheadMatch}\n */\n readonly typeaheadOnFullMatch = output<TypeaheadMatch>();\n\n /** Emits whenever the typeahead overlay is opened or closed. */\n readonly typeaheadOpenChange = output<boolean>();\n\n /** @internal */\n readonly foundMatches = computed(() =>\n this.typeaheadProcess() ? this.processedSearch() : this.unprocessedSearch()\n );\n /** @internal */\n readonly query = signal('');\n\n /**\n * Indicates whether the typeahead is shown.\n */\n get typeaheadOpen(): boolean {\n return !!this.componentRef;\n }\n private overlay = inject(Overlay);\n private elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private injector = inject(Injector);\n private autoComplete = inject<SiAutocompleteDirective<TypeaheadMatch>>(SiAutocompleteDirective);\n\n private $typeahead = new ReplaySubject<TypeaheadArray>(1);\n private componentRef?: ComponentRef<SiTypeaheadComponent>;\n private inputTimer: any;\n\n private sourceSubscription?: Subscription;\n private matchSorter = new SiTypeaheadSorting();\n\n private overlayRef?: OverlayRef;\n\n /**\n * Indicates that the typeahead can be potentially open.\n * This signal is typically `true` when the input is focussed.\n * It may be overridden and set to `false` when escape is pressed\n * or when an option was selected.\n */\n private readonly canBeOpen = signal(false);\n private readonly selectionCounter = signal(0);\n private readonly typeaheadOptions = toSignal(\n this.$typeahead.pipe(\n map(options =>\n options.map(option => ({\n text: this.getOptionValue(option),\n option\n }))\n )\n ),\n { initialValue: [] }\n );\n private readonly typeaheadSearch = typeaheadSearch(\n this.typeaheadOptions,\n this.query,\n computed(() => ({\n matchAllTokens: this.typeaheadMatchAllTokens(),\n disableTokenizing: !this.typeaheadTokenize(),\n skipProcessing: !this.typeaheadProcess()\n }))\n );\n private readonly processedSearch = computed(() => {\n this.selectionCounter(); // This is a workaround for the multi-select which needs to trigger a change detection in the typeahead component.\n const matches = this.typeaheadSearch().map(match => ({\n ...match,\n itemSelected: this.typeaheadMultiSelect()\n ? (match.option as Record<string, any>).selected\n : false,\n iconClass: this.getOptionField(match.option, 'iconClass')\n }));\n\n if (this.typeaheadSkipSortingMatches()) {\n return matches;\n } else {\n return this.matchSorter.sortMatches(matches);\n }\n });\n private readonly unprocessedSearch = computed(() => {\n this.selectionCounter(); // This is a workaround for the multi-select which needs to trigger a change detection in the typeahead component.\n return this.typeaheadOptions().map(option => {\n const itemSelected = this.typeaheadMultiSelect()\n ? (option as Record<string, any>).selected\n : false;\n return {\n option,\n text: option.text,\n result: option.text\n ? [{ text: option.text, isMatching: false, matches: 0, uniqueMatches: 0 }]\n : [],\n itemSelected,\n iconClass: this.getOptionField(option.option, 'iconClass'),\n stringMatch: false,\n atBeginning: false,\n matches: 0,\n uniqueMatches: 0,\n uniqueSeparateMatches: 0,\n matchesEntireQuery: false,\n matchesAllParts: false,\n matchesAllPartsSeparately: false,\n active: false\n };\n });\n });\n\n constructor() {\n effect(() => {\n // The value needs to fulfil the minimum length requirement set.\n if (this.canBeOpen() && this.query().length >= this.typeaheadMinLength()) {\n const matches = this.foundMatches();\n const escapedQuery = this.escapeRegex(this.query());\n const equalsExp = new RegExp(`^${escapedQuery}$`, 'i');\n const fullMatches = matches.filter(\n match => match.result.length === 1 && equalsExp.test(match.text)\n );\n if (fullMatches.length > 0) {\n this.typeaheadOnFullMatch.emit(fullMatches[0]);\n }\n if (matches.length) {\n this.loadComponent();\n } else {\n this.removeComponent();\n }\n } else {\n this.removeComponent();\n }\n });\n }\n\n // Every time the main input changes, detect whether it is async and if it is not make an observable out of the array.\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.siTypeahead) {\n this.sourceSubscription?.unsubscribe();\n const typeahead = this.siTypeahead();\n if (isObservable(typeahead)) {\n this.sourceSubscription = typeahead.subscribe(this.$typeahead);\n } else {\n this.$typeahead.next(typeahead);\n }\n }\n }\n\n // Clear the current input timeout (if set) and remove the component when the focus of the host is lost.\n @HostListener('focusout')\n protected onBlur(): void {\n this.clearTimer();\n this.canBeOpen.set(false);\n }\n\n // Start the input timeout to display the typeahead when the host is focussed or a value is inputted into it.\n @HostListener('focusin', ['$event'])\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n if (!target) {\n return;\n }\n\n // Get the value or otherwise textContent of the host element now, because later it could be reset.\n const firstValue = target.value || target.textContent;\n this.inputTimer ??= setTimeout(() => {\n this.inputTimer = undefined;\n const value = (target.value || target.textContent) ?? firstValue ?? '';\n this.query.set(value);\n this.typeaheadOnInput.emit(value ?? '');\n this.canBeOpen.set(true);\n }, this.typeaheadWaitMs());\n }\n\n @HostListener('keydown.escape')\n protected onKeydownEscape(): void {\n if (this.typeaheadCloseOnEsc()) {\n this.clearTimer();\n this.canBeOpen.set(false);\n }\n }\n\n @HostListener('keydown.space', ['$event'])\n protected onKeydownSpace(event: Event): void {\n if (this.typeaheadMultiSelect()) {\n // Avoid space character to be inserted into the input field\n event.preventDefault();\n const value = this.autoComplete.active?.value();\n if (value) {\n this.selectMatch(value);\n // this forces change detection in the typeahead component.\n this.selectionCounter.update(v => v + 1);\n }\n }\n }\n\n ngOnDestroy(): void {\n this.clearTimer();\n this.sourceSubscription?.unsubscribe();\n\n this.overlayRef?.dispose();\n }\n\n // Dynamically create the typeahead component and then set the matches and the query.\n private loadComponent(): void {\n if (!this.overlayRef?.hasAttached()) {\n this.overlayRef?.dispose();\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement)\n .withPositions(SiTypeaheadDirective.overlayPositions),\n minWidth: this.typeaheadFullWidth()\n ? this.elementRef.nativeElement.getBoundingClientRect().width + 2 // 2px border\n : 0\n });\n }\n\n if (this.overlayRef.hasAttached()) {\n return;\n }\n const typeaheadPortal = new ComponentPortal(SiTypeaheadComponent, null, this.injector);\n this.componentRef = this.overlayRef.attach(typeaheadPortal);\n this.typeaheadOpenChange.emit(true);\n }\n\n /**\n * Extracts the display value from a typeahead option.\n *\n * For string options, returns the string value directly.\n * For object options, returns the value of the field specified by {@link typeaheadOptionField}\n * (defaults to 'name'), or an empty string if the field doesn't exist.\n *\n * @param option - The typeahead option to extract the value from\n * @returns The string representation of the option for display purposes\n */\n private getOptionValue(option: TypeaheadOption): string {\n return typeof option !== 'object'\n ? option.toString()\n : (option[this.typeaheadOptionField()] ?? '');\n }\n\n /**\n * Extracts a specific field value from a typeahead option.\n *\n * This method is used to access additional properties of object-type options,\n * such as 'selected' for multi-select functionality or 'iconClass' for displaying icons.\n *\n * @param option - The typeahead option to extract the field from\n * @param field - The name of the field to extract\n * @returns The field value as a string if the option is an object and the field exists,\n * otherwise undefined\n */\n private getOptionField(option: TypeaheadOption, field: string): string | undefined {\n return typeof option !== 'object' ? undefined : option[field];\n }\n\n // Select a match, either gets called due to a enter keypress or from the component due to a click.\n /** @internal */\n selectMatch(match: TypeaheadMatch): void {\n match.itemSelected = !match.itemSelected;\n if (!this.typeaheadMultiSelect()) {\n const inputElement =\n this.elementRef.nativeElement.querySelector('input')! ?? this.elementRef.nativeElement;\n inputElement.value = this.typeaheadClearValueOnSelect() ? '' : match.text;\n inputElement.dispatchEvent(new Event('input'));\n }\n\n // Clear the current input timeout (if set) and remove the typeahead.\n this.clearTimer();\n this.typeaheadOnSelect.emit(match);\n if (!this.typeaheadMultiSelect()) {\n this.canBeOpen.set(false);\n }\n }\n\n // Remove the component by clearing the viewContainerRef\n private removeComponent(): void {\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef?.detach();\n this.typeaheadOpenChange.emit(false);\n }\n\n this.componentRef?.destroy();\n this.componentRef = undefined;\n }\n\n private clearTimer(): void {\n if (this.inputTimer) {\n clearTimeout(this.inputTimer);\n this.inputTimer = undefined;\n }\n }\n\n private escapeRegex(query: string): string {\n return query.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiTypeaheadItemTemplateDirective } from './si-typeahead-item-template.directive';\nimport { SiTypeaheadDirective } from './si-typeahead.directive';\n\n@NgModule({\n imports: [SiTypeaheadDirective, SiTypeaheadItemTemplateDirective],\n exports: [SiTypeaheadDirective, SiTypeaheadItemTemplateDirective]\n})\nexport class SiTypeaheadModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-typeahead.directive';\nexport * from './si-typeahead.model';\nexport * from './si-typeahead.module';\nexport * from './si-typeahead-item-template.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-wizard.mjs","sources":["../../../../projects/element-ng/wizard/si-wizard-step.component.ts","../../../../projects/element-ng/wizard/si-wizard-step.component.html","../../../../projects/element-ng/wizard/si-wizard.component.ts","../../../../projects/element-ng/wizard/si-wizard.component.html","../../../../projects/element-ng/wizard/si-wizard.module.ts","../../../../projects/element-ng/wizard/index.ts","../../../../projects/element-ng/wizard/siemens-element-ng-wizard.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n signal\n} from '@angular/core';\n\n@Component({\n selector: 'si-wizard-step',\n templateUrl: './si-wizard-step.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiWizardStepComponent {\n /** @defaultValue '' */\n readonly heading = input('');\n /** @defaultValue true */\n readonly isValid = input(true, { transform: booleanAttribute });\n /** @defaultValue true */\n readonly isNextNavigable = input(true, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly failed = input(false, { transform: booleanAttribute });\n\n readonly next = output();\n readonly back = output();\n readonly save = output();\n\n /**\n * Whether this step is currently active or not.\n * @defaultValue false\n */\n readonly isActive = signal(false);\n}\n","@if (isActive()) {\n <div class=\"h-100\">\n <ng-content />\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n ElementRef,\n input,\n linkedSignal,\n output,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport { WebComponentContentChildren } from '@siemens/element-ng/common';\nimport {\n addIcons,\n elementCancel,\n elementChecked,\n elementCheckedFilled,\n elementLeft4,\n elementNotChecked,\n elementRadioChecked,\n elementRight4,\n elementWarningFilled,\n SiIconComponent\n} from '@siemens/element-ng/icon';\nimport { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { SiWizardStepComponent } from './si-wizard-step.component';\n\ninterface StepItem {\n index: number;\n step: SiWizardStepComponent;\n}\n\n@Component({\n selector: 'si-wizard',\n imports: [NgClass, SiIconComponent, SiResizeObserverDirective, SiTranslatePipe, NgTemplateOutlet],\n templateUrl: './si-wizard.component.html',\n styleUrl: './si-wizard.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'py-6 px-8 d-flex flex-column',\n '[class.vertical]': 'verticalLayout()',\n '[style.--wizard-vertical-min-size]': 'verticalMinSize()',\n '[style.--wizard-vertical-max-size]': 'verticalMaxSize()'\n }\n})\nexport class SiWizardComponent {\n protected readonly containerSteps = viewChild<ElementRef<HTMLDivElement>>('containerSteps');\n\n /**\n * Description of back button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_WIZARD.BACK:Back`)\n * ```\n */\n readonly backText = input(t(() => $localize`:@@SI_WIZARD.BACK:Back`));\n /**\n * Description of next button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_WIZARD.NEXT:Next`)\n * ```\n */\n readonly nextText = input(t(() => $localize`:@@SI_WIZARD.NEXT:Next`));\n\n /**\n * Hide the navigation buttons previous/next.\n *\n * @defaultValue false\n */\n readonly hideNavigation = input(false, { transform: booleanAttribute });\n /**\n * Description of save button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_WIZARD.SAVE:Save`)\n * ```\n */\n readonly saveText = input(t(() => $localize`:@@SI_WIZARD.SAVE:Save`));\n /**\n * Hide the save button.\n *\n * @defaultValue false\n */\n readonly hideSave = input(false, { transform: booleanAttribute });\n /**\n * Text shown if you complete the wizard.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_WIZARD.COMPLETED:Wizard completed!`)\n * ```\n */\n readonly completionText = input(t(() => $localize`:@@SI_WIZARD.COMPLETED:Wizard completed!`));\n /**\n * Description of cancel button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_WIZARD.CANCEL:Cancel`)\n * ```\n */\n readonly cancelText = input(t(() => $localize`:@@SI_WIZARD.CANCEL:Cancel`));\n /**\n * Show the cancel button\n *\n * @defaultValue false\n */\n readonly hasCancel = input(false, { transform: booleanAttribute });\n /**\n * Display a predefined page by the end of the wizard.\n *\n * @defaultValue false\n */\n readonly enableCompletionPage = input(false, { transform: booleanAttribute });\n /**\n * Define how many milliseconds the completion page is visible.\n *\n * @defaultValue 3000\n */\n readonly completionPageVisibleTime = input(3000);\n /**\n * Class name of icon shown for current and upcoming steps.\n *\n * @defaultValue 'elementNotChecked'\n */\n readonly stepIcon = input('elementNotChecked');\n /**\n * Class name of icon shown for the active step.\n *\n * @defaultValue 'elementRadioChecked'\n */\n readonly stepActiveIcon = input('elementRadioChecked');\n /**\n * Class name of icon shown when a step was completed.\n *\n * @defaultValue 'elementCheckedFilled'\n */\n readonly stepCompletedIcon = input('elementCheckedFilled');\n /**\n * Class name of icon shown when a step had an error.\n *\n * @defaultValue 'elementWarningFilled'\n */\n readonly stepFailedIcon = input('elementWarningFilled');\n /**\n * Set the orientation of the wizard to vertical.\n *\n * @defaultValue false\n */\n readonly verticalLayout = input(false, { transform: booleanAttribute });\n /**\n * Set false to show navigation buttons in footer instead of inline.\n *\n * @defaultValue false\n */\n readonly inlineNavigation = input(false, { transform: booleanAttribute });\n /**\n * Use number representation for steps.\n *\n * @defaultValue false\n */\n readonly showStepNumbers = input(false, { transform: booleanAttribute });\n /**\n * Set to true to display a divider between the steps and the content in the vertical\n *\n * @defaultValue false\n */\n readonly showVerticalDivider = input(false, { transform: booleanAttribute });\n /** Set the wizard step container min size in vertical layout. */\n readonly verticalMinSize = input<string>();\n /** Set the wizard step container max size in vertical layout. */\n readonly verticalMaxSize = input<string>();\n\n /** Callback function triggered after the wizard has been completed. */\n readonly completionAction = output();\n\n /** Callback function triggered if the wizard has been canceled. */\n readonly wizardCancel = output();\n\n /** Get the current step wizard step index. */\n get index(): number {\n return this._index();\n }\n\n /** Get number of wizard steps. */\n get stepCount(): number {\n return this.steps().length;\n }\n\n /** Get current visible wizard step. */\n get currentStep(): SiWizardStepComponent | undefined {\n return this._currentStep();\n }\n\n @WebComponentContentChildren(SiWizardStepComponent)\n protected readonly steps = contentChildren(SiWizardStepComponent);\n protected readonly visibleSteps = linkedSignal(() => this.calculateVisibleStepCount());\n protected readonly showCompletionPage = signal(false);\n /** The list of visible steps. */\n protected readonly activeSteps = computed(() => this.computeVisibleSteps());\n\n private readonly _index = linkedSignal(() => {\n const currentStep = this._currentStep();\n const currentStepIndex = currentStep ? this.steps().indexOf(currentStep) : 0;\n return currentStepIndex < 0 ? 0 : currentStepIndex;\n });\n private readonly _currentStep = linkedSignal(() => {\n const steps = this.steps();\n const currentActive = steps.find(step => step.isActive());\n if (currentActive) {\n return currentActive;\n } else if (steps.length) {\n untracked(() => steps[0].isActive.set(true));\n return steps[0];\n } else {\n return undefined;\n }\n });\n protected readonly icons = addIcons({\n elementCancel,\n elementChecked,\n elementCheckedFilled,\n elementLeft4,\n elementNotChecked,\n elementRight4,\n elementRadioChecked,\n elementWarningFilled\n });\n\n protected canActivate(stepIndex: number): boolean {\n if (stepIndex < 0) {\n return false;\n }\n // Can always activate previous steps\n if (stepIndex < this.index) {\n return true;\n }\n // We are already in the step. Nothing to activate.\n if (stepIndex === this.index) {\n return false;\n }\n // Fast-forward: check all steps if they are valid\n for (let i = this.index; i < stepIndex; i++) {\n const theStep = this.steps()[i];\n if (!theStep.isValid()) {\n return false;\n }\n }\n return true;\n }\n\n protected activateStep(event: Event, stepIndex: number): void {\n event.preventDefault();\n if (this.canActivate(stepIndex)) {\n if (stepIndex > this.index) {\n this.next(stepIndex - this.index);\n }\n if (stepIndex < this.index) {\n this.back(this.index - stepIndex);\n }\n }\n }\n\n protected getStateClass(stepIndex: number): string {\n if (stepIndex === this.index) {\n return 'active';\n }\n if (!this.canActivate(stepIndex)) {\n return 'disabled';\n }\n if (stepIndex < this.index) {\n return 'completed';\n }\n return '';\n }\n\n protected getAriaDisabled(stepIndex: number): string {\n if (!this.canActivate(stepIndex)) {\n return 'true';\n }\n return 'false';\n }\n\n protected getAriaCurrent(stepIndex: number): string {\n if (stepIndex === this.index) {\n return 'step';\n }\n return 'false';\n }\n\n /**\n * Go to the next wizard step.\n * @param delta - optional number of steps to move forward.\n */\n next(delta: number = 1): void {\n const steps = this.steps();\n if (this.index === steps.length - 1) {\n return;\n }\n const stepIndex = this.index + delta;\n const nextStep = steps[stepIndex];\n if (this.canActivate(stepIndex)) {\n this.currentStep?.next.emit();\n if (this.currentStep?.isNextNavigable()) {\n this.activate(nextStep);\n }\n }\n }\n\n /**\n * Go to the previous wizard step.\n * @param delta - optional number of steps to move backwards.\n */\n back(delta: number = 1): void {\n if (this.index === 0) {\n return;\n }\n this.currentStep?.back.emit();\n this.activate(this.steps()[this.index - delta]);\n }\n\n /** Triggers the save action to complete the wizard. */\n save(): void {\n this.currentStep?.save.emit();\n\n if (this.enableCompletionPage() && this.completionPageVisibleTime() > 0) {\n this.showCompletionPage.set(true);\n setTimeout(() => {\n this.showCompletionPage.set(false);\n this.completionAction.emit();\n }, this.completionPageVisibleTime());\n } else {\n this.completionAction.emit();\n }\n }\n\n protected getState(step: SiWizardStepComponent, stepIndex: number): string {\n if (step.failed() === true) {\n return this.stepFailedIcon();\n }\n const txtStyle = step.isActive() ? this.stepActiveIcon() : this.stepIcon();\n return stepIndex >= this.index ? txtStyle : this.stepCompletedIcon();\n }\n\n private activate(step: SiWizardStepComponent): void {\n if (this.currentStep) {\n this.currentStep.isActive.set(false);\n }\n\n step.isActive.set(true);\n this._currentStep.set(step);\n this._index.set(this.steps().indexOf(step));\n }\n\n protected updateVisibleSteps(): void {\n const newVisibleSteps = this.calculateVisibleStepCount();\n if (newVisibleSteps !== this.visibleSteps()) {\n this.visibleSteps.set(newVisibleSteps);\n }\n }\n\n private calculateVisibleStepCount(): number {\n const containerSteps = this.containerSteps();\n if (!containerSteps) {\n return 0;\n }\n if (this.verticalLayout()) {\n const computedStyle = getComputedStyle(containerSteps.nativeElement);\n const clientHeight =\n containerSteps.nativeElement.clientHeight -\n parseInt(computedStyle.paddingBlockStart) -\n parseInt(computedStyle.paddingBlockEnd);\n return Math.max(Math.floor(clientHeight / 48), 1);\n } else {\n const clientWidth = containerSteps.nativeElement.clientWidth;\n return Math.max(Math.floor(clientWidth / 150), 1);\n }\n }\n\n private computeVisibleSteps(): StepItem[] {\n const create = (index: number): StepItem => ({ index, step: this.steps()[index] });\n if (this.steps().length === 0) {\n return [];\n } else if (this.visibleSteps() <= 1) {\n return [create(this.index)];\n } else if (this.stepCount <= this.visibleSteps()) {\n return this.steps().map((_, i) => create(i));\n } else {\n const steps = [this.index];\n for (\n let i = 1, left = this.index - 1, right = this.index + 1;\n i < this.visibleSteps();\n right++, left--\n ) {\n // Iterate in both directions to check current step is in visible range.\n if (right < this.stepCount) {\n steps.push(right);\n i++;\n }\n if (left >= 0 && i < this.visibleSteps()) {\n steps.push(left);\n i++;\n }\n }\n\n return steps.sort((l, r) => l - r).map(i => create(i));\n }\n }\n}\n","@if (!showCompletionPage()) {\n @if (!verticalLayout()) {\n <div class=\"container-wizard\" [class.justify-content-center]=\"!inlineNavigation()\">\n @if (inlineNavigation()) {\n <ng-container *ngTemplateOutlet=\"cancelBtnHorizontal\" />\n <ng-container *ngTemplateOutlet=\"backBtnHorizontal\" />\n }\n <ng-container *ngTemplateOutlet=\"stepsTemplate\" />\n @if (inlineNavigation()) {\n <ng-container *ngTemplateOutlet=\"nextBtnHorizontal\" />\n }\n </div>\n\n <ng-container *ngTemplateOutlet=\"stepContent\" />\n @if (inlineNavigation()) {\n <ng-container *ngTemplateOutlet=\"saveBtn\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"footer\" />\n }\n } @else {\n @if (showVerticalDivider()) {\n <div class=\"container-wizard vertical\">\n <ng-container *ngTemplateOutlet=\"stepsTemplate\" />\n <div class=\"vertical-divider\"></div>\n <div class=\"d-flex flex-column w-100\">\n <div class=\"steps-content\">\n <ng-container *ngTemplateOutlet=\"stepContent\" />\n </div>\n <ng-container *ngTemplateOutlet=\"footer\" />\n </div>\n </div>\n } @else {\n <div class=\"container-wizard vertical\">\n <ng-container *ngTemplateOutlet=\"stepsTemplate\" />\n <div class=\"steps-content\">\n <ng-container *ngTemplateOutlet=\"stepContent\" />\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"footer\" />\n }\n }\n} @else {\n <div class=\"text-center\">\n <si-icon class=\"completion-icon-size text-success\" [icon]=\"icons.elementChecked\" />\n <p class=\"si-h4\"> {{ completionText() | translate }}</p>\n </div>\n}\n\n<ng-template #stepsTemplate>\n <div\n #containerSteps\n class=\"container-steps\"\n [class.vertical]=\"verticalLayout()\"\n [class.mx-4]=\"inlineNavigation()\"\n [class.mt-4]=\"!verticalLayout() && inlineNavigation()\"\n (siResizeObserver)=\"updateVisibleSteps()\"\n >\n @for (item of activeSteps(); track item.index) {\n <div class=\"step\">\n <div\n class=\"line previous\"\n [class.dashed]=\"$first && item.index > 0\"\n [class.vertical]=\"verticalLayout()\"\n [class.spacer]=\"$first && item.index === 0\"\n [ngClass]=\"getStateClass(item.index)\"\n ></div>\n <a\n class=\"focus-none\"\n [ngClass]=\"getStateClass(item.index)\"\n [attr.aria-current]=\"getAriaCurrent(item.index)\"\n [attr.href]=\"!canActivate(item.index) || !currentStep?.isNextNavigable() ? null : '#'\"\n (click)=\"activateStep($event, item.index)\"\n >\n @if (showStepNumbers() && !item.step.failed()) {\n <div\n class=\"step-icon number-step d-flex justify-content-center align-items-center px-1\"\n >\n <div class=\"circle\" [class.status-warning]=\"item.step.failed()\">\n <span class=\"si-h5 px-2\" [class.completed-color]=\"item.index < index\">\n {{ item.index + 1 }}\n </span>\n </div>\n </div>\n } @else {\n <si-icon\n class=\"icon step-icon\"\n [class.status-warning]=\"item.step.failed()\"\n [icon]=\"getState(item.step!, item.index)\"\n />\n }\n <div\n class=\"title si-h5\"\n [class.text-center]=\"!verticalLayout()\"\n [class.px-6]=\"!verticalLayout()\"\n [attr.aria-disabled]=\"getAriaDisabled(item.index)\"\n >{{ item.step.heading() | translate }}</div\n >\n </a>\n @if (item.index + 1 < stepCount) {\n <div\n class=\"line\"\n [class.vertical]=\"verticalLayout()\"\n [ngClass]=\"getStateClass(item.index + 1)\"\n [class.dashed]=\"$last\"\n ></div>\n }\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #stepContent>\n <div [class.flex-grow-1]=\"!verticalLayout()\" [class.h-100]=\"verticalLayout()\">\n <ng-content />\n </div>\n</ng-template>\n\n<ng-template #cancelBtnHorizontal>\n @if (hasCancel()) {\n <div class=\"me-7\">\n <div class=\"wizard-btn-container\" (click)=\"wizardCancel.emit()\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-circle btn-secondary mt-2 mb-4\"\n [attr.aria-label]=\"cancelText() | translate\"\n >\n <si-icon [icon]=\"icons.elementCancel\" />\n </button>\n <div class=\"si-h5 text-primary\">{{ cancelText() | translate }}</div>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #footer>\n <div class=\"wizard-footer pt-6\">\n <div class=\"wizard-footer-inner\" [class.ms-6]=\"showVerticalDivider()\">\n @if (hasCancel()) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary\"\n [attr.aria-label]=\"cancelText() | translate\"\n (click)=\"wizardCancel.emit()\"\n >\n {{ cancelText() | translate }}\n </button>\n }\n @if (!hideNavigation()) {\n <button\n type=\"button\"\n class=\"btn btn-secondary\"\n [class.d-none]=\"index === 0\"\n [class.end]=\"index !== 0\"\n [attr.aria-label]=\"backText() | translate\"\n (click)=\"back(1)\"\n >\n {{ backText() | translate }}\n </button>\n\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n [attr.aria-label]=\"nextText() | translate\"\n [disabled]=\"!currentStep?.isValid()\"\n [class.d-none]=\"index === steps().length - 1\"\n [class.end]=\"index === 0\"\n (click)=\"next(1)\"\n >\n {{ nextText() | translate }}\n </button>\n }\n\n @if (!hideSave()) {\n @if (index === steps().length - 1) {\n <button\n type=\"button\"\n class=\"btn btn-primary save\"\n [disabled]=\"!currentStep?.isValid() || !currentStep?.isNextNavigable()\"\n (click)=\"save()\"\n >{{ saveText() | translate }}</button\n >\n }\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #backBtnHorizontal>\n <div class=\"wizard-btn-container\">\n @if (!hideNavigation()) {\n <div class=\"back\" [class.invisible]=\"index === 0\" (click)=\"back(1)\">\n <button\n type=\"button\"\n class=\"btn btn-secondary btn-circle mb-2\"\n [attr.aria-label]=\"backText() | translate\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"icons.elementLeft4\" />\n </button>\n <div class=\"si-h5 text-primary\">{{ backText() | translate }}</div>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #nextBtnHorizontal>\n <div class=\"wizard-btn-container\" [class.wizard-text-deactivate]=\"!currentStep?.isValid()\">\n @if (!hideNavigation()) {\n <div class=\"next\" [class.invisible]=\"index === steps().length - 1\" (click)=\"next(1)\">\n <button\n type=\"button\"\n class=\"btn btn-primary btn-circle mb-2\"\n [disabled]=\"!currentStep?.isValid()\"\n [attr.aria-label]=\"nextText() | translate\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"icons.elementRight4\" />\n </button>\n <div\n class=\"si-h5 text-primary\"\n [class.text-muted]=\"!currentStep?.isValid()\"\n [attr.aria-disabled]=\"!currentStep?.isValid()\"\n >{{ nextText() | translate }}</div\n >\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #saveBtn>\n @if (!hideSave()) {\n <div [class.center-save]=\"!verticalLayout() && inlineNavigation()\">\n @if (index === steps().length - 1) {\n <button\n type=\"button\"\n class=\"btn btn-primary save\"\n [disabled]=\"!currentStep?.isValid() || !currentStep?.isNextNavigable()\"\n (click)=\"save()\"\n >{{ saveText() | translate }}</button\n >\n }\n </div>\n }\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiWizardStepComponent } from './si-wizard-step.component';\nimport { SiWizardComponent } from './si-wizard.component';\n\n@NgModule({\n imports: [SiWizardComponent, SiWizardStepComponent],\n exports: [SiWizardComponent, SiWizardStepComponent]\n})\nexport class SiWizardModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-wizard-step.component';\nexport * from './si-wizard.component';\nexport * from './si-wizard.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-wizard.mjs","sources":["../../../../projects/element-ng/wizard/si-wizard-step.component.ts","../../../../projects/element-ng/wizard/si-wizard-step.component.html","../../../../projects/element-ng/wizard/si-wizard.component.ts","../../../../projects/element-ng/wizard/si-wizard.component.html","../../../../projects/element-ng/wizard/si-wizard.module.ts","../../../../projects/element-ng/wizard/index.ts","../../../../projects/element-ng/wizard/siemens-element-ng-wizard.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n signal\n} from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\n@Component({\n selector: 'si-wizard-step',\n templateUrl: './si-wizard-step.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiWizardStepComponent {\n /** @defaultValue '' */\n readonly heading = input<TranslatableString>('');\n /** @defaultValue true */\n readonly isValid = input(true, { transform: booleanAttribute });\n /** @defaultValue true */\n readonly isNextNavigable = input(true, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly failed = input(false, { transform: booleanAttribute });\n\n readonly next = output();\n readonly back = output();\n readonly save = output();\n\n /**\n * Whether this step is currently active or not.\n * @defaultValue false\n */\n readonly isActive = signal(false);\n}\n","@if (isActive()) {\n <div class=\"h-100\">\n <ng-content />\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n ElementRef,\n input,\n linkedSignal,\n output,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport { WebComponentContentChildren } from '@siemens/element-ng/common';\nimport {\n addIcons,\n elementCancel,\n elementChecked,\n elementCheckedFilled,\n elementLeft4,\n elementNotChecked,\n elementRadioChecked,\n elementRight4,\n elementWarningFilled,\n SiIconComponent\n} from '@siemens/element-ng/icon';\nimport { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { SiWizardStepComponent } from './si-wizard-step.component';\n\ninterface StepItem {\n index: number;\n step: SiWizardStepComponent;\n}\n\n@Component({\n selector: 'si-wizard',\n imports: [NgClass, SiIconComponent, SiResizeObserverDirective, SiTranslatePipe, NgTemplateOutlet],\n templateUrl: './si-wizard.component.html',\n styleUrl: './si-wizard.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'py-6 px-8 d-flex flex-column',\n '[class.vertical]': 'verticalLayout()',\n '[style.--wizard-vertical-min-size]': 'verticalMinSize()',\n '[style.--wizard-vertical-max-size]': 'verticalMaxSize()'\n }\n})\nexport class SiWizardComponent {\n protected readonly containerSteps = viewChild<ElementRef<HTMLDivElement>>('containerSteps');\n\n /**\n * Description of back button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_WIZARD.BACK:Back`)\n * ```\n */\n readonly backText = input(t(() => $localize`:@@SI_WIZARD.BACK:Back`));\n /**\n * Description of next button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_WIZARD.NEXT:Next`)\n * ```\n */\n readonly nextText = input(t(() => $localize`:@@SI_WIZARD.NEXT:Next`));\n\n /**\n * Hide the navigation buttons previous/next.\n *\n * @defaultValue false\n */\n readonly hideNavigation = input(false, { transform: booleanAttribute });\n /**\n * Description of save button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_WIZARD.SAVE:Save`)\n * ```\n */\n readonly saveText = input(t(() => $localize`:@@SI_WIZARD.SAVE:Save`));\n /**\n * Hide the save button.\n *\n * @defaultValue false\n */\n readonly hideSave = input(false, { transform: booleanAttribute });\n /**\n * Text shown if you complete the wizard.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_WIZARD.COMPLETED:Wizard completed!`)\n * ```\n */\n readonly completionText = input(t(() => $localize`:@@SI_WIZARD.COMPLETED:Wizard completed!`));\n /**\n * Description of cancel button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_WIZARD.CANCEL:Cancel`)\n * ```\n */\n readonly cancelText = input(t(() => $localize`:@@SI_WIZARD.CANCEL:Cancel`));\n /**\n * Show the cancel button\n *\n * @defaultValue false\n */\n readonly hasCancel = input(false, { transform: booleanAttribute });\n /**\n * Display a predefined page by the end of the wizard.\n *\n * @defaultValue false\n */\n readonly enableCompletionPage = input(false, { transform: booleanAttribute });\n /**\n * Define how many milliseconds the completion page is visible.\n *\n * @defaultValue 3000\n */\n readonly completionPageVisibleTime = input(3000);\n /**\n * Class name of icon shown for current and upcoming steps.\n *\n * @defaultValue 'elementNotChecked'\n */\n readonly stepIcon = input('elementNotChecked');\n /**\n * Class name of icon shown for the active step.\n *\n * @defaultValue 'elementRadioChecked'\n */\n readonly stepActiveIcon = input('elementRadioChecked');\n /**\n * Class name of icon shown when a step was completed.\n *\n * @defaultValue 'elementCheckedFilled'\n */\n readonly stepCompletedIcon = input('elementCheckedFilled');\n /**\n * Class name of icon shown when a step had an error.\n *\n * @defaultValue 'elementWarningFilled'\n */\n readonly stepFailedIcon = input('elementWarningFilled');\n /**\n * Set the orientation of the wizard to vertical.\n *\n * @defaultValue false\n */\n readonly verticalLayout = input(false, { transform: booleanAttribute });\n /**\n * Set false to show navigation buttons in footer instead of inline.\n *\n * @defaultValue false\n */\n readonly inlineNavigation = input(false, { transform: booleanAttribute });\n /**\n * Use number representation for steps.\n *\n * @defaultValue false\n */\n readonly showStepNumbers = input(false, { transform: booleanAttribute });\n /**\n * Set to true to display a divider between the steps and the content in the vertical\n *\n * @defaultValue false\n */\n readonly showVerticalDivider = input(false, { transform: booleanAttribute });\n /** Set the wizard step container min size in vertical layout. */\n readonly verticalMinSize = input<string>();\n /** Set the wizard step container max size in vertical layout. */\n readonly verticalMaxSize = input<string>();\n\n /** Callback function triggered after the wizard has been completed. */\n readonly completionAction = output();\n\n /** Callback function triggered if the wizard has been canceled. */\n readonly wizardCancel = output();\n\n /** Get the current step wizard step index. */\n get index(): number {\n return this._index();\n }\n\n /** Get number of wizard steps. */\n get stepCount(): number {\n return this.steps().length;\n }\n\n /** Get current visible wizard step. */\n get currentStep(): SiWizardStepComponent | undefined {\n return this._currentStep();\n }\n\n @WebComponentContentChildren(SiWizardStepComponent)\n protected readonly steps = contentChildren(SiWizardStepComponent);\n protected readonly visibleSteps = linkedSignal(() => this.calculateVisibleStepCount());\n protected readonly showCompletionPage = signal(false);\n /** The list of visible steps. */\n protected readonly activeSteps = computed(() => this.computeVisibleSteps());\n\n private readonly _index = linkedSignal(() => {\n const currentStep = this._currentStep();\n const currentStepIndex = currentStep ? this.steps().indexOf(currentStep) : 0;\n return currentStepIndex < 0 ? 0 : currentStepIndex;\n });\n private readonly _currentStep = linkedSignal(() => {\n const steps = this.steps();\n const currentActive = steps.find(step => step.isActive());\n if (currentActive) {\n return currentActive;\n } else if (steps.length) {\n untracked(() => steps[0].isActive.set(true));\n return steps[0];\n } else {\n return undefined;\n }\n });\n protected readonly icons = addIcons({\n elementCancel,\n elementChecked,\n elementCheckedFilled,\n elementLeft4,\n elementNotChecked,\n elementRight4,\n elementRadioChecked,\n elementWarningFilled\n });\n\n protected canActivate(stepIndex: number): boolean {\n if (stepIndex < 0) {\n return false;\n }\n // Can always activate previous steps\n if (stepIndex < this.index) {\n return true;\n }\n // We are already in the step. Nothing to activate.\n if (stepIndex === this.index) {\n return false;\n }\n // Fast-forward: check all steps if they are valid\n for (let i = this.index; i < stepIndex; i++) {\n const theStep = this.steps()[i];\n if (!theStep.isValid()) {\n return false;\n }\n }\n return true;\n }\n\n protected activateStep(event: Event, stepIndex: number): void {\n event.preventDefault();\n if (this.canActivate(stepIndex)) {\n if (stepIndex > this.index) {\n this.next(stepIndex - this.index);\n }\n if (stepIndex < this.index) {\n this.back(this.index - stepIndex);\n }\n }\n }\n\n protected getStateClass(stepIndex: number): string {\n if (stepIndex === this.index) {\n return 'active';\n }\n if (!this.canActivate(stepIndex)) {\n return 'disabled';\n }\n if (stepIndex < this.index) {\n return 'completed';\n }\n return '';\n }\n\n protected getAriaDisabled(stepIndex: number): string {\n if (!this.canActivate(stepIndex)) {\n return 'true';\n }\n return 'false';\n }\n\n protected getAriaCurrent(stepIndex: number): string {\n if (stepIndex === this.index) {\n return 'step';\n }\n return 'false';\n }\n\n /**\n * Go to the next wizard step.\n * @param delta - optional number of steps to move forward.\n */\n next(delta: number = 1): void {\n const steps = this.steps();\n if (this.index === steps.length - 1) {\n return;\n }\n const stepIndex = this.index + delta;\n const nextStep = steps[stepIndex];\n if (this.canActivate(stepIndex)) {\n this.currentStep?.next.emit();\n if (this.currentStep?.isNextNavigable()) {\n this.activate(nextStep);\n }\n }\n }\n\n /**\n * Go to the previous wizard step.\n * @param delta - optional number of steps to move backwards.\n */\n back(delta: number = 1): void {\n if (this.index === 0) {\n return;\n }\n this.currentStep?.back.emit();\n this.activate(this.steps()[this.index - delta]);\n }\n\n /** Triggers the save action to complete the wizard. */\n save(): void {\n this.currentStep?.save.emit();\n\n if (this.enableCompletionPage() && this.completionPageVisibleTime() > 0) {\n this.showCompletionPage.set(true);\n setTimeout(() => {\n this.showCompletionPage.set(false);\n this.completionAction.emit();\n }, this.completionPageVisibleTime());\n } else {\n this.completionAction.emit();\n }\n }\n\n protected getState(step: SiWizardStepComponent, stepIndex: number): string {\n if (step.failed() === true) {\n return this.stepFailedIcon();\n }\n const txtStyle = step.isActive() ? this.stepActiveIcon() : this.stepIcon();\n return stepIndex >= this.index ? txtStyle : this.stepCompletedIcon();\n }\n\n private activate(step: SiWizardStepComponent): void {\n if (this.currentStep) {\n this.currentStep.isActive.set(false);\n }\n\n step.isActive.set(true);\n this._currentStep.set(step);\n this._index.set(this.steps().indexOf(step));\n }\n\n protected updateVisibleSteps(): void {\n const newVisibleSteps = this.calculateVisibleStepCount();\n if (newVisibleSteps !== this.visibleSteps()) {\n this.visibleSteps.set(newVisibleSteps);\n }\n }\n\n private calculateVisibleStepCount(): number {\n const containerSteps = this.containerSteps();\n if (!containerSteps) {\n return 0;\n }\n if (this.verticalLayout()) {\n const computedStyle = getComputedStyle(containerSteps.nativeElement);\n const clientHeight =\n containerSteps.nativeElement.clientHeight -\n parseInt(computedStyle.paddingBlockStart) -\n parseInt(computedStyle.paddingBlockEnd);\n return Math.max(Math.floor(clientHeight / 48), 1);\n } else {\n const clientWidth = containerSteps.nativeElement.clientWidth;\n return Math.max(Math.floor(clientWidth / 150), 1);\n }\n }\n\n private computeVisibleSteps(): StepItem[] {\n const create = (index: number): StepItem => ({ index, step: this.steps()[index] });\n if (this.steps().length === 0) {\n return [];\n } else if (this.visibleSteps() <= 1) {\n return [create(this.index)];\n } else if (this.stepCount <= this.visibleSteps()) {\n return this.steps().map((_, i) => create(i));\n } else {\n const steps = [this.index];\n for (\n let i = 1, left = this.index - 1, right = this.index + 1;\n i < this.visibleSteps();\n right++, left--\n ) {\n // Iterate in both directions to check current step is in visible range.\n if (right < this.stepCount) {\n steps.push(right);\n i++;\n }\n if (left >= 0 && i < this.visibleSteps()) {\n steps.push(left);\n i++;\n }\n }\n\n return steps.sort((l, r) => l - r).map(i => create(i));\n }\n }\n}\n","@if (!showCompletionPage()) {\n @if (!verticalLayout()) {\n <div class=\"container-wizard\" [class.justify-content-center]=\"!inlineNavigation()\">\n @if (inlineNavigation()) {\n <ng-container *ngTemplateOutlet=\"cancelBtnHorizontal\" />\n <ng-container *ngTemplateOutlet=\"backBtnHorizontal\" />\n }\n <ng-container *ngTemplateOutlet=\"stepsTemplate\" />\n @if (inlineNavigation()) {\n <ng-container *ngTemplateOutlet=\"nextBtnHorizontal\" />\n }\n </div>\n\n <ng-container *ngTemplateOutlet=\"stepContent\" />\n @if (inlineNavigation()) {\n <ng-container *ngTemplateOutlet=\"saveBtn\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"footer\" />\n }\n } @else {\n @if (showVerticalDivider()) {\n <div class=\"container-wizard vertical\">\n <ng-container *ngTemplateOutlet=\"stepsTemplate\" />\n <div class=\"vertical-divider\"></div>\n <div class=\"d-flex flex-column w-100\">\n <div class=\"steps-content\">\n <ng-container *ngTemplateOutlet=\"stepContent\" />\n </div>\n <ng-container *ngTemplateOutlet=\"footer\" />\n </div>\n </div>\n } @else {\n <div class=\"container-wizard vertical\">\n <ng-container *ngTemplateOutlet=\"stepsTemplate\" />\n <div class=\"steps-content\">\n <ng-container *ngTemplateOutlet=\"stepContent\" />\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"footer\" />\n }\n }\n} @else {\n <div class=\"text-center\">\n <si-icon class=\"completion-icon-size text-success\" [icon]=\"icons.elementChecked\" />\n <p class=\"si-h4\"> {{ completionText() | translate }}</p>\n </div>\n}\n\n<ng-template #stepsTemplate>\n <div\n #containerSteps\n class=\"container-steps\"\n [class.vertical]=\"verticalLayout()\"\n [class.mx-4]=\"inlineNavigation()\"\n [class.mt-4]=\"!verticalLayout() && inlineNavigation()\"\n (siResizeObserver)=\"updateVisibleSteps()\"\n >\n @for (item of activeSteps(); track item.index) {\n <div class=\"step\">\n <div\n class=\"line previous\"\n [class.dashed]=\"$first && item.index > 0\"\n [class.vertical]=\"verticalLayout()\"\n [class.spacer]=\"$first && item.index === 0\"\n [ngClass]=\"getStateClass(item.index)\"\n ></div>\n <a\n class=\"focus-none\"\n [ngClass]=\"getStateClass(item.index)\"\n [attr.aria-current]=\"getAriaCurrent(item.index)\"\n [attr.href]=\"!canActivate(item.index) || !currentStep?.isNextNavigable() ? null : '#'\"\n (click)=\"activateStep($event, item.index)\"\n >\n @if (showStepNumbers() && !item.step.failed()) {\n <div\n class=\"step-icon number-step d-flex justify-content-center align-items-center px-1\"\n >\n <div class=\"circle\" [class.status-warning]=\"item.step.failed()\">\n <span class=\"si-h5 px-2\" [class.completed-color]=\"item.index < index\">\n {{ item.index + 1 }}\n </span>\n </div>\n </div>\n } @else {\n <si-icon\n class=\"icon step-icon\"\n [class.status-warning]=\"item.step.failed()\"\n [icon]=\"getState(item.step!, item.index)\"\n />\n }\n <div\n class=\"title si-h5\"\n [class.text-center]=\"!verticalLayout()\"\n [class.px-6]=\"!verticalLayout()\"\n [attr.aria-disabled]=\"getAriaDisabled(item.index)\"\n >{{ item.step.heading() | translate }}</div\n >\n </a>\n @if (item.index + 1 < stepCount) {\n <div\n class=\"line\"\n [class.vertical]=\"verticalLayout()\"\n [ngClass]=\"getStateClass(item.index + 1)\"\n [class.dashed]=\"$last\"\n ></div>\n }\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #stepContent>\n <div [class.flex-grow-1]=\"!verticalLayout()\" [class.h-100]=\"verticalLayout()\">\n <ng-content />\n </div>\n</ng-template>\n\n<ng-template #cancelBtnHorizontal>\n @if (hasCancel()) {\n <div class=\"me-7\">\n <div class=\"wizard-btn-container\" (click)=\"wizardCancel.emit()\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-circle btn-secondary mt-2 mb-4\"\n [attr.aria-label]=\"cancelText() | translate\"\n >\n <si-icon [icon]=\"icons.elementCancel\" />\n </button>\n <div class=\"si-h5 text-primary\">{{ cancelText() | translate }}</div>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #footer>\n <div class=\"wizard-footer pt-6\">\n <div class=\"wizard-footer-inner\" [class.ms-6]=\"showVerticalDivider()\">\n @if (hasCancel()) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary\"\n [attr.aria-label]=\"cancelText() | translate\"\n (click)=\"wizardCancel.emit()\"\n >\n {{ cancelText() | translate }}\n </button>\n }\n @if (!hideNavigation()) {\n <button\n type=\"button\"\n class=\"btn btn-secondary\"\n [class.d-none]=\"index === 0\"\n [class.end]=\"index !== 0\"\n [attr.aria-label]=\"backText() | translate\"\n (click)=\"back(1)\"\n >\n {{ backText() | translate }}\n </button>\n\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n [attr.aria-label]=\"nextText() | translate\"\n [disabled]=\"!currentStep?.isValid()\"\n [class.d-none]=\"index === steps().length - 1\"\n [class.end]=\"index === 0\"\n (click)=\"next(1)\"\n >\n {{ nextText() | translate }}\n </button>\n }\n\n @if (!hideSave()) {\n @if (index === steps().length - 1) {\n <button\n type=\"button\"\n class=\"btn btn-primary save\"\n [disabled]=\"!currentStep?.isValid() || !currentStep?.isNextNavigable()\"\n (click)=\"save()\"\n >{{ saveText() | translate }}</button\n >\n }\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #backBtnHorizontal>\n <div class=\"wizard-btn-container\">\n @if (!hideNavigation()) {\n <div class=\"back\" [class.invisible]=\"index === 0\" (click)=\"back(1)\">\n <button\n type=\"button\"\n class=\"btn btn-secondary btn-circle mb-2\"\n [attr.aria-label]=\"backText() | translate\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"icons.elementLeft4\" />\n </button>\n <div class=\"si-h5 text-primary\">{{ backText() | translate }}</div>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #nextBtnHorizontal>\n <div class=\"wizard-btn-container\" [class.wizard-text-deactivate]=\"!currentStep?.isValid()\">\n @if (!hideNavigation()) {\n <div class=\"next\" [class.invisible]=\"index === steps().length - 1\" (click)=\"next(1)\">\n <button\n type=\"button\"\n class=\"btn btn-primary btn-circle mb-2\"\n [disabled]=\"!currentStep?.isValid()\"\n [attr.aria-label]=\"nextText() | translate\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"icons.elementRight4\" />\n </button>\n <div\n class=\"si-h5 text-primary\"\n [class.text-muted]=\"!currentStep?.isValid()\"\n [attr.aria-disabled]=\"!currentStep?.isValid()\"\n >{{ nextText() | translate }}</div\n >\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #saveBtn>\n @if (!hideSave()) {\n <div [class.center-save]=\"!verticalLayout() && inlineNavigation()\">\n @if (index === steps().length - 1) {\n <button\n type=\"button\"\n class=\"btn btn-primary save\"\n [disabled]=\"!currentStep?.isValid() || !currentStep?.isNextNavigable()\"\n (click)=\"save()\"\n >{{ saveText() | translate }}</button\n >\n }\n </div>\n }\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiWizardStepComponent } from './si-wizard-step.component';\nimport { SiWizardComponent } from './si-wizard.component';\n\n@NgModule({\n imports: [SiWizardComponent, SiWizardStepComponent],\n exports: [SiWizardComponent, SiWizardStepComponent]\n})\nexport class SiWizardModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-wizard-step.component';\nexport * from './si-wizard.component';\nexport * from './si-wizard.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/file-uploader/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TranslatableString } from '@siemens/element-translate-ng/translate';
|
|
1
2
|
import * as _angular_core from '@angular/core';
|
|
2
3
|
import { OnChanges, SimpleChanges } from '@angular/core';
|
|
3
4
|
import * as _siemens_element_translate_ng_translate_types from '@siemens/element-translate-ng/translate-types';
|
|
@@ -8,13 +9,14 @@ import { Observable, Subscription } from 'rxjs';
|
|
|
8
9
|
* Copyright (c) Siemens 2016 - 2025
|
|
9
10
|
* SPDX-License-Identifier: MIT
|
|
10
11
|
*/
|
|
12
|
+
|
|
11
13
|
/** */
|
|
12
14
|
interface UploadFile {
|
|
13
15
|
status: 'added' | 'invalid' | 'queued' | 'uploading' | 'success' | 'error';
|
|
14
16
|
file: File;
|
|
15
17
|
fileName: string;
|
|
16
18
|
size: string;
|
|
17
|
-
errorText?:
|
|
19
|
+
errorText?: TranslatableString;
|
|
18
20
|
progress: number;
|
|
19
21
|
}
|
|
20
22
|
|
package/filter-bar/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TranslatableString } from '@siemens/element-translate-ng/translate';
|
|
1
2
|
import * as _angular_core from '@angular/core';
|
|
2
3
|
import * as _siemens_element_translate_ng_translate_types from '@siemens/element-translate-ng/translate-types';
|
|
3
4
|
import { BackgroundColorVariant } from '@siemens/element-ng/common';
|
|
@@ -6,7 +7,12 @@ import { BackgroundColorVariant } from '@siemens/element-ng/common';
|
|
|
6
7
|
* Copyright (c) Siemens 2016 - 2025
|
|
7
8
|
* SPDX-License-Identifier: MIT
|
|
8
9
|
*/
|
|
9
|
-
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated FilterStatusType has been deprecated as it no longer has any visual effect on filter pills.
|
|
13
|
+
* This type will be removed in the next major version. Please remove any usage of the `status` property
|
|
14
|
+
* from your Filter objects as it is now ignored by the component.
|
|
15
|
+
*/
|
|
10
16
|
type FilterStatusType = 'default' | 'success' | 'info' | 'warning' | 'danger' | 'inactive';
|
|
11
17
|
interface Filter {
|
|
12
18
|
/**
|
|
@@ -18,16 +24,18 @@ interface Filter {
|
|
|
18
24
|
* Shown title of filter pill.
|
|
19
25
|
* Can be left empty if {@link description} is used.
|
|
20
26
|
*/
|
|
21
|
-
title?:
|
|
27
|
+
title?: TranslatableString;
|
|
22
28
|
/**
|
|
23
29
|
* Short description of filter pill.
|
|
24
30
|
* Can be left empty if {@link title} is used to align the title to middle of pill.
|
|
25
31
|
*/
|
|
26
|
-
description?:
|
|
32
|
+
description?: TranslatableString;
|
|
27
33
|
/**
|
|
28
|
-
*
|
|
34
|
+
* @deprecated The status property has been deprecated as it no longer has any visual effect on filter pills.
|
|
35
|
+
* This property will be removed in the next major version. Please remove this property from your Filter
|
|
36
|
+
* objects as it is now ignored by the filter component.
|
|
29
37
|
*/
|
|
30
|
-
status
|
|
38
|
+
status?: FilterStatusType;
|
|
31
39
|
}
|
|
32
40
|
|
|
33
41
|
declare class SiFilterBarComponent {
|