@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.
Files changed (67) hide show
  1. package/fesm2022/siemens-element-ng-accordion.mjs +2 -2
  2. package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-application-header.mjs +3 -3
  4. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -1
  6. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
  8. package/fesm2022/siemens-element-ng-content-action-bar.mjs +2 -2
  9. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
  10. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  12. package/fesm2022/siemens-element-ng-datepicker.mjs +22 -24
  13. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  14. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  16. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-header-dropdown.mjs +2 -2
  18. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
  20. package/fesm2022/siemens-element-ng-main-detail-container.mjs +21 -25
  21. package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
  22. package/fesm2022/siemens-element-ng-menu.mjs +6 -6
  23. package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
  24. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +8 -4
  25. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  26. package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
  27. package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
  28. package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -1
  29. package/fesm2022/siemens-element-ng-photo-upload.mjs +1 -1
  30. package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
  31. package/fesm2022/siemens-element-ng-search-bar.mjs +7 -2
  32. package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
  33. package/fesm2022/siemens-element-ng-side-panel.mjs +164 -10
  34. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  35. package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
  36. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  37. package/fesm2022/siemens-element-ng-status-toggle.mjs +1 -1
  38. package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
  39. package/fesm2022/siemens-element-ng-tree-view.mjs +11 -3
  40. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  41. package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
  42. package/package.json +3 -3
  43. package/schematics/vitest-setup.js +5 -0
  44. package/types/siemens-element-ng-application-header.d.ts +1 -1
  45. package/types/siemens-element-ng-auto-collapsable-list.d.ts +1 -1
  46. package/types/siemens-element-ng-avatar.d.ts +1 -1
  47. package/types/siemens-element-ng-circle-status.d.ts +1 -1
  48. package/types/siemens-element-ng-dashboard.d.ts +2 -2
  49. package/types/siemens-element-ng-date-range-filter.d.ts +1 -1
  50. package/types/siemens-element-ng-datepicker.d.ts +7 -7
  51. package/types/siemens-element-ng-file-uploader.d.ts +1 -1
  52. package/types/siemens-element-ng-filtered-search.d.ts +1 -1
  53. package/types/siemens-element-ng-form.d.ts +1 -1
  54. package/types/siemens-element-ng-list-details.d.ts +1 -1
  55. package/types/siemens-element-ng-main-detail-container.d.ts +10 -11
  56. package/types/siemens-element-ng-navbar-vertical.d.ts +7 -3
  57. package/types/siemens-element-ng-navbar.d.ts +1 -1
  58. package/types/siemens-element-ng-number-input.d.ts +1 -1
  59. package/types/siemens-element-ng-phone-number.d.ts +1 -1
  60. package/types/siemens-element-ng-photo-upload.d.ts +1 -1
  61. package/types/siemens-element-ng-search-bar.d.ts +1 -1
  62. package/types/siemens-element-ng-side-panel.d.ts +115 -5
  63. package/types/siemens-element-ng-split.d.ts +2 -2
  64. package/types/siemens-element-ng-status-bar.d.ts +1 -1
  65. package/types/siemens-element-ng-status-toggle.d.ts +1 -1
  66. package/types/siemens-element-ng-tree-view.d.ts +1 -1
  67. package/types/siemens-element-ng-typeahead.d.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-typeahead.mjs","sources":["../../../../projects/element-ng/typeahead/si-typeahead-item-template.directive.ts","../../../../projects/element-ng/typeahead/si-typeahead.component.ts","../../../../projects/element-ng/typeahead/si-typeahead.component.html","../../../../projects/element-ng/typeahead/si-typeahead.search.ts","../../../../projects/element-ng/typeahead/si-typeahead.sorting.ts","../../../../projects/element-ng/typeahead/si-typeahead.directive.ts","../../../../projects/element-ng/typeahead/si-typeahead.module.ts","../../../../projects/element-ng/typeahead/index.ts","../../../../projects/element-ng/typeahead/siemens-element-ng-typeahead.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive } from '@angular/core';\n\nimport { TypeaheadOptionItemContext } from './si-typeahead.model';\n\n@Directive({\n selector: '[siTypeaheadItemTemplate]'\n})\nexport class SiTypeaheadItemTemplateDirective {\n static ngTemplateContextGuard(\n dir: SiTypeaheadItemTemplateDirective,\n ctx: any\n ): ctx is TypeaheadOptionItemContext {\n return true;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n HostListener,\n inject,\n viewChild\n} from '@angular/core';\nimport {\n SiAutocompleteDirective,\n SiAutocompleteListboxDirective,\n SiAutocompleteOptionDirective\n} from '@siemens/element-ng/autocomplete';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiLoadingSpinnerDirective } from '@siemens/element-ng/loading-spinner';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiTypeaheadItemTemplateDirective } from './si-typeahead-item-template.directive';\nimport { SiTypeaheadDirective } from './si-typeahead.directive';\nimport { TypeaheadMatch } from './si-typeahead.model';\n\n@Component({\n selector: 'si-typeahead',\n imports: [\n SiAutocompleteListboxDirective,\n SiAutocompleteOptionDirective,\n SiIconComponent,\n NgTemplateOutlet,\n SiTranslatePipe,\n SiTypeaheadItemTemplateDirective,\n SiLoadingSpinnerDirective\n ],\n templateUrl: './si-typeahead.component.html',\n styleUrl: './si-typeahead.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'w-100' }\n})\nexport class SiTypeaheadComponent implements AfterViewInit {\n protected parent = inject(SiTypeaheadDirective);\n protected readonly matches = computed(() =>\n this.parent.typeaheadOptionsLimit()\n ? this.parent.foundMatches().slice(0, this.parent.typeaheadOptionsLimit())\n : this.parent.foundMatches()\n );\n\n protected readonly multiselect = computed(() => this.parent.typeaheadMultiSelect());\n\n private readonly typeaheadElement = viewChild.required('typeahead', {\n read: ElementRef\n });\n\n protected autocompleteDirective = inject(SiAutocompleteDirective);\n\n ngAfterViewInit(): void {\n this.setHeight(this.typeaheadElement());\n }\n\n @HostListener('mousedown', ['$event'])\n protected onMouseDown(event: Event): void {\n event.preventDefault();\n }\n\n /*\n * Set the height of the element passed to it (typeahead) if there are items displayed,\n * the number of displayed items changed and it is scrollable.\n */\n private setHeight(element: ElementRef): void {\n if (this.matches().length) {\n if (\n this.parent.typeaheadScrollable() &&\n this.parent.typeaheadOptionsInScrollableView() < this.matches().length\n ) {\n const computedStyle = getComputedStyle(element.nativeElement);\n const matchComputedStyle = getComputedStyle(element.nativeElement.firstElementChild);\n const matchHeight = parseFloat(matchComputedStyle.height || '0');\n const paddingTop = parseFloat(computedStyle.paddingTop || '0');\n const paddingBottom = parseFloat(computedStyle.paddingBottom || '');\n const height = this.parent.typeaheadOptionsInScrollableView() * matchHeight;\n element.nativeElement.style.maxBlockSize = `${\n height + paddingTop + paddingBottom + this.parent.typeaheadScrollableAdditionalHeight()\n }px`;\n } else {\n element.nativeElement.style.maxBlockSize = 'auto';\n }\n }\n }\n\n // Gets called when a match is selected by clicking on it.\n protected selectMatch(match: TypeaheadMatch | undefined): void {\n if (match) {\n this.parent.selectMatch(match);\n } else {\n this.parent.createOption();\n }\n }\n}\n","<!-- Template to be used for every match, can be replaced using an input. -->\n<ng-template #defaultItemTemplate let-match=\"match\" siTypeaheadItemTemplate>\n @if (multiselect()) {\n <div class=\"d-flex pe-4\" aria-hidden=\"true\">\n <span class=\"form-check-input si-form-checkbox\" [class.checked]=\"match.itemSelected\"></span>\n </div>\n }\n @if (match.iconClass) {\n <si-icon class=\"icon me-2\" [icon]=\"match.iconClass\" />\n }\n @for (segment of match.result; track $index) {\n <span [class.typeahead-match-segment-matching]=\"segment.isMatching\">{{ segment.text }}</span>\n }\n</ng-template>\n\n@let createOption = parent.typeaheadCreateOption();\n\n<!-- Only display the component if there are any matches and set the CSS transform to properly position the typeahead -->\n<ul\n #typeahead\n class=\"typeahead dropdown-menu\"\n [class.empty-loading]=\"parent.typeaheadLoading() && matches().length === 0\"\n [siLoading]=\"parent.typeaheadLoading() && matches().length === 0\"\n [initialDelay]=\"false\"\n [siAutocompleteListboxFor]=\"autocompleteDirective\"\n [siAutocompleteDefaultIndex]=\"parent.typeaheadAutoSelectIndex()\"\n [attr.aria-label]=\"parent.typeaheadAutocompleteListLabel() | translate\"\n (siAutocompleteOptionSubmitted)=\"selectMatch($event)\"\n>\n @if (parent.typeaheadLoading() && matches().length) {\n <li class=\"dropdown-item\" [siLoading]=\"true\" [initialDelay]=\"false\"></li>\n }\n <!-- Loop through every match and bind events, the mousedown prevent default is to prevent the host from losing focus on click -->\n @for (match of matches(); track $index) {\n <li\n #typeaheadMatch\n class=\"dropdown-item\"\n [siAutocompleteOption]=\"match\"\n [attr.aria-label]=\"match.text\"\n [attr.aria-selected]=\"multiselect() ? match.itemSelected : null\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <!-- Display either a template set as the input or the template above -->\n <ng-template\n [ngTemplateOutlet]=\"parent.typeaheadItemTemplate() || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: match.option,\n index: $index,\n match: match,\n query: parent.query()\n }\"\n />\n </li>\n }\n @if (createOption && parent.query().length) {\n <li class=\"dropdown-item\" [siAutocompleteOption]=\"undefined\">\n {{ createOption | translate: { query: parent.query() } }}\n </li>\n }\n</ul>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { computed, Signal, untracked } from '@angular/core';\n\nexport interface SearchOptions<T> {\n /** The text that will be used for searching. */\n text: string;\n /** The raw option that will be also included in the Match results */\n option: T;\n}\n\nexport interface MatchSegment {\n text: string;\n isMatching: boolean;\n matches: number;\n uniqueMatches: number;\n}\n\nexport interface Match<T> {\n option: T;\n text: string;\n result: MatchSegment[];\n stringMatch: boolean;\n atBeginning: boolean;\n matches: number;\n uniqueMatches: number;\n uniqueSeparateMatches: number;\n matchesEntireQuery: boolean;\n matchesAllParts: boolean;\n matchesAllPartsSeparately: boolean;\n}\n\nexport interface SearchConfig {\n /** Defines whether to tokenize the search or match the whole search. */\n disableTokenizing?: boolean;\n /**\n * Defines whether and how to require to match with all the tokens if {@link typeaheadTokenize} is enabled.\n * - `no` does not require all of the tokens to match.\n * - `once` requires all of the parts to be found in the search.\n * - `separately` requires all of the parts to be found in the search where there is not an overlapping different result.\n * - `independently` requires all of the parts to be found in the search where there is not an overlapping or adjacent different result.\n * ('independently' also slightly changes sorting behavior in the same way.)\n */\n matchAllTokens: 'no' | 'once' | 'separately' | 'independently';\n /**\n * When enabled, the search output will only be updated, if the options are changed.\n * Query changes will not trigger an update.\n *\n * Use this when lazy loading the options, so the search need to wait, until the options are loaded.\n */\n lazy?: boolean;\n}\n\n/**\n * Constructs a typeahead search and provides the matches as a signal.\n *\n * @param options - Factory function that should return the array of options to search in.\n * Is run in a reactive context.\n * @param query - Factory function that should return the current search query. Is run in a reactive context.\n * @param config - Configuration for the search. Is run in a reactive context.\n *\n * @example\n * In a real world, myOptions and mayQuery would be signals.\n * ```ts\n * const search = typeaheadSearch(\n * () => myOptions().map(...),\n * () => myQuery().toLowerCase(),\n * () => ({ matchAllTokens: 'separately' })\n * )\n * ```\n */\nexport const typeaheadSearch = <T>(\n options: () => SearchOptions<T>[],\n query: () => string,\n config: () => SearchConfig\n): Signal<Match<T>[]> => computed(() => new TypeaheadSearch<T>(options, query, config()).matches());\n\nclass TypeaheadSearch<T> {\n readonly matches = computed<Match<T>[]>(() => this.search(this.datasource(), this.readQuery()));\n\n constructor(\n private readonly datasource: () => SearchOptions<T>[],\n private readonly query: () => string,\n private readonly options: SearchConfig\n ) {}\n\n private readQuery(): string {\n if (this.options.lazy) {\n return untracked(() => this.query());\n } else {\n return this.query();\n }\n }\n\n private escapeRegex(query: string): string {\n return query.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n }\n\n private search(options: SearchOptions<T>[], query: string): Match<T>[] {\n try {\n const entireQueryRegex = new RegExp(this.escapeRegex(query), 'gi');\n\n const queryParts = !this.options.disableTokenizing\n ? query.split(/\\s+/g).filter(queryPart => queryPart)\n : query\n ? [query]\n : [];\n\n const queryRegexes = queryParts.map(\n queryPart => new RegExp(this.escapeRegex(queryPart), 'gi')\n );\n // Process the options.\n const matches: Match<T>[] = [];\n options.forEach(option => {\n const optionValue = option.text;\n const stringMatch =\n optionValue.toLocaleLowerCase().trim() === query.toLocaleLowerCase().trim();\n const candidate: Match<T> = {\n option: option.option,\n text: optionValue,\n result: [],\n stringMatch,\n atBeginning: false,\n matches: 0,\n uniqueMatches: 0,\n uniqueSeparateMatches: 0,\n matchesEntireQuery: false,\n matchesAllParts: false,\n matchesAllPartsSeparately: false\n };\n\n // Only search the options if a part of the query is at least one character long to prevent an endless loop.\n if (queryParts.length === 0) {\n if (optionValue) {\n candidate.result.push({\n text: optionValue,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n matches.push(candidate);\n } else {\n const allResults: { index: number; start: number; end: number; result: string }[] = [];\n const allIndexes: number[] = [];\n\n candidate.matchesEntireQuery = !!optionValue.match(entireQueryRegex);\n\n // Loop through the option value to find multiple matches, then store every segment (matching or non-matching) in the results.\n queryRegexes.forEach((queryRegex, index) => {\n let regexMatch = queryRegex.exec(optionValue);\n\n while (regexMatch) {\n allResults.push({\n index,\n start: regexMatch.index,\n end: regexMatch.index + regexMatch[0].length,\n result: regexMatch[0]\n });\n if (!regexMatch.index) {\n candidate.atBeginning = true;\n }\n if (!allIndexes.includes(index)) {\n allIndexes.push(index);\n }\n regexMatch = queryRegex.exec(optionValue);\n }\n });\n\n candidate.matchesAllParts = allIndexes.length === queryParts.length;\n\n // Check if all parts of the query match at least once (if required).\n if (this.options.matchAllTokens === 'no' || candidate.matchesAllParts) {\n const combinedResults: {\n indexes: number[];\n uniqueIndexes: number[];\n start: number;\n end: number;\n result: string;\n }[] = [];\n\n // First combine intersecting (or if set to independently adjacent) results to combined results.\n // We achieve this by first sorting them by the starting index, then by the ending index and then looking for overlaps.\n allResults\n .sort((a, b) => a.start - b.start || a.end - b.end)\n .forEach(result => {\n if (combinedResults.length) {\n const foundPreviousResult = combinedResults.find(previousResult =>\n this.options.matchAllTokens === 'independently'\n ? result.start <= previousResult.end\n : result.start < previousResult.end\n );\n if (foundPreviousResult) {\n foundPreviousResult.result += result.result.slice(\n foundPreviousResult.end - result.start,\n result.result.length\n );\n if (result.end > foundPreviousResult.end) {\n foundPreviousResult.end = result.end;\n }\n foundPreviousResult.indexes.push(result.index);\n if (!foundPreviousResult.uniqueIndexes.includes(result.index)) {\n foundPreviousResult.uniqueIndexes.push(result.index);\n }\n return;\n }\n }\n combinedResults.push({\n ...result,\n indexes: [result.index],\n uniqueIndexes: [result.index]\n });\n });\n\n // Recursively go through all unique combinations of the unique indexes to get the option which has the most indexes.\n const countUniqueSubindexes = (\n indexIndex = 0,\n previousIndexes: number[] = []\n ): number =>\n indexIndex === combinedResults.length\n ? previousIndexes.length\n : Math.max(\n previousIndexes.length,\n ...combinedResults[indexIndex].uniqueIndexes\n .filter(index => !previousIndexes.includes(index))\n .map(index =>\n countUniqueSubindexes(indexIndex + 1, [index, ...previousIndexes])\n )\n );\n\n candidate.uniqueSeparateMatches = countUniqueSubindexes();\n candidate.matchesAllPartsSeparately =\n candidate.uniqueSeparateMatches === queryParts.length;\n\n let currentPreviousEnd = 0;\n\n // Add the combined results to the candidate including the non-matching parts in between.\n combinedResults.forEach(result => {\n const textBefore = optionValue.slice(currentPreviousEnd, result.start);\n if (textBefore) {\n candidate.result.push({\n text: textBefore,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n candidate.result.push({\n text: result.result,\n isMatching: true,\n matches: result.indexes.length,\n uniqueMatches: result.uniqueIndexes.length\n });\n currentPreviousEnd = result.end;\n candidate.matches += result.indexes.length;\n candidate.uniqueMatches += result.uniqueIndexes.length;\n });\n\n // Check if there are result segments and all parts are matched independently (if required).\n if (\n candidate.result.length !== 0 &&\n ((this.options.matchAllTokens !== 'separately' &&\n this.options.matchAllTokens !== 'independently') ||\n candidate.matchesAllPartsSeparately)\n ) {\n const textAtEnd = optionValue.slice(currentPreviousEnd);\n if (textAtEnd) {\n candidate.result.push({\n text: textAtEnd,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n matches.push(candidate);\n }\n }\n }\n });\n\n return matches;\n } catch {\n // Could not create regex (only in extremely rare cases, maybe even impossible), so return an empty array.\n return [];\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { TypeaheadMatch } from './si-typeahead.model';\n\nexport class SiTypeaheadSorting {\n sortMatches(matches: TypeaheadMatch[]): TypeaheadMatch[] {\n // Sort the matches,\n // first is the option and query an exact match.\n // then according to whether it is matching in the beginning,\n // then whether it matches the entire untokenized query.\n // then according to how many unique separate matches it contains.\n // then according to how many unique matches it contains.\n // then according to how many matches it contains.\n return matches.sort((matchA, matchB) => {\n if (matchA.stringMatch || matchB.stringMatch) {\n return matchA.stringMatch ? -1 : 1;\n }\n if (matchA.atBeginning) {\n return !matchB.atBeginning ? -1 : this.compareMatches(matchA, matchB);\n } else {\n return matchB.atBeginning ? 1 : this.compareMatches(matchA, matchB);\n }\n });\n }\n\n private compareMatchesNumbers(matchA: TypeaheadMatch, matchB: TypeaheadMatch): number {\n return (\n matchB.uniqueSeparateMatches - matchA.uniqueSeparateMatches ||\n matchB.uniqueMatches - matchA.uniqueMatches ||\n matchB.matches - matchA.matches\n );\n }\n\n private compareMatches(matchA: TypeaheadMatch, matchB: TypeaheadMatch): number {\n if (matchA.matchesEntireQuery) {\n return !matchB.matchesEntireQuery ? -1 : this.compareMatchesNumbers(matchA, matchB);\n } else {\n return matchB.matchesEntireQuery ? 1 : this.compareMatchesNumbers(matchA, matchB);\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ConnectionPositionPair,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategy\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\n ComponentRef,\n computed,\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n numberAttribute,\n OnChanges,\n OnDestroy,\n output,\n signal,\n SimpleChanges,\n TemplateRef\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { SiAutocompleteDirective } from '@siemens/element-ng/autocomplete';\nimport { t, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { catchError, isObservable, ReplaySubject, Subscription, timer } from 'rxjs';\nimport { map, share, switchMap, takeUntil } from 'rxjs/operators';\n\nimport { SiTypeaheadComponent } from './si-typeahead.component';\nimport {\n Typeahead,\n TypeaheadArray,\n TypeaheadMatch,\n TypeaheadOption,\n TypeaheadOptionItemContext,\n TypeaheadOptionSource\n} from './si-typeahead.model';\nimport { typeaheadSearch } from './si-typeahead.search';\nimport { SiTypeaheadSorting } from './si-typeahead.sorting';\n\n@Directive({\n selector: '[siTypeahead]',\n host: {\n class: 'si-typeahead'\n },\n hostDirectives: [SiAutocompleteDirective],\n exportAs: 'si-typeahead'\n})\nexport class SiTypeaheadDirective implements OnChanges, OnDestroy {\n protected static readonly overlayPositions: ConnectionPositionPair[] = [\n {\n overlayX: 'start',\n overlayY: 'top',\n originX: 'start',\n originY: 'bottom',\n offsetY: 2\n },\n {\n overlayX: 'start',\n overlayY: 'bottom',\n originX: 'start',\n originY: 'top',\n offsetY: -4\n },\n {\n overlayX: 'end',\n overlayY: 'top',\n originX: 'end',\n originY: 'bottom',\n offsetY: 2\n },\n {\n overlayX: 'end',\n overlayY: 'bottom',\n originX: 'end',\n originY: 'top',\n offsetY: -4\n }\n ];\n\n /**\n * Set the options of the typeahead.\n * Has to be either an Array or an Observable of an Array\n * of options (string or object)\n */\n readonly siTypeahead = input.required<Typeahead>();\n\n /**\n * Turns on/off the processing (searching and sorting) of the typeahead options.\n * Is used when searching and sorting is done externally.\n *\n * @defaultValue true\n */\n readonly typeaheadProcess = input(true, {\n transform: booleanAttribute\n });\n /**\n * Makes the typeahead scrollable and sets its height.\n * Uses {@link typeaheadOptionsInScrollableView} and {@link typeaheadScrollableAdditionalHeight}.\n *\n * @defaultValue false\n */\n readonly typeaheadScrollable = input(false, { transform: booleanAttribute });\n\n /**\n * If {@link typeaheadScrollable} is `true`, defines the number of items visible at once.\n *\n * @defaultValue 10\n */\n readonly typeaheadOptionsInScrollableView = input(10);\n\n /**\n * Defines the maximum number of items added into the DOM. Default is 20 and 0 means unlimited.\n *\n * @defaultValue 20\n */\n readonly typeaheadOptionsLimit = input(20);\n\n /**\n * If {@link typeaheadScrollable} is `true`, defines the number of additional pixels\n * to be added the the bottom of the typeahead to show users that it is scrollable.\n *\n * @defaultValue 13\n */\n readonly typeaheadScrollableAdditionalHeight = input(13);\n\n /**\n * Defines the index of the item which should automatically be selected.\n *\n * @defaultValue 0\n */\n readonly typeaheadAutoSelectIndex = input(0, { transform: numberAttribute });\n /**\n * Defines whether the typeahead can be closed using escape.\n *\n * @defaultValue true\n */\n readonly typeaheadCloseOnEsc = input(true, { transform: booleanAttribute });\n /**\n * Defines whether the host value should be cleared when a value is selected.\n *\n * @defaultValue false\n */\n readonly typeaheadClearValueOnSelect = input(false, { transform: booleanAttribute });\n /**\n * Defines the number of milliseconds to wait before displaying a typeahead after the host was\n * focused or a value inputted.\n *\n * @defaultValue 0\n */\n readonly typeaheadWaitMs = input(0);\n\n /**\n * Defines the number of characters the value of the host needs to be before a typeahead is displayed.\n * Use `0` to have it display when focussing the host (clicking or tabbing into it).\n *\n * @defaultValue 1\n */\n readonly typeaheadMinLength = input(1);\n\n /**\n * Defines the name of the field/property the option string is in when the typeahead options are objects.\n *\n * @defaultValue 'name'\n */\n readonly typeaheadOptionField = input('name');\n /**\n * Defines whether multiselection of typeahead is possible with checkboxes.\n *\n * @defaultValue false\n */\n readonly typeaheadMultiSelect = input(false, { transform: booleanAttribute });\n\n /**\n * Defines whether to tokenize the search or match the whole search.\n *\n * @defaultValue true\n */\n readonly typeaheadTokenize = input(true, { transform: booleanAttribute });\n /**\n * Defines whether and how to require to match with all the tokens if {@link typeaheadTokenize} is enabled.\n * - `no` does not require all of the tokens to match.\n * - `once` requires all of the parts to be found in the search.\n * - `separately` requires all of the parts to be found in the search where there is not an overlapping different result.\n * - `independently` requires all of the parts to be found in the search where there is not an overlapping or adjacent different result.\n * ('independently' also slightly changes sorting behavior in the same way.)\n *\n * @defaultValue 'separately'\n */\n readonly typeaheadMatchAllTokens = input<'no' | 'once' | 'separately' | 'independently'>(\n 'separately'\n );\n /**\n * Defines an optional template to use as the typeahead match item instead of the one built in.\n * Gets the {@link TypeaheadOptionItemContext} passed to it.\n */\n readonly typeaheadItemTemplate = input<TemplateRef<TypeaheadOptionItemContext>>();\n /**\n * Skip the sorting of matches.\n * If the value is `true`, the matches are sorted according to {@link SiTypeaheadSorting}.\n *\n * @defaultValue false\n */\n readonly typeaheadSkipSortingMatches = input(false, { transform: booleanAttribute });\n\n /**\n * Screen reader only label for the autocomplete list.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_TYPEAHEAD.AUTOCOMPLETE_LIST_LABEL:Suggestions`)\n * ```\n */\n readonly typeaheadAutocompleteListLabel = input(\n t(() => $localize`:@@SI_TYPEAHEAD.AUTOCOMPLETE_LIST_LABEL:Suggestions`)\n );\n\n /**\n * If set, the typeahead will at minium have the width of the connected input field.\n *\n * @defaultValue false\n */\n readonly typeaheadFullWidth = input(false, { transform: booleanAttribute });\n\n /**\n * Optional CDK scroll strategy used for the typeahead overlay.\n * If not provided, no strategy is set explicitly and CDK will apply its default behavior.\n */\n readonly typeaheadScrollStrategy = input<ScrollStrategy>();\n\n /**\n * This option will be shown at the end of the typeahead.\n * Use it to allow users to create new options on the fly.\n *\n * Use the `{{ query }}` parameter in translation values to include the current text from the input.\n *\n * @experimental\n */\n readonly typeaheadCreateOption = input<TranslatableString>();\n /**\n * Emits an Event when the input field is changed.\n */\n readonly typeaheadOnInput = output<string>();\n /**\n * Emits an Event when a typeahead match is selected.\n * The event is a {@link TypeaheadMatch}\n */\n readonly typeaheadOnSelect = output<TypeaheadMatch>();\n\n /**\n * Emits an Event when a typeahead full match exists. A full match occurs when the entered text\n * is equal to one of the typeahead options.\n * The event is a {@link TypeaheadMatch}\n */\n readonly typeaheadOnFullMatch = output<TypeaheadMatch>();\n\n /** Emits whenever the typeahead overlay is opened or closed. */\n readonly typeaheadOpenChange = output<boolean>();\n\n /**\n * Emits when the create option is selected.\n * It will emit the current search query.\n *\n * @experimental\n */\n readonly typeaheadOnCreateOption = output<string>();\n\n /** @internal */\n readonly foundMatches = computed(() =>\n this.typeaheadProcess() ? this.processedSearch() : this.unprocessedSearch()\n );\n /** @internal */\n readonly query = signal('');\n\n /**\n * Indicates whether the typeahead is shown.\n */\n get typeaheadOpen(): boolean {\n return !!this.componentRef;\n }\n private overlay = inject(Overlay);\n private elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private injector = inject(Injector);\n\n private $typeahead = new ReplaySubject<TypeaheadArray>(1);\n private componentRef?: ComponentRef<SiTypeaheadComponent>;\n private inputTimer: any;\n\n private sourceSubscription?: Subscription;\n private matchSorter = new SiTypeaheadSorting();\n\n private overlayRef?: OverlayRef;\n\n private loadingSubscription?: Subscription;\n\n /**\n * Indicates whether the typeahead is currently loading.\n * When using {@link TypeaheadOptionSource}, this is controlled by the `isLoading()` method\n * or automatically set to `true` while fetching options.\n *\n * @internal\n * @defaultValue false\n */\n readonly typeaheadLoading = signal(false);\n\n /**\n * Indicates that the typeahead can be potentially open.\n * This signal is typically `true` when the input is focussed.\n * It may be overridden and set to `false` when escape is pressed\n * or when an option was selected.\n */\n private readonly canBeOpen = signal(false);\n private readonly selectionCounter = signal(0);\n private readonly typeaheadOptions = toSignal(\n this.$typeahead.pipe(\n map(options =>\n options.map(option => ({\n text: this.getOptionValue(option),\n option\n }))\n )\n ),\n { initialValue: [] }\n );\n private readonly typeaheadSearch = typeaheadSearch(\n this.typeaheadOptions,\n this.query,\n computed(() => ({\n matchAllTokens: this.typeaheadMatchAllTokens(),\n disableTokenizing: !this.typeaheadTokenize(),\n skipProcessing: !this.typeaheadProcess(),\n lazy: !(Array.isArray(this.siTypeahead()) || isObservable(this.siTypeahead()))\n }))\n );\n private readonly processedSearch = computed(() => {\n this.selectionCounter(); // This is a workaround for the multi-select which needs to trigger a change detection in the typeahead component.\n const matches = this.typeaheadSearch().map(match => ({\n ...match,\n itemSelected: this.typeaheadMultiSelect()\n ? (match.option as Record<string, any>).selected\n : false,\n iconClass: this.getOptionField(match.option, 'iconClass')\n }));\n\n if (this.typeaheadSkipSortingMatches()) {\n return matches;\n } else {\n return this.matchSorter.sortMatches(matches);\n }\n });\n private readonly unprocessedSearch = computed(() => {\n this.selectionCounter(); // This is a workaround for the multi-select which needs to trigger a change detection in the typeahead component.\n return this.typeaheadOptions().map(option => {\n const itemSelected = this.typeaheadMultiSelect()\n ? (option as Record<string, any>).selected\n : false;\n return {\n option,\n text: option.text,\n result: option.text\n ? [{ text: option.text, isMatching: false, matches: 0, uniqueMatches: 0 }]\n : [],\n itemSelected,\n iconClass: this.getOptionField(option.option, 'iconClass'),\n stringMatch: false,\n atBeginning: false,\n matches: 0,\n uniqueMatches: 0,\n uniqueSeparateMatches: 0,\n matchesEntireQuery: false,\n matchesAllParts: false,\n matchesAllPartsSeparately: false,\n active: false\n };\n });\n });\n\n constructor() {\n effect(() => {\n // The value needs to fulfil the minimum length requirement set.\n const matches = this.foundMatches();\n if (\n this.canBeOpen() &&\n this.query().length >= this.typeaheadMinLength() &&\n // Ensure that we have content to show: matches, create option or loading indicator\n (matches.length ||\n (this.typeaheadCreateOption() && this.query().length) ||\n this.typeaheadLoading())\n ) {\n const escapedQuery = this.escapeRegex(this.query());\n const equalsExp = new RegExp(`^${escapedQuery}$`, 'i');\n const fullMatches = matches.filter(\n match => match.result.length === 1 && equalsExp.test(match.text)\n );\n if (fullMatches.length > 0) {\n this.typeaheadOnFullMatch.emit(fullMatches[0]);\n }\n this.loadComponent();\n } else {\n this.removeComponent();\n }\n });\n }\n\n // Every time the main input changes, detect whether it is async and if it is not make an observable out of the array.\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.siTypeahead) {\n this.sourceSubscription?.unsubscribe();\n this.loadingSubscription?.unsubscribe();\n const typeahead = this.siTypeahead();\n\n if (Array.isArray(typeahead)) {\n // Handle TypeaheadArray\n this.$typeahead.next(typeahead);\n this.typeaheadLoading.set(false);\n } else if (isObservable(typeahead)) {\n // Handle TypeaheadObservable\n this.sourceSubscription = typeahead.subscribe(this.$typeahead);\n this.typeaheadLoading.set(false);\n } else if (typeof typeahead === 'function') {\n // Handle TypeaheadOptionSource\n this.handleTypeaheadOptionSource(typeahead);\n }\n }\n }\n\n // Clear the current input timeout (if set) and remove the component when the focus of the host is lost.\n @HostListener('focusout')\n protected onBlur(): void {\n this.clearTimer();\n this.canBeOpen.set(false);\n }\n\n // Start the input timeout to display the typeahead when the host is focussed or a value is inputted into it.\n @HostListener('focusin', ['$event'])\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n if (!target) {\n return;\n }\n\n // Get the value or otherwise textContent of the host element now, because later it could be reset.\n const firstValue = target.value || target.textContent;\n this.inputTimer ??= setTimeout(() => {\n this.inputTimer = undefined;\n const value = (target.value || target.textContent) ?? firstValue ?? '';\n this.query.set(value);\n this.typeaheadOnInput.emit(value ?? '');\n this.canBeOpen.set(true);\n }, this.typeaheadWaitMs());\n }\n\n @HostListener('keydown.escape')\n protected onKeydownEscape(): void {\n if (this.typeaheadCloseOnEsc()) {\n this.clearTimer();\n this.canBeOpen.set(false);\n }\n }\n\n ngOnDestroy(): void {\n this.clearTimer();\n this.sourceSubscription?.unsubscribe();\n this.loadingSubscription?.unsubscribe();\n\n this.overlayRef?.dispose();\n }\n\n /**\n * Handles TypeaheadOptionSource by subscribing to query changes and fetching options.\n * Manages loading state automatically or uses custom isLoading() observable if provided.\n */\n private handleTypeaheadOptionSource(source: TypeaheadOptionSource): void {\n this.sourceSubscription = new Subscription();\n const queryObservable = toObservable(this.query, { injector: this.injector });\n const resultObservable = queryObservable.pipe(\n switchMap(query => source(query)),\n // Catch errors by the source observable to prevent endless spinner. Showing the error is not our responsibility.\n catchError(e => {\n console.error(e);\n return [];\n }),\n share()\n );\n\n this.sourceSubscription.add(\n queryObservable\n .pipe(switchMap(() => timer(500).pipe(takeUntil(resultObservable))))\n .subscribe(() => this.typeaheadLoading.set(true))\n );\n\n this.sourceSubscription.add(\n resultObservable.subscribe(result => {\n this.$typeahead.next(result);\n this.typeaheadLoading.set(false);\n })\n );\n }\n\n // Dynamically create the typeahead component and then set the matches and the query.\n private loadComponent(): void {\n if (!this.overlayRef?.hasAttached()) {\n this.overlayRef?.dispose();\n\n const overlayConfig: OverlayConfig = {\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement)\n .withPositions(SiTypeaheadDirective.overlayPositions),\n minWidth: this.typeaheadFullWidth()\n ? this.elementRef.nativeElement.getBoundingClientRect().width + 2 // 2px border\n : 0\n };\n\n const scrollStrategy = this.typeaheadScrollStrategy();\n if (scrollStrategy) {\n overlayConfig.scrollStrategy = scrollStrategy;\n }\n\n this.overlayRef = this.overlay.create(overlayConfig);\n }\n\n if (this.overlayRef.hasAttached()) {\n return;\n }\n const typeaheadPortal = new ComponentPortal(SiTypeaheadComponent, null, this.injector);\n this.componentRef = this.overlayRef.attach(typeaheadPortal);\n this.typeaheadOpenChange.emit(true);\n }\n\n /**\n * Extracts the display value from a typeahead option.\n *\n * For string options, returns the string value directly.\n * For object options, returns the value of the field specified by {@link typeaheadOptionField}\n * (defaults to 'name'), or an empty string if the field doesn't exist.\n *\n * @param option - The typeahead option to extract the value from\n * @returns The string representation of the option for display purposes\n */\n private getOptionValue(option: TypeaheadOption): string {\n return typeof option !== 'object'\n ? option.toString()\n : (option[this.typeaheadOptionField()] ?? '');\n }\n\n /**\n * Extracts a specific field value from a typeahead option.\n *\n * This method is used to access additional properties of object-type options,\n * such as 'selected' for multi-select functionality or 'iconClass' for displaying icons.\n *\n * @param option - The typeahead option to extract the field from\n * @param field - The name of the field to extract\n * @returns The field value as a string if the option is an object and the field exists,\n * otherwise undefined\n */\n private getOptionField(option: TypeaheadOption, field: string): string | undefined {\n return typeof option !== 'object' ? undefined : option[field];\n }\n\n /** @internal */\n createOption(): void {\n this.typeaheadOnCreateOption.emit(this.query());\n this.clearTimer();\n if (!this.typeaheadMultiSelect() && this.typeaheadClearValueOnSelect()) {\n const inputElement =\n this.elementRef.nativeElement.querySelector('input')! ?? this.elementRef.nativeElement;\n inputElement.value = '';\n inputElement.dispatchEvent(new Event('input'));\n }\n this.canBeOpen.set(false);\n }\n\n // Select a match, either gets called due to a enter keypress or from the component due to a click.\n /** @internal */\n selectMatch(match: TypeaheadMatch): void {\n match.itemSelected = !match.itemSelected;\n if (!this.typeaheadMultiSelect()) {\n const inputElement =\n this.elementRef.nativeElement.querySelector('input')! ?? this.elementRef.nativeElement;\n inputElement.value = this.typeaheadClearValueOnSelect() ? '' : match.text;\n inputElement.dispatchEvent(new Event('input'));\n }\n\n // Clear the current input timeout (if set) and remove the typeahead.\n this.clearTimer();\n this.typeaheadOnSelect.emit(match);\n if (!this.typeaheadMultiSelect()) {\n this.canBeOpen.set(false);\n }\n }\n\n // Remove the component by clearing the viewContainerRef\n private removeComponent(): void {\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef?.detach();\n this.typeaheadOpenChange.emit(false);\n }\n\n this.componentRef?.destroy();\n this.componentRef = undefined;\n }\n\n private clearTimer(): void {\n if (this.inputTimer) {\n clearTimeout(this.inputTimer);\n this.inputTimer = undefined;\n }\n }\n\n private escapeRegex(query: string): string {\n return query.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiTypeaheadItemTemplateDirective } from './si-typeahead-item-template.directive';\nimport { SiTypeaheadDirective } from './si-typeahead.directive';\n\n@NgModule({\n imports: [SiTypeaheadDirective, SiTypeaheadItemTemplateDirective],\n exports: [SiTypeaheadDirective, SiTypeaheadItemTemplateDirective]\n})\nexport class SiTypeaheadModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-typeahead.directive';\nexport * from './si-typeahead.model';\nexport * from './si-typeahead.module';\nexport * from './si-typeahead-item-template.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"siemens-element-ng-typeahead.mjs","sources":["../../../../projects/element-ng/typeahead/si-typeahead-item-template.directive.ts","../../../../projects/element-ng/typeahead/si-typeahead.component.ts","../../../../projects/element-ng/typeahead/si-typeahead.component.html","../../../../projects/element-ng/typeahead/si-typeahead.search.ts","../../../../projects/element-ng/typeahead/si-typeahead.sorting.ts","../../../../projects/element-ng/typeahead/si-typeahead.directive.ts","../../../../projects/element-ng/typeahead/si-typeahead.module.ts","../../../../projects/element-ng/typeahead/index.ts","../../../../projects/element-ng/typeahead/siemens-element-ng-typeahead.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive } from '@angular/core';\n\nimport { TypeaheadOptionItemContext } from './si-typeahead.model';\n\n@Directive({\n selector: '[siTypeaheadItemTemplate]'\n})\nexport class SiTypeaheadItemTemplateDirective {\n static ngTemplateContextGuard(\n dir: SiTypeaheadItemTemplateDirective,\n ctx: any\n ): ctx is TypeaheadOptionItemContext {\n return true;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n HostListener,\n inject,\n viewChild\n} from '@angular/core';\nimport {\n SiAutocompleteDirective,\n SiAutocompleteListboxDirective,\n SiAutocompleteOptionDirective\n} from '@siemens/element-ng/autocomplete';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiLoadingSpinnerDirective } from '@siemens/element-ng/loading-spinner';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiTypeaheadItemTemplateDirective } from './si-typeahead-item-template.directive';\nimport { SiTypeaheadDirective } from './si-typeahead.directive';\nimport { TypeaheadMatch } from './si-typeahead.model';\n\n@Component({\n selector: 'si-typeahead',\n imports: [\n SiAutocompleteListboxDirective,\n SiAutocompleteOptionDirective,\n SiIconComponent,\n NgTemplateOutlet,\n SiTranslatePipe,\n SiTypeaheadItemTemplateDirective,\n SiLoadingSpinnerDirective\n ],\n templateUrl: './si-typeahead.component.html',\n styleUrl: './si-typeahead.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'w-100' }\n})\nexport class SiTypeaheadComponent implements AfterViewInit {\n protected parent = inject(SiTypeaheadDirective);\n protected readonly matches = computed(() =>\n this.parent.typeaheadOptionsLimit()\n ? this.parent.foundMatches().slice(0, this.parent.typeaheadOptionsLimit())\n : this.parent.foundMatches()\n );\n\n protected readonly multiselect = computed(() => this.parent.typeaheadMultiSelect());\n\n private readonly typeaheadElement = viewChild.required('typeahead', {\n read: ElementRef\n });\n\n protected autocompleteDirective = inject(SiAutocompleteDirective);\n\n ngAfterViewInit(): void {\n this.setHeight(this.typeaheadElement());\n }\n\n @HostListener('mousedown', ['$event'])\n protected onMouseDown(event: Event): void {\n event.preventDefault();\n }\n\n /*\n * Set the height of the element passed to it (typeahead) if there are items displayed,\n * the number of displayed items changed and it is scrollable.\n */\n private setHeight(element: ElementRef): void {\n if (this.matches().length) {\n if (\n this.parent.typeaheadScrollable() &&\n this.parent.typeaheadOptionsInScrollableView() < this.matches().length\n ) {\n const computedStyle = getComputedStyle(element.nativeElement);\n const matchComputedStyle = getComputedStyle(element.nativeElement.firstElementChild);\n const matchHeight = parseFloat(matchComputedStyle.height || '0');\n const paddingTop = parseFloat(computedStyle.paddingTop || '0');\n const paddingBottom = parseFloat(computedStyle.paddingBottom || '');\n const height = this.parent.typeaheadOptionsInScrollableView() * matchHeight;\n element.nativeElement.style.maxBlockSize = `${\n height + paddingTop + paddingBottom + this.parent.typeaheadScrollableAdditionalHeight()\n }px`;\n } else {\n element.nativeElement.style.maxBlockSize = 'auto';\n }\n }\n }\n\n // Gets called when a match is selected by clicking on it.\n protected selectMatch(match: TypeaheadMatch | undefined): void {\n if (match) {\n this.parent.selectMatch(match);\n } else {\n this.parent.createOption();\n }\n }\n}\n","<!-- Template to be used for every match, can be replaced using an input. -->\n<ng-template #defaultItemTemplate let-match=\"match\" siTypeaheadItemTemplate>\n @if (multiselect()) {\n <div class=\"d-flex pe-4\" aria-hidden=\"true\">\n <span class=\"form-check-input si-form-checkbox\" [class.checked]=\"match.itemSelected\"></span>\n </div>\n }\n @if (match.iconClass) {\n <si-icon class=\"icon me-2\" [icon]=\"match.iconClass\" />\n }\n @for (segment of match.result; track $index) {\n <span [class.typeahead-match-segment-matching]=\"segment.isMatching\">{{ segment.text }}</span>\n }\n</ng-template>\n\n@let createOption = parent.typeaheadCreateOption();\n\n<!-- Only display the component if there are any matches and set the CSS transform to properly position the typeahead -->\n<ul\n #typeahead\n class=\"typeahead dropdown-menu\"\n [class.empty-loading]=\"parent.typeaheadLoading() && matches().length === 0\"\n [siLoading]=\"parent.typeaheadLoading() && matches().length === 0\"\n [initialDelay]=\"false\"\n [siAutocompleteListboxFor]=\"autocompleteDirective\"\n [siAutocompleteDefaultIndex]=\"parent.typeaheadAutoSelectIndex()\"\n [attr.aria-label]=\"parent.typeaheadAutocompleteListLabel() | translate\"\n (siAutocompleteOptionSubmitted)=\"selectMatch($event)\"\n>\n @if (parent.typeaheadLoading() && matches().length) {\n <li class=\"dropdown-item\" [siLoading]=\"true\" [initialDelay]=\"false\"></li>\n }\n <!-- Loop through every match and bind events, the mousedown prevent default is to prevent the host from losing focus on click -->\n @for (match of matches(); track $index) {\n <li\n #typeaheadMatch\n class=\"dropdown-item\"\n [siAutocompleteOption]=\"match\"\n [attr.aria-label]=\"match.text\"\n [attr.aria-selected]=\"multiselect() ? match.itemSelected : null\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <!-- Display either a template set as the input or the template above -->\n <ng-template\n [ngTemplateOutlet]=\"parent.typeaheadItemTemplate() || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: match.option,\n index: $index,\n match: match,\n query: parent.query()\n }\"\n />\n </li>\n }\n @if (createOption && parent.query().length) {\n <li class=\"dropdown-item\" [siAutocompleteOption]=\"undefined\">\n {{ createOption | translate: { query: parent.query() } }}\n </li>\n }\n</ul>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { computed, Signal, untracked } from '@angular/core';\n\nexport interface SearchOptions<T> {\n /** The text that will be used for searching. */\n text: string;\n /** The raw option that will be also included in the Match results */\n option: T;\n}\n\nexport interface MatchSegment {\n text: string;\n isMatching: boolean;\n matches: number;\n uniqueMatches: number;\n}\n\nexport interface Match<T> {\n option: T;\n text: string;\n result: MatchSegment[];\n stringMatch: boolean;\n atBeginning: boolean;\n matches: number;\n uniqueMatches: number;\n uniqueSeparateMatches: number;\n matchesEntireQuery: boolean;\n matchesAllParts: boolean;\n matchesAllPartsSeparately: boolean;\n}\n\nexport interface SearchConfig {\n /** Defines whether to tokenize the search or match the whole search. */\n disableTokenizing?: boolean;\n /**\n * Defines whether and how to require to match with all the tokens if {@link typeaheadTokenize} is enabled.\n * - `no` does not require all of the tokens to match.\n * - `once` requires all of the parts to be found in the search.\n * - `separately` requires all of the parts to be found in the search where there is not an overlapping different result.\n * - `independently` requires all of the parts to be found in the search where there is not an overlapping or adjacent different result.\n * ('independently' also slightly changes sorting behavior in the same way.)\n */\n matchAllTokens: 'no' | 'once' | 'separately' | 'independently';\n /**\n * When enabled, the search output will only be updated, if the options are changed.\n * Query changes will not trigger an update.\n *\n * Use this when lazy loading the options, so the search need to wait, until the options are loaded.\n */\n lazy?: boolean;\n}\n\n/**\n * Constructs a typeahead search and provides the matches as a signal.\n *\n * @param options - Factory function that should return the array of options to search in.\n * Is run in a reactive context.\n * @param query - Factory function that should return the current search query. Is run in a reactive context.\n * @param config - Configuration for the search. Is run in a reactive context.\n *\n * @example\n * In a real world, myOptions and mayQuery would be signals.\n * ```ts\n * const search = typeaheadSearch(\n * () => myOptions().map(...),\n * () => myQuery().toLowerCase(),\n * () => ({ matchAllTokens: 'separately' })\n * )\n * ```\n */\nexport const typeaheadSearch = <T>(\n options: () => SearchOptions<T>[],\n query: () => string,\n config: () => SearchConfig\n): Signal<Match<T>[]> => computed(() => new TypeaheadSearch<T>(options, query, config()).matches());\n\nclass TypeaheadSearch<T> {\n readonly matches = computed<Match<T>[]>(() => this.search(this.datasource(), this.readQuery()));\n\n constructor(\n private readonly datasource: () => SearchOptions<T>[],\n private readonly query: () => string,\n private readonly options: SearchConfig\n ) {}\n\n private readQuery(): string {\n if (this.options.lazy) {\n return untracked(() => this.query());\n } else {\n return this.query();\n }\n }\n\n private escapeRegex(query: string): string {\n return query.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n }\n\n private search(options: SearchOptions<T>[], query: string): Match<T>[] {\n try {\n const entireQueryRegex = new RegExp(this.escapeRegex(query), 'gi');\n\n const queryParts = !this.options.disableTokenizing\n ? query.split(/\\s+/g).filter(queryPart => queryPart)\n : query\n ? [query]\n : [];\n\n const queryRegexes = queryParts.map(\n queryPart => new RegExp(this.escapeRegex(queryPart), 'gi')\n );\n // Process the options.\n const matches: Match<T>[] = [];\n options.forEach(option => {\n const optionValue = option.text;\n const stringMatch =\n optionValue.toLocaleLowerCase().trim() === query.toLocaleLowerCase().trim();\n const candidate: Match<T> = {\n option: option.option,\n text: optionValue,\n result: [],\n stringMatch,\n atBeginning: false,\n matches: 0,\n uniqueMatches: 0,\n uniqueSeparateMatches: 0,\n matchesEntireQuery: false,\n matchesAllParts: false,\n matchesAllPartsSeparately: false\n };\n\n // Only search the options if a part of the query is at least one character long to prevent an endless loop.\n if (queryParts.length === 0) {\n if (optionValue) {\n candidate.result.push({\n text: optionValue,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n matches.push(candidate);\n } else {\n const allResults: { index: number; start: number; end: number; result: string }[] = [];\n const allIndexes: number[] = [];\n\n candidate.matchesEntireQuery = !!optionValue.match(entireQueryRegex);\n\n // Loop through the option value to find multiple matches, then store every segment (matching or non-matching) in the results.\n queryRegexes.forEach((queryRegex, index) => {\n let regexMatch = queryRegex.exec(optionValue);\n\n while (regexMatch) {\n allResults.push({\n index,\n start: regexMatch.index,\n end: regexMatch.index + regexMatch[0].length,\n result: regexMatch[0]\n });\n if (!regexMatch.index) {\n candidate.atBeginning = true;\n }\n if (!allIndexes.includes(index)) {\n allIndexes.push(index);\n }\n regexMatch = queryRegex.exec(optionValue);\n }\n });\n\n candidate.matchesAllParts = allIndexes.length === queryParts.length;\n\n // Check if all parts of the query match at least once (if required).\n if (this.options.matchAllTokens === 'no' || candidate.matchesAllParts) {\n const combinedResults: {\n indexes: number[];\n uniqueIndexes: number[];\n start: number;\n end: number;\n result: string;\n }[] = [];\n\n // First combine intersecting (or if set to independently adjacent) results to combined results.\n // We achieve this by first sorting them by the starting index, then by the ending index and then looking for overlaps.\n allResults\n .sort((a, b) => a.start - b.start || a.end - b.end)\n .forEach(result => {\n if (combinedResults.length) {\n const foundPreviousResult = combinedResults.find(previousResult =>\n this.options.matchAllTokens === 'independently'\n ? result.start <= previousResult.end\n : result.start < previousResult.end\n );\n if (foundPreviousResult) {\n foundPreviousResult.result += result.result.slice(\n foundPreviousResult.end - result.start,\n result.result.length\n );\n if (result.end > foundPreviousResult.end) {\n foundPreviousResult.end = result.end;\n }\n foundPreviousResult.indexes.push(result.index);\n if (!foundPreviousResult.uniqueIndexes.includes(result.index)) {\n foundPreviousResult.uniqueIndexes.push(result.index);\n }\n return;\n }\n }\n combinedResults.push({\n ...result,\n indexes: [result.index],\n uniqueIndexes: [result.index]\n });\n });\n\n // Recursively go through all unique combinations of the unique indexes to get the option which has the most indexes.\n const countUniqueSubindexes = (\n indexIndex = 0,\n previousIndexes: number[] = []\n ): number =>\n indexIndex === combinedResults.length\n ? previousIndexes.length\n : Math.max(\n previousIndexes.length,\n ...combinedResults[indexIndex].uniqueIndexes\n .filter(index => !previousIndexes.includes(index))\n .map(index =>\n countUniqueSubindexes(indexIndex + 1, [index, ...previousIndexes])\n )\n );\n\n candidate.uniqueSeparateMatches = countUniqueSubindexes();\n candidate.matchesAllPartsSeparately =\n candidate.uniqueSeparateMatches === queryParts.length;\n\n let currentPreviousEnd = 0;\n\n // Add the combined results to the candidate including the non-matching parts in between.\n combinedResults.forEach(result => {\n const textBefore = optionValue.slice(currentPreviousEnd, result.start);\n if (textBefore) {\n candidate.result.push({\n text: textBefore,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n candidate.result.push({\n text: result.result,\n isMatching: true,\n matches: result.indexes.length,\n uniqueMatches: result.uniqueIndexes.length\n });\n currentPreviousEnd = result.end;\n candidate.matches += result.indexes.length;\n candidate.uniqueMatches += result.uniqueIndexes.length;\n });\n\n // Check if there are result segments and all parts are matched independently (if required).\n if (\n candidate.result.length !== 0 &&\n ((this.options.matchAllTokens !== 'separately' &&\n this.options.matchAllTokens !== 'independently') ||\n candidate.matchesAllPartsSeparately)\n ) {\n const textAtEnd = optionValue.slice(currentPreviousEnd);\n if (textAtEnd) {\n candidate.result.push({\n text: textAtEnd,\n isMatching: false,\n matches: 0,\n uniqueMatches: 0\n });\n }\n matches.push(candidate);\n }\n }\n }\n });\n\n return matches;\n } catch {\n // Could not create regex (only in extremely rare cases, maybe even impossible), so return an empty array.\n return [];\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { TypeaheadMatch } from './si-typeahead.model';\n\nexport class SiTypeaheadSorting {\n sortMatches(matches: TypeaheadMatch[]): TypeaheadMatch[] {\n // Sort the matches,\n // first is the option and query an exact match.\n // then according to whether it is matching in the beginning,\n // then whether it matches the entire untokenized query.\n // then according to how many unique separate matches it contains.\n // then according to how many unique matches it contains.\n // then according to how many matches it contains.\n return matches.sort((matchA, matchB) => {\n if (matchA.stringMatch || matchB.stringMatch) {\n return matchA.stringMatch ? -1 : 1;\n }\n if (matchA.atBeginning) {\n return !matchB.atBeginning ? -1 : this.compareMatches(matchA, matchB);\n } else {\n return matchB.atBeginning ? 1 : this.compareMatches(matchA, matchB);\n }\n });\n }\n\n private compareMatchesNumbers(matchA: TypeaheadMatch, matchB: TypeaheadMatch): number {\n return (\n matchB.uniqueSeparateMatches - matchA.uniqueSeparateMatches ||\n matchB.uniqueMatches - matchA.uniqueMatches ||\n matchB.matches - matchA.matches\n );\n }\n\n private compareMatches(matchA: TypeaheadMatch, matchB: TypeaheadMatch): number {\n if (matchA.matchesEntireQuery) {\n return !matchB.matchesEntireQuery ? -1 : this.compareMatchesNumbers(matchA, matchB);\n } else {\n return matchB.matchesEntireQuery ? 1 : this.compareMatchesNumbers(matchA, matchB);\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ConnectionPositionPair,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategy\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\n ComponentRef,\n computed,\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n numberAttribute,\n OnChanges,\n OnDestroy,\n output,\n signal,\n SimpleChanges,\n TemplateRef\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { SiAutocompleteDirective } from '@siemens/element-ng/autocomplete';\nimport { t, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { catchError, isObservable, ReplaySubject, Subscription, timer } from 'rxjs';\nimport { map, share, switchMap, takeUntil } from 'rxjs/operators';\n\nimport { SiTypeaheadComponent } from './si-typeahead.component';\nimport {\n Typeahead,\n TypeaheadArray,\n TypeaheadMatch,\n TypeaheadOption,\n TypeaheadOptionItemContext,\n TypeaheadOptionSource\n} from './si-typeahead.model';\nimport { typeaheadSearch } from './si-typeahead.search';\nimport { SiTypeaheadSorting } from './si-typeahead.sorting';\n\n@Directive({\n selector: '[siTypeahead]',\n host: {\n class: 'si-typeahead'\n },\n hostDirectives: [SiAutocompleteDirective],\n exportAs: 'si-typeahead'\n})\nexport class SiTypeaheadDirective implements OnChanges, OnDestroy {\n protected static readonly overlayPositions: ConnectionPositionPair[] = [\n {\n overlayX: 'start',\n overlayY: 'top',\n originX: 'start',\n originY: 'bottom',\n offsetY: 2\n },\n {\n overlayX: 'start',\n overlayY: 'bottom',\n originX: 'start',\n originY: 'top',\n offsetY: -4\n },\n {\n overlayX: 'end',\n overlayY: 'top',\n originX: 'end',\n originY: 'bottom',\n offsetY: 2\n },\n {\n overlayX: 'end',\n overlayY: 'bottom',\n originX: 'end',\n originY: 'top',\n offsetY: -4\n }\n ];\n\n /**\n * Set the options of the typeahead.\n * Has to be either an Array or an Observable of an Array\n * of options (string or object)\n */\n readonly siTypeahead = input.required<Typeahead>();\n\n /**\n * Turns on/off the processing (searching and sorting) of the typeahead options.\n * Is used when searching and sorting is done externally.\n *\n * @defaultValue true\n */\n readonly typeaheadProcess = input(true, {\n transform: booleanAttribute\n });\n /**\n * Makes the typeahead scrollable and sets its height.\n * Uses {@link typeaheadOptionsInScrollableView} and {@link typeaheadScrollableAdditionalHeight}.\n *\n * @defaultValue false\n */\n readonly typeaheadScrollable = input(false, { transform: booleanAttribute });\n\n /**\n * If {@link typeaheadScrollable} is `true`, defines the number of items visible at once.\n *\n * @defaultValue 10\n */\n readonly typeaheadOptionsInScrollableView = input(10);\n\n /**\n * Defines the maximum number of items added into the DOM. Default is 20 and 0 means unlimited.\n *\n * @defaultValue 20\n */\n readonly typeaheadOptionsLimit = input(20);\n\n /**\n * If {@link typeaheadScrollable} is `true`, defines the number of additional pixels\n * to be added the the bottom of the typeahead to show users that it is scrollable.\n *\n * @defaultValue 13\n */\n readonly typeaheadScrollableAdditionalHeight = input(13);\n\n /**\n * Defines the index of the item which should automatically be selected.\n *\n * @defaultValue 0\n */\n readonly typeaheadAutoSelectIndex = input(0, { transform: numberAttribute });\n /**\n * Defines whether the typeahead can be closed using escape.\n *\n * @defaultValue true\n */\n readonly typeaheadCloseOnEsc = input(true, { transform: booleanAttribute });\n /**\n * Defines whether the host value should be cleared when a value is selected.\n *\n * @defaultValue false\n */\n readonly typeaheadClearValueOnSelect = input(false, { transform: booleanAttribute });\n /**\n * Defines the number of milliseconds to wait before displaying a typeahead after the host was\n * focused or a value inputted.\n *\n * @defaultValue 0\n */\n readonly typeaheadWaitMs = input(0);\n\n /**\n * Defines the number of characters the value of the host needs to be before a typeahead is displayed.\n * Use `0` to have it display when focussing the host (clicking or tabbing into it).\n *\n * @defaultValue 1\n */\n readonly typeaheadMinLength = input(1);\n\n /**\n * Defines the name of the field/property the option string is in when the typeahead options are objects.\n *\n * @defaultValue 'name'\n */\n readonly typeaheadOptionField = input('name');\n /**\n * Defines whether multiselection of typeahead is possible with checkboxes.\n *\n * @defaultValue false\n */\n readonly typeaheadMultiSelect = input(false, { transform: booleanAttribute });\n\n /**\n * Defines whether to tokenize the search or match the whole search.\n *\n * @defaultValue true\n */\n readonly typeaheadTokenize = input(true, { transform: booleanAttribute });\n /**\n * Defines whether and how to require to match with all the tokens if {@link typeaheadTokenize} is enabled.\n * - `no` does not require all of the tokens to match.\n * - `once` requires all of the parts to be found in the search.\n * - `separately` requires all of the parts to be found in the search where there is not an overlapping different result.\n * - `independently` requires all of the parts to be found in the search where there is not an overlapping or adjacent different result.\n * ('independently' also slightly changes sorting behavior in the same way.)\n *\n * @defaultValue 'separately'\n */\n readonly typeaheadMatchAllTokens = input<'no' | 'once' | 'separately' | 'independently'>(\n 'separately'\n );\n /**\n * Defines an optional template to use as the typeahead match item instead of the one built in.\n * Gets the {@link TypeaheadOptionItemContext} passed to it.\n */\n readonly typeaheadItemTemplate = input<TemplateRef<TypeaheadOptionItemContext>>();\n /**\n * Skip the sorting of matches.\n * If the value is `true`, the matches are sorted according to {@link SiTypeaheadSorting}.\n *\n * @defaultValue false\n */\n readonly typeaheadSkipSortingMatches = input(false, { transform: booleanAttribute });\n\n /**\n * Screen reader only label for the autocomplete list.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_TYPEAHEAD.AUTOCOMPLETE_LIST_LABEL:Suggestions`)\n * ```\n */\n readonly typeaheadAutocompleteListLabel = input(\n t(() => $localize`:@@SI_TYPEAHEAD.AUTOCOMPLETE_LIST_LABEL:Suggestions`)\n );\n\n /**\n * If set, the typeahead will at minium have the width of the connected input field.\n *\n * @defaultValue false\n */\n readonly typeaheadFullWidth = input(false, { transform: booleanAttribute });\n\n /**\n * Optional CDK scroll strategy used for the typeahead overlay.\n * If not provided, no strategy is set explicitly and CDK will apply its default behavior.\n */\n readonly typeaheadScrollStrategy = input<ScrollStrategy>();\n\n /**\n * This option will be shown at the end of the typeahead.\n * Use it to allow users to create new options on the fly.\n *\n * Use the `{{ query }}` parameter in translation values to include the current text from the input.\n *\n * @experimental\n */\n readonly typeaheadCreateOption = input<TranslatableString>();\n /**\n * Emits an Event when the input field is changed.\n */\n readonly typeaheadOnInput = output<string>();\n /**\n * Emits an Event when a typeahead match is selected.\n * The event is a {@link TypeaheadMatch}\n */\n readonly typeaheadOnSelect = output<TypeaheadMatch>();\n\n /**\n * Emits an Event when a typeahead full match exists. A full match occurs when the entered text\n * is equal to one of the typeahead options.\n * The event is a {@link TypeaheadMatch}\n */\n readonly typeaheadOnFullMatch = output<TypeaheadMatch>();\n\n /** Emits whenever the typeahead overlay is opened or closed. */\n readonly typeaheadOpenChange = output<boolean>();\n\n /**\n * Emits when the create option is selected.\n * It will emit the current search query.\n *\n * @experimental\n */\n readonly typeaheadOnCreateOption = output<string>();\n\n /** @internal */\n readonly foundMatches = computed(() =>\n this.typeaheadProcess() ? this.processedSearch() : this.unprocessedSearch()\n );\n /** @internal */\n readonly query = signal('');\n\n /**\n * Indicates whether the typeahead is shown.\n */\n get typeaheadOpen(): boolean {\n return !!this.componentRef;\n }\n private overlay = inject(Overlay);\n private elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private injector = inject(Injector);\n\n private $typeahead = new ReplaySubject<TypeaheadArray>(1);\n private componentRef?: ComponentRef<SiTypeaheadComponent>;\n private inputTimer: any;\n\n private sourceSubscription?: Subscription;\n private matchSorter = new SiTypeaheadSorting();\n\n private overlayRef?: OverlayRef;\n\n private loadingSubscription?: Subscription;\n\n /**\n * Indicates whether the typeahead is currently loading.\n * When using {@link TypeaheadOptionSource}, this is controlled by the `isLoading()` method\n * or automatically set to `true` while fetching options.\n *\n * @internal\n * @defaultValue false\n */\n readonly typeaheadLoading = signal(false);\n\n /**\n * Indicates that the typeahead can be potentially open.\n * This signal is typically `true` when the input is focussed.\n * It may be overridden and set to `false` when escape is pressed\n * or when an option was selected.\n */\n private readonly canBeOpen = signal(false);\n private readonly selectionCounter = signal(0);\n private readonly typeaheadOptions = toSignal(\n this.$typeahead.pipe(\n map(options =>\n options.map(option => ({\n text: this.getOptionValue(option),\n option\n }))\n )\n ),\n { initialValue: [] }\n );\n private readonly typeaheadSearch = typeaheadSearch(\n this.typeaheadOptions,\n this.query,\n computed(() => ({\n matchAllTokens: this.typeaheadMatchAllTokens(),\n disableTokenizing: !this.typeaheadTokenize(),\n skipProcessing: !this.typeaheadProcess(),\n lazy: !(Array.isArray(this.siTypeahead()) || isObservable(this.siTypeahead()))\n }))\n );\n private readonly processedSearch = computed(() => {\n this.selectionCounter(); // This is a workaround for the multi-select which needs to trigger a change detection in the typeahead component.\n const matches = this.typeaheadSearch().map(match => ({\n ...match,\n itemSelected: this.typeaheadMultiSelect()\n ? (match.option as Record<string, any>).selected\n : false,\n iconClass: this.getOptionField(match.option, 'iconClass')\n }));\n\n if (this.typeaheadSkipSortingMatches()) {\n return matches;\n } else {\n return this.matchSorter.sortMatches(matches);\n }\n });\n private readonly unprocessedSearch = computed(() => {\n this.selectionCounter(); // This is a workaround for the multi-select which needs to trigger a change detection in the typeahead component.\n return this.typeaheadOptions().map(option => {\n const itemSelected = this.typeaheadMultiSelect()\n ? (option as Record<string, any>).selected\n : false;\n return {\n option,\n text: option.text,\n result: option.text\n ? [{ text: option.text, isMatching: false, matches: 0, uniqueMatches: 0 }]\n : [],\n itemSelected,\n iconClass: this.getOptionField(option.option, 'iconClass'),\n stringMatch: false,\n atBeginning: false,\n matches: 0,\n uniqueMatches: 0,\n uniqueSeparateMatches: 0,\n matchesEntireQuery: false,\n matchesAllParts: false,\n matchesAllPartsSeparately: false,\n active: false\n };\n });\n });\n\n constructor() {\n effect(() => {\n // The value needs to fulfil the minimum length requirement set.\n const matches = this.foundMatches();\n if (\n this.canBeOpen() &&\n this.query().length >= this.typeaheadMinLength() &&\n // Ensure that we have content to show: matches, create option or loading indicator\n (matches.length ||\n (this.typeaheadCreateOption() && this.query().length) ||\n this.typeaheadLoading())\n ) {\n const escapedQuery = this.escapeRegex(this.query());\n const equalsExp = new RegExp(`^${escapedQuery}$`, 'i');\n const fullMatches = matches.filter(\n match => match.result.length === 1 && equalsExp.test(match.text)\n );\n if (fullMatches.length > 0) {\n this.typeaheadOnFullMatch.emit(fullMatches[0]);\n }\n this.loadComponent();\n } else {\n this.removeComponent();\n }\n });\n }\n\n // Every time the main input changes, detect whether it is async and if it is not make an observable out of the array.\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.siTypeahead) {\n this.sourceSubscription?.unsubscribe();\n this.loadingSubscription?.unsubscribe();\n const typeahead = this.siTypeahead();\n\n if (Array.isArray(typeahead)) {\n // Handle TypeaheadArray\n this.$typeahead.next(typeahead);\n this.typeaheadLoading.set(false);\n } else if (isObservable(typeahead)) {\n // Handle TypeaheadObservable\n this.sourceSubscription = typeahead.subscribe(this.$typeahead);\n this.typeaheadLoading.set(false);\n } else if (typeof typeahead === 'function') {\n // Handle TypeaheadOptionSource\n this.handleTypeaheadOptionSource(typeahead);\n }\n }\n }\n\n // Clear the current input timeout (if set) and remove the component when the focus of the host is lost.\n @HostListener('focusout')\n protected onBlur(): void {\n this.clearTimer();\n this.canBeOpen.set(false);\n }\n\n // Start the input timeout to display the typeahead when the host is focussed or a value is inputted into it.\n @HostListener('focusin', ['$event'])\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n if (!target) {\n return;\n }\n\n // Get the value or otherwise textContent of the host element now, because later it could be reset.\n const firstValue = target.value || target.textContent;\n this.inputTimer ??= setTimeout(() => {\n this.inputTimer = undefined;\n const value = (target.value || target.textContent) ?? firstValue ?? '';\n this.query.set(value);\n this.typeaheadOnInput.emit(value ?? '');\n this.canBeOpen.set(true);\n }, this.typeaheadWaitMs());\n }\n\n @HostListener('keydown.escape')\n protected onKeydownEscape(): void {\n if (this.typeaheadCloseOnEsc()) {\n this.clearTimer();\n this.canBeOpen.set(false);\n }\n }\n\n ngOnDestroy(): void {\n this.clearTimer();\n this.sourceSubscription?.unsubscribe();\n this.loadingSubscription?.unsubscribe();\n\n this.overlayRef?.dispose();\n }\n\n /**\n * Handles TypeaheadOptionSource by subscribing to query changes and fetching options.\n * Manages loading state automatically or uses custom isLoading() observable if provided.\n */\n private handleTypeaheadOptionSource(source: TypeaheadOptionSource): void {\n this.sourceSubscription = new Subscription();\n const queryObservable = toObservable(this.query, { injector: this.injector });\n const resultObservable = queryObservable.pipe(\n switchMap(query => source(query)),\n // Catch errors by the source observable to prevent endless spinner. Showing the error is not our responsibility.\n catchError(e => {\n console.error(e);\n return [];\n }),\n share()\n );\n\n this.sourceSubscription.add(\n queryObservable\n .pipe(switchMap(() => timer(500).pipe(takeUntil(resultObservable))))\n .subscribe(() => this.typeaheadLoading.set(true))\n );\n\n this.sourceSubscription.add(\n resultObservable.subscribe(result => {\n this.$typeahead.next(result);\n this.typeaheadLoading.set(false);\n })\n );\n }\n\n // Dynamically create the typeahead component and then set the matches and the query.\n private loadComponent(): void {\n if (!this.overlayRef?.hasAttached()) {\n this.overlayRef?.dispose();\n\n const overlayConfig: OverlayConfig = {\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement)\n .withPositions(SiTypeaheadDirective.overlayPositions),\n minWidth: this.typeaheadFullWidth()\n ? this.elementRef.nativeElement.getBoundingClientRect().width + 2 // 2px border\n : 0\n };\n\n const scrollStrategy = this.typeaheadScrollStrategy();\n if (scrollStrategy) {\n overlayConfig.scrollStrategy = scrollStrategy;\n }\n\n this.overlayRef = this.overlay.create(overlayConfig);\n }\n\n if (this.overlayRef.hasAttached()) {\n return;\n }\n const typeaheadPortal = new ComponentPortal(SiTypeaheadComponent, null, this.injector);\n this.componentRef = this.overlayRef.attach(typeaheadPortal);\n this.typeaheadOpenChange.emit(true);\n }\n\n /**\n * Extracts the display value from a typeahead option.\n *\n * For string options, returns the string value directly.\n * For object options, returns the value of the field specified by {@link typeaheadOptionField}\n * (defaults to 'name'), or an empty string if the field doesn't exist.\n *\n * @param option - The typeahead option to extract the value from\n * @returns The string representation of the option for display purposes\n */\n private getOptionValue(option: TypeaheadOption): string {\n return typeof option !== 'object'\n ? option.toString()\n : (option[this.typeaheadOptionField()] ?? '');\n }\n\n /**\n * Extracts a specific field value from a typeahead option.\n *\n * This method is used to access additional properties of object-type options,\n * such as 'selected' for multi-select functionality or 'iconClass' for displaying icons.\n *\n * @param option - The typeahead option to extract the field from\n * @param field - The name of the field to extract\n * @returns The field value as a string if the option is an object and the field exists,\n * otherwise undefined\n */\n private getOptionField(option: TypeaheadOption, field: string): string | undefined {\n return typeof option !== 'object' ? undefined : option[field];\n }\n\n /** @internal */\n createOption(): void {\n this.typeaheadOnCreateOption.emit(this.query());\n this.clearTimer();\n if (!this.typeaheadMultiSelect() && this.typeaheadClearValueOnSelect()) {\n const inputElement =\n this.elementRef.nativeElement.querySelector('input')! ?? this.elementRef.nativeElement;\n inputElement.value = '';\n inputElement.dispatchEvent(new Event('input'));\n }\n this.canBeOpen.set(false);\n }\n\n // Select a match, either gets called due to a enter keypress or from the component due to a click.\n /** @internal */\n selectMatch(match: TypeaheadMatch): void {\n match.itemSelected = !match.itemSelected;\n if (!this.typeaheadMultiSelect()) {\n const inputElement =\n this.elementRef.nativeElement.querySelector('input')! ?? this.elementRef.nativeElement;\n inputElement.value = this.typeaheadClearValueOnSelect() ? '' : match.text;\n inputElement.dispatchEvent(new Event('input'));\n }\n\n // Clear the current input timeout (if set) and remove the typeahead.\n this.clearTimer();\n this.typeaheadOnSelect.emit(match);\n if (!this.typeaheadMultiSelect()) {\n this.canBeOpen.set(false);\n }\n }\n\n // Remove the component by clearing the viewContainerRef\n private removeComponent(): void {\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef?.detach();\n this.typeaheadOpenChange.emit(false);\n }\n\n this.componentRef?.destroy();\n this.componentRef = undefined;\n }\n\n private clearTimer(): void {\n if (this.inputTimer) {\n clearTimeout(this.inputTimer);\n this.inputTimer = undefined;\n }\n }\n\n private escapeRegex(query: string): string {\n return query.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiTypeaheadItemTemplateDirective } from './si-typeahead-item-template.directive';\nimport { SiTypeaheadDirective } from './si-typeahead.directive';\n\n@NgModule({\n imports: [SiTypeaheadDirective, SiTypeaheadItemTemplateDirective],\n exports: [SiTypeaheadDirective, SiTypeaheadItemTemplateDirective]\n})\nexport class SiTypeaheadModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-typeahead.directive';\nexport * from './si-typeahead.model';\nexport * from './si-typeahead.module';\nexport * from './si-typeahead-item-template.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@siemens/element-ng",
3
3
  "description": "Element Angular component library, implementing the Siemens Design Language",
4
- "version": "49.2.0",
4
+ "version": "49.3.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -43,8 +43,8 @@
43
43
  "@ngx-formly/bootstrap": "^6.2.2",
44
44
  "@ngx-formly/core": "^6.2.2",
45
45
  "@siemens/element-icons": "1",
46
- "@siemens/element-translate-ng": "49.2.0",
47
- "@siemens/element-theme": "49.2.0",
46
+ "@siemens/element-translate-ng": "49.3.0",
47
+ "@siemens/element-theme": "49.3.0",
48
48
  "@siemens/ngx-datatable": "22 - 26",
49
49
  "ag-grid-community": "^34.3.1",
50
50
  "flag-icons": "^7.3.2",
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Copyright (c) Siemens 2016 - 2026
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ import 'tsx/cjs';
@@ -150,7 +150,7 @@ declare abstract class SiHeaderActionIconItemBase extends SiHeaderActionItemBase
150
150
  readonly badge: _angular_core.InputSignal<number | boolean | null | undefined>;
151
151
  protected readonly badgeDot: _angular_core.Signal<boolean>;
152
152
  protected readonly badgeValue: _angular_core.Signal<string | undefined>;
153
- ngOnChanges(changes: SimpleChanges): void;
153
+ ngOnChanges(changes: SimpleChanges<this>): void;
154
154
  protected get visuallyHideTitle(): boolean;
155
155
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderActionIconItemBase, never>;
156
156
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiHeaderActionIconItemBase, never, never, { "badge": { "alias": "badge"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -79,7 +79,7 @@ declare class SiAutoCollapsableListDirective implements AfterViewInit, OnChanges
79
79
  private computedGap;
80
80
  private injector;
81
81
  ngAfterViewInit(): void;
82
- ngOnChanges(changes: SimpleChanges): void;
82
+ ngOnChanges(changes: SimpleChanges<this>): void;
83
83
  ngOnDestroy(): void;
84
84
  private setupResizeListener;
85
85
  private updateItemVisibility;
@@ -24,7 +24,7 @@ declare class SiAvatarBackgroundColorDirective implements OnChanges {
24
24
  */
25
25
  readonly autoColor: _angular_core.InputSignalWithTransform<boolean, unknown>;
26
26
  protected readonly backgroundStyle: _angular_core.WritableSignal<string | undefined>;
27
- ngOnChanges(changes: SimpleChanges): void;
27
+ ngOnChanges(changes: SimpleChanges<this>): void;
28
28
  /**
29
29
  * Update background color variable based on the initials or placeholder text.
30
30
  */
@@ -60,7 +60,7 @@ declare class SiCircleStatusComponent implements OnChanges, OnDestroy {
60
60
  private blinkSubs?;
61
61
  private readonly bg;
62
62
  private blinkService;
63
- ngOnChanges(changes: SimpleChanges): void;
63
+ ngOnChanges(changes: SimpleChanges<this>): void;
64
64
  ngOnDestroy(): void;
65
65
  private calculateContrastFix;
66
66
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiCircleStatusComponent, never>;
@@ -133,7 +133,7 @@ declare class SiDashboardComponent implements OnChanges, AfterViewInit {
133
133
  private document;
134
134
  private readonly hideMenubarInternal;
135
135
  constructor();
136
- ngOnChanges(changes: SimpleChanges): void;
136
+ ngOnChanges(changes: SimpleChanges<this>): void;
137
137
  ngAfterViewInit(): void;
138
138
  private subscribeToCards;
139
139
  private initCards;
@@ -220,7 +220,7 @@ declare abstract class SiWidgetBaseDirective<T> implements OnInit, OnChanges {
220
220
  */
221
221
  readonly initialLoadingIndicatorDebounceTime: _angular_core.InputSignal<number>;
222
222
  protected loadingTimer?: ReturnType<typeof setTimeout>;
223
- ngOnChanges(changes: SimpleChanges): void;
223
+ ngOnChanges(changes: SimpleChanges<this>): void;
224
224
  ngOnInit(): void;
225
225
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiWidgetBaseDirective<any>, never>;
226
226
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiWidgetBaseDirective<any>, never, never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disableAutoLoadingIndicator": { "alias": "disableAutoLoadingIndicator"; "required": false; "isSignal": true; }; "showLoadingIndicatorInput": { "alias": "showLoadingIndicator"; "required": false; "isSignal": true; }; "initialLoadingIndicatorDebounceTime": { "alias": "initialLoadingIndicatorDebounceTime"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -279,7 +279,7 @@ declare class SiDateRangeFilterComponent implements OnChanges {
279
279
  protected readonly presetFilter: _angular_core.WritableSignal<string>;
280
280
  protected readonly presetOpen: _angular_core.WritableSignal<boolean>;
281
281
  protected readonly inputMode: _angular_core.Signal<boolean>;
282
- ngOnChanges(changes: SimpleChanges): void;
282
+ ngOnChanges(changes: SimpleChanges<this>): void;
283
283
  private getDateNow;
284
284
  private rangeChanged;
285
285
  private updateFromRange;
@@ -208,7 +208,7 @@ declare class SiDateInputDirective implements ControlValueAccessor, OnChanges, V
208
208
  private readonly disabledNgControl;
209
209
  protected readonly locale: string;
210
210
  private format;
211
- ngOnChanges(changes: SimpleChanges): void;
211
+ ngOnChanges(changes: SimpleChanges<this>): void;
212
212
  validate(c: AbstractControl): ValidationErrors | null;
213
213
  registerOnChange(fn: any): void;
214
214
  registerOnTouched(fn: () => void): void;
@@ -453,7 +453,7 @@ declare class SiDatepickerComponent implements OnInit, OnChanges, AfterViewInit
453
453
  */
454
454
  readonly activeHover: _angular_core.ModelSignal<Cell | undefined>;
455
455
  constructor();
456
- ngOnChanges(changes: SimpleChanges): void;
456
+ ngOnChanges(changes: SimpleChanges<this>): void;
457
457
  ngOnInit(): void;
458
458
  ngAfterViewInit(): void;
459
459
  /** Initialize day and month labels */
@@ -546,10 +546,10 @@ declare class SiDatepickerOverlayComponent implements OnChanges, OnInit, OnDestr
546
546
  private readonly elementRef;
547
547
  private readonly focusMonitor;
548
548
  private readonly focusTrapFactory;
549
- private focusTrap;
549
+ private focusTrap?;
550
550
  private previousActiveElement?;
551
- protected disableTime: boolean;
552
- protected activeHover?: Cell;
551
+ protected readonly disableTime: _angular_core.WritableSignal<boolean>;
552
+ protected readonly activeHover: _angular_core.WritableSignal<Cell | undefined>;
553
553
  protected readonly isTwoMonthDateRange: _angular_core.Signal<boolean>;
554
554
  protected readonly firstDatepickerConfig: _angular_core.WritableSignal<DatepickerConfig>;
555
555
  protected readonly secondDatepickerConfig: _angular_core.WritableSignal<DatepickerConfig>;
@@ -561,7 +561,7 @@ declare class SiDatepickerOverlayComponent implements OnChanges, OnInit, OnDestr
561
561
  */
562
562
  readonly isMobile: _angular_core.InputSignal<boolean>;
563
563
  protected readonly completeAnimation: _angular_core.WritableSignal<boolean>;
564
- ngOnChanges(changes: SimpleChanges): void;
564
+ ngOnChanges(changes: SimpleChanges<this>): void;
565
565
  ngOnInit(): void;
566
566
  ngOnDestroy(): void;
567
567
  /**
@@ -1051,7 +1051,7 @@ declare class SiDateRangeComponent implements ControlValueAccessor, Validator, A
1051
1051
  private readonly overlayToggle;
1052
1052
  private readonly elementRef;
1053
1053
  private readonly defaultPlacement;
1054
- ngOnChanges(changes: SimpleChanges): void;
1054
+ ngOnChanges(changes: SimpleChanges<this>): void;
1055
1055
  ngAfterViewInit(): void;
1056
1056
  writeValue(dateRange: DateRange): void;
1057
1057
  registerOnChange(fn: any): void;
@@ -492,7 +492,7 @@ declare class SiFileUploaderComponent implements OnChanges {
492
492
  private readonly dropZone;
493
493
  private cdRef;
494
494
  private http?;
495
- ngOnChanges(changes: SimpleChanges): void;
495
+ ngOnChanges(changes: SimpleChanges<this>): void;
496
496
  protected handleFiles(files: UploadFile[]): void;
497
497
  protected removeFile(index: number): void;
498
498
  protected cancelUpload(file: ExtUploadFile): void;
@@ -395,7 +395,7 @@ declare class SiFilteredSearchComponent implements OnInit, OnChanges {
395
395
  private readonly loadedCriteria;
396
396
  private readonly internalFreeTextCriterion;
397
397
  constructor();
398
- ngOnChanges(changes: SimpleChanges): void;
398
+ ngOnChanges(changes: SimpleChanges<this>): void;
399
399
  ngOnInit(): void;
400
400
  private initCriteria;
401
401
  /**
@@ -330,7 +330,7 @@ declare class SiFormItemComponent implements AfterContentInit, AfterContentCheck
330
330
  protected readonly printErrors: _angular_core.Signal<boolean>;
331
331
  /** @internal */
332
332
  readonly required: _angular_core.Signal<boolean>;
333
- ngOnChanges(changes: SimpleChanges): void;
333
+ ngOnChanges(changes: SimpleChanges<this>): void;
334
334
  ngOnInit(): void;
335
335
  ngAfterContentInit(): void;
336
336
  ngAfterContentChecked(): void;
@@ -74,7 +74,7 @@ declare class SiListDetailsComponent implements OnInit, OnChanges, OnDestroy {
74
74
  */
75
75
  readonly transferFocusToDetails: BehaviorSubject<boolean>;
76
76
  private animationDone?;
77
- ngOnChanges(changes: SimpleChanges): void;
77
+ ngOnChanges(changes: SimpleChanges<this>): void;
78
78
  ngOnInit(): void;
79
79
  ngOnDestroy(): void;
80
80
  private readonly resizeDimensions;
@@ -1,14 +1,14 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnInit, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
2
+ import { OnInit, OnChanges, SimpleChanges } from '@angular/core';
3
3
  import { TranslatableString } from '@siemens/element-translate-ng/translate';
4
4
 
5
- declare class SiMainDetailContainerComponent implements OnInit, OnChanges, OnDestroy {
5
+ declare class SiMainDetailContainerComponent implements OnInit, OnChanges {
6
6
  protected readonly icons: Record<"elementBack", string>;
7
- private animationDuration;
8
- private resizeSubs?;
9
- private elementRef;
10
- private resizeObserver;
11
- private changeDetectorRef;
7
+ private readonly animationDuration;
8
+ private readonly elementRef;
9
+ private readonly resizeObserver;
10
+ private readonly changeDetectorRef;
11
+ private readonly destroyRef;
12
12
  /**
13
13
  * A numeric value defining the minimum width in px, which the container needs
14
14
  * to be displayed in its large layout. Whenever smaller than
@@ -135,11 +135,10 @@ declare class SiMainDetailContainerComponent implements OnInit, OnChanges, OnDes
135
135
  protected maxDetailSize: string;
136
136
  protected readonly mainStateId: _angular_core.Signal<string | undefined>;
137
137
  protected readonly detailStateId: _angular_core.Signal<string | undefined>;
138
- protected animate: boolean;
139
- protected opacity: string;
140
- ngOnChanges(changes: SimpleChanges): void;
138
+ protected readonly animate: _angular_core.WritableSignal<boolean>;
139
+ protected readonly opacity: _angular_core.WritableSignal<string>;
140
+ ngOnChanges(changes: SimpleChanges<this>): void;
141
141
  ngOnInit(): void;
142
- ngOnDestroy(): void;
143
142
  protected onSplitSizesChange(sizes: number[]): void;
144
143
  protected detailsBackClicked(): void;
145
144
  /**
@@ -188,6 +188,11 @@ declare class SiNavbarVerticalComponent implements OnChanges, OnInit {
188
188
  * ```
189
189
  */
190
190
  readonly skipLinkMainContentLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
191
+ /**
192
+ * Debounce time for the search input
193
+ * @defaultValue 400
194
+ */
195
+ readonly searchDebounceTime: _angular_core.InputSignal<number>;
191
196
  /**
192
197
  * Output for search bar input
193
198
  */
@@ -195,7 +200,6 @@ declare class SiNavbarVerticalComponent implements OnChanges, OnInit {
195
200
  private readonly searchBar;
196
201
  protected readonly activatedRoute: ActivatedRoute | null;
197
202
  protected readonly ready = true;
198
- protected readonly searchInputDelay = 400;
199
203
  private uiStateService;
200
204
  private breakpointObserver;
201
205
  private readonly navbarItems;
@@ -205,7 +209,7 @@ declare class SiNavbarVerticalComponent implements OnChanges, OnInit {
205
209
  protected readonly uiStateExpandedItems: _angular_core.WritableSignal<Record<string, boolean>>;
206
210
  private preferCollapse;
207
211
  constructor();
208
- ngOnChanges(changes: SimpleChanges): void;
212
+ ngOnChanges(changes: SimpleChanges<this>): void;
209
213
  ngOnInit(): void;
210
214
  protected toggleCollapse(): void;
211
215
  /** Expands the vertical navbar. */
@@ -221,7 +225,7 @@ declare class SiNavbarVerticalComponent implements OnChanges, OnInit {
221
225
  itemTriggered(): void;
222
226
  protected isLegacyStyle(item: MenuItem | NavbarVerticalItem): item is MenuItem;
223
227
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiNavbarVerticalComponent, never>;
224
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiNavbarVerticalComponent, "si-navbar-vertical", never, { "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "textOnly": { "alias": "textOnly"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "navbarExpandButtonText": { "alias": "navbarExpandButtonText"; "required": false; "isSignal": true; }; "navbarCollapseButtonText": { "alias": "navbarCollapseButtonText"; "required": false; "isSignal": true; }; "stateId": { "alias": "stateId"; "required": false; "isSignal": true; }; "skipLinkNavigationLabel": { "alias": "skipLinkNavigationLabel"; "required": false; "isSignal": true; }; "skipLinkMainContentLabel": { "alias": "skipLinkMainContentLabel"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; "items": "itemsChange"; "searchEvent": "searchEvent"; }, never, ["*"], true, never>;
228
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiNavbarVerticalComponent, "si-navbar-vertical", never, { "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "textOnly": { "alias": "textOnly"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "navbarExpandButtonText": { "alias": "navbarExpandButtonText"; "required": false; "isSignal": true; }; "navbarCollapseButtonText": { "alias": "navbarCollapseButtonText"; "required": false; "isSignal": true; }; "stateId": { "alias": "stateId"; "required": false; "isSignal": true; }; "skipLinkNavigationLabel": { "alias": "skipLinkNavigationLabel"; "required": false; "isSignal": true; }; "skipLinkMainContentLabel": { "alias": "skipLinkMainContentLabel"; "required": false; "isSignal": true; }; "searchDebounceTime": { "alias": "searchDebounceTime"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; "items": "itemsChange"; "searchEvent": "searchEvent"; }, never, ["*"], true, never>;
225
229
  }
226
230
 
227
231
  declare class SiNavbarVerticalModule {
@@ -265,7 +265,7 @@ declare class SiNavbarPrimaryComponent implements OnChanges, HeaderWithDropdowns
265
265
  /** @internal */
266
266
  onDropdownItemTriggered(): void;
267
267
  /** @internal */
268
- ngOnChanges(changes: SimpleChanges): void;
268
+ ngOnChanges(changes: SimpleChanges<this>): void;
269
269
  private convertApps;
270
270
  protected onFavoriteChange({ app, favorite }: FavoriteChangeEvent): void;
271
271
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiNavbarPrimaryComponent, never>;