@siemens/element-ng 49.2.0 → 49.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/siemens-element-ng-accordion.mjs +2 -2
- package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-application-header.mjs +3 -3
- package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-circle-status.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.map +1 -1
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datepicker.mjs +22 -24
- package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-header-dropdown.mjs +2 -2
- package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-main-detail-container.mjs +21 -25
- package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-menu.mjs +6 -6
- package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs +8 -4
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-phone-number.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-search-bar.mjs +7 -2
- package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-side-panel.mjs +164 -10
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-toggle.mjs +1 -1
- package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +11 -3
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
- package/package.json +3 -3
- package/schematics/vitest-setup.js +5 -0
- package/types/siemens-element-ng-application-header.d.ts +1 -1
- package/types/siemens-element-ng-auto-collapsable-list.d.ts +1 -1
- package/types/siemens-element-ng-avatar.d.ts +1 -1
- package/types/siemens-element-ng-circle-status.d.ts +1 -1
- package/types/siemens-element-ng-dashboard.d.ts +2 -2
- package/types/siemens-element-ng-date-range-filter.d.ts +1 -1
- package/types/siemens-element-ng-datepicker.d.ts +7 -7
- package/types/siemens-element-ng-file-uploader.d.ts +1 -1
- package/types/siemens-element-ng-filtered-search.d.ts +1 -1
- package/types/siemens-element-ng-form.d.ts +1 -1
- package/types/siemens-element-ng-list-details.d.ts +1 -1
- package/types/siemens-element-ng-main-detail-container.d.ts +10 -11
- package/types/siemens-element-ng-navbar-vertical.d.ts +7 -3
- package/types/siemens-element-ng-navbar.d.ts +1 -1
- package/types/siemens-element-ng-number-input.d.ts +1 -1
- package/types/siemens-element-ng-phone-number.d.ts +1 -1
- package/types/siemens-element-ng-photo-upload.d.ts +1 -1
- package/types/siemens-element-ng-search-bar.d.ts +1 -1
- package/types/siemens-element-ng-side-panel.d.ts +115 -5
- package/types/siemens-element-ng-split.d.ts +2 -2
- package/types/siemens-element-ng-status-bar.d.ts +1 -1
- package/types/siemens-element-ng-status-toggle.d.ts +1 -1
- package/types/siemens-element-ng-tree-view.d.ts +1 -1
- package/types/siemens-element-ng-typeahead.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-filtered-search.mjs","sources":["../../../../projects/element-ng/filtered-search/si-filtered-search-helper.ts","../../../../projects/element-ng/filtered-search/values/si-filtered-search-value.base.ts","../../../../projects/element-ng/filtered-search/values/date-value/si-filtered-search-date-value.component.ts","../../../../projects/element-ng/filtered-search/values/date-value/si-filtered-search-date-value.component.html","../../../../projects/element-ng/filtered-search/values/free-text/si-filtered-search-free-text.component.ts","../../../../projects/element-ng/filtered-search/values/free-text/si-filtered-search-free-text.component.html","../../../../projects/element-ng/filtered-search/values/si-filtered-search-option-value.base.ts","../../../../projects/element-ng/filtered-search/values/multi-select/si-filtered-search-multi-select.component.ts","../../../../projects/element-ng/filtered-search/values/multi-select/si-filtered-search-multi-select.component.html","../../../../projects/element-ng/filtered-search/values/typeahead/si-filtered-search-typeahead.component.ts","../../../../projects/element-ng/filtered-search/values/typeahead/si-filtered-search-typeahead.component.html","../../../../projects/element-ng/filtered-search/si-filtered-search-value.component.ts","../../../../projects/element-ng/filtered-search/si-filtered-search-value.component.html","../../../../projects/element-ng/filtered-search/si-filtered-search.component.ts","../../../../projects/element-ng/filtered-search/si-filtered-search.component.html","../../../../projects/element-ng/filtered-search/si-filtered-search.module.ts","../../../../projects/element-ng/filtered-search/index.ts","../../../../projects/element-ng/filtered-search/siemens-element-ng-filtered-search.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { formatDate } from '@angular/common';\nimport { isValid } from '@siemens/element-ng/datepicker';\n\nimport { CriterionDefinition, OptionCriterion, OptionType } from './si-filtered-search.model';\n\nexport interface TypeaheadOptionCriterion extends OptionCriterion {\n selected?: boolean;\n translatedLabel: string;\n}\n\nexport interface InternalCriterionDefinition extends CriterionDefinition {\n label: string;\n translatedLabel: string;\n type?: 'free-text';\n}\n\n/** Convert options to option criterions */\nexport const toOptionCriteria = (values?: OptionType[]): OptionCriterion[] =>\n values?.map(v =>\n typeof v === 'string'\n ? { value: v }\n : { label: v.label, value: v.value, iconClass: v.iconClass }\n ) ?? [];\n\n/*\n * Update selected state the matching is based on value since plain\n * string options will automatically fill the value attribute with the\n * actual string value.\n */\nexport const selectOptions = (options: TypeaheadOptionCriterion[], toSelect: string[]): void =>\n options.forEach(val => (val.selected = toSelect.includes(val.value)));\n\n/**\n * Difference by name, create an array that contains those elements of criteria's a that are not in criteria's b.\n * This operation is also sometimes called minus (-).\n */\nexport const differenceByName = (\n a: InternalCriterionDefinition[],\n b: { config: InternalCriterionDefinition }[]\n): InternalCriterionDefinition[] =>\n a.filter(x => b.filter(y => y.config.name === x.name).length === 0);\n\n/** Convert criteria to internal model criteria */\nexport const toInternalCriteria = (crit: CriterionDefinition): InternalCriterionDefinition => {\n return {\n ...crit,\n label: crit.label ?? crit.name,\n translatedLabel: crit.label ?? crit.name\n };\n};\n\nexport const getISODateString = (\n date: Date | undefined,\n format: 'date' | 'date-time',\n locale: string\n): string => {\n if (!isValid(date)) {\n return '';\n }\n\n switch (format) {\n case 'date':\n return formatDate(date, 'yyyy-MM-dd', locale);\n case 'date-time':\n return date.toISOString();\n }\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive, ElementRef, input, model, output, signal, Signal } from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { CriterionDefinition, CriterionValue } from '../si-filtered-search.model';\n\n@Directive({\n host: {\n '[class.invalid-criterion]': '!validValue()',\n 'class': 'pill pill-interactive px-0 criterion-value-section'\n }\n})\nexport abstract class SiFilteredSearchValueBase {\n readonly active = model.required<boolean>();\n readonly criterionValue = model.required<CriterionValue>();\n readonly definition = input.required<CriterionDefinition>();\n readonly disabled = input.required<boolean>();\n readonly searchLabel = input.required<TranslatableString>();\n\n readonly submitValue = output<{ freeText: string } | void>();\n readonly editValue = output();\n readonly backspaceOverflow = output();\n\n protected abstract readonly valueInput: Signal<ElementRef<HTMLInputElement> | undefined>;\n protected abstract readonly validValue: Signal<boolean>;\n\n readonly focusInOverlay = signal(false).asReadonly();\n\n focus(): void {\n this.valueInput()?.nativeElement.focus();\n }\n\n protected valueEnter(): void {\n if (\n !this.definition().multiSelect &&\n (this.criterionValue().value || this.criterionValue().dateValue)\n ) {\n this.active.set(false);\n this.submitValue.emit();\n }\n }\n\n protected valueBackspace(): void {\n if (!this.valueInput()!.nativeElement.value) {\n this.backspaceOverflow.emit();\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n LOCALE_ID,\n signal,\n viewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n getDatepickerFormat,\n getNamedFormat,\n isValid,\n SiDatepickerDirective,\n SiDatepickerOverlayDirective\n} from '@siemens/element-ng/datepicker';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { getISODateString } from '../../si-filtered-search-helper';\nimport { SiFilteredSearchValueBase } from '../si-filtered-search-value.base';\n\n@Component({\n selector: 'si-filtered-search-date-value',\n imports: [DatePipe, FormsModule, SiDatepickerDirective, SiTranslatePipe],\n templateUrl: './si-filtered-search-date-value.component.html',\n styleUrl: './si-filtered-search-date-value.component.scss',\n providers: [\n { provide: SiFilteredSearchValueBase, useExisting: SiFilteredSearchDateValueComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFilteredSearchDateValueComponent extends SiFilteredSearchValueBase {\n private locale = inject(LOCALE_ID).toString();\n\n protected override readonly valueInput = viewChild<ElementRef<HTMLInputElement>>('valueInput');\n private readonly datepickerOverlay = viewChild(SiDatepickerOverlayDirective);\n\n protected readonly disableTime = signal(false);\n protected readonly shortDateFormat: string;\n\n override readonly focusInOverlay = computed(() => !!this.datepickerOverlay()?.isShown());\n readonly validFormat = computed(() => isValid(this.criterionValue().dateValue));\n // The information if the time is currently disabled is only present in the\n // current search criterion instance and not in the generic configuration.\n // So we need to merge the initial config with the current instance config.\n readonly dateConfig = computed(() => ({\n ...this.definition().datepickerConfig,\n disabledTime: this.disableTime()\n }));\n readonly dateFormat = computed(() => getDatepickerFormat(this.locale, this.dateConfig()));\n override readonly validValue = computed(() => {\n const dateConfig = this.dateConfig();\n const minDate = dateConfig?.minDate ?? false;\n const maxDate = dateConfig?.maxDate ?? false;\n const dateValue = this.criterionValue().dateValue ?? false;\n return (\n (!minDate || (minDate && dateValue && dateValue >= minDate)) &&\n (!maxDate || (maxDate && dateValue && dateValue <= maxDate))\n );\n });\n\n constructor() {\n super();\n this.shortDateFormat = getNamedFormat(this.locale, 'shortDate');\n if (!this.shortDateFormat.includes('yyyy')) {\n this.shortDateFormat = this.shortDateFormat.replace('yy', 'yyyy');\n }\n }\n\n protected valueDateSelect(date: Date): void {\n // In case the user type an illegal date into the date input,\n // our directive emits a new undefined value and keeps\n if (!date && this.criterionValue().dateValue) {\n date = new Date(this.criterionValue().dateValue!);\n }\n\n let value: string;\n const validationType = this.definition().validationType;\n if (validationType === 'date') {\n value = getISODateString(date, 'date', this.locale);\n } else if (validationType === 'date-time') {\n if (this.disableTime()) {\n value = getISODateString(date, 'date', this.locale);\n } else {\n value = getISODateString(date, 'date-time', this.locale);\n }\n }\n\n this.criterionValue.update(v => ({ ...v, value, dateValue: date }));\n }\n}\n","@let dateValue = criterionValue().dateValue;\n@if (!active()) {\n <div\n class=\"criterion-value-text focus-inside px-4\"\n [tabindex]=\"disabled() ? -1 : 0\"\n (keydown.enter)=\"editValue.emit()\"\n (click)=\"editValue.emit()\"\n >\n @if (!validFormat()) {\n <!-- DatePipe throws an error if the date is invalid, so we have to do it on our own. -->\n <!-- We may should have a better solution here. Ideally we would keep the broken string so that a user can fix it later. -->\n\n {{ dateValue?.toString() }}\n } @else if (!disableTime() || definition().validationType === 'date-time') {\n {{ dateValue | date: dateFormat() }}\n } @else {\n {{ dateValue | date: shortDateFormat }}\n }\n </div>\n} @else {\n <input\n #valueInput\n type=\"text\"\n siDatepicker\n class=\"px-4 py-0 border-0 focus-inside\"\n [attr.aria-label]=\"searchLabel() | translate\"\n [siDatepickerConfig]=\"dateConfig()\"\n [ngModel]=\"dateValue\"\n (keydown.backspace)=\"valueBackspace()\"\n (keydown.enter)=\"valueEnter()\"\n (siDatepickerDisabledTime)=\"disableTime.set($event)\"\n (ngModelChange)=\"valueDateSelect($event)\"\n />\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, viewChild } from '@angular/core';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiFilteredSearchValueBase } from '../si-filtered-search-value.base';\n\n@Component({\n selector: 'si-filtered-search-free-text',\n imports: [SiTranslatePipe],\n templateUrl: './si-filtered-search-free-text.component.html',\n styleUrl: './si-filtered-search-free-text.component.scss',\n providers: [\n { provide: SiFilteredSearchValueBase, useExisting: SiFilteredSearchFreeTextComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFilteredSearchFreeTextComponent extends SiFilteredSearchValueBase {\n protected readonly valueInput = viewChild<ElementRef<HTMLInputElement>>('freeTextInput');\n protected readonly validValue = computed(() => true);\n\n protected freeTextValueChange(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n this.criterionValue.update(v => ({ ...v, value: inputElement.value }));\n }\n\n protected override valueEnter(): void {\n this.active.set(false);\n this.submitValue.emit();\n }\n}\n","@if (!active()) {\n <div\n class=\"criterion-value-text focus-inside px-4\"\n [tabindex]=\"disabled() ? -1 : 0\"\n (keydown.enter)=\"editValue.emit()\"\n (click)=\"editValue.emit()\"\n >\n {{ criterionValue().value }}\n </div>\n} @else {\n <input\n #freeTextInput\n type=\"text\"\n class=\"px-4 py-0 border-0 focus-inside\"\n [attr.aria-label]=\"searchLabel() | translate\"\n [disabled]=\"disabled()\"\n [value]=\"criterionValue().value\"\n (input)=\"freeTextValueChange($event)\"\n (keydown.backspace)=\"valueBackspace()\"\n (keydown.enter)=\"valueEnter()\"\n (blur)=\"active.set(false)\"\n />\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { computed, DestroyRef, Directive, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectSiTranslateService } from '@siemens/element-translate-ng/translate';\nimport { BehaviorSubject, Observable, of, switchMap } from 'rxjs';\nimport { debounceTime, first, map, tap } from 'rxjs/operators';\n\nimport {\n InternalCriterionDefinition,\n toOptionCriteria,\n TypeaheadOptionCriterion\n} from '../si-filtered-search-helper';\nimport { OptionCriterion, OptionType } from '../si-filtered-search.model';\nimport { SiFilteredSearchValueBase } from './si-filtered-search-value.base';\n\n@Directive()\nexport abstract class SiFilteredSearchOptionValueBase extends SiFilteredSearchValueBase {\n readonly lazyValueProvider =\n input<(criterionName: string, typed: string | string[]) => Observable<OptionType[]>>();\n readonly searchDebounceTime = input.required<number>();\n readonly onlySelectValue = input.required<boolean>();\n readonly maxCriteriaOptions = input.required<number>();\n readonly optionsInScrollableView = input.required<number>();\n readonly disableSelectionByColonAndSemicolon = input.required<boolean>();\n readonly isStrictOrOnlySelectValue = input.required<boolean>();\n\n protected readonly inputChange = new BehaviorSubject('');\n\n private readonly destroyRef = inject(DestroyRef);\n protected readonly translateService = injectSiTranslateService();\n\n readonly inputType = computed(() =>\n this.definition().validationType === 'integer' || this.definition().validationType === 'float'\n ? 'number'\n : 'text'\n );\n readonly step = computed(() => (this.definition().validationType === 'integer' ? '1' : 'any'));\n readonly options = computed(() => this.buildOptions());\n override readonly validValue = computed(() => {\n const config = this.definition();\n if (!this.isStrictOrOnlySelectValue() && !config.strictValue && !config.onlySelectValue) {\n return true;\n }\n\n // TODO: this never worked with lazy options. We should fix that.\n // TODO: checking if options are empty is also questionable. Should be changed v47.\n return (\n (config.options?.length && this.hasOptionValue()) ||\n (!config.options?.length && !!this.criterionValue().value)\n );\n });\n\n protected buildOptions(): Observable<TypeaheadOptionCriterion[]> | undefined {\n let optionsStream: Observable<OptionCriterion[]> | undefined;\n if (this.lazyValueProvider()) {\n optionsStream = this.inputChange.pipe(\n debounceTime(this.searchDebounceTime()),\n takeUntilDestroyed(this.destroyRef),\n switchMap(value => {\n return this.lazyValueProvider()!(\n this.definition().name,\n // TODO: fix lazy loading for multi-select. Seems to be not needed, but it should work.\n this.definition().multiSelect ? '' : (value ?? '')\n ).pipe(\n map(options => toOptionCriteria(options)),\n tap(\n options =>\n ((this.definition() ?? ({} as InternalCriterionDefinition)).options = options)\n )\n );\n })\n );\n } else if (this.definition()) {\n optionsStream = of(toOptionCriteria(this.definition().options));\n }\n\n return optionsStream?.pipe(\n switchMap(options => {\n const keys: string[] = options.map(option => option.label!).filter(label => !!label);\n return this.translateService.translateAsync(keys).pipe(\n map(translations =>\n options.map(option => ({\n ...option,\n translatedLabel: translations[option.label!] ?? option.label ?? option.value\n }))\n )\n );\n })\n );\n }\n\n protected buildOptionValue(): void {\n if (this.criterionValue().value?.length) {\n // resolve options for initial values\n this.options()!\n .pipe(first())\n .subscribe(options => this.processTypeaheadOptions(options));\n }\n }\n\n protected abstract processTypeaheadOptions(value: TypeaheadOptionCriterion[]): void;\n protected abstract hasOptionValue(): boolean;\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n OnChanges,\n OnInit,\n signal,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { SiTypeaheadDirective, TypeaheadMatch } from '@siemens/element-ng/typeahead';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { BehaviorSubject, Observable, switchMap } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\n\nimport { selectOptions, TypeaheadOptionCriterion } from '../../si-filtered-search-helper';\nimport { OptionCriterion } from '../../si-filtered-search.model';\nimport { SiFilteredSearchOptionValueBase } from '../si-filtered-search-option-value.base';\nimport { SiFilteredSearchValueBase } from '../si-filtered-search-value.base';\n\n@Component({\n selector: 'si-filtered-search-multi-select',\n imports: [SiTranslatePipe, SiTypeaheadDirective],\n templateUrl: './si-filtered-search-multi-select.component.html',\n styleUrl: './si-filtered-search-multi-select.component.scss',\n providers: [\n { provide: SiFilteredSearchValueBase, useExisting: SiFilteredSearchMultiSelectComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFilteredSearchMultiSelectComponent\n extends SiFilteredSearchOptionValueBase\n implements OnChanges, OnInit\n{\n readonly itemCountText = input.required<TranslatableString>();\n protected override readonly valueInput = viewChild<ElementRef<HTMLInputElement>>('valueInput');\n protected readonly optionValue = signal<OptionCriterion[]>([]);\n protected readonly selectionChange = new BehaviorSubject<string[]>([]);\n\n readonly hasMultiSelections = computed(\n () => Array.isArray(this.criterionValue().value) && this.criterionValue().value!.length > 1\n );\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.criterionValue &&\n this.criterionValue().value?.length !== this.optionValue().length\n ) {\n this.optionValue.set([]);\n this.selectionChange.next([]);\n }\n }\n\n ngOnInit(): void {\n this.inputChange.next('');\n this.selectionChange.next(this.criterionValue().value as string[]);\n this.buildOptionValue();\n }\n\n protected valueTypeaheadSelect(match: TypeaheadMatch): void {\n const option = match.option as OptionCriterion;\n if (match.itemSelected) {\n this.criterionValue.update(v => ({ ...v, value: [...v.value!, option.value] }));\n this.optionValue.update(v => [...v, option]);\n } else {\n const value = this.criterionValue();\n if (typeof value.value !== 'string') {\n this.criterionValue.set({\n ...value,\n value: value.value?.filter(elem => elem !== option.value)\n });\n }\n this.optionValue.update(v => v.filter(elem => elem.value !== option.value));\n }\n this.selectionChange.next(this.criterionValue().value as string[]);\n }\n\n protected override buildOptions(): Observable<TypeaheadOptionCriterion[]> | undefined {\n const translatedOptions = super.buildOptions();\n return translatedOptions?.pipe(\n switchMap(options =>\n this.selectionChange!.pipe(\n tap(value => {\n selectOptions(options, value);\n }),\n map(() => options)\n )\n )\n );\n }\n\n protected processTypeaheadOptions(options: TypeaheadOptionCriterion[]): void {\n const value = this.criterionValue().value as string[];\n this.optionValue.set(\n options.filter(\n option =>\n value.includes(option.value) ||\n // TODO: remove this. I don't know why, but it seems like previously FS accepted labels as well\n value.includes(option.translatedLabel)\n )\n );\n // Sneaky patch the value.\n // We did not emit a change, as no user interaction happened.\n // We should consider dropping this, but there is currently a unit test checking this behavior.\n value.splice(0, value.length, ...this.optionValue().map(option => option.value));\n }\n\n protected hasOptionValue(): boolean {\n return !!this.optionValue().length;\n }\n}\n","@let value = criterionValue().value;\n@if (!active()) {\n <div\n class=\"criterion-value-text focus-inside px-4\"\n [tabindex]=\"disabled() ? -1 : 0\"\n (keydown.enter)=\"editValue.emit()\"\n (click)=\"editValue.emit()\"\n >\n @if (!!value && hasMultiSelections()) {\n {{ itemCountText() | translate: { itemCount: value.length } }}\n } @else if (optionValue()[0]) {\n {{ optionValue()[0].label ?? optionValue()[0].value | translate }}\n } @else {\n {{ value }}\n }\n </div>\n} @else {\n <input\n #valueInput\n typeaheadOptionField=\"translatedLabel\"\n class=\"px-4 py-0 border-0 focus-inside\"\n typeaheadScrollable\n typeaheadMultiSelect\n [type]=\"inputType()\"\n [step]=\"step()\"\n [siTypeahead]=\"options() ?? []\"\n [typeaheadMinLength]=\"0\"\n [typeaheadOptionsLimit]=\"maxCriteriaOptions()\"\n [readOnly]=\"onlySelectValue()\"\n [typeaheadOptionsInScrollableView]=\"optionsInScrollableView()\"\n [attr.aria-label]=\"searchLabel() | translate\"\n (keydown.backspace)=\"valueBackspace()\"\n (keydown.enter)=\"valueEnter()\"\n (typeaheadOnSelect)=\"valueTypeaheadSelect($event)\"\n (typeaheadOnInput)=\"inputChange.next($event)\"\n />\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n OnChanges,\n OnInit,\n signal,\n SimpleChanges,\n untracked,\n viewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SiTypeaheadDirective, TypeaheadMatch } from '@siemens/element-ng/typeahead';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { TypeaheadOptionCriterion } from '../../si-filtered-search-helper';\nimport { OptionCriterion } from '../../si-filtered-search.model';\nimport { SiFilteredSearchOptionValueBase } from '../si-filtered-search-option-value.base';\nimport { SiFilteredSearchValueBase } from '../si-filtered-search-value.base';\n\n@Component({\n selector: 'si-filtered-search-typeahead',\n imports: [SiTypeaheadDirective, FormsModule, SiTranslatePipe],\n templateUrl: './si-filtered-search-typeahead.component.html',\n styleUrl: './si-filtered-search-typeahead.component.scss',\n providers: [\n { provide: SiFilteredSearchValueBase, useExisting: SiFilteredSearchTypeaheadComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFilteredSearchTypeaheadComponent\n extends SiFilteredSearchOptionValueBase\n implements OnChanges, OnInit\n{\n protected override readonly valueInput = viewChild<ElementRef<HTMLInputElement>>('valueInput');\n protected readonly optionValue = signal<OptionCriterion | undefined>(undefined);\n\n // This must be a separate signal as it should only emit when the actual empty state changes.\n private readonly inputEmpty = computed(() => !this.criterionValue().value);\n\n // This MUST only be updated if the active state changes.\n // Otherwise, user values might be overridden.\n // It is only used to pass the initial input value if the user starts editing the input.\n readonly valueLabel = computed(() => {\n // This is needed for the clear button.\n // But we cannot subscribe to the value changes itself, as those would cause to many updates.\n if (this.inputEmpty()) {\n return '';\n }\n\n if (this.active()) {\n const option = untracked(() => this.optionValue());\n if (option) {\n return option.label ? this.translateService.translateSync(option.label) : option.value;\n } else {\n return untracked(() => this.criterionValue().value) as string;\n }\n }\n return '';\n });\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.criterionValue && this.criterionValue().value !== this.optionValue()?.value) {\n this.optionValue.set(undefined);\n }\n }\n\n ngOnInit(): void {\n this.inputChange.next((this.criterionValue().value as string) ?? '');\n this.buildOptionValue();\n }\n\n protected valueChange(newValue: string | string[]): void {\n if (typeof newValue === 'string') {\n const match = newValue.match(/(.+?);(.*)$/);\n let value: string;\n if (!this.disableSelectionByColonAndSemicolon() && match) {\n value = match[1];\n this.submitValue.emit({ freeText: match[2] });\n } else {\n value = newValue;\n }\n this.optionValue.set(undefined);\n this.criterionValue.update(v => ({ ...v, value }));\n this.inputChange.next(newValue);\n }\n }\n\n protected valueTypeaheadFullMatch(match: TypeaheadMatch): void {\n const option = match.option as TypeaheadOptionCriterion;\n this.optionValue.set(option);\n // Usually, we already emitted a change in onCriterionValueInputChange using the text entered by the user.\n // In case of a fullMatch, we should check if the value is different from label.\n // If it is different, we must emit another event using the value instead of the label.\n // TODO: prevent the emit of the label matching the option. This is currently not possible due to the order events.\n if (option.value !== option.translatedLabel) {\n this.criterionValue.update(v => ({ ...v, value: option.value }));\n }\n }\n\n protected valueTypeaheadSelect(match: TypeaheadMatch): void {\n this.valueTypeaheadFullMatch(match);\n this.submitValue.emit();\n }\n\n protected valueFilterKeys(event: KeyboardEvent): void {\n // In integer mode, no floating point numbers are allowed.\n // So we prevent the input of '.' or ','.\n if (\n this.definition().validationType === 'integer' &&\n (event.key === '.' || event.key === ',')\n ) {\n event.preventDefault();\n }\n }\n\n protected processTypeaheadOptions(options: TypeaheadOptionCriterion[]): void {\n this.optionValue.set(\n options.find(\n option =>\n option.value === this.criterionValue().value ||\n // TODO: remove this. I don't know why, but it seems like previously FS accepted labels as well\n option.translatedLabel === this.criterionValue().value\n )\n );\n // Sneaky patch the value.\n // We did not emit a change, as no user interaction happened.\n // We should consider dropping this, but there is currently a unit test checking this behavior.\n const optionValue = this.optionValue();\n if (optionValue) {\n this.criterionValue().value = optionValue.value;\n }\n }\n\n protected hasOptionValue(): boolean {\n return !!this.optionValue();\n }\n}\n","@let value = criterionValue().value;\n@if (!active()) {\n <div\n class=\"criterion-value-text focus-inside px-4\"\n [tabindex]=\"disabled() ? -1 : 0\"\n (keydown.enter)=\"editValue.emit()\"\n (click)=\"editValue.emit()\"\n >\n @let optionValue = this.optionValue();\n @if (optionValue) {\n {{ optionValue.label ?? optionValue.value | translate }}\n } @else {\n {{ value }}\n }\n </div>\n} @else {\n <input\n #valueInput\n typeaheadOptionField=\"translatedLabel\"\n class=\"px-4 py-0 border-0 focus-inside\"\n typeaheadScrollable\n [type]=\"inputType()\"\n [step]=\"step()\"\n [ngModel]=\"valueLabel()\"\n [siTypeahead]=\"options() ?? []\"\n [typeaheadProcess]=\"!onlySelectValue()\"\n [typeaheadMinLength]=\"0\"\n [typeaheadOptionsLimit]=\"maxCriteriaOptions()\"\n [typeaheadAutoSelectIndex]=\"value?.length ? 0 : -1\"\n [readOnly]=\"onlySelectValue() || definition().onlySelectValue\"\n [typeaheadOptionsInScrollableView]=\"optionsInScrollableView()\"\n [attr.aria-label]=\"searchLabel() | translate\"\n (keydown)=\"valueFilterKeys($event)\"\n (keydown.backspace)=\"valueBackspace()\"\n (keydown.enter)=\"valueEnter()\"\n (ngModelChange)=\"valueChange($event)\"\n (typeaheadOnFullMatch)=\"valueTypeaheadFullMatch($event)\"\n (typeaheadOnSelect)=\"valueTypeaheadSelect($event)\"\n />\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { CdkMonitorFocus, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n model,\n OnInit,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { elementCancel } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTypeaheadDirective } from '@siemens/element-ng/typeahead';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { Observable } from 'rxjs';\n\nimport { InternalCriterionDefinition } from './si-filtered-search-helper';\nimport { CriterionValue, OptionType } from './si-filtered-search.model';\nimport { SiFilteredSearchDateValueComponent } from './values/date-value/si-filtered-search-date-value.component';\nimport { SiFilteredSearchFreeTextComponent } from './values/free-text/si-filtered-search-free-text.component';\nimport { SiFilteredSearchMultiSelectComponent } from './values/multi-select/si-filtered-search-multi-select.component';\nimport { SiFilteredSearchValueBase } from './values/si-filtered-search-value.base';\nimport { SiFilteredSearchTypeaheadComponent } from './values/typeahead/si-filtered-search-typeahead.component';\n\n@Component({\n selector: 'si-filtered-search-value',\n imports: [\n CdkMonitorFocus,\n SiTypeaheadDirective,\n FormsModule,\n SiTranslatePipe,\n SiFilteredSearchDateValueComponent,\n SiFilteredSearchFreeTextComponent,\n SiFilteredSearchTypeaheadComponent,\n SiFilteredSearchMultiSelectComponent,\n SiIconComponent\n ],\n templateUrl: './si-filtered-search-value.component.html',\n styleUrl: './si-filtered-search-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFilteredSearchValueComponent implements OnInit {\n readonly value = model.required<CriterionValue>();\n readonly definition = input.required<InternalCriterionDefinition>();\n readonly disabled = input.required<boolean>();\n readonly onlySelectValue = input.required<boolean>();\n readonly maxCriteriaOptions = input.required<number>();\n readonly optionsInScrollableView = input.required<number>();\n readonly clearButtonLabel = input.required<TranslatableString>();\n readonly lazyValueProvider =\n input<(criterionName: string, typed: string | string[]) => Observable<OptionType[]>>();\n readonly searchDebounceTime = input.required<number>();\n readonly itemCountText = input.required<TranslatableString>();\n readonly disableSelectionByColonAndSemicolon = input.required<boolean>();\n readonly searchLabel = input.required<TranslatableString>();\n readonly invalidCriterion = input.required<boolean>();\n readonly isStrictOrOnlySelectValue = input.required<boolean>();\n readonly editOnCreation = input.required<boolean>();\n\n readonly deleteCriterion = output<{ triggerSearch: boolean } | void>();\n readonly submitCriterion = output<{ freeText: string } | void>();\n\n protected readonly active = signal<boolean>(false);\n protected readonly icons = addIcons({ elementCancel });\n\n private hasPendingFocus = false;\n\n private readonly operatorInput = viewChild<ElementRef<HTMLInputElement>>('operatorInput');\n private readonly valueInput = viewChild(SiFilteredSearchValueBase);\n\n readonly type = computed(() => {\n // Check if this is a free text criterion first\n const definition = this.definition();\n if (definition.type === 'free-text') {\n return 'free-text';\n }\n\n const validationType = definition.validationType;\n if (validationType === 'date' || validationType === 'date-time') {\n return 'date';\n }\n // Handle multi-select vs single-select for other validation types.\n return definition.multiSelect ? 'multi-select' : 'typeahead';\n });\n readonly selectedOperatorIndex = computed(() => {\n const operator = this.value().operator;\n const operators = this.definition().operators;\n if (!operator || !operators) {\n return -1;\n }\n\n return operators.findIndex(op => op.includes(operator));\n });\n readonly longestOperatorLength = computed(() => {\n const operators = this.definition().operators;\n if (!operators) {\n return 0;\n }\n return Math.max(...operators.map(a => a.length));\n });\n\n ngOnInit(): void {\n if (this.editOnCreation() && this.type() !== 'free-text') {\n this.edit();\n }\n }\n\n closeOverlay(): void {\n if (this.active()) {\n this.active.set(false);\n }\n }\n\n edit(field?: 'value' | 'operator'): void {\n this.active.set(true);\n this.hasPendingFocus = true;\n\n setTimeout(() => {\n if (field === 'value') {\n this.valueInput()?.focus();\n } else if (field === 'operator') {\n this.operatorInput()?.nativeElement.focus();\n } else {\n (this.operatorInput()?.nativeElement ?? this.valueInput())?.focus();\n }\n this.hasPendingFocus = false;\n });\n }\n\n protected backspaceOverflow(): void {\n const operatorInput = this.operatorInput()?.nativeElement;\n if (operatorInput) {\n operatorInput.focus();\n } else {\n this.deleteCriterion.emit();\n }\n }\n\n protected focusChange(focusOrigin: FocusOrigin): void {\n if (this.hasPendingFocus) {\n return;\n }\n setTimeout(() => {\n // We need to wait for the overlay, that might be shown and now close as well on onside click.\n if (this.active() && !focusOrigin && !this.valueInput()?.focusInOverlay()) {\n this.active.set(false);\n }\n });\n }\n\n protected operatorUpdate(operator: string): void {\n this.value.update(value => ({ ...value, operator }));\n }\n\n protected operatorBackspace(): void {\n if (!this.operatorInput()?.nativeElement.value) {\n this.deleteCriterion.emit();\n }\n }\n\n protected operatorEnter(): void {\n this.valueInput()!.focus();\n }\n\n protected operatorBlur(): void {\n const operators = this.definition().operators;\n if (operators && !operators.includes(this.value().operator!)) {\n this.operatorUpdate(operators.includes('=') ? '=' : operators[0]);\n }\n }\n\n protected clear(): void {\n if (!this.active() || !this.value().value?.length) {\n this.deleteCriterion.emit({ triggerSearch: true });\n return;\n }\n\n this.value.update(v => ({\n ...v,\n dateValue: undefined,\n value: this.definition().multiSelect ? [] : ''\n }));\n }\n\n protected freeTextActiveChange(value: boolean): void {\n if (!value && !this.value().value) {\n this.deleteCriterion.emit({ triggerSearch: true });\n }\n }\n}\n","<div\n cdkMonitorSubtreeFocus\n class=\"criteria pill-group\"\n [class.disabled]=\"disabled()\"\n [attr.aria-disabled]=\"disabled()\"\n [class.invalid-criterion]=\"invalidCriterion()\"\n (cdkFocusChange)=\"focusChange($event)\"\n>\n @if (type() !== 'free-text') {\n <div class=\"pill pill-interactive criterion-label si-h5\" (click)=\"edit()\">\n {{ definition().label | translate }}\n </div>\n }\n @if (definition().operators?.length) {\n <div class=\"pill pill-interactive px-0 criterion-operator-section\">\n <!-- criterion operator input -->\n @if (active()) {\n <input\n #operatorInput\n type=\"text\"\n class=\"focus-inside operator-input py-0 border-0\"\n [siTypeahead]=\"definition().operators!\"\n [typeaheadProcess]=\"false\"\n [typeaheadAutoSelectIndex]=\"selectedOperatorIndex()\"\n [typeaheadMinLength]=\"0\"\n [typeaheadOptionsLimit]=\"0\"\n [readOnly]=\"false\"\n [typeaheadScrollable]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionsInScrollableView()\"\n [attr.aria-label]=\"searchLabel() | translate\"\n [attr.size]=\"longestOperatorLength()\"\n [ngModel]=\"value().operator\"\n (ngModelChange)=\"operatorUpdate($event)\"\n (keydown.backspace)=\"operatorBackspace()\"\n (keydown.enter)=\"operatorEnter()\"\n (typeaheadOnSelect)=\"operatorEnter()\"\n (blur)=\"operatorBlur()\"\n />\n } @else {\n <!-- criterion operator field -->\n <div\n class=\"criterion-operator-text px-2 focus-inside\"\n [tabindex]=\"!disabled() ? 0 : -1\"\n (keydown.enter)=\"edit('operator')\"\n (click)=\"edit('operator')\"\n >\n {{ value().operator }}\n </div>\n }\n </div>\n }\n @switch (type()) {\n @case ('free-text') {\n <si-filtered-search-free-text\n [definition]=\"definition()\"\n [disabled]=\"disabled()\"\n [searchLabel]=\"searchLabel()\"\n [(active)]=\"active\"\n [(criterionValue)]=\"value\"\n (backspaceOverflow)=\"backspaceOverflow()\"\n (editValue)=\"edit('value')\"\n (submitValue)=\"submitCriterion.emit($event)\"\n (activeChange)=\"freeTextActiveChange($event)\"\n />\n }\n @case ('date') {\n <si-filtered-search-date-value\n [definition]=\"definition()\"\n [disabled]=\"disabled()\"\n [searchLabel]=\"searchLabel()\"\n [(active)]=\"active\"\n [(criterionValue)]=\"value\"\n (backspaceOverflow)=\"backspaceOverflow()\"\n (editValue)=\"edit('value')\"\n (submitValue)=\"submitCriterion.emit($event)\"\n />\n }\n @case ('multi-select') {\n <si-filtered-search-multi-select\n [definition]=\"definition()\"\n [disabled]=\"disabled()\"\n [searchLabel]=\"searchLabel()\"\n [searchDebounceTime]=\"searchDebounceTime()\"\n [onlySelectValue]=\"onlySelectValue()\"\n [optionsInScrollableView]=\"optionsInScrollableView()\"\n [maxCriteriaOptions]=\"maxCriteriaOptions()\"\n [lazyValueProvider]=\"lazyValueProvider()\"\n [itemCountText]=\"itemCountText()\"\n [isStrictOrOnlySelectValue]=\"isStrictOrOnlySelectValue()\"\n [disableSelectionByColonAndSemicolon]=\"disableSelectionByColonAndSemicolon()\"\n [(active)]=\"active\"\n [(criterionValue)]=\"value\"\n (backspaceOverflow)=\"backspaceOverflow()\"\n (editValue)=\"edit('value')\"\n (submitValue)=\"submitCriterion.emit($event)\"\n />\n }\n @case ('typeahead') {\n <si-filtered-search-typeahead\n [definition]=\"definition()\"\n [disabled]=\"disabled()\"\n [searchLabel]=\"searchLabel()\"\n [searchDebounceTime]=\"searchDebounceTime()\"\n [onlySelectValue]=\"onlySelectValue()\"\n [optionsInScrollableView]=\"optionsInScrollableView()\"\n [maxCriteriaOptions]=\"maxCriteriaOptions()\"\n [lazyValueProvider]=\"lazyValueProvider()\"\n [isStrictOrOnlySelectValue]=\"isStrictOrOnlySelectValue()\"\n [disableSelectionByColonAndSemicolon]=\"disableSelectionByColonAndSemicolon()\"\n [(active)]=\"active\"\n [(criterionValue)]=\"value\"\n (backspaceOverflow)=\"backspaceOverflow()\"\n (editValue)=\"edit('value')\"\n (submitValue)=\"submitCriterion.emit($event)\"\n />\n }\n }\n <div class=\"pill px-0 ms-n1\">\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-ghost focus-inside\"\n [attr.aria-label]=\"clearButtonLabel() | translate\"\n [disabled]=\"disabled()\"\n (click)=\"clear()\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <si-icon [icon]=\"icons.elementCancel\" />\n </button>\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n LOCALE_ID,\n model,\n OnChanges,\n OnInit,\n output,\n signal,\n SimpleChanges,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { elementCancel, elementSearch } from '@siemens/element-icons';\nimport { BackgroundColorVariant, isRTL } from '@siemens/element-ng/common';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTypeaheadDirective, TypeaheadOption } from '@siemens/element-ng/typeahead';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t,\n TranslatableString\n} from '@siemens/element-translate-ng/translate';\nimport { BehaviorSubject, Observable, Subject, switchMap } from 'rxjs';\nimport { debounceTime, map } from 'rxjs/operators';\n\nimport {\n differenceByName,\n getISODateString,\n InternalCriterionDefinition,\n toInternalCriteria\n} from './si-filtered-search-helper';\nimport { SiFilteredSearchValueComponent } from './si-filtered-search-value.component';\nimport {\n CriterionDefinition,\n CriterionValue,\n DisplayedCriteriaEventArgs,\n OptionType,\n SearchCriteria\n} from './si-filtered-search.model';\n\n@Component({\n selector: 'si-filtered-search',\n imports: [\n FormsModule,\n SiIconComponent,\n SiTypeaheadDirective,\n SiTranslatePipe,\n SiFilteredSearchValueComponent\n ],\n templateUrl: './si-filtered-search.component.html',\n styleUrl: './si-filtered-search.component.scss',\n host: {\n '[class.disabled]': 'disabled()',\n '[class.dark-background]': \"colorVariant() === 'base-0'\"\n }\n})\nexport class SiFilteredSearchComponent implements OnInit, OnChanges {\n private static readonly criterionRegex = /(.+?):(.*)$/;\n\n /**\n * Output callback event that provides an object describing the\n * selected criteria and additional filter text.\n */\n readonly doSearch = output<SearchCriteria>();\n /**\n * If this is set to `true`, the search triggers for each input (implicit search).\n * By default, the search is triggered when the user submits by pressing the\n * search button or by pressing enter.\n *\n * @defaultValue false\n */\n readonly doSearchOnInputChange = input(false, {\n transform: booleanAttribute\n });\n /**\n * In addition to lazy loaded value, you can also lazy load the criteria itself\n */\n readonly lazyCriterionProvider =\n input<(typed: string, searchCriteria?: SearchCriteria) => Observable<CriterionDefinition[]>>();\n /**\n * In many cases, your application defines the criteria, but the values need\n * to be loaded from a server. In this case you can provide a function that\n * returns the possible criterion options as an Observable.\n */\n readonly lazyValueProvider =\n input<(criterionName: string, typed: string | string[]) => Observable<OptionType[]>>();\n /**\n * Disable any interactivity.\n *\n * @defaultValue false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n /**\n * Limit criteria to the predefined ones.\n *\n * @defaultValue false\n */\n readonly strictCriterion = input(false, { transform: booleanAttribute });\n\n /**\n * Limit criterion options to the predefined ones. `[strictValue]`\n * enforces `[strictCriterion]` to true automatically.\n *\n * @defaultValue false\n */\n readonly strictValue = input(false, { transform: booleanAttribute });\n\n /**\n * Limit criterion options to the predefined ones and prevent typing. `[onlySelectValue]`\n * enforces `[strictValue]` and `[strictCriterion]` to true automatically.\n *\n * @defaultValue false\n */\n readonly onlySelectValue = input(false, { transform: booleanAttribute });\n\n /**\n * Custom debounce time for lazy loading of criteria data.\n *\n * @defaultValue 500\n */\n readonly lazyLoadingDebounceTime = input(500);\n /**\n * Custom debounce time (in mills) to delay the search emission.\n * (Default is 0 as in most cases a users manually triggers a search.\n * Recommended to increase a bit when using doSearchOnInputChange=true)\n *\n * @defaultValue 0\n */\n readonly searchDebounceTime = input(0);\n\n /**\n * The placeholder for input field.\n *\n * @defaultValue ''\n */\n readonly placeholder = input('');\n\n /**\n * Defines the number of criteria, criteria values and operators visible at once.\n *\n * @defaultValue 10\n */\n readonly optionsInScrollableView = input(10);\n\n /**\n * The current selected search criteria and entered search text.\n *\n * @defaultValue\n * ```\n * { criteria: [], value: '' }\n * ```\n */\n readonly searchCriteria = model<SearchCriteria>({ criteria: [], value: '' });\n /**\n * Predefine criteria options.\n *\n * @defaultValue []\n */\n readonly criteria = input<CriterionDefinition[]>([]);\n /**\n * Opt-in to search for each criterion only once.\n *\n * @defaultValue false\n */\n readonly exclusiveCriteria = input(false, {\n transform: booleanAttribute\n });\n\n /**\n * Limit the number of possible criteria. The default is undefined so that any number of criteria can be used.\n * For example, setting the value to 1 let you only select one criterion that you need to remove before being\n * able to set another one.\n *\n * @defaultValue undefined\n */\n readonly maxCriteria = input<number | undefined>(undefined);\n /**\n * Defines the maximum options within one criterion. The default is 20 and 0 means unlimited.\n *\n * @defaultValue 20\n */\n readonly maxCriteriaOptions = input(20);\n /**\n * Search input aria label, Needed by a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_FILTERED_SEARCH.SEARCH:Search`)\n * ```\n */\n readonly searchLabel = input(t(() => $localize`:@@SI_FILTERED_SEARCH.SEARCH:Search`));\n\n /**\n * Clear button aria label. Needed for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_FILTERED_SEARCH.CLEAR:Clear`)\n * ```\n */\n readonly clearButtonLabel = input(t(() => $localize`:@@SI_FILTERED_SEARCH.CLEAR:Clear`));\n\n /**\n * The accessible label of the search button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_FILTERED_SEARCH.SUBMIT_BUTTON:Submit search`)\n * ```\n */\n readonly submitButtonLabel = input(\n t(() => $localize`:@@SI_FILTERED_SEARCH.SUBMIT_BUTTON:Submit search`)\n );\n /**\n * Items count text appended to the count in case of multi-selection of values.\n * Translation key, `{{itemCount}}` in the translation will be replaced with the actual value.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_FILTERED_SEARCH.ITEM_COUNT:{{itemCount}} items`)\n * ```\n */\n readonly itemCountText = input<TranslatableString>(\n t(() => $localize`:@@SI_FILTERED_SEARCH.ITEM_COUNT:{{itemCount}} items`)\n );\n /**\n * Color variant to determine component background\n *\n * @defaultValue 'base-1'\n */\n readonly colorVariant = input<BackgroundColorVariant>('base-1');\n /**\n * Disables the free text search to only use the criterion for filtering.\n *\n * @defaultValue false\n */\n readonly disableFreeTextSearch = input(false, { transform: booleanAttribute });\n /**\n * Limit on the number of criteria/criteria value to be displayed by the typeahead\n *\n * @defaultValue 20\n */\n readonly typeaheadOptionsLimit = input(20);\n /**\n * By default, the Filtered Search will treat `:` as a special character\n * to submit the current input in the freetext and immediately create a criterion.\n * Use this input to disable this behavior.\n *\n * @defaultValue false\n */\n readonly disableSelectionByColonAndSemicolon = input(false, { transform: booleanAttribute });\n /**\n * Criterion definition for free-text pills.\n * When set, free-text values will be added as a pill with this criterion.\n * If not set, free-text pills are disabled.\n *\n * Enabling this will only emit valueChange events when the free-text pill is created.\n * When the text input is blurred and there is text inside, a free-text pill will be created.\n *\n *\n * @experimental\n */\n readonly freeTextCriterion = input<CriterionDefinition>();\n /**\n * The value to be shown for creating free-text pills.\n * Use the `{{query}}` placeholder to show the user input in the label.\n *\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_FILTERED_SEARCH.SEARCH_FOR_FREE_TEXT:Search for \"{{query}}\"`)\n * ```\n *\n * @experimental\n */\n readonly searchForFreeTextLabel = input(\n t(() => $localize`:@@SI_FILTERED_SEARCH.SEARCH_FOR_FREE_TEXT:Search for \"{{query}}\"`)\n );\n\n /**\n * The interceptor is called when the list of criteria is shown as soon as the user starts typing in the input field.\n * The interceptor's {@link DisplayedCriteriaEventArgs.allow} method can be used to filter the list of displayed criteria.\n *\n * **Note:** The interceptor is called as long as the {@link searchCriteria} does not exceed {@link maxCriteria}.\n * Further, the interceptor is not called when using the {@link lazyCriterionProvider}.\n *\n * @example\n * ```\n * <si-filtered-search\n * [criteria]=\"[{ name: 'foo', label: 'Foo' }, { name: 'bar', label: 'Bar' }]\"\n * (interceptDisplayedCriteria)=\"$event.allow(\n * $event.searchCriteria.criteria.some(s => s.name === 'foo')\n * ? $event.criteria.filter(c => c !== 'foo')\n * : $event.criteria\n * )\">\n * </si-filtered-search>\n * ```\n */\n readonly interceptDisplayedCriteria = output<DisplayedCriteriaEventArgs>();\n\n private readonly freeTextInputElement =\n viewChild.required<ElementRef<HTMLInputElement>>('freeTextInputElement');\n\n private readonly scrollContainer = viewChild.required('scrollContainer', { read: ElementRef });\n\n private readonly valueComponents = viewChildren(SiFilteredSearchValueComponent);\n protected dataSource: Observable<InternalCriterionDefinition[]>;\n\n protected autoEditCriteria = false;\n protected readonly values = signal<\n { config: InternalCriterionDefinition; value: CriterionValue }[]\n >([]);\n protected readonly searchValue = signal('');\n /** Internal criteria model */\n protected internalCriterionDefinitions: InternalCriterionDefinition[] = [];\n\n protected readonly icons = addIcons({ elementCancel, elementSearch });\n /** Used to trigger a renewed search */\n private typeaheadInputChange = new BehaviorSubject<string>('');\n /** Used to debounce the Search emissions */\n private searchEmitQueue = new Subject<SearchCriteria | undefined>();\n private readonly destroyRef = inject(DestroyRef);\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly translateService = injectSiTranslateService();\n private readonly locale = inject(LOCALE_ID).toString();\n\n protected readonly allowFreeTextCache = signal<boolean>(true);\n // Angular also calls ngOnChanges if we emitted a change and then two-way-databinding writes back our own change.\n // We use this to ensure that we do not write our own change back to the input.\n\n private lastEmittedSearchCriteria?: SearchCriteria;\n\n protected readonly isStrictOrOnlySelectValue = computed(() => {\n return this.strictValue() || this.onlySelectValue();\n });\n\n private readonly strictCriterionOrValue = computed(() => {\n return this.strictCriterion() || this.isStrictOrOnlySelectValue();\n });\n\n private readonly lazyLoadedCriteria = signal<CriterionDefinition[] | undefined>(undefined);\n private readonly loadedCriteria = computed(() => {\n const lazyLoadedCriteria = this.lazyLoadedCriteria();\n if (lazyLoadedCriteria) {\n return lazyLoadedCriteria;\n } else {\n return this.criteria() ?? [];\n }\n });\n\n private readonly internalFreeTextCriterion = computed<InternalCriterionDefinition | undefined>(\n () => {\n const freeTextDef = this.freeTextCriterion();\n if (!freeTextDef) {\n return undefined;\n }\n return {\n ...freeTextDef,\n label: freeTextDef.label ?? freeTextDef.name,\n translatedLabel: freeTextDef.label ?? freeTextDef.name,\n type: 'free-text'\n };\n }\n );\n\n constructor() {\n const criteriaRestrictions = toObservable(\n computed(() => ({\n maxCriteria: this.maxCriteria(),\n values: this.values(),\n exclusiveCriteria: this.exclusiveCriteria()\n }))\n );\n\n this.dataSource = toObservable(this.lazyCriterionProvider).pipe(\n switchMap(lazyCriterionProvider => {\n if (lazyCriterionProvider) {\n return this.typeaheadInputChange.pipe(\n switchMap(value =>\n this.lazyCriterionProvider()!(value, this.searchCriteria()).pipe(\n debounceTime(this.lazyLoadingDebounceTime()),\n map(result => this.getCriteriaToDisplayFromSubscription(result))\n )\n )\n );\n } else {\n return criteriaRestrictions.pipe(\n map(({ maxCriteria, values, exclusiveCriteria }) =>\n this.getFilteredTypeaheadCriteria(maxCriteria, values, exclusiveCriteria)\n )\n );\n }\n }),\n switchMap(criteria => {\n return this.translateService.translateAsync(criteria.map(c => c.label)).pipe(\n map(translations => {\n criteria.forEach(c => (c.translatedLabel = translations[c.label] ?? c.label ?? c.name));\n return criteria;\n })\n );\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.criteria) {\n this.initCriteria();\n }\n if (\n (changes.searchCriteria && this.searchCriteria() !== this.lastEmittedSearchCriteria) ||\n changes.criteria\n ) {\n this.initValue();\n // Update typeahead since the criteria input can change while the free text input is focused.\n // This is necessary since the criteria are set as a result of an API call response.\n this.typeaheadInputChange.next(this.freeTextInputElement().nativeElement.value ?? '');\n }\n }\n\n ngOnInit(): void {\n if (this.strictCriterionOrValue() && this.internalCriterionDefinitions.length === 0) {\n throw new Error('strict criterion mode activated without predefined criteria!');\n }\n\n this.searchEmitQueue\n .pipe(debounceTime(this.searchDebounceTime()), takeUntilDestroyed(this.destroyRef))\n .subscribe(searchCriteria => this.doSearch.emit(searchCriteria!));\n }\n\n private initCriteria(): void {\n this.internalCriterionDefinitions = this.loadedCriteria().map(c => toInternalCriteria(c));\n }\n\n /**\n * Finds a criterion config for a given criterion value.\n * Checks internalCriterionDefinitions first, then freeTextCriterion.\n * Returns undefined if no config was found.\n */\n private findCriterionConfig(\n criterionValue: CriterionValue\n ): InternalCriterionDefinition | undefined {\n const config = this.internalCriterionDefinitions.find(ic => ic.name === criterionValue.name);\n\n if (config) {\n return config;\n }\n\n // Check if this matches the freeTextCriterion\n const freeTextDef = this.internalFreeTextCriterion();\n if (freeTextDef?.name === criterionValue.name) {\n return freeTextDef;\n }\n\n return undefined;\n }\n\n private initValue(): void {\n this.autoEditCriteria = false;\n this.searchValue.set(this.searchCriteria()?.value ?? '');\n this.values.set(\n this.searchCriteria()?.criteria.map(c => {\n const config =\n this.findCriterionConfig(c) ??\n ({\n name: c.name,\n label: c.name,\n translatedLabel: c.name\n } as InternalCriterionDefinition);\n\n let value = c.value ?? '';\n // Fix input, in case the user provided the value as string for the multi-select use case.\n if (config.multiSelect && typeof value === 'string') {\n value = value !== '' ? [value] : [];\n }\n\n let dateValue: Date | undefined;\n if (config.validationType === 'date' || config.validationType === 'date-time') {\n dateValue = value ? new Date(value.toString()) : new Date();\n value ??= getISODateString(\n dateValue,\n config.validationType === 'date' || config.datepickerConfig?.disabledTime\n ? 'date'\n : 'date-time',\n this.locale\n );\n }\n\n return {\n value: {\n name: c.name,\n value,\n ...(dateValue ? { dateValue } : {}),\n ...(c.operator ? { operator: c.operator } : {})\n },\n config\n };\n }) ?? []\n );\n this.lastEmittedSearchCriteria = this.searchCriteria();\n }\n\n /**\n * Deletes all currently selected criteria and effectively resets the filtered search.\n */\n deleteAllCriteria(event?: MouseEvent): void {\n if (this.disabled()) {\n return;\n }\n event?.stopPropagation();\n\n // Reset search criteria\n this.values.set([]);\n this.searchValue.set('');\n this.emitChangeEvent();\n this.typeaheadInputChange.next(this.searchValue());\n this.submit();\n }\n\n protected deleteCriterion(index: number, event: { triggerSearch: boolean } | void): void {\n if (this.disabled()) {\n return;\n }\n\n // Close any active overlays before deleting the criterion\n // This could happen in case when user has opened a multiselect pill\n // and then clicks on clear button of other pill.\n this.valueComponents().forEach(component => {\n component.closeOverlay();\n });\n this.cdRef.detectChanges();\n\n this.values.update(v => v.filter((_, i) => i !== index));\n this.emitChangeEvent();\n if (this.values().length !== index) {\n this.valueComponents()[index + 1].edit('value');\n } else {\n this.freeTextInputElement().nativeElement.focus();\n }\n this.typeaheadInputChange.next(this.searchValue());\n if (event?.triggerSearch) {\n this.submit();\n }\n }\n\n protected submit(): void {\n if (!this.doSearchOnInputChange()) {\n this.doSearch.emit(this.searchCriteria()!);\n }\n }\n\n protected typeaheadOnSelectCriterion(event: TypeaheadOption): void {\n const criterion = event as InternalCriterionDefinition;\n // Removes the focus border before creating a new criterion to prevent the impression of jumping content.\n this.freeTextInputElement().nativeElement.blur();\n this.addCriterion(criterion);\n // The user selected a criterion so we remove the free text search value and add the criterion.\n this.typeaheadInputChange.next('');\n this.searchValue.set('');\n }\n\n protected validateCriterionLabel(criterion: InternalCriterionDefinition): boolean {\n if (!this.strictCriterionOrValue()) {\n return true;\n }\n return this.internalCriterionDefinitions.includes(criterion);\n }\n\n /**\n * Converts the internally used data model to the external model.\n * In case options for Criterion is Option[] map to the value from the label.\n */\n private convertToExternalModel(): SearchCriteria {\n const correctedCriteria: SearchCriteria = {\n value: this.searchValue(),\n criteria: this.values().map(v => v.value)\n };\n // When free text search is disabled or free text pills are being used,\n // we must not return any free text value.\n if (this.disableFreeTextSearch() || this.freeTextCriterion()) {\n correctedCriteria.value = '';\n }\n return correctedCriteria;\n }\n\n private addCriterion(config: InternalCriterionDefinition, value?: string): void {\n if (config.multiSelect) {\n this.values.update(v => [...v, { value: { value: [], name: config.name }, config }]);\n } else if (config.validationType === 'date' || config.validationType === 'date-time') {\n const validationType = config.validationType;\n this.values.update(v => [\n ...v,\n {\n value: {\n dateValue: new Date(),\n value: getISODateString(new Date(), validationType, this.locale),\n name: config.name\n },\n config\n }\n ]);\n } else {\n this.values.update(v => [...v, { value: { value: value ?? '', name: config.name }, config }]);\n }\n\n this.autoEditCriteria = true;\n this.emitChangeEvent();\n }\n\n /**\n * Get criteria list to be shown in typeahead.\n * @returns list of criteria to be shown in typeahead.\n */\n private getFilteredTypeaheadCriteria(\n maxCriteria: number | undefined,\n values: { config: InternalCriterionDefinition; value: CriterionValue }[],\n exclusiveCriteria: boolean\n ): InternalCriterionDefinition[] {\n if (maxCriteria === undefined || values.length < maxCriteria) {\n const allowedCriteria = !exclusiveCriteria\n ? this.internalCriterionDefinitions\n : differenceByName(this.internalCriterionDefinitions, values);\n\n let allowedCriteriaCache: string[] | undefined;\n if (allowedCriteria.length > 0) {\n // Call interceptor to allow applications to customize the list of available criteria\n const available = allowedCriteria.map(c => c.name);\n // Ensure that all entries are allowed in case the consumer doesn't use the allow callback\n allowedCriteriaCache = available;\n this.interceptDisplayedCriteria.emit({\n criteria: available,\n searchCriteria: this.convertToExternalModel(),\n allow: (criteriaNamesToDisplay, allowFreeTextSearch) => {\n if (criteriaNamesToDisplay) {\n allowedCriteriaCache = criteriaNamesToDisplay;\n }\n if (allowFreeTextSearch !== undefined) {\n this.allowFreeTextCache.set(allowFreeTextSearch);\n }\n }\n });\n }\n\n return allowedCriteria.filter(c => allowedCriteriaCache?.includes(c.name));\n } else {\n return [];\n }\n }\n\n private getCriteriaToDisplayFromSubscription(\n result: CriterionDefinition[]\n ): InternalCriterionDefinition[] {\n this.lazyLoadedCriteria.set(result);\n this.internalCriterionDefinitions = this.loadedCriteria().map(c => toInternalCriteria(c));\n // It's necessary to update the criteria configuration since consuming applications may change the options.\n // A common case are criteria which depend on each other like Country, Site and Building. If the user change\n // the site the building options might become invalid.\n // KEEP THE REFERENCE, otherwise CD is broken\n this.values.update(currentValues =>\n currentValues.map(v =>\n Object.assign(v, {\n value: v.value,\n config: this.findCriterionConfig(v.value) ?? v.config\n })\n )\n );\n\n if (this.maxCriteria() === undefined || this.values().length < this.maxCriteria()!) {\n return !this.exclusiveCriteria()\n ? this.internalCriterionDefinitions\n : differenceByName(this.internalCriterionDefinitions, this.values());\n }\n\n return [];\n }\n\n protected freeTextFocus(): void {\n // Ensure that the free text input is fully visible in the scroll container\n const scrollDirection = isRTL() ? -1 : 1;\n const position = scrollDirection * this.scrollContainer().nativeElement.scrollWidth;\n this.scrollContainer().nativeElement.scrollLeft = position;\n this.typeaheadInputChange.next(this.freeTextInputElement().nativeElement.value);\n }\n\n protected freeTextBackspace(event: Event): void {\n if (!(event.target as HTMLInputElement).value) {\n // edit last criterion if a user presses backspace in empty search input.\n const valueComponents = this.valueComponents();\n if (valueComponents.length) {\n valueComponents[valueComponents.length - 1].edit('value');\n }\n }\n }\n\n protected freeTextInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n\n const match = value.match(SiFilteredSearchComponent.criterionRegex);\n if (!this.disableSelectionByColonAndSemicolon() && !this.onlySelectValue() && match) {\n const criterionName = match[1];\n if (this.searchValue() === '') {\n // The value was empty before, so we must make angular detect a change here.\n // Otherwise, the entire value which was pasted will remain in the input.\n // This happens if the user pasts something like: 'key:value'\n this.searchValue.set(value);\n this.cdRef.detectChanges();\n }\n this.searchValue.set('');\n\n const nameLowerCase = criterionName.toLocaleLowerCase();\n const criterion = this.internalCriterionDefinitions.find(\n ic => ic.translatedLabel.toLocaleLowerCase() === nameLowerCase\n ) ?? {\n name: criterionName,\n label: criterionName,\n translatedLabel: criterionName\n };\n\n this.typeaheadInputChange.next('');\n this.addCriterion(criterion, match[2]);\n } else {\n this.searchValue.set(value);\n\n // Only emit a change event if free text pills are not enabled and the free text search is enabled.\n if (!this.disableFreeTextSearch() && !this.freeTextCriterion()) {\n this.emitChangeEvent();\n }\n\n this.typeaheadInputChange.next(value);\n }\n }\n\n protected freeTextBlur(): void {\n queueMicrotask(() => {\n if (this.freeTextCriterion() && this.searchValue().length > 0) {\n this.createFreeTextPill(this.searchValue());\n }\n });\n }\n\n protected valueChange(\n value: CriterionValue,\n criterion: { config: InternalCriterionDefinition; value: CriterionValue }\n ): void {\n criterion.value = value;\n this.emitChangeEvent();\n }\n\n protected focusNext(index: number, event: { freeText: string } | void): void {\n const next = this.valueComponents()[index + 1];\n if (next) {\n next.edit();\n } else {\n this.searchValue.set(event?.freeText ?? this.searchValue());\n this.freeTextInputElement().nativeElement.focus();\n }\n }\n\n private updateAndEmitSearchCriteria(): void {\n this.searchCriteria.set(this.convertToExternalModel());\n this.lastEmittedSearchCriteria = this.searchCriteria();\n }\n\n private emitChangeEvent(): void {\n this.updateAndEmitSearchCriteria();\n if (this.doSearchOnInputChange()) {\n this.searchEmitQueue.next(this.searchCriteria());\n }\n }\n\n protected createFreeTextPill(query: string): void {\n const freeTextDefinition = this.internalFreeTextCriterion();\n const maxCriteria = this.maxCriteria();\n if (!freeTextDefinition || (maxCriteria && this.values().length >= maxCriteria)) {\n return;\n }\n this.values.update(v => [\n ...v,\n {\n value: {\n name: freeTextDefinition.name,\n value: query\n },\n config: freeTextDefinition\n }\n ]);\n this.searchValue.set('');\n this.emitChangeEvent();\n }\n}\n","<div\n #scrollContainer\n class=\"search-container d-flex align-items-center overflow-auto py-2 w-100 ps-2 pe-2\"\n>\n @for (criterion of values(); track criterion) {\n <si-filtered-search-value\n [editOnCreation]=\"autoEditCriteria\"\n [definition]=\"criterion.config\"\n [value]=\"criterion.value\"\n [invalidCriterion]=\"!validateCriterionLabel(criterion.config)\"\n [disabled]=\"disabled()\"\n [clearButtonLabel]=\"clearButtonLabel()\"\n [disableSelectionByColonAndSemicolon]=\"disableSelectionByColonAndSemicolon()\"\n [isStrictOrOnlySelectValue]=\"isStrictOrOnlySelectValue()\"\n [itemCountText]=\"itemCountText()\"\n [lazyValueProvider]=\"lazyValueProvider()\"\n [maxCriteriaOptions]=\"maxCriteriaOptions()\"\n [optionsInScrollableView]=\"optionsInScrollableView()\"\n [searchLabel]=\"searchLabel()\"\n [onlySelectValue]=\"onlySelectValue()\"\n [searchDebounceTime]=\"searchDebounceTime()\"\n (submitCriterion)=\"focusNext($index, $event)\"\n (deleteCriterion)=\"deleteCriterion($index, $event)\"\n (valueChange)=\"valueChange($event, criterion)\"\n />\n }\n <!-- criterion input -->\n <input\n #freeTextInputElement\n type=\"text\"\n class=\"value-input ps-2 me-2 flex-grow-1\"\n typeaheadOptionField=\"translatedLabel\"\n typeaheadClearValueOnSelect\n [siTypeahead]=\"dataSource\"\n [typeaheadMinLength]=\"0\"\n [typeaheadOptionsLimit]=\"typeaheadOptionsLimit()\"\n [typeaheadScrollable]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionsInScrollableView()\"\n [typeaheadAutoSelectIndex]=\"searchValue() ? 0 : -1\"\n [typeaheadCreateOption]=\"\n freeTextCriterion() &&\n (!maxCriteria() || values().length < maxCriteria()!) &&\n allowFreeTextCache()\n ? searchForFreeTextLabel()\n : undefined\n \"\n [disabled]=\"disabled()\"\n [placeholder]=\"placeholder()\"\n [attr.aria-label]=\"searchLabel() | translate\"\n [value]=\"searchValue()\"\n (focus)=\"freeTextFocus()\"\n (input)=\"freeTextInput($event)\"\n (blur)=\"freeTextBlur()\"\n (keydown.backspace)=\"freeTextBackspace($event)\"\n (keydown.enter)=\"submit()\"\n (typeaheadOnSelect)=\"typeaheadOnSelectCriterion($event.option)\"\n (typeaheadOnCreateOption)=\"createFreeTextPill($event)\"\n />\n</div>\n<!-- clear all searchCriteria -->\n@if (values().length || searchValue().length) {\n <div class=\"clear-button-container\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-sm btn-ghost mx-2\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"clearButtonLabel() | translate\"\n (click)=\"deleteAllCriteria($event)\"\n >\n <si-icon [icon]=\"icons.elementCancel\" />\n </button>\n </div>\n}\n\n@if (!disabled()) {\n <button\n type=\"button\"\n class=\"search-button btn btn-icon btn-sm btn-secondary focus-inside\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"submitButtonLabel() | translate\"\n (click)=\"submit()\"\n >\n <si-icon [icon]=\"icons.elementSearch\" />\n </button>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiFilteredSearchComponent } from './si-filtered-search.component';\n\n@NgModule({\n imports: [SiFilteredSearchComponent],\n exports: [SiFilteredSearchComponent]\n})\nexport class SiFilteredSearchModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-filtered-search.component';\nexport * from './si-filtered-search.model';\nexport * from './si-filtered-search.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-filtered-search.mjs","sources":["../../../../projects/element-ng/filtered-search/si-filtered-search-helper.ts","../../../../projects/element-ng/filtered-search/values/si-filtered-search-value.base.ts","../../../../projects/element-ng/filtered-search/values/date-value/si-filtered-search-date-value.component.ts","../../../../projects/element-ng/filtered-search/values/date-value/si-filtered-search-date-value.component.html","../../../../projects/element-ng/filtered-search/values/free-text/si-filtered-search-free-text.component.ts","../../../../projects/element-ng/filtered-search/values/free-text/si-filtered-search-free-text.component.html","../../../../projects/element-ng/filtered-search/values/si-filtered-search-option-value.base.ts","../../../../projects/element-ng/filtered-search/values/multi-select/si-filtered-search-multi-select.component.ts","../../../../projects/element-ng/filtered-search/values/multi-select/si-filtered-search-multi-select.component.html","../../../../projects/element-ng/filtered-search/values/typeahead/si-filtered-search-typeahead.component.ts","../../../../projects/element-ng/filtered-search/values/typeahead/si-filtered-search-typeahead.component.html","../../../../projects/element-ng/filtered-search/si-filtered-search-value.component.ts","../../../../projects/element-ng/filtered-search/si-filtered-search-value.component.html","../../../../projects/element-ng/filtered-search/si-filtered-search.component.ts","../../../../projects/element-ng/filtered-search/si-filtered-search.component.html","../../../../projects/element-ng/filtered-search/si-filtered-search.module.ts","../../../../projects/element-ng/filtered-search/index.ts","../../../../projects/element-ng/filtered-search/siemens-element-ng-filtered-search.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { formatDate } from '@angular/common';\nimport { isValid } from '@siemens/element-ng/datepicker';\n\nimport { CriterionDefinition, OptionCriterion, OptionType } from './si-filtered-search.model';\n\nexport interface TypeaheadOptionCriterion extends OptionCriterion {\n selected?: boolean;\n translatedLabel: string;\n}\n\nexport interface InternalCriterionDefinition extends CriterionDefinition {\n label: string;\n translatedLabel: string;\n type?: 'free-text';\n}\n\n/** Convert options to option criterions */\nexport const toOptionCriteria = (values?: OptionType[]): OptionCriterion[] =>\n values?.map(v =>\n typeof v === 'string'\n ? { value: v }\n : { label: v.label, value: v.value, iconClass: v.iconClass }\n ) ?? [];\n\n/*\n * Update selected state the matching is based on value since plain\n * string options will automatically fill the value attribute with the\n * actual string value.\n */\nexport const selectOptions = (options: TypeaheadOptionCriterion[], toSelect: string[]): void =>\n options.forEach(val => (val.selected = toSelect.includes(val.value)));\n\n/**\n * Difference by name, create an array that contains those elements of criteria's a that are not in criteria's b.\n * This operation is also sometimes called minus (-).\n */\nexport const differenceByName = (\n a: InternalCriterionDefinition[],\n b: { config: InternalCriterionDefinition }[]\n): InternalCriterionDefinition[] =>\n a.filter(x => b.filter(y => y.config.name === x.name).length === 0);\n\n/** Convert criteria to internal model criteria */\nexport const toInternalCriteria = (crit: CriterionDefinition): InternalCriterionDefinition => {\n return {\n ...crit,\n label: crit.label ?? crit.name,\n translatedLabel: crit.label ?? crit.name\n };\n};\n\nexport const getISODateString = (\n date: Date | undefined,\n format: 'date' | 'date-time',\n locale: string\n): string => {\n if (!isValid(date)) {\n return '';\n }\n\n switch (format) {\n case 'date':\n return formatDate(date, 'yyyy-MM-dd', locale);\n case 'date-time':\n return date.toISOString();\n }\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive, ElementRef, input, model, output, signal, Signal } from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { CriterionDefinition, CriterionValue } from '../si-filtered-search.model';\n\n@Directive({\n host: {\n '[class.invalid-criterion]': '!validValue()',\n 'class': 'pill pill-interactive px-0 criterion-value-section'\n }\n})\nexport abstract class SiFilteredSearchValueBase {\n readonly active = model.required<boolean>();\n readonly criterionValue = model.required<CriterionValue>();\n readonly definition = input.required<CriterionDefinition>();\n readonly disabled = input.required<boolean>();\n readonly searchLabel = input.required<TranslatableString>();\n\n readonly submitValue = output<{ freeText: string } | void>();\n readonly editValue = output();\n readonly backspaceOverflow = output();\n\n protected abstract readonly valueInput: Signal<ElementRef<HTMLInputElement> | undefined>;\n protected abstract readonly validValue: Signal<boolean>;\n\n readonly focusInOverlay = signal(false).asReadonly();\n\n focus(): void {\n this.valueInput()?.nativeElement.focus();\n }\n\n protected valueEnter(): void {\n if (\n !this.definition().multiSelect &&\n (this.criterionValue().value || this.criterionValue().dateValue)\n ) {\n this.active.set(false);\n this.submitValue.emit();\n }\n }\n\n protected valueBackspace(): void {\n if (!this.valueInput()!.nativeElement.value) {\n this.backspaceOverflow.emit();\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n LOCALE_ID,\n signal,\n viewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n getDatepickerFormat,\n getNamedFormat,\n isValid,\n SiDatepickerDirective,\n SiDatepickerOverlayDirective\n} from '@siemens/element-ng/datepicker';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { getISODateString } from '../../si-filtered-search-helper';\nimport { SiFilteredSearchValueBase } from '../si-filtered-search-value.base';\n\n@Component({\n selector: 'si-filtered-search-date-value',\n imports: [DatePipe, FormsModule, SiDatepickerDirective, SiTranslatePipe],\n templateUrl: './si-filtered-search-date-value.component.html',\n styleUrl: './si-filtered-search-date-value.component.scss',\n providers: [\n { provide: SiFilteredSearchValueBase, useExisting: SiFilteredSearchDateValueComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFilteredSearchDateValueComponent extends SiFilteredSearchValueBase {\n private locale = inject(LOCALE_ID).toString();\n\n protected override readonly valueInput = viewChild<ElementRef<HTMLInputElement>>('valueInput');\n private readonly datepickerOverlay = viewChild(SiDatepickerOverlayDirective);\n\n protected readonly disableTime = signal(false);\n protected readonly shortDateFormat: string;\n\n override readonly focusInOverlay = computed(() => !!this.datepickerOverlay()?.isShown());\n readonly validFormat = computed(() => isValid(this.criterionValue().dateValue));\n // The information if the time is currently disabled is only present in the\n // current search criterion instance and not in the generic configuration.\n // So we need to merge the initial config with the current instance config.\n readonly dateConfig = computed(() => ({\n ...this.definition().datepickerConfig,\n disabledTime: this.disableTime()\n }));\n readonly dateFormat = computed(() => getDatepickerFormat(this.locale, this.dateConfig()));\n override readonly validValue = computed(() => {\n const dateConfig = this.dateConfig();\n const minDate = dateConfig?.minDate ?? false;\n const maxDate = dateConfig?.maxDate ?? false;\n const dateValue = this.criterionValue().dateValue ?? false;\n return (\n (!minDate || (minDate && dateValue && dateValue >= minDate)) &&\n (!maxDate || (maxDate && dateValue && dateValue <= maxDate))\n );\n });\n\n constructor() {\n super();\n this.shortDateFormat = getNamedFormat(this.locale, 'shortDate');\n if (!this.shortDateFormat.includes('yyyy')) {\n this.shortDateFormat = this.shortDateFormat.replace('yy', 'yyyy');\n }\n }\n\n protected valueDateSelect(date: Date): void {\n // In case the user type an illegal date into the date input,\n // our directive emits a new undefined value and keeps\n if (!date && this.criterionValue().dateValue) {\n date = new Date(this.criterionValue().dateValue!);\n }\n\n let value: string;\n const validationType = this.definition().validationType;\n if (validationType === 'date') {\n value = getISODateString(date, 'date', this.locale);\n } else if (validationType === 'date-time') {\n if (this.disableTime()) {\n value = getISODateString(date, 'date', this.locale);\n } else {\n value = getISODateString(date, 'date-time', this.locale);\n }\n }\n\n this.criterionValue.update(v => ({ ...v, value, dateValue: date }));\n }\n}\n","@let dateValue = criterionValue().dateValue;\n@if (!active()) {\n <div\n class=\"criterion-value-text focus-inside px-4\"\n [tabindex]=\"disabled() ? -1 : 0\"\n (keydown.enter)=\"editValue.emit()\"\n (click)=\"editValue.emit()\"\n >\n @if (!validFormat()) {\n <!-- DatePipe throws an error if the date is invalid, so we have to do it on our own. -->\n <!-- We may should have a better solution here. Ideally we would keep the broken string so that a user can fix it later. -->\n\n {{ dateValue?.toString() }}\n } @else if (!disableTime() || definition().validationType === 'date-time') {\n {{ dateValue | date: dateFormat() }}\n } @else {\n {{ dateValue | date: shortDateFormat }}\n }\n </div>\n} @else {\n <input\n #valueInput\n type=\"text\"\n siDatepicker\n class=\"px-4 py-0 border-0 focus-inside\"\n [attr.aria-label]=\"searchLabel() | translate\"\n [siDatepickerConfig]=\"dateConfig()\"\n [ngModel]=\"dateValue\"\n (keydown.backspace)=\"valueBackspace()\"\n (keydown.enter)=\"valueEnter()\"\n (siDatepickerDisabledTime)=\"disableTime.set($event)\"\n (ngModelChange)=\"valueDateSelect($event)\"\n />\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, viewChild } from '@angular/core';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiFilteredSearchValueBase } from '../si-filtered-search-value.base';\n\n@Component({\n selector: 'si-filtered-search-free-text',\n imports: [SiTranslatePipe],\n templateUrl: './si-filtered-search-free-text.component.html',\n styleUrl: './si-filtered-search-free-text.component.scss',\n providers: [\n { provide: SiFilteredSearchValueBase, useExisting: SiFilteredSearchFreeTextComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFilteredSearchFreeTextComponent extends SiFilteredSearchValueBase {\n protected readonly valueInput = viewChild<ElementRef<HTMLInputElement>>('freeTextInput');\n protected readonly validValue = computed(() => true);\n\n protected freeTextValueChange(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n this.criterionValue.update(v => ({ ...v, value: inputElement.value }));\n }\n\n protected override valueEnter(): void {\n this.active.set(false);\n this.submitValue.emit();\n }\n}\n","@if (!active()) {\n <div\n class=\"criterion-value-text focus-inside px-4\"\n [tabindex]=\"disabled() ? -1 : 0\"\n (keydown.enter)=\"editValue.emit()\"\n (click)=\"editValue.emit()\"\n >\n {{ criterionValue().value }}\n </div>\n} @else {\n <input\n #freeTextInput\n type=\"text\"\n class=\"px-4 py-0 border-0 focus-inside\"\n [attr.aria-label]=\"searchLabel() | translate\"\n [disabled]=\"disabled()\"\n [value]=\"criterionValue().value\"\n (input)=\"freeTextValueChange($event)\"\n (keydown.backspace)=\"valueBackspace()\"\n (keydown.enter)=\"valueEnter()\"\n (blur)=\"active.set(false)\"\n />\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { computed, DestroyRef, Directive, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectSiTranslateService } from '@siemens/element-translate-ng/translate';\nimport { BehaviorSubject, Observable, of, switchMap } from 'rxjs';\nimport { debounceTime, first, map, tap } from 'rxjs/operators';\n\nimport {\n InternalCriterionDefinition,\n toOptionCriteria,\n TypeaheadOptionCriterion\n} from '../si-filtered-search-helper';\nimport { OptionCriterion, OptionType } from '../si-filtered-search.model';\nimport { SiFilteredSearchValueBase } from './si-filtered-search-value.base';\n\n@Directive()\nexport abstract class SiFilteredSearchOptionValueBase extends SiFilteredSearchValueBase {\n readonly lazyValueProvider =\n input<(criterionName: string, typed: string | string[]) => Observable<OptionType[]>>();\n readonly searchDebounceTime = input.required<number>();\n readonly onlySelectValue = input.required<boolean>();\n readonly maxCriteriaOptions = input.required<number>();\n readonly optionsInScrollableView = input.required<number>();\n readonly disableSelectionByColonAndSemicolon = input.required<boolean>();\n readonly isStrictOrOnlySelectValue = input.required<boolean>();\n\n protected readonly inputChange = new BehaviorSubject('');\n\n private readonly destroyRef = inject(DestroyRef);\n protected readonly translateService = injectSiTranslateService();\n\n readonly inputType = computed(() =>\n this.definition().validationType === 'integer' || this.definition().validationType === 'float'\n ? 'number'\n : 'text'\n );\n readonly step = computed(() => (this.definition().validationType === 'integer' ? '1' : 'any'));\n readonly options = computed(() => this.buildOptions());\n override readonly validValue = computed(() => {\n const config = this.definition();\n if (!this.isStrictOrOnlySelectValue() && !config.strictValue && !config.onlySelectValue) {\n return true;\n }\n\n // TODO: this never worked with lazy options. We should fix that.\n // TODO: checking if options are empty is also questionable. Should be changed v47.\n return (\n (config.options?.length && this.hasOptionValue()) ||\n (!config.options?.length && !!this.criterionValue().value)\n );\n });\n\n protected buildOptions(): Observable<TypeaheadOptionCriterion[]> | undefined {\n let optionsStream: Observable<OptionCriterion[]> | undefined;\n if (this.lazyValueProvider()) {\n optionsStream = this.inputChange.pipe(\n debounceTime(this.searchDebounceTime()),\n takeUntilDestroyed(this.destroyRef),\n switchMap(value => {\n return this.lazyValueProvider()!(\n this.definition().name,\n // TODO: fix lazy loading for multi-select. Seems to be not needed, but it should work.\n this.definition().multiSelect ? '' : (value ?? '')\n ).pipe(\n map(options => toOptionCriteria(options)),\n tap(\n options =>\n ((this.definition() ?? ({} as InternalCriterionDefinition)).options = options)\n )\n );\n })\n );\n } else if (this.definition()) {\n optionsStream = of(toOptionCriteria(this.definition().options));\n }\n\n return optionsStream?.pipe(\n switchMap(options => {\n const keys: string[] = options.map(option => option.label!).filter(label => !!label);\n return this.translateService.translateAsync(keys).pipe(\n map(translations =>\n options.map(option => ({\n ...option,\n translatedLabel: translations[option.label!] ?? option.label ?? option.value\n }))\n )\n );\n })\n );\n }\n\n protected buildOptionValue(): void {\n if (this.criterionValue().value?.length) {\n // resolve options for initial values\n this.options()!\n .pipe(first())\n .subscribe(options => this.processTypeaheadOptions(options));\n }\n }\n\n protected abstract processTypeaheadOptions(value: TypeaheadOptionCriterion[]): void;\n protected abstract hasOptionValue(): boolean;\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n OnChanges,\n OnInit,\n signal,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { SiTypeaheadDirective, TypeaheadMatch } from '@siemens/element-ng/typeahead';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { BehaviorSubject, Observable, switchMap } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\n\nimport { selectOptions, TypeaheadOptionCriterion } from '../../si-filtered-search-helper';\nimport { OptionCriterion } from '../../si-filtered-search.model';\nimport { SiFilteredSearchOptionValueBase } from '../si-filtered-search-option-value.base';\nimport { SiFilteredSearchValueBase } from '../si-filtered-search-value.base';\n\n@Component({\n selector: 'si-filtered-search-multi-select',\n imports: [SiTranslatePipe, SiTypeaheadDirective],\n templateUrl: './si-filtered-search-multi-select.component.html',\n styleUrl: './si-filtered-search-multi-select.component.scss',\n providers: [\n { provide: SiFilteredSearchValueBase, useExisting: SiFilteredSearchMultiSelectComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFilteredSearchMultiSelectComponent\n extends SiFilteredSearchOptionValueBase\n implements OnChanges, OnInit\n{\n readonly itemCountText = input.required<TranslatableString>();\n protected override readonly valueInput = viewChild<ElementRef<HTMLInputElement>>('valueInput');\n protected readonly optionValue = signal<OptionCriterion[]>([]);\n protected readonly selectionChange = new BehaviorSubject<string[]>([]);\n\n readonly hasMultiSelections = computed(\n () => Array.isArray(this.criterionValue().value) && this.criterionValue().value!.length > 1\n );\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (\n changes.criterionValue &&\n this.criterionValue().value?.length !== this.optionValue().length\n ) {\n this.optionValue.set([]);\n this.selectionChange.next([]);\n }\n }\n\n ngOnInit(): void {\n this.inputChange.next('');\n this.selectionChange.next(this.criterionValue().value as string[]);\n this.buildOptionValue();\n }\n\n protected valueTypeaheadSelect(match: TypeaheadMatch): void {\n const option = match.option as OptionCriterion;\n if (match.itemSelected) {\n this.criterionValue.update(v => ({ ...v, value: [...v.value!, option.value] }));\n this.optionValue.update(v => [...v, option]);\n } else {\n const value = this.criterionValue();\n if (typeof value.value !== 'string') {\n this.criterionValue.set({\n ...value,\n value: value.value?.filter(elem => elem !== option.value)\n });\n }\n this.optionValue.update(v => v.filter(elem => elem.value !== option.value));\n }\n this.selectionChange.next(this.criterionValue().value as string[]);\n }\n\n protected override buildOptions(): Observable<TypeaheadOptionCriterion[]> | undefined {\n const translatedOptions = super.buildOptions();\n return translatedOptions?.pipe(\n switchMap(options =>\n this.selectionChange!.pipe(\n tap(value => {\n selectOptions(options, value);\n }),\n map(() => options)\n )\n )\n );\n }\n\n protected processTypeaheadOptions(options: TypeaheadOptionCriterion[]): void {\n const value = this.criterionValue().value as string[];\n this.optionValue.set(\n options.filter(\n option =>\n value.includes(option.value) ||\n // TODO: remove this. I don't know why, but it seems like previously FS accepted labels as well\n value.includes(option.translatedLabel)\n )\n );\n // Sneaky patch the value.\n // We did not emit a change, as no user interaction happened.\n // We should consider dropping this, but there is currently a unit test checking this behavior.\n value.splice(0, value.length, ...this.optionValue().map(option => option.value));\n }\n\n protected hasOptionValue(): boolean {\n return !!this.optionValue().length;\n }\n}\n","@let value = criterionValue().value;\n@if (!active()) {\n <div\n class=\"criterion-value-text focus-inside px-4\"\n [tabindex]=\"disabled() ? -1 : 0\"\n (keydown.enter)=\"editValue.emit()\"\n (click)=\"editValue.emit()\"\n >\n @if (!!value && hasMultiSelections()) {\n {{ itemCountText() | translate: { itemCount: value.length } }}\n } @else if (optionValue()[0]) {\n {{ optionValue()[0].label ?? optionValue()[0].value | translate }}\n } @else {\n {{ value }}\n }\n </div>\n} @else {\n <input\n #valueInput\n typeaheadOptionField=\"translatedLabel\"\n class=\"px-4 py-0 border-0 focus-inside\"\n typeaheadScrollable\n typeaheadMultiSelect\n [type]=\"inputType()\"\n [step]=\"step()\"\n [siTypeahead]=\"options() ?? []\"\n [typeaheadMinLength]=\"0\"\n [typeaheadOptionsLimit]=\"maxCriteriaOptions()\"\n [readOnly]=\"onlySelectValue()\"\n [typeaheadOptionsInScrollableView]=\"optionsInScrollableView()\"\n [attr.aria-label]=\"searchLabel() | translate\"\n (keydown.backspace)=\"valueBackspace()\"\n (keydown.enter)=\"valueEnter()\"\n (typeaheadOnSelect)=\"valueTypeaheadSelect($event)\"\n (typeaheadOnInput)=\"inputChange.next($event)\"\n />\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n OnChanges,\n OnInit,\n signal,\n SimpleChanges,\n untracked,\n viewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SiTypeaheadDirective, TypeaheadMatch } from '@siemens/element-ng/typeahead';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { TypeaheadOptionCriterion } from '../../si-filtered-search-helper';\nimport { OptionCriterion } from '../../si-filtered-search.model';\nimport { SiFilteredSearchOptionValueBase } from '../si-filtered-search-option-value.base';\nimport { SiFilteredSearchValueBase } from '../si-filtered-search-value.base';\n\n@Component({\n selector: 'si-filtered-search-typeahead',\n imports: [SiTypeaheadDirective, FormsModule, SiTranslatePipe],\n templateUrl: './si-filtered-search-typeahead.component.html',\n styleUrl: './si-filtered-search-typeahead.component.scss',\n providers: [\n { provide: SiFilteredSearchValueBase, useExisting: SiFilteredSearchTypeaheadComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFilteredSearchTypeaheadComponent\n extends SiFilteredSearchOptionValueBase\n implements OnChanges, OnInit\n{\n protected override readonly valueInput = viewChild<ElementRef<HTMLInputElement>>('valueInput');\n protected readonly optionValue = signal<OptionCriterion | undefined>(undefined);\n\n // This must be a separate signal as it should only emit when the actual empty state changes.\n private readonly inputEmpty = computed(() => !this.criterionValue().value);\n\n // This MUST only be updated if the active state changes.\n // Otherwise, user values might be overridden.\n // It is only used to pass the initial input value if the user starts editing the input.\n readonly valueLabel = computed(() => {\n // This is needed for the clear button.\n // But we cannot subscribe to the value changes itself, as those would cause to many updates.\n if (this.inputEmpty()) {\n return '';\n }\n\n if (this.active()) {\n const option = untracked(() => this.optionValue());\n if (option) {\n return option.label ? this.translateService.translateSync(option.label) : option.value;\n } else {\n return untracked(() => this.criterionValue().value) as string;\n }\n }\n return '';\n });\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.criterionValue && this.criterionValue().value !== this.optionValue()?.value) {\n this.optionValue.set(undefined);\n }\n }\n\n ngOnInit(): void {\n this.inputChange.next((this.criterionValue().value as string) ?? '');\n this.buildOptionValue();\n }\n\n protected valueChange(newValue: string | string[]): void {\n if (typeof newValue === 'string') {\n const match = newValue.match(/(.+?);(.*)$/);\n let value: string;\n if (!this.disableSelectionByColonAndSemicolon() && match) {\n value = match[1];\n this.submitValue.emit({ freeText: match[2] });\n } else {\n value = newValue;\n }\n this.optionValue.set(undefined);\n this.criterionValue.update(v => ({ ...v, value }));\n this.inputChange.next(newValue);\n }\n }\n\n protected valueTypeaheadFullMatch(match: TypeaheadMatch): void {\n const option = match.option as TypeaheadOptionCriterion;\n this.optionValue.set(option);\n // Usually, we already emitted a change in onCriterionValueInputChange using the text entered by the user.\n // In case of a fullMatch, we should check if the value is different from label.\n // If it is different, we must emit another event using the value instead of the label.\n // TODO: prevent the emit of the label matching the option. This is currently not possible due to the order events.\n if (option.value !== option.translatedLabel) {\n this.criterionValue.update(v => ({ ...v, value: option.value }));\n }\n }\n\n protected valueTypeaheadSelect(match: TypeaheadMatch): void {\n this.valueTypeaheadFullMatch(match);\n this.submitValue.emit();\n }\n\n protected valueFilterKeys(event: KeyboardEvent): void {\n // In integer mode, no floating point numbers are allowed.\n // So we prevent the input of '.' or ','.\n if (\n this.definition().validationType === 'integer' &&\n (event.key === '.' || event.key === ',')\n ) {\n event.preventDefault();\n }\n }\n\n protected processTypeaheadOptions(options: TypeaheadOptionCriterion[]): void {\n this.optionValue.set(\n options.find(\n option =>\n option.value === this.criterionValue().value ||\n // TODO: remove this. I don't know why, but it seems like previously FS accepted labels as well\n option.translatedLabel === this.criterionValue().value\n )\n );\n // Sneaky patch the value.\n // We did not emit a change, as no user interaction happened.\n // We should consider dropping this, but there is currently a unit test checking this behavior.\n const optionValue = this.optionValue();\n if (optionValue) {\n this.criterionValue().value = optionValue.value;\n }\n }\n\n protected hasOptionValue(): boolean {\n return !!this.optionValue();\n }\n}\n","@let value = criterionValue().value;\n@if (!active()) {\n <div\n class=\"criterion-value-text focus-inside px-4\"\n [tabindex]=\"disabled() ? -1 : 0\"\n (keydown.enter)=\"editValue.emit()\"\n (click)=\"editValue.emit()\"\n >\n @let optionValue = this.optionValue();\n @if (optionValue) {\n {{ optionValue.label ?? optionValue.value | translate }}\n } @else {\n {{ value }}\n }\n </div>\n} @else {\n <input\n #valueInput\n typeaheadOptionField=\"translatedLabel\"\n class=\"px-4 py-0 border-0 focus-inside\"\n typeaheadScrollable\n [type]=\"inputType()\"\n [step]=\"step()\"\n [ngModel]=\"valueLabel()\"\n [siTypeahead]=\"options() ?? []\"\n [typeaheadProcess]=\"!onlySelectValue()\"\n [typeaheadMinLength]=\"0\"\n [typeaheadOptionsLimit]=\"maxCriteriaOptions()\"\n [typeaheadAutoSelectIndex]=\"value?.length ? 0 : -1\"\n [readOnly]=\"onlySelectValue() || definition().onlySelectValue\"\n [typeaheadOptionsInScrollableView]=\"optionsInScrollableView()\"\n [attr.aria-label]=\"searchLabel() | translate\"\n (keydown)=\"valueFilterKeys($event)\"\n (keydown.backspace)=\"valueBackspace()\"\n (keydown.enter)=\"valueEnter()\"\n (ngModelChange)=\"valueChange($event)\"\n (typeaheadOnFullMatch)=\"valueTypeaheadFullMatch($event)\"\n (typeaheadOnSelect)=\"valueTypeaheadSelect($event)\"\n />\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { CdkMonitorFocus, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n model,\n OnInit,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { elementCancel } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTypeaheadDirective } from '@siemens/element-ng/typeahead';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { Observable } from 'rxjs';\n\nimport { InternalCriterionDefinition } from './si-filtered-search-helper';\nimport { CriterionValue, OptionType } from './si-filtered-search.model';\nimport { SiFilteredSearchDateValueComponent } from './values/date-value/si-filtered-search-date-value.component';\nimport { SiFilteredSearchFreeTextComponent } from './values/free-text/si-filtered-search-free-text.component';\nimport { SiFilteredSearchMultiSelectComponent } from './values/multi-select/si-filtered-search-multi-select.component';\nimport { SiFilteredSearchValueBase } from './values/si-filtered-search-value.base';\nimport { SiFilteredSearchTypeaheadComponent } from './values/typeahead/si-filtered-search-typeahead.component';\n\n@Component({\n selector: 'si-filtered-search-value',\n imports: [\n CdkMonitorFocus,\n SiTypeaheadDirective,\n FormsModule,\n SiTranslatePipe,\n SiFilteredSearchDateValueComponent,\n SiFilteredSearchFreeTextComponent,\n SiFilteredSearchTypeaheadComponent,\n SiFilteredSearchMultiSelectComponent,\n SiIconComponent\n ],\n templateUrl: './si-filtered-search-value.component.html',\n styleUrl: './si-filtered-search-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiFilteredSearchValueComponent implements OnInit {\n readonly value = model.required<CriterionValue>();\n readonly definition = input.required<InternalCriterionDefinition>();\n readonly disabled = input.required<boolean>();\n readonly onlySelectValue = input.required<boolean>();\n readonly maxCriteriaOptions = input.required<number>();\n readonly optionsInScrollableView = input.required<number>();\n readonly clearButtonLabel = input.required<TranslatableString>();\n readonly lazyValueProvider =\n input<(criterionName: string, typed: string | string[]) => Observable<OptionType[]>>();\n readonly searchDebounceTime = input.required<number>();\n readonly itemCountText = input.required<TranslatableString>();\n readonly disableSelectionByColonAndSemicolon = input.required<boolean>();\n readonly searchLabel = input.required<TranslatableString>();\n readonly invalidCriterion = input.required<boolean>();\n readonly isStrictOrOnlySelectValue = input.required<boolean>();\n readonly editOnCreation = input.required<boolean>();\n\n readonly deleteCriterion = output<{ triggerSearch: boolean } | void>();\n readonly submitCriterion = output<{ freeText: string } | void>();\n\n protected readonly active = signal<boolean>(false);\n protected readonly icons = addIcons({ elementCancel });\n\n private hasPendingFocus = false;\n\n private readonly operatorInput = viewChild<ElementRef<HTMLInputElement>>('operatorInput');\n private readonly valueInput = viewChild(SiFilteredSearchValueBase);\n\n readonly type = computed(() => {\n // Check if this is a free text criterion first\n const definition = this.definition();\n if (definition.type === 'free-text') {\n return 'free-text';\n }\n\n const validationType = definition.validationType;\n if (validationType === 'date' || validationType === 'date-time') {\n return 'date';\n }\n // Handle multi-select vs single-select for other validation types.\n return definition.multiSelect ? 'multi-select' : 'typeahead';\n });\n readonly selectedOperatorIndex = computed(() => {\n const operator = this.value().operator;\n const operators = this.definition().operators;\n if (!operator || !operators) {\n return -1;\n }\n\n return operators.findIndex(op => op.includes(operator));\n });\n readonly longestOperatorLength = computed(() => {\n const operators = this.definition().operators;\n if (!operators) {\n return 0;\n }\n return Math.max(...operators.map(a => a.length));\n });\n\n ngOnInit(): void {\n if (this.editOnCreation() && this.type() !== 'free-text') {\n this.edit();\n }\n }\n\n closeOverlay(): void {\n if (this.active()) {\n this.active.set(false);\n }\n }\n\n edit(field?: 'value' | 'operator'): void {\n this.active.set(true);\n this.hasPendingFocus = true;\n\n setTimeout(() => {\n if (field === 'value') {\n this.valueInput()?.focus();\n } else if (field === 'operator') {\n this.operatorInput()?.nativeElement.focus();\n } else {\n (this.operatorInput()?.nativeElement ?? this.valueInput())?.focus();\n }\n this.hasPendingFocus = false;\n });\n }\n\n protected backspaceOverflow(): void {\n const operatorInput = this.operatorInput()?.nativeElement;\n if (operatorInput) {\n operatorInput.focus();\n } else {\n this.deleteCriterion.emit();\n }\n }\n\n protected focusChange(focusOrigin: FocusOrigin): void {\n if (this.hasPendingFocus) {\n return;\n }\n setTimeout(() => {\n // We need to wait for the overlay, that might be shown and now close as well on onside click.\n if (this.active() && !focusOrigin && !this.valueInput()?.focusInOverlay()) {\n this.active.set(false);\n }\n });\n }\n\n protected operatorUpdate(operator: string): void {\n this.value.update(value => ({ ...value, operator }));\n }\n\n protected operatorBackspace(): void {\n if (!this.operatorInput()?.nativeElement.value) {\n this.deleteCriterion.emit();\n }\n }\n\n protected operatorEnter(): void {\n this.valueInput()!.focus();\n }\n\n protected operatorBlur(): void {\n const operators = this.definition().operators;\n if (operators && !operators.includes(this.value().operator!)) {\n this.operatorUpdate(operators.includes('=') ? '=' : operators[0]);\n }\n }\n\n protected clear(): void {\n if (!this.active() || !this.value().value?.length) {\n this.deleteCriterion.emit({ triggerSearch: true });\n return;\n }\n\n this.value.update(v => ({\n ...v,\n dateValue: undefined,\n value: this.definition().multiSelect ? [] : ''\n }));\n }\n\n protected freeTextActiveChange(value: boolean): void {\n if (!value && !this.value().value) {\n this.deleteCriterion.emit({ triggerSearch: true });\n }\n }\n}\n","<div\n cdkMonitorSubtreeFocus\n class=\"criteria pill-group\"\n [class.disabled]=\"disabled()\"\n [attr.aria-disabled]=\"disabled()\"\n [class.invalid-criterion]=\"invalidCriterion()\"\n (cdkFocusChange)=\"focusChange($event)\"\n>\n @if (type() !== 'free-text') {\n <div class=\"pill pill-interactive criterion-label si-h5\" (click)=\"edit()\">\n {{ definition().label | translate }}\n </div>\n }\n @if (definition().operators?.length) {\n <div class=\"pill pill-interactive px-0 criterion-operator-section\">\n <!-- criterion operator input -->\n @if (active()) {\n <input\n #operatorInput\n type=\"text\"\n class=\"focus-inside operator-input py-0 border-0\"\n [siTypeahead]=\"definition().operators!\"\n [typeaheadProcess]=\"false\"\n [typeaheadAutoSelectIndex]=\"selectedOperatorIndex()\"\n [typeaheadMinLength]=\"0\"\n [typeaheadOptionsLimit]=\"0\"\n [readOnly]=\"false\"\n [typeaheadScrollable]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionsInScrollableView()\"\n [attr.aria-label]=\"searchLabel() | translate\"\n [attr.size]=\"longestOperatorLength()\"\n [ngModel]=\"value().operator\"\n (ngModelChange)=\"operatorUpdate($event)\"\n (keydown.backspace)=\"operatorBackspace()\"\n (keydown.enter)=\"operatorEnter()\"\n (typeaheadOnSelect)=\"operatorEnter()\"\n (blur)=\"operatorBlur()\"\n />\n } @else {\n <!-- criterion operator field -->\n <div\n class=\"criterion-operator-text px-2 focus-inside\"\n [tabindex]=\"!disabled() ? 0 : -1\"\n (keydown.enter)=\"edit('operator')\"\n (click)=\"edit('operator')\"\n >\n {{ value().operator }}\n </div>\n }\n </div>\n }\n @switch (type()) {\n @case ('free-text') {\n <si-filtered-search-free-text\n [definition]=\"definition()\"\n [disabled]=\"disabled()\"\n [searchLabel]=\"searchLabel()\"\n [(active)]=\"active\"\n [(criterionValue)]=\"value\"\n (backspaceOverflow)=\"backspaceOverflow()\"\n (editValue)=\"edit('value')\"\n (submitValue)=\"submitCriterion.emit($event)\"\n (activeChange)=\"freeTextActiveChange($event)\"\n />\n }\n @case ('date') {\n <si-filtered-search-date-value\n [definition]=\"definition()\"\n [disabled]=\"disabled()\"\n [searchLabel]=\"searchLabel()\"\n [(active)]=\"active\"\n [(criterionValue)]=\"value\"\n (backspaceOverflow)=\"backspaceOverflow()\"\n (editValue)=\"edit('value')\"\n (submitValue)=\"submitCriterion.emit($event)\"\n />\n }\n @case ('multi-select') {\n <si-filtered-search-multi-select\n [definition]=\"definition()\"\n [disabled]=\"disabled()\"\n [searchLabel]=\"searchLabel()\"\n [searchDebounceTime]=\"searchDebounceTime()\"\n [onlySelectValue]=\"onlySelectValue()\"\n [optionsInScrollableView]=\"optionsInScrollableView()\"\n [maxCriteriaOptions]=\"maxCriteriaOptions()\"\n [lazyValueProvider]=\"lazyValueProvider()\"\n [itemCountText]=\"itemCountText()\"\n [isStrictOrOnlySelectValue]=\"isStrictOrOnlySelectValue()\"\n [disableSelectionByColonAndSemicolon]=\"disableSelectionByColonAndSemicolon()\"\n [(active)]=\"active\"\n [(criterionValue)]=\"value\"\n (backspaceOverflow)=\"backspaceOverflow()\"\n (editValue)=\"edit('value')\"\n (submitValue)=\"submitCriterion.emit($event)\"\n />\n }\n @case ('typeahead') {\n <si-filtered-search-typeahead\n [definition]=\"definition()\"\n [disabled]=\"disabled()\"\n [searchLabel]=\"searchLabel()\"\n [searchDebounceTime]=\"searchDebounceTime()\"\n [onlySelectValue]=\"onlySelectValue()\"\n [optionsInScrollableView]=\"optionsInScrollableView()\"\n [maxCriteriaOptions]=\"maxCriteriaOptions()\"\n [lazyValueProvider]=\"lazyValueProvider()\"\n [isStrictOrOnlySelectValue]=\"isStrictOrOnlySelectValue()\"\n [disableSelectionByColonAndSemicolon]=\"disableSelectionByColonAndSemicolon()\"\n [(active)]=\"active\"\n [(criterionValue)]=\"value\"\n (backspaceOverflow)=\"backspaceOverflow()\"\n (editValue)=\"edit('value')\"\n (submitValue)=\"submitCriterion.emit($event)\"\n />\n }\n }\n <div class=\"pill px-0 ms-n1\">\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-ghost focus-inside\"\n [attr.aria-label]=\"clearButtonLabel() | translate\"\n [disabled]=\"disabled()\"\n (click)=\"clear()\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <si-icon [icon]=\"icons.elementCancel\" />\n </button>\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n LOCALE_ID,\n model,\n OnChanges,\n OnInit,\n output,\n signal,\n SimpleChanges,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { elementCancel, elementSearch } from '@siemens/element-icons';\nimport { BackgroundColorVariant, isRTL } from '@siemens/element-ng/common';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTypeaheadDirective, TypeaheadOption } from '@siemens/element-ng/typeahead';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t,\n TranslatableString\n} from '@siemens/element-translate-ng/translate';\nimport { BehaviorSubject, Observable, Subject, switchMap } from 'rxjs';\nimport { debounceTime, map } from 'rxjs/operators';\n\nimport {\n differenceByName,\n getISODateString,\n InternalCriterionDefinition,\n toInternalCriteria\n} from './si-filtered-search-helper';\nimport { SiFilteredSearchValueComponent } from './si-filtered-search-value.component';\nimport {\n CriterionDefinition,\n CriterionValue,\n DisplayedCriteriaEventArgs,\n OptionType,\n SearchCriteria\n} from './si-filtered-search.model';\n\n@Component({\n selector: 'si-filtered-search',\n imports: [\n FormsModule,\n SiIconComponent,\n SiTypeaheadDirective,\n SiTranslatePipe,\n SiFilteredSearchValueComponent\n ],\n templateUrl: './si-filtered-search.component.html',\n styleUrl: './si-filtered-search.component.scss',\n host: {\n '[class.disabled]': 'disabled()',\n '[class.dark-background]': \"colorVariant() === 'base-0'\"\n }\n})\nexport class SiFilteredSearchComponent implements OnInit, OnChanges {\n private static readonly criterionRegex = /(.+?):(.*)$/;\n\n /**\n * Output callback event that provides an object describing the\n * selected criteria and additional filter text.\n */\n readonly doSearch = output<SearchCriteria>();\n /**\n * If this is set to `true`, the search triggers for each input (implicit search).\n * By default, the search is triggered when the user submits by pressing the\n * search button or by pressing enter.\n *\n * @defaultValue false\n */\n readonly doSearchOnInputChange = input(false, {\n transform: booleanAttribute\n });\n /**\n * In addition to lazy loaded value, you can also lazy load the criteria itself\n */\n readonly lazyCriterionProvider =\n input<(typed: string, searchCriteria?: SearchCriteria) => Observable<CriterionDefinition[]>>();\n /**\n * In many cases, your application defines the criteria, but the values need\n * to be loaded from a server. In this case you can provide a function that\n * returns the possible criterion options as an Observable.\n */\n readonly lazyValueProvider =\n input<(criterionName: string, typed: string | string[]) => Observable<OptionType[]>>();\n /**\n * Disable any interactivity.\n *\n * @defaultValue false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n /**\n * Limit criteria to the predefined ones.\n *\n * @defaultValue false\n */\n readonly strictCriterion = input(false, { transform: booleanAttribute });\n\n /**\n * Limit criterion options to the predefined ones. `[strictValue]`\n * enforces `[strictCriterion]` to true automatically.\n *\n * @defaultValue false\n */\n readonly strictValue = input(false, { transform: booleanAttribute });\n\n /**\n * Limit criterion options to the predefined ones and prevent typing. `[onlySelectValue]`\n * enforces `[strictValue]` and `[strictCriterion]` to true automatically.\n *\n * @defaultValue false\n */\n readonly onlySelectValue = input(false, { transform: booleanAttribute });\n\n /**\n * Custom debounce time for lazy loading of criteria data.\n *\n * @defaultValue 500\n */\n readonly lazyLoadingDebounceTime = input(500);\n /**\n * Custom debounce time (in mills) to delay the search emission.\n * (Default is 0 as in most cases a users manually triggers a search.\n * Recommended to increase a bit when using doSearchOnInputChange=true)\n *\n * @defaultValue 0\n */\n readonly searchDebounceTime = input(0);\n\n /**\n * The placeholder for input field.\n *\n * @defaultValue ''\n */\n readonly placeholder = input('');\n\n /**\n * Defines the number of criteria, criteria values and operators visible at once.\n *\n * @defaultValue 10\n */\n readonly optionsInScrollableView = input(10);\n\n /**\n * The current selected search criteria and entered search text.\n *\n * @defaultValue\n * ```\n * { criteria: [], value: '' }\n * ```\n */\n readonly searchCriteria = model<SearchCriteria>({ criteria: [], value: '' });\n /**\n * Predefine criteria options.\n *\n * @defaultValue []\n */\n readonly criteria = input<CriterionDefinition[]>([]);\n /**\n * Opt-in to search for each criterion only once.\n *\n * @defaultValue false\n */\n readonly exclusiveCriteria = input(false, {\n transform: booleanAttribute\n });\n\n /**\n * Limit the number of possible criteria. The default is undefined so that any number of criteria can be used.\n * For example, setting the value to 1 let you only select one criterion that you need to remove before being\n * able to set another one.\n *\n * @defaultValue undefined\n */\n readonly maxCriteria = input<number | undefined>(undefined);\n /**\n * Defines the maximum options within one criterion. The default is 20 and 0 means unlimited.\n *\n * @defaultValue 20\n */\n readonly maxCriteriaOptions = input(20);\n /**\n * Search input aria label, Needed by a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_FILTERED_SEARCH.SEARCH:Search`)\n * ```\n */\n readonly searchLabel = input(t(() => $localize`:@@SI_FILTERED_SEARCH.SEARCH:Search`));\n\n /**\n * Clear button aria label. Needed for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_FILTERED_SEARCH.CLEAR:Clear`)\n * ```\n */\n readonly clearButtonLabel = input(t(() => $localize`:@@SI_FILTERED_SEARCH.CLEAR:Clear`));\n\n /**\n * The accessible label of the search button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_FILTERED_SEARCH.SUBMIT_BUTTON:Submit search`)\n * ```\n */\n readonly submitButtonLabel = input(\n t(() => $localize`:@@SI_FILTERED_SEARCH.SUBMIT_BUTTON:Submit search`)\n );\n /**\n * Items count text appended to the count in case of multi-selection of values.\n * Translation key, `{{itemCount}}` in the translation will be replaced with the actual value.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_FILTERED_SEARCH.ITEM_COUNT:{{itemCount}} items`)\n * ```\n */\n readonly itemCountText = input<TranslatableString>(\n t(() => $localize`:@@SI_FILTERED_SEARCH.ITEM_COUNT:{{itemCount}} items`)\n );\n /**\n * Color variant to determine component background\n *\n * @defaultValue 'base-1'\n */\n readonly colorVariant = input<BackgroundColorVariant>('base-1');\n /**\n * Disables the free text search to only use the criterion for filtering.\n *\n * @defaultValue false\n */\n readonly disableFreeTextSearch = input(false, { transform: booleanAttribute });\n /**\n * Limit on the number of criteria/criteria value to be displayed by the typeahead\n *\n * @defaultValue 20\n */\n readonly typeaheadOptionsLimit = input(20);\n /**\n * By default, the Filtered Search will treat `:` as a special character\n * to submit the current input in the freetext and immediately create a criterion.\n * Use this input to disable this behavior.\n *\n * @defaultValue false\n */\n readonly disableSelectionByColonAndSemicolon = input(false, { transform: booleanAttribute });\n /**\n * Criterion definition for free-text pills.\n * When set, free-text values will be added as a pill with this criterion.\n * If not set, free-text pills are disabled.\n *\n * Enabling this will only emit valueChange events when the free-text pill is created.\n * When the text input is blurred and there is text inside, a free-text pill will be created.\n *\n *\n * @experimental\n */\n readonly freeTextCriterion = input<CriterionDefinition>();\n /**\n * The value to be shown for creating free-text pills.\n * Use the `{{query}}` placeholder to show the user input in the label.\n *\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_FILTERED_SEARCH.SEARCH_FOR_FREE_TEXT:Search for \"{{query}}\"`)\n * ```\n *\n * @experimental\n */\n readonly searchForFreeTextLabel = input(\n t(() => $localize`:@@SI_FILTERED_SEARCH.SEARCH_FOR_FREE_TEXT:Search for \"{{query}}\"`)\n );\n\n /**\n * The interceptor is called when the list of criteria is shown as soon as the user starts typing in the input field.\n * The interceptor's {@link DisplayedCriteriaEventArgs.allow} method can be used to filter the list of displayed criteria.\n *\n * **Note:** The interceptor is called as long as the {@link searchCriteria} does not exceed {@link maxCriteria}.\n * Further, the interceptor is not called when using the {@link lazyCriterionProvider}.\n *\n * @example\n * ```\n * <si-filtered-search\n * [criteria]=\"[{ name: 'foo', label: 'Foo' }, { name: 'bar', label: 'Bar' }]\"\n * (interceptDisplayedCriteria)=\"$event.allow(\n * $event.searchCriteria.criteria.some(s => s.name === 'foo')\n * ? $event.criteria.filter(c => c !== 'foo')\n * : $event.criteria\n * )\">\n * </si-filtered-search>\n * ```\n */\n readonly interceptDisplayedCriteria = output<DisplayedCriteriaEventArgs>();\n\n private readonly freeTextInputElement =\n viewChild.required<ElementRef<HTMLInputElement>>('freeTextInputElement');\n\n private readonly scrollContainer = viewChild.required('scrollContainer', { read: ElementRef });\n\n private readonly valueComponents = viewChildren(SiFilteredSearchValueComponent);\n protected dataSource: Observable<InternalCriterionDefinition[]>;\n\n protected autoEditCriteria = false;\n protected readonly values = signal<\n { config: InternalCriterionDefinition; value: CriterionValue }[]\n >([]);\n protected readonly searchValue = signal('');\n /** Internal criteria model */\n protected internalCriterionDefinitions: InternalCriterionDefinition[] = [];\n\n protected readonly icons = addIcons({ elementCancel, elementSearch });\n /** Used to trigger a renewed search */\n private typeaheadInputChange = new BehaviorSubject<string>('');\n /** Used to debounce the Search emissions */\n private searchEmitQueue = new Subject<SearchCriteria | undefined>();\n private readonly destroyRef = inject(DestroyRef);\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly translateService = injectSiTranslateService();\n private readonly locale = inject(LOCALE_ID).toString();\n\n protected readonly allowFreeTextCache = signal<boolean>(true);\n // Angular also calls ngOnChanges if we emitted a change and then two-way-databinding writes back our own change.\n // We use this to ensure that we do not write our own change back to the input.\n\n private lastEmittedSearchCriteria?: SearchCriteria;\n\n protected readonly isStrictOrOnlySelectValue = computed(() => {\n return this.strictValue() || this.onlySelectValue();\n });\n\n private readonly strictCriterionOrValue = computed(() => {\n return this.strictCriterion() || this.isStrictOrOnlySelectValue();\n });\n\n private readonly lazyLoadedCriteria = signal<CriterionDefinition[] | undefined>(undefined);\n private readonly loadedCriteria = computed(() => {\n const lazyLoadedCriteria = this.lazyLoadedCriteria();\n if (lazyLoadedCriteria) {\n return lazyLoadedCriteria;\n } else {\n return this.criteria() ?? [];\n }\n });\n\n private readonly internalFreeTextCriterion = computed<InternalCriterionDefinition | undefined>(\n () => {\n const freeTextDef = this.freeTextCriterion();\n if (!freeTextDef) {\n return undefined;\n }\n return {\n ...freeTextDef,\n label: freeTextDef.label ?? freeTextDef.name,\n translatedLabel: freeTextDef.label ?? freeTextDef.name,\n type: 'free-text'\n };\n }\n );\n\n constructor() {\n const criteriaRestrictions = toObservable(\n computed(() => ({\n maxCriteria: this.maxCriteria(),\n values: this.values(),\n exclusiveCriteria: this.exclusiveCriteria()\n }))\n );\n\n this.dataSource = toObservable(this.lazyCriterionProvider).pipe(\n switchMap(lazyCriterionProvider => {\n if (lazyCriterionProvider) {\n return this.typeaheadInputChange.pipe(\n switchMap(value =>\n this.lazyCriterionProvider()!(value, this.searchCriteria()).pipe(\n debounceTime(this.lazyLoadingDebounceTime()),\n map(result => this.getCriteriaToDisplayFromSubscription(result))\n )\n )\n );\n } else {\n return criteriaRestrictions.pipe(\n map(({ maxCriteria, values, exclusiveCriteria }) =>\n this.getFilteredTypeaheadCriteria(maxCriteria, values, exclusiveCriteria)\n )\n );\n }\n }),\n switchMap(criteria => {\n return this.translateService.translateAsync(criteria.map(c => c.label)).pipe(\n map(translations => {\n criteria.forEach(c => (c.translatedLabel = translations[c.label] ?? c.label ?? c.name));\n return criteria;\n })\n );\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.criteria) {\n this.initCriteria();\n }\n if (\n (changes.searchCriteria && this.searchCriteria() !== this.lastEmittedSearchCriteria) ||\n changes.criteria\n ) {\n this.initValue();\n // Update typeahead since the criteria input can change while the free text input is focused.\n // This is necessary since the criteria are set as a result of an API call response.\n this.typeaheadInputChange.next(this.freeTextInputElement().nativeElement.value ?? '');\n }\n }\n\n ngOnInit(): void {\n if (this.strictCriterionOrValue() && this.internalCriterionDefinitions.length === 0) {\n throw new Error('strict criterion mode activated without predefined criteria!');\n }\n\n this.searchEmitQueue\n .pipe(debounceTime(this.searchDebounceTime()), takeUntilDestroyed(this.destroyRef))\n .subscribe(searchCriteria => this.doSearch.emit(searchCriteria!));\n }\n\n private initCriteria(): void {\n this.internalCriterionDefinitions = this.loadedCriteria().map(c => toInternalCriteria(c));\n }\n\n /**\n * Finds a criterion config for a given criterion value.\n * Checks internalCriterionDefinitions first, then freeTextCriterion.\n * Returns undefined if no config was found.\n */\n private findCriterionConfig(\n criterionValue: CriterionValue\n ): InternalCriterionDefinition | undefined {\n const config = this.internalCriterionDefinitions.find(ic => ic.name === criterionValue.name);\n\n if (config) {\n return config;\n }\n\n // Check if this matches the freeTextCriterion\n const freeTextDef = this.internalFreeTextCriterion();\n if (freeTextDef?.name === criterionValue.name) {\n return freeTextDef;\n }\n\n return undefined;\n }\n\n private initValue(): void {\n this.autoEditCriteria = false;\n this.searchValue.set(this.searchCriteria()?.value ?? '');\n this.values.set(\n this.searchCriteria()?.criteria.map(c => {\n const config =\n this.findCriterionConfig(c) ??\n ({\n name: c.name,\n label: c.name,\n translatedLabel: c.name\n } as InternalCriterionDefinition);\n\n let value = c.value ?? '';\n // Fix input, in case the user provided the value as string for the multi-select use case.\n if (config.multiSelect && typeof value === 'string') {\n value = value !== '' ? [value] : [];\n }\n\n let dateValue: Date | undefined;\n if (config.validationType === 'date' || config.validationType === 'date-time') {\n dateValue = value ? new Date(value.toString()) : new Date();\n value ??= getISODateString(\n dateValue,\n config.validationType === 'date' || config.datepickerConfig?.disabledTime\n ? 'date'\n : 'date-time',\n this.locale\n );\n }\n\n return {\n value: {\n name: c.name,\n value,\n ...(dateValue ? { dateValue } : {}),\n ...(c.operator ? { operator: c.operator } : {})\n },\n config\n };\n }) ?? []\n );\n this.lastEmittedSearchCriteria = this.searchCriteria();\n }\n\n /**\n * Deletes all currently selected criteria and effectively resets the filtered search.\n */\n deleteAllCriteria(event?: MouseEvent): void {\n if (this.disabled()) {\n return;\n }\n event?.stopPropagation();\n\n // Reset search criteria\n this.values.set([]);\n this.searchValue.set('');\n this.emitChangeEvent();\n this.typeaheadInputChange.next(this.searchValue());\n this.submit();\n }\n\n protected deleteCriterion(index: number, event: { triggerSearch: boolean } | void): void {\n if (this.disabled()) {\n return;\n }\n\n // Close any active overlays before deleting the criterion\n // This could happen in case when user has opened a multiselect pill\n // and then clicks on clear button of other pill.\n this.valueComponents().forEach(component => {\n component.closeOverlay();\n });\n this.cdRef.detectChanges();\n\n this.values.update(v => v.filter((_, i) => i !== index));\n this.emitChangeEvent();\n if (this.values().length !== index) {\n this.valueComponents()[index + 1].edit('value');\n } else {\n this.freeTextInputElement().nativeElement.focus();\n }\n this.typeaheadInputChange.next(this.searchValue());\n if (event?.triggerSearch) {\n this.submit();\n }\n }\n\n protected submit(): void {\n if (!this.doSearchOnInputChange()) {\n this.doSearch.emit(this.searchCriteria()!);\n }\n }\n\n protected typeaheadOnSelectCriterion(event: TypeaheadOption): void {\n const criterion = event as InternalCriterionDefinition;\n // Removes the focus border before creating a new criterion to prevent the impression of jumping content.\n this.freeTextInputElement().nativeElement.blur();\n this.addCriterion(criterion);\n // The user selected a criterion so we remove the free text search value and add the criterion.\n this.typeaheadInputChange.next('');\n this.searchValue.set('');\n }\n\n protected validateCriterionLabel(criterion: InternalCriterionDefinition): boolean {\n if (!this.strictCriterionOrValue()) {\n return true;\n }\n return this.internalCriterionDefinitions.includes(criterion);\n }\n\n /**\n * Converts the internally used data model to the external model.\n * In case options for Criterion is Option[] map to the value from the label.\n */\n private convertToExternalModel(): SearchCriteria {\n const correctedCriteria: SearchCriteria = {\n value: this.searchValue(),\n criteria: this.values().map(v => v.value)\n };\n // When free text search is disabled or free text pills are being used,\n // we must not return any free text value.\n if (this.disableFreeTextSearch() || this.freeTextCriterion()) {\n correctedCriteria.value = '';\n }\n return correctedCriteria;\n }\n\n private addCriterion(config: InternalCriterionDefinition, value?: string): void {\n if (config.multiSelect) {\n this.values.update(v => [...v, { value: { value: [], name: config.name }, config }]);\n } else if (config.validationType === 'date' || config.validationType === 'date-time') {\n const validationType = config.validationType;\n this.values.update(v => [\n ...v,\n {\n value: {\n dateValue: new Date(),\n value: getISODateString(new Date(), validationType, this.locale),\n name: config.name\n },\n config\n }\n ]);\n } else {\n this.values.update(v => [...v, { value: { value: value ?? '', name: config.name }, config }]);\n }\n\n this.autoEditCriteria = true;\n this.emitChangeEvent();\n }\n\n /**\n * Get criteria list to be shown in typeahead.\n * @returns list of criteria to be shown in typeahead.\n */\n private getFilteredTypeaheadCriteria(\n maxCriteria: number | undefined,\n values: { config: InternalCriterionDefinition; value: CriterionValue }[],\n exclusiveCriteria: boolean\n ): InternalCriterionDefinition[] {\n if (maxCriteria === undefined || values.length < maxCriteria) {\n const allowedCriteria = !exclusiveCriteria\n ? this.internalCriterionDefinitions\n : differenceByName(this.internalCriterionDefinitions, values);\n\n let allowedCriteriaCache: string[] | undefined;\n if (allowedCriteria.length > 0) {\n // Call interceptor to allow applications to customize the list of available criteria\n const available = allowedCriteria.map(c => c.name);\n // Ensure that all entries are allowed in case the consumer doesn't use the allow callback\n allowedCriteriaCache = available;\n this.interceptDisplayedCriteria.emit({\n criteria: available,\n searchCriteria: this.convertToExternalModel(),\n allow: (criteriaNamesToDisplay, allowFreeTextSearch) => {\n if (criteriaNamesToDisplay) {\n allowedCriteriaCache = criteriaNamesToDisplay;\n }\n if (allowFreeTextSearch !== undefined) {\n this.allowFreeTextCache.set(allowFreeTextSearch);\n }\n }\n });\n }\n\n return allowedCriteria.filter(c => allowedCriteriaCache?.includes(c.name));\n } else {\n return [];\n }\n }\n\n private getCriteriaToDisplayFromSubscription(\n result: CriterionDefinition[]\n ): InternalCriterionDefinition[] {\n this.lazyLoadedCriteria.set(result);\n this.internalCriterionDefinitions = this.loadedCriteria().map(c => toInternalCriteria(c));\n // It's necessary to update the criteria configuration since consuming applications may change the options.\n // A common case are criteria which depend on each other like Country, Site and Building. If the user change\n // the site the building options might become invalid.\n // KEEP THE REFERENCE, otherwise CD is broken\n this.values.update(currentValues =>\n currentValues.map(v =>\n Object.assign(v, {\n value: v.value,\n config: this.findCriterionConfig(v.value) ?? v.config\n })\n )\n );\n\n if (this.maxCriteria() === undefined || this.values().length < this.maxCriteria()!) {\n return !this.exclusiveCriteria()\n ? this.internalCriterionDefinitions\n : differenceByName(this.internalCriterionDefinitions, this.values());\n }\n\n return [];\n }\n\n protected freeTextFocus(): void {\n // Ensure that the free text input is fully visible in the scroll container\n const scrollDirection = isRTL() ? -1 : 1;\n const position = scrollDirection * this.scrollContainer().nativeElement.scrollWidth;\n this.scrollContainer().nativeElement.scrollLeft = position;\n this.typeaheadInputChange.next(this.freeTextInputElement().nativeElement.value);\n }\n\n protected freeTextBackspace(event: Event): void {\n if (!(event.target as HTMLInputElement).value) {\n // edit last criterion if a user presses backspace in empty search input.\n const valueComponents = this.valueComponents();\n if (valueComponents.length) {\n valueComponents[valueComponents.length - 1].edit('value');\n }\n }\n }\n\n protected freeTextInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n\n const match = value.match(SiFilteredSearchComponent.criterionRegex);\n if (!this.disableSelectionByColonAndSemicolon() && !this.onlySelectValue() && match) {\n const criterionName = match[1];\n if (this.searchValue() === '') {\n // The value was empty before, so we must make angular detect a change here.\n // Otherwise, the entire value which was pasted will remain in the input.\n // This happens if the user pasts something like: 'key:value'\n this.searchValue.set(value);\n this.cdRef.detectChanges();\n }\n this.searchValue.set('');\n\n const nameLowerCase = criterionName.toLocaleLowerCase();\n const criterion = this.internalCriterionDefinitions.find(\n ic => ic.translatedLabel.toLocaleLowerCase() === nameLowerCase\n ) ?? {\n name: criterionName,\n label: criterionName,\n translatedLabel: criterionName\n };\n\n this.typeaheadInputChange.next('');\n this.addCriterion(criterion, match[2]);\n } else {\n this.searchValue.set(value);\n\n // Only emit a change event if free text pills are not enabled and the free text search is enabled.\n if (!this.disableFreeTextSearch() && !this.freeTextCriterion()) {\n this.emitChangeEvent();\n }\n\n this.typeaheadInputChange.next(value);\n }\n }\n\n protected freeTextBlur(): void {\n queueMicrotask(() => {\n if (this.freeTextCriterion() && this.searchValue().length > 0) {\n this.createFreeTextPill(this.searchValue());\n }\n });\n }\n\n protected valueChange(\n value: CriterionValue,\n criterion: { config: InternalCriterionDefinition; value: CriterionValue }\n ): void {\n criterion.value = value;\n this.emitChangeEvent();\n }\n\n protected focusNext(index: number, event: { freeText: string } | void): void {\n const next = this.valueComponents()[index + 1];\n if (next) {\n next.edit();\n } else {\n this.searchValue.set(event?.freeText ?? this.searchValue());\n this.freeTextInputElement().nativeElement.focus();\n }\n }\n\n private updateAndEmitSearchCriteria(): void {\n this.searchCriteria.set(this.convertToExternalModel());\n this.lastEmittedSearchCriteria = this.searchCriteria();\n }\n\n private emitChangeEvent(): void {\n this.updateAndEmitSearchCriteria();\n if (this.doSearchOnInputChange()) {\n this.searchEmitQueue.next(this.searchCriteria());\n }\n }\n\n protected createFreeTextPill(query: string): void {\n const freeTextDefinition = this.internalFreeTextCriterion();\n const maxCriteria = this.maxCriteria();\n if (!freeTextDefinition || (maxCriteria && this.values().length >= maxCriteria)) {\n return;\n }\n this.values.update(v => [\n ...v,\n {\n value: {\n name: freeTextDefinition.name,\n value: query\n },\n config: freeTextDefinition\n }\n ]);\n this.searchValue.set('');\n this.emitChangeEvent();\n }\n}\n","<div\n #scrollContainer\n class=\"search-container d-flex align-items-center overflow-auto py-2 w-100 ps-2 pe-2\"\n>\n @for (criterion of values(); track criterion) {\n <si-filtered-search-value\n [editOnCreation]=\"autoEditCriteria\"\n [definition]=\"criterion.config\"\n [value]=\"criterion.value\"\n [invalidCriterion]=\"!validateCriterionLabel(criterion.config)\"\n [disabled]=\"disabled()\"\n [clearButtonLabel]=\"clearButtonLabel()\"\n [disableSelectionByColonAndSemicolon]=\"disableSelectionByColonAndSemicolon()\"\n [isStrictOrOnlySelectValue]=\"isStrictOrOnlySelectValue()\"\n [itemCountText]=\"itemCountText()\"\n [lazyValueProvider]=\"lazyValueProvider()\"\n [maxCriteriaOptions]=\"maxCriteriaOptions()\"\n [optionsInScrollableView]=\"optionsInScrollableView()\"\n [searchLabel]=\"searchLabel()\"\n [onlySelectValue]=\"onlySelectValue()\"\n [searchDebounceTime]=\"searchDebounceTime()\"\n (submitCriterion)=\"focusNext($index, $event)\"\n (deleteCriterion)=\"deleteCriterion($index, $event)\"\n (valueChange)=\"valueChange($event, criterion)\"\n />\n }\n <!-- criterion input -->\n <input\n #freeTextInputElement\n type=\"text\"\n class=\"value-input ps-2 me-2 flex-grow-1\"\n typeaheadOptionField=\"translatedLabel\"\n typeaheadClearValueOnSelect\n [siTypeahead]=\"dataSource\"\n [typeaheadMinLength]=\"0\"\n [typeaheadOptionsLimit]=\"typeaheadOptionsLimit()\"\n [typeaheadScrollable]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionsInScrollableView()\"\n [typeaheadAutoSelectIndex]=\"searchValue() ? 0 : -1\"\n [typeaheadCreateOption]=\"\n freeTextCriterion() &&\n (!maxCriteria() || values().length < maxCriteria()!) &&\n allowFreeTextCache()\n ? searchForFreeTextLabel()\n : undefined\n \"\n [disabled]=\"disabled()\"\n [placeholder]=\"placeholder()\"\n [attr.aria-label]=\"searchLabel() | translate\"\n [value]=\"searchValue()\"\n (focus)=\"freeTextFocus()\"\n (input)=\"freeTextInput($event)\"\n (blur)=\"freeTextBlur()\"\n (keydown.backspace)=\"freeTextBackspace($event)\"\n (keydown.enter)=\"submit()\"\n (typeaheadOnSelect)=\"typeaheadOnSelectCriterion($event.option)\"\n (typeaheadOnCreateOption)=\"createFreeTextPill($event)\"\n />\n</div>\n<!-- clear all searchCriteria -->\n@if (values().length || searchValue().length) {\n <div class=\"clear-button-container\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-sm btn-ghost mx-2\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"clearButtonLabel() | translate\"\n (click)=\"deleteAllCriteria($event)\"\n >\n <si-icon [icon]=\"icons.elementCancel\" />\n </button>\n </div>\n}\n\n@if (!disabled()) {\n <button\n type=\"button\"\n class=\"search-button btn btn-icon btn-sm btn-secondary focus-inside\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"submitButtonLabel() | translate\"\n (click)=\"submit()\"\n >\n <si-icon [icon]=\"icons.elementSearch\" />\n </button>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiFilteredSearchComponent } from './si-filtered-search.component';\n\n@NgModule({\n imports: [SiFilteredSearchComponent],\n exports: [SiFilteredSearchComponent]\n})\nexport class SiFilteredSearchModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-filtered-search.component';\nexport * from './si-filtered-search.model';\nexport * from './si-filtered-search.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|