@siemens/element-ng 51.0.0-rc.9 → 51.0.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 (42) hide show
  1. package/fesm2022/siemens-element-ng-chat-messages.mjs +121 -21
  2. package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-form.mjs +17 -4
  4. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-icon.mjs +1 -1
  6. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-list-details.mjs +62 -16
  8. package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
  9. package/fesm2022/siemens-element-ng-main-detail-container.mjs +72 -24
  10. package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-markdown-hightlighter-highlightjs.mjs +2 -2
  12. package/fesm2022/siemens-element-ng-markdown-hightlighter-highlightjs.mjs.map +1 -1
  13. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +2 -2
  14. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +2 -2
  16. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-select.mjs +44 -5
  18. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-side-panel.mjs +44 -9
  20. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  21. package/fesm2022/siemens-element-ng-split.mjs +18 -16
  22. package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
  23. package/fesm2022/siemens-element-ng-tabs.mjs +93 -71
  24. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  25. package/package.json +4 -4
  26. package/schematics/migrations/data/element-class-changes.js +8 -7
  27. package/schematics/ng-update/migrate-list-details-units.js +86 -0
  28. package/schematics/ng-update/migrate-main-detail-units.js +89 -0
  29. package/schematics/ng-update/migrate-split-collapse.js +1 -32
  30. package/schematics/ng-update/migrate-split-scale.js +524 -0
  31. package/schematics/ng-update/migrate-split-sizes.js +5 -3
  32. package/schematics/ng-update/migrate-to-v51.js +6 -0
  33. package/schematics/utils/index.js +1 -0
  34. package/schematics/utils/template-edit-utils.js +35 -0
  35. package/schematics/utils/template-utils.js +31 -45
  36. package/types/siemens-element-ng-chat-messages.d.ts +81 -17
  37. package/types/siemens-element-ng-form.d.ts +3 -0
  38. package/types/siemens-element-ng-list-details.d.ts +25 -3
  39. package/types/siemens-element-ng-main-detail-container.d.ts +23 -3
  40. package/types/siemens-element-ng-select.d.ts +31 -4
  41. package/types/siemens-element-ng-side-panel.d.ts +17 -3
  42. package/types/siemens-element-ng-split.d.ts +3 -10
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-form.mjs","sources":["../../../../projects/element-ng/form/si-form-container/si-form-container.component.ts","../../../../projects/element-ng/form/si-form-container/si-form-container.component.html","../../../../projects/element-ng/form/form-fieldset/si-form-fieldset.component.ts","../../../../projects/element-ng/form/form-fieldset/si-form-fieldset.component.html","../../../../projects/element-ng/form/si-form-item.control.ts","../../../../projects/element-ng/form/si-form-validation-error.service.ts","../../../../projects/element-ng/form/si-form-field/si-form-field.component.ts","../../../../projects/element-ng/form/si-form-field/si-form-field.component.html","../../../../projects/element-ng/form/si-form-field/si-form-field.provider.ts","../../../../projects/element-ng/form/si-form-item/si-form-field-native.control.ts","../../../../projects/element-ng/form/si-form-item/si-form-item.component.ts","../../../../projects/element-ng/form/si-form-item/si-form-item.component.html","../../../../projects/element-ng/form/si-form-validation-tooltip/si-form-validation-tooltip.component.ts","../../../../projects/element-ng/form/si-form-validation-tooltip/si-form-validation-tooltip.directive.ts","../../../../projects/element-ng/form/si-form-validation-error.provider.ts","../../../../projects/element-ng/form/si-form.module.ts","../../../../projects/element-ng/form/index.ts","../../../../projects/element-ng/form/siemens-element-ng-form.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input\n} from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { Breakpoints, SiResponsiveContainerDirective } from '@siemens/element-ng/resize-observer';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\n\nexport interface SiFormValidationError {\n controlName?: string;\n controlNameTranslationKey?: string;\n errorCode: TranslatableString;\n errorCodeTranslationKey?: string;\n errorParams?: any;\n}\n\n/**\n * @deprecated This component should no longer be used.\n *\n * When providing a form wide error mapper, use the {@link provideFormValidationErrorMapper}.\n * ```ts\n * import { provideFormValidationErrorMapper } form '@siemens/element-ng/forms'\n *\n * @Component({\n * template: `<form>...</form>`\n * providers: [provideFormValidationErrorMapper({\n * 'name.required': 'CUSTOM_REQUIRED_ERROR'\n * })]\n * })\n * class MyFormComponent {}\n * ```\n *\n * When using the column layout, use the `form-col-layout` classes.\n *\n * ```html\n * <!-- Responsive column layout -->\n * <form class=\"responsive-form-col-layout\">...</form>\n * <!-- Always column layout -->\n * <form class=\"form-col-layout\">...</form>\n * ```\n *\n * For a custom breakpoint use the SCSS mixin:\n *\n * ```scss\n * @use '@siemens/element-theme/src/styles/bootstrap/mixins/form-layout';\n *\n * // Custom responsive breakpoint\n * .custom-form-col-layout {\n * // Above 400px the column layout is used\n * @include form-layout.responsive-form-col-layout(400px);\n * }\n * ```\n */\n@Component({\n selector: 'si-form-container',\n imports: [NgTemplateOutlet, SiResponsiveContainerDirective],\n templateUrl: './si-form-container.component.html',\n styleUrl: './si-form-container.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n '[style.--si-form-label-width]': 'labelWidth()'\n }\n})\nexport class SiFormContainerComponent<TControl extends { [K in keyof TControl]: AbstractControl }> {\n /**\n * Set the form entity to the container to enable the overall form validation on in\n * the form container edit panel.\n */\n readonly form = input<FormGroup<TControl>>();\n\n /**\n * A form container in readonly mode is only displaying the form content without ability\n * to change it. The edit panel with typically save and cancel buttons is hidden. Set\n * to true to display the edit panel.\n *\n * @defaultValue false\n */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n /**\n * The container hosts the form within a siResizeContainer to configure the breakpoint for\n * different screen sizes. Optionally, change the container breakpoints with the contentContainerBreakpoints\n * input.\n */\n readonly contentContainerBreakpoints = input<Breakpoints>();\n\n /**\n * In some scenarios, one may not want the form container to be responsible for the layout relevant\n * `si-container-[xs|...]` classes, but let this be done by a different, nested component, e.g. by a\n * group box. In these cases, the property should be set to true.\n *\n * @defaultValue false\n */\n readonly disableContainerBreakpoints = input(false, { transform: booleanAttribute });\n\n /**\n * Every validation error has an errorCode. This map holds translate keys for error codes. The keys can\n * be used to display a translated message for each validation error. The defaults old english readable\n * key defaults for the Angular standard validators of the `Validators` class like `min`, `max` or `required`.\n *\n * Use the input to set your own translate keys for the form validators you need.\n */\n readonly errorCodeTranslateKeyMap = input<\n Map<string, string> | SiFormValidationErrorMapper | undefined\n >();\n\n /**\n * A map the maps from control names of the form to their translate keys.\n * The initial map is empty and the user is responsible to add the required\n * translate keys.\n *\n * @defaultValue\n * ```\n * new Map<string, string>()\n * ```\n */\n readonly controlNameTranslateKeyMap = input(new Map<string, string>());\n\n /**\n * Disables the automatic error printing in all nested {@link SiFormItemComponent}. Error printing will be enabled by default in v46.\n *\n * @defaultValue false\n */\n readonly disableErrorPrinting = input(false, { transform: booleanAttribute });\n\n /**\n * A custom width value to be applied to all labels.\n *\n * @example labelWidth=\"100px\".\n */\n readonly labelWidth = input<string>();\n\n protected hasParentContainer = !!inject(SiFormContainerComponent, {\n optional: true,\n skipSelf: true\n });\n\n /** @internal */\n readonly formErrorMapper = computed(() => {\n const map = this.errorCodeTranslateKeyMap();\n\n let customMapper: SiFormValidationErrorMapper | undefined;\n if (map instanceof Map) {\n customMapper = Object.fromEntries(map.entries());\n } else if (map) {\n customMapper = map;\n }\n\n return {\n ...customMapper\n };\n });\n\n /**\n * Indicates whether the user interacted with the form.\n * @returns `true`, if the user selected at least one form element and\n * [blurred]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/blur_event} by losing focus again\n * (e.g. by setting focus on another element), or by editing the content of a form element.\n * Otherwise `false`.\n */\n get userInteractedWithForm(): boolean {\n const form = this.form();\n return !!form && (form.dirty || form.touched);\n }\n\n /**\n * Indicates whether content editor message shall be styled as success.\n * @returns `true`, if {@link SiFormContainerComponent.userInteractedWithForm} is true and\n * the form is valid.\n */\n get validFormContainerMessage(): boolean {\n return this.userInteractedWithForm && this.form()!.status === 'VALID';\n }\n\n /**\n * Indicates whether the content editor message shall be styled as warning.\n * @returns `true`, if {@link SiFormContainerComponent.userInteractedWithForm} is true and\n * the form is invalid.\n */\n get invalidFormContainerMessage(): boolean {\n return this.userInteractedWithForm && this.form()!.status === 'INVALID';\n }\n\n protected getControlNameTranslateKey(controlName: string): string | undefined {\n const controlNameTranslateKeyMap = this.controlNameTranslateKeyMap();\n if (!controlNameTranslateKeyMap) {\n return undefined;\n }\n return controlNameTranslateKeyMap.get(controlName) ?? controlName;\n }\n}\n","<div class=\"d-flex flex-column align-content-stretch flex-grow-1 flex-shrink-1\">\n @if (disableContainerBreakpoints() || hasParentContainer) {\n <div class=\"flex-grow-1 flex-shrink-1\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n } @else {\n <div\n class=\"flex-grow-1 flex-shrink-1\"\n siResponsiveContainer\n [breakpoints]=\"contentContainerBreakpoints()\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n }\n\n @if (!readonly()) {\n <div class=\"d-flex flex-row flex-nowrap flex-grow-0 flex-shrink-0 py-4\">\n <div\n class=\"d-flex flex-grow-1 flex-shrink-1 justify-content-end text-end overflow-hidden mx-6 my-auto\"\n [class.text-success]=\"validFormContainerMessage\"\n [class.text-danger]=\"invalidFormContainerMessage\"\n >\n <ng-content select=\"[si-form-container-message]\" />\n </div>\n\n <div class=\"m-auto flex-grow-0 flex-shrink-0\">\n <ng-content select=\"[si-form-container-buttons]\" />\n </div>\n </div>\n }\n</div>\n\n<ng-template #contentTemplate>\n <ng-content select=\"[si-form-container-content]\" />\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { booleanAttribute, Component, computed, input, signal } from '@angular/core';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormFieldsetControl } from './si-form-fieldset.control';\n\n@Component({\n selector: 'si-form-fieldset',\n imports: [SiTranslatePipe],\n templateUrl: './si-form-fieldset.component.html',\n styleUrl: '../si-form.shared.scss',\n host: {\n role: 'group',\n class: 'si-form-fieldset',\n '[style.--si-form-label-width]': 'labelWidth()',\n '[attr.aria-labelledby]': 'labelId'\n }\n})\nexport class SiFormFieldsetComponent {\n private static labelIdCounter = 0;\n\n /** The label for the entire fieldset. */\n readonly label = input.required<TranslatableString>();\n\n /** Overrides the parent label width. */\n readonly labelWidth = input<string>();\n\n /**\n * Adds a required marker to the label\n *\n * @defaultValue false\n */\n readonly required = input(false, { transform: booleanAttribute });\n\n /**\n * Switches all child inputs to inline mode\n *\n * @defaultValue false\n */\n readonly inline = input(false, { transform: booleanAttribute });\n\n private readonly formItems = signal<SiFormFieldsetControl[]>([]);\n\n /** @internal */\n readonly hasOnlyRadios = computed(() => {\n // Check if the fieldset only contains radio buttons.\n // We can safely assume that, if all items reference the same control and if there are at least 2 items.\n const items = this.formItems();\n if (items.length > 1) {\n const first = items[0].control();\n return first != null && items.every(item => item.control() === first);\n }\n\n return false;\n });\n\n protected readonly errors = computed(() => this.formItems()[0].errors());\n protected readonly touched = computed(() => this.formItems().some(item => item.touched()));\n protected readonly isRequired = computed(\n () =>\n this.required() || (this.hasOnlyRadios() && this.formItems().every(item => item.required()))\n );\n\n protected readonly labelId = `__si-form-fieldset-label-${SiFormFieldsetComponent.labelIdCounter++}`;\n\n /** @internal */\n registerControl(item: SiFormFieldsetControl): void {\n this.formItems.update(items => [...items, item]);\n }\n\n /** @internal */\n unregisterControl(item: SiFormFieldsetControl): void {\n this.formItems.update(items => items.filter(i => i !== item));\n }\n}\n","<div class=\"form-label d-flex gap-2\">\n <span [class.required]=\"isRequired()\" [id]=\"labelId\">{{ label() | translate }}</span>\n <ng-content select=\"[si-help-button]\" />\n</div>\n<div>\n <div [class]=\"inline() ? '' : 'd-flex flex-column gap-2 mb-2'\">\n <ng-content />\n </div>\n @if (hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [class.d-block]=\"touched()\">\n @for (error of errors(); track error) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { InjectionToken, Signal } from '@angular/core';\n\nexport const SI_FORM_ITEM_CONTROL = new InjectionToken<SiFormItemControl>('si.form-item.control');\n\n/**\n * Common interface for form item controls.\n * Controls that should be connected to {@link SiFormItemComponent} must implement this interface\n * and must be provided using the {@link SI_FORM_ITEM_CONTROL} token.\n */\nexport interface SiFormItemControl {\n /** The actual id of the control that should be used in the `for` attribute of a label. */\n readonly id?: string | Signal<string | undefined>;\n\n /**\n * ID that should be assigned to the label element inside the {@link SiFormItemComponent}.\n *\n * If the target control is not of type <i>input</i>, <i>select</i> or <i>button</i>, it cannot be referenced by a label.\n * Instead, aria-labelledby must be used to create a reference to a label.\n * In such a case, an implementation of {@link SiFormItemControl} must provide the id of the label in {@link labelledby}.\n * {@link SiFormItemComponent} will apply the id to the label\n * so that it can be used inside the control to reference it in the aria-labelledby attribute.\n */\n readonly labelledby?: string | Signal<string | undefined> | null;\n\n /**\n * Generated ID that the {@link SiFormItemComponent} will assign to the element containing the error messages.\n * Implementations of {@link SiFormItemControl} must generate this ID\n * and assign it to the `aria-describedby` attribute of their focusable elements.\n */\n readonly errormessageId: string | Signal<string>;\n\n /** If the control is meant to be used a checkbox. This affects the label positioning. */\n readonly isFormCheck?: boolean;\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injectable } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport type { FieldState } from '@angular/forms/signals';\nimport { t } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormError } from './si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\n\n/**\n * Creates the map of default error resolver.\n * This is a function as $localize requires an injection context.\n *\n * @internal\n */\nexport const buildDefaults = (): SiFormValidationErrorMapper => ({\n // Phone number specific\n notSupportedPhoneNumberCountry: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.PHONE_COUNTRY:Unsupported country/region code`\n ),\n invalidPhoneNumberFormat: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.INVALID_PHONE:Invalid phone number`\n ),\n // IP address specific\n ipv4Address: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.IPV4:Invalid IPv4 address`),\n ipv6Address: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.IPV6:Invalid IPv6 address`),\n // Min / max\n max: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.MAX:Max. {{max}}`),\n min: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.MIN:Min. {{min}}`),\n maxlength: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.MAX_LENGTH:Max. {{requiredLength}} characters`\n ),\n minlength: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.MIN_LENGTH:Min. {{requiredLength}} characters`\n ),\n // Date specific\n dateFormat: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.DATE_FORMAT:Invalid date`),\n endBeforeStart: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.END_BEFORE_START:End date before start date`\n ),\n invalidEndDateFormat: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.DATE_FORMAT_END:Invalid end date`\n ),\n invalidStartDateFormat: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.DATE_FORMAT_START:Invalid start date`\n ),\n maxDate: t(\n () =>\n $localize`:@@SI_FORM_CONTAINER.ERROR.MAX_DATE:Date up to and including {{maxString}} required`\n ),\n minDate: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.MIN_DATE:Date from {{minString}} required`),\n maxTime: t(\n () =>\n $localize`:@@SI_FORM_CONTAINER.ERROR.MAX_TIME:Time up to and including {{maxString}} required`\n ),\n minTime: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.MIN_TIME:Time from {{minString}} required`),\n rangeAfterMaxDate: t(\n () =>\n $localize`:@@SI_FORM_CONTAINER.ERROR.RANGE_AFTER_MAX_DATE:Period up to and including {{maxString}} required`\n ),\n rangeBeforeMinDate: t(\n () =>\n $localize`:@@SI_FORM_CONTAINER.ERROR.RANGE_BEFORE_MIN_DATE:Period from {{minString}} required`\n ),\n // Time units\n hours: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.HOURS:Integer between 0 and {{max}} required`\n ),\n minutes: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.MINUTES:Integer between 0 and 59 required`),\n seconds: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.SECONDS:Integer between 0 and 59 required`),\n milliseconds: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.MILLISECONDS:Integer between 0 and 999 required`\n ),\n // Various\n email: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.EMAIL:Invalid email address`),\n numberFormat: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.NUMBER_FORMAT:Number required`),\n pattern: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.PATTERN:Required value format not fulfilled`\n ),\n required: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.REQUIRED:Required`),\n requiredTrue: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.REQUIRED_TRUE:Required`)\n});\n\n/**\n * A service to resolve the validation error of an Angular control to a message or translation key.\n *\n * It can be provided using {@link provideFormValidationErrorMapper}.\n * If not provided, there will be a default instance in the root injector using only the default keys.\n *\n * There can be multiple instances to support providing in a lazy loaded module.\n * If the service cannot find a message, it will try to resolve it using a parent service if available.\n *\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n useFactory: () => new SiFormValidationErrorService(buildDefaults())\n})\nexport class SiFormValidationErrorService {\n private readonly parent = inject(SiFormValidationErrorService, {\n optional: true,\n skipSelf: true\n });\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n constructor(private errorMapper: SiFormValidationErrorMapper) {}\n\n /**\n * Resolves validation errors for Angular signal forms.\n *\n * If the validation error has no message associated, the resolution flow of {@link resolveErrors} is followed.\n *\n * @param state - the fieldState of the formfield.\n */\n resolveFormFieldErrors(state: FieldState<any>): SiFormError[] {\n return state.errors().map(error => {\n const { message, kind, fieldTree, formField, ...rawErrorParams } = error;\n const errorParams = this.getErrorParams(rawErrorParams);\n if (!message) {\n return this.resolveError(kind, state.name(), errorParams);\n } else {\n return { message, key: kind, params: errorParams };\n }\n });\n }\n\n /** Returns legacy reactive-form parameters stored in `context`, or the signal-form error. */\n private getErrorParams(error: object): unknown {\n const { context } = error as { context?: unknown };\n return context ?? error;\n }\n\n /**\n * Resolves the provided form errors to a list of {@link SiFormError}.\n * To resolution order is:\n * 1. componentMapper\n * 2. containerMapper using the controlName\n * 3. containerMapper without controlName\n * 4. errorMapper of the service using the controlName\n * 5. errorMapper of the service\n * 6: parent service\n */\n resolveErrors(\n controlName: string | number | null | undefined,\n errors: ValidationErrors | null,\n componentMapper?: SiFormValidationErrorMapper,\n containerMapper?: SiFormValidationErrorMapper\n ): SiFormError[] {\n if (!errors) {\n return [];\n }\n /*\n * Converts the angular error object (like: {required: true, minLength: {actualLength: 1, requiredLength: 3}})\n * to SiFormError[].\n * Therefore, the error key is look up in the error mappers.\n * If it can be resolved, the error will be printed using the resolved text.\n */\n return Object.entries(errors).map(([key, params]) =>\n this.resolveError(key, controlName, params, componentMapper, containerMapper)\n );\n }\n\n private resolveError(\n key: string,\n controlName: string | number | null | undefined,\n params: any,\n componentMapper?: SiFormValidationErrorMapper,\n containerMapper?: SiFormValidationErrorMapper\n ): SiFormError {\n return (\n this.resolveMessage(key, controlName, params, componentMapper) ??\n this.resolveMessage(key, controlName, params, containerMapper) ??\n this.resolveMessage(key, controlName, params, this.errorMapper) ??\n this.parent?.resolveError(key, controlName, params) ?? { key, params }\n );\n }\n\n private resolveMessage(\n key: string,\n controlName: string | number | null | undefined,\n params: any,\n mapper?: SiFormValidationErrorMapper\n ): SiFormError | undefined {\n if (!mapper) {\n return undefined;\n }\n\n const resolver = mapper[`${controlName}.${key}`] ?? mapper[key];\n\n if (resolver) {\n const message = typeof resolver === 'function' ? resolver(params) : resolver;\n return message ? { key, message, params } : undefined;\n }\n return undefined;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n inject,\n input,\n isSignal\n} from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormFieldsetComponent } from '../form-fieldset/si-form-fieldset.component';\nimport { SiFormFieldsetControl } from '../form-fieldset/si-form-fieldset.control';\nimport { SI_FORM_ITEM_CONTROL } from '../si-form-item.control';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\n\n/**\n * Constructs a full form field including error messages, labels and aria-* attributes.\n * It must be used with Angular's signal forms.\n *\n * @example\n * ```html\n * <si-form-field label=\"Name\">\n * <input class=\"form-control\" [formField]=\"form.name\" />\n *\n * <!-- Optional help button -->\n * <button\n * si-help-button\n * type=\"button\"\n * siHelpTitle=\"Help for name\"\n * siHelpContent=\"The context help description\"\n * >More information about the name</button>\n * </si-form-field>\n * ```\n */\n@Component({\n selector: 'si-form-field',\n imports: [SiTranslatePipe, NgTemplateOutlet],\n templateUrl: './si-form-field.component.html',\n styleUrl: './si-form-field.component.scss',\n host: {\n '[class.required]': 'showRequired()',\n '[class.form-check]': 'isFormCheck()',\n '[class.form-check-inline]': 'fieldset?.inline()',\n '[class.si-form-input]': '!fieldset'\n }\n})\nexport class SiFormFieldComponent implements SiFormFieldsetControl {\n private static idCounter = 0;\n\n /**\n * The label to be displayed in the form field.\n * It will be translated if a translation key is available.\n */\n readonly label = input.required<TranslatableString>();\n\n private readonly formField = contentChild.required(FormField);\n private readonly fieldControl = contentChild(SI_FORM_ITEM_CONTROL, { descendants: true });\n\n protected readonly fieldset = inject(SiFormFieldsetComponent, { optional: true });\n\n private readonly validationErrorService = inject(SiFormValidationErrorService);\n\n private readonly generatedId = `__si-form-field-${SiFormFieldComponent.idCounter++}`;\n\n /** The id of the connected control, used for the label's `for` attribute. */\n protected readonly controlId = computed(() => {\n const id = this.fieldControl()?.id;\n return (isSignal(id) ? id() : id) ?? (this.formField().element.id || this.generatedId);\n });\n\n protected readonly errormessageId = computed(() => {\n const id = this.fieldControl()?.errormessageId;\n return (isSignal(id) ? id() : id) ?? `${this.controlId()}-errormessage`;\n });\n\n protected readonly labelledby = computed(() => {\n const labelledby = this.fieldControl()?.labelledby;\n return isSignal(labelledby) ? labelledby() : labelledby;\n });\n\n /** Whether the connected control is a form-check (checkbox, radio or switch). */\n protected readonly isFormCheck = computed(\n () =>\n this.fieldControl()?.isFormCheck ??\n this.formField().element.classList.contains('form-check-input')\n );\n\n private readonly fieldState = computed(() => this.formField().state());\n\n /** @internal */\n readonly control = computed(() => this.fieldState().fieldTree);\n\n /** @internal */\n readonly required = computed(() => this.fieldState().required());\n\n /** @internal */\n readonly showRequired = computed(() => this.required() && !this.isPartOfRadioGroup());\n\n private readonly invalid = computed(() => {\n const state = this.fieldState();\n return state.touched() && state.invalid();\n });\n\n /** @internal */\n readonly touched = computed(() => this.fieldState().touched());\n\n protected readonly isPartOfRadioGroup = computed(() => this.fieldset?.hasOnlyRadios() ?? false);\n\n /** @internal */\n readonly errors = computed(() => {\n const state = this.fieldState();\n if (!state.touched()) {\n return [];\n }\n\n return this.validationErrorService.resolveFormFieldErrors(state);\n });\n\n constructor() {\n if (this.fieldset) {\n this.fieldset.registerControl(this);\n inject(DestroyRef).onDestroy(() => this.fieldset!.unregisterControl(this));\n }\n\n effect(() => this.syncControlId());\n effect(() => this.syncErrorDescription());\n effect(() => this.syncInvalidState());\n }\n\n private syncControlId(): void {\n const element = this.formField().element;\n if (!element.id) {\n element.id = this.generatedId;\n }\n }\n\n /** Associates the error messages with the projected control for assistive technologies. */\n private syncErrorDescription(): void {\n this.formField().element.setAttribute('aria-describedby', this.errormessageId());\n }\n\n /**\n * Reflects the validation state onto the projected control via `aria-invalid`. This is needed\n * because signal forms does not set `aria-invalid`, and the native `:user-invalid` pseudo-class\n * ignores `markAsTouched()`. The matching `.ng-invalid`/`.ng-touched` classes that drive the\n * styling are added by signal forms itself, see `provideSiFormFieldConfig()`.\n */\n private syncInvalidState(): void {\n const element = this.formField().element;\n if (this.invalid()) {\n element.setAttribute('aria-invalid', 'true');\n } else {\n element.removeAttribute('aria-invalid');\n }\n }\n}\n","@if (!isFormCheck()) {\n <ng-container [ngTemplateOutlet]=\"labelTemplate\" />\n} @else if (!fieldset) {\n <!-- Empty spacer so the control aligns with the label column in form-col-layout. -->\n <div class=\"form-label\"></div>\n}\n<div class=\"form-item-content\">\n <ng-content />\n @if (isFormCheck()) {\n <ng-container [ngTemplateOutlet]=\"labelTemplate\" />\n }\n @if (!isPartOfRadioGroup()) {\n <ng-container [ngTemplateOutlet]=\"feedbackTemplate\" />\n }\n</div>\n\n<ng-template #labelTemplate>\n <div\n class=\"d-flex gap-2\"\n [class.form-label]=\"!isFormCheck()\"\n [class.form-check-label]=\"isFormCheck()\"\n >\n @if (labelledby()) {\n <span [id]=\"labelledby()\" [class.required]=\"showRequired()\">{{ label() | translate }}</span>\n } @else {\n <label [for]=\"controlId()\" [class.required]=\"showRequired()\">{{ label() | translate }}</label>\n }\n <ng-content select=\"[si-help-button]\" />\n </div>\n</ng-template>\n\n<ng-template #feedbackTemplate>\n <div class=\"invalid-feedback\" [class.d-block]=\"errors().length\" [attr.id]=\"errormessageId()\">\n @for (error of errors(); track $index) {\n <div>\n {{ error.message ?? error.key | translate: error.params }}\n </div>\n }\n </div>\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Provider } from '@angular/core';\nimport { provideSignalFormsConfig, SignalFormsConfig } from '@angular/forms/signals';\nimport { NG_STATUS_CLASSES } from '@angular/forms/signals/compat';\n\n/**\n * Provides the signal forms configuration required by {@link SiFormFieldComponent}.\n *\n * It restores the `ng-*` classes applied by the directives of {@link @angular/forms#FormsModule | FormsModule} / {@link @angular/forms#ReactiveFormsModule | ReactiveFormsModule}.\n *\n * @example\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideSiFormFieldConfig()]\n * });\n * ```\n */\nexport const provideSiFormFieldConfig = (config: SignalFormsConfig = {}): Provider[] =>\n provideSignalFormsConfig({\n ...config,\n classes: {\n ...NG_STATUS_CLASSES,\n ...config.classes\n }\n });\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ElementRef } from '@angular/core';\n\nimport { SiFormItemControl } from '../si-form-item.control';\n\n/**\n * This will be used by the `si-form-item` to create a form item control if none is provided.\n * This is typically the case for native form controls like `input`, `textarea` and `select`.\n * It allows accessing the control's id and type.\n */\nexport class SiFormFieldNativeControl implements SiFormItemControl {\n private static idCounter = 0;\n private static readonly supportedTypes = ['INPUT', 'TEXTAREA', 'SELECT', 'METER', 'PROGRESS'];\n\n static createForElementRef(\n element: ElementRef<HTMLElement> | undefined\n ): SiFormFieldNativeControl | undefined {\n if (!element) {\n return undefined;\n }\n\n if (!SiFormFieldNativeControl.supportedTypes.includes(element.nativeElement.tagName)) {\n return undefined;\n }\n\n return new SiFormFieldNativeControl(element.nativeElement);\n }\n\n private constructor(private readonly element: HTMLElement) {\n if (!element.id) {\n element.id = `__si-form-field-native-control-${SiFormFieldNativeControl.idCounter++}`;\n }\n\n this.errormessageId = `${this.id}-errormessage`;\n if (element instanceof HTMLInputElement) {\n this.isFormCheck = element.type === 'checkbox' || element.type === 'radio';\n } else {\n this.isFormCheck = false;\n }\n\n element.setAttribute('aria-describedby', this.errormessageId);\n }\n\n isFormCheck: boolean;\n\n get id(): string {\n return this.element?.id;\n }\n\n set id(value: string) {\n this.element.id = value;\n }\n\n readonly errormessageId: string;\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentChecked,\n AfterContentInit,\n booleanAttribute,\n Component,\n computed,\n contentChild,\n ElementRef,\n inject,\n input,\n isSignal,\n OnChanges,\n OnDestroy,\n OnInit,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport {\n FormControl,\n NgControl,\n RequiredValidator,\n ValidationErrors,\n ValidatorFn\n} from '@angular/forms';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormFieldsetComponent } from '../form-fieldset/si-form-fieldset.component';\nimport { SiFormFieldsetControl } from '../form-fieldset/si-form-fieldset.control';\nimport { SiFormContainerComponent } from '../si-form-container/si-form-container.component';\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from '../si-form-item.control';\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\nimport { SiFormFieldNativeControl } from './si-form-field-native.control';\n\n/** @internal */\nexport interface SiFormError {\n key: string;\n message?: TranslatableString;\n params: any;\n}\n\n@Component({\n selector: 'si-form-item',\n imports: [SiTranslatePipe, NgTemplateOutlet],\n templateUrl: './si-form-item.component.html',\n styleUrl: '../si-form.shared.scss',\n host: {\n '[class.required]': 'required()',\n '[style.--si-form-label-width]': 'labelWidthCssVar()',\n '[class.form-check]': 'fieldControl()?.isFormCheck',\n '[class.form-check-inline]': 'fieldset?.inline()',\n '[class.si-form-input]': '!fieldset'\n }\n})\nexport class SiFormItemComponent\n implements\n AfterContentInit,\n AfterContentChecked,\n OnChanges,\n OnInit,\n OnDestroy,\n SiFormFieldsetControl\n{\n /**\n * The label to be displayed in the form item.\n * It will be translated if a translation key is available.\n */\n readonly label = input.required<TranslatableString>();\n\n /**\n * A custom width value to be applied to the label.\n * A value of 0 is allowed as well to visually hide away the label area.\n *\n * Numbers will be converted to pixels.\n * Using numbers is discouraged and might be dropped.\n *\n * @example labelWidth=\"100px\"\n */\n readonly labelWidth = input<string | number>();\n\n /**\n * Disables the automatic error printing. Error printing will be enabled by default in v46.\n *\n * @defaultValue false\n */\n readonly disableErrorPrinting = input(false, { transform: booleanAttribute });\n\n /** Maps validation errors of the contained control to custom messages. */\n readonly formErrorMapper = input<SiFormValidationErrorMapper>();\n\n /**\n * Defines that this form item is required for the overall form to be valid.\n *\n * @defaultValue false\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly requiredInput = input(false, { transform: booleanAttribute, alias: 'required' });\n\n protected readonly fieldControlQuery = contentChild(SI_FORM_ITEM_CONTROL, { descendants: true });\n /** @internal */\n readonly ngControl = contentChild(NgControl, { descendants: true });\n protected readonly controlElementRef = contentChild<NgControl, ElementRef<HTMLElement>>(\n NgControl,\n {\n read: ElementRef,\n descendants: true\n }\n );\n protected readonly requiredValidator = contentChild(RequiredValidator, { descendants: true });\n\n /** @internal */\n readonly errors = signal<SiFormError[]>([]);\n\n /** @internal */\n readonly touched = signal(false);\n\n protected fieldset = inject(SiFormFieldsetComponent, { optional: true });\n protected container = inject(SiFormContainerComponent, { optional: true });\n\n protected get formItemId(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.id) ? (fieldControl.id() ?? null) : (fieldControl?.id ?? null);\n }\n\n protected get formItemLabelledBy(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.labelledby)\n ? (fieldControl.labelledby() ?? null)\n : (fieldControl?.labelledby ?? null);\n }\n\n protected get formItemErrormessageId(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.errormessageId)\n ? (fieldControl?.errormessageId() ?? null)\n : (fieldControl?.errormessageId ?? null);\n }\n\n protected readonly fieldControl = computed(\n () => this.fieldControlQuery() ?? this.fieldControlNative()\n );\n\n private validationErrorService = inject(SiFormValidationErrorService);\n private requiredTestControl = new FormControl('');\n private validator?: ValidatorFn | null;\n private previousErrors?: ValidationErrors | null;\n private readonly hasRequiredValidator = signal(false);\n private readonly fieldControlNative = signal<SiFormItemControl | undefined>(undefined);\n\n protected readonly labelWidthCssVar = computed(() => {\n const labelWidth = this.labelWidth();\n if (typeof labelWidth === 'number') {\n return `${labelWidth}px`;\n }\n\n return labelWidth;\n });\n\n protected readonly printErrors = computed(() => {\n return !this.disableErrorPrinting() && !(this.container?.disableErrorPrinting() ?? false);\n });\n\n /** @internal */\n readonly required = computed(() => this.requiredInput() || this.hasRequiredValidator());\n\n /** @internal */\n readonly control = computed(() => this.ngControl()?.control);\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.formErrorMapper) {\n this.updateValidationMessages();\n }\n }\n\n ngOnInit(): void {\n this.fieldset?.registerControl(this);\n }\n\n ngAfterContentInit(): void {\n if (!this.fieldControlQuery()) {\n this.fieldControlNative.set(\n SiFormFieldNativeControl.createForElementRef(this.controlElementRef())\n );\n }\n }\n\n ngAfterContentChecked(): void {\n this.updateRequiredState();\n this.updateValidationMessages();\n this.touched.set(!!this.ngControl()?.touched);\n }\n\n ngOnDestroy(): void {\n this.fieldset?.unregisterControl(this);\n }\n\n private updateRequiredState(): void {\n const requiredValidator = this.requiredValidator();\n if (requiredValidator) {\n // the easy case: required validator is applied in the template: <input required>\n this.hasRequiredValidator.set(booleanAttribute(requiredValidator.required));\n } else {\n // No required validator is applied via template, it could still be applied in the code.\n // If validators are applied via code, the validator object will change of controls.\n // So we only need to check for required if the validator object was changed.\n const validator = this.ngControl()?.control?.validator;\n\n if (this.validator !== validator) {\n this.validator = validator;\n this.requiredTestControl.setValidators(this.validator ?? null);\n this.requiredTestControl.updateValueAndValidity();\n this.hasRequiredValidator.set(this.requiredTestControl.errors?.required ?? false);\n }\n }\n }\n\n private updateValidationMessages(): void {\n const control = this.ngControl();\n const currentErrors = control?.errors;\n if (this.previousErrors !== currentErrors) {\n if (control && this.printErrors()) {\n this.errors.set(\n this.validationErrorService\n .resolveErrors(\n control.name,\n control.errors,\n this.formErrorMapper(),\n this.container?.formErrorMapper()\n )\n .filter(error => error.message)\n );\n this.previousErrors = currentErrors;\n } else if (this.errors().length) {\n this.errors.set([]);\n }\n }\n }\n}\n","<!--Block the space if no form-field is provided. Otherwise it looks weird in the formly field inline representation.-->\n@if (fieldControl()?.isFormCheck && !fieldset) {\n <div class=\"form-label\"></div>\n}\n@if (fieldControl()?.isFormCheck) {\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n <ng-container [ngTemplateOutlet]=\"labelTemplate\" />\n <ng-container [ngTemplateOutlet]=\"feedbackTemplate\" />\n </div>\n} @else {\n <ng-container [ngTemplateOutlet]=\"labelTemplate\" />\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n <ng-container [ngTemplateOutlet]=\"feedbackTemplate\" />\n </div>\n}\n\n<ng-template #labelTemplate>\n @if (label()) {\n <div\n class=\"d-flex gap-2 align-items-start\"\n [class.form-label]=\"!fieldControl()?.isFormCheck\"\n [class.form-check-label]=\"fieldControl()?.isFormCheck\"\n >\n @let labeledBy = formItemLabelledBy;\n @let required = this.required() && !this.fieldset?.hasOnlyRadios();\n @if (labeledBy) {\n <span [id]=\"labeledBy\" [class.required]=\"required\">{{ label()! | translate }}</span>\n } @else {\n <label [for]=\"formItemId\" [class.required]=\"required\">{{ label()! | translate }}</label>\n }\n <ng-content select=\"[si-help-button]\" />\n </div>\n }\n</ng-template>\n<ng-template #feedbackTemplate>\n @if (printErrors() && !fieldset?.hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [attr.id]=\"formItemErrormessageId\">\n @for (error of errors(); track error.key) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n <ng-content select=\".warning-feedback, .info-feedback, .invalid-feedback\" />\n</ng-template>\n<ng-template #content>\n <ng-content />\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, inject, InjectionToken, Signal } from '@angular/core';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormError } from '../si-form-item/si-form-item.component';\n\nexport const SI_FORM_VALIDATION_TOOLTIP_DATA = new InjectionToken<Signal<SiFormError[]>>(\n 'SiFormValidationTooltipData'\n);\n\n@Component({\n selector: 'si-form-validation-tooltip',\n imports: [SiTranslatePipe],\n template: `\n @for (error of errors(); track error.key) {\n <div>{{ error.message | translate: error.params }}</div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n 'class': 'd-flex flex-column gap-2 text-start'\n }\n})\nexport class SiFormValidationTooltipComponent {\n protected errors = inject(SI_FORM_VALIDATION_TOOLTIP_DATA);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n computed,\n Directive,\n DoCheck,\n ElementRef,\n inject,\n Injector,\n input,\n signal\n} from '@angular/core';\nimport { NgControl, ValidationErrors } from '@angular/forms';\nimport { SiTooltipService } from '@siemens/element-ng/tooltip';\n\nimport { SiFormContainerComponent } from '../si-form-container/si-form-container.component';\nimport { SiFormError } from '../si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\nimport {\n SI_FORM_VALIDATION_TOOLTIP_DATA,\n SiFormValidationTooltipComponent\n} from './si-form-validation-tooltip.component';\n\n/**\n * Directive to show a tooltip with validation errors of a form control.\n *\n * In general, `si-form-item` should be used.\n * This directive is intended only for cases where the tooltip cannot be shown inline.\n * This is typically the case for tables and lists where the validation message would break the layout.\n *\n * @example\n * ```html\n * <input siFormValidationTooltip [formControl]=\"control\" />\n * ```\n */\n@Directive({\n selector: '[siFormValidationTooltip]',\n providers: [SiTooltipService],\n host: {\n '[attr.aria-describedby]': 'describedBy'\n }\n})\nexport class SiFormValidationTooltipDirective implements DoCheck {\n private static idCounter = 0;\n\n private tooltipService = inject(SiTooltipService);\n private formValidationService = inject(SiFormValidationErrorService);\n private formContainer = inject(SiFormContainerComponent, { optional: true });\n /** Maps validation errors of the associated form control to custom tooltip messages. */\n readonly formErrorMapper = input<SiFormValidationErrorMapper>();\n private ngControl = inject(NgControl);\n private elementRef = inject(ElementRef);\n\n protected readonly describedBy = `__si-form-validation-tooltip-${SiFormValidationTooltipDirective.idCounter++}`;\n private readonly errors = signal<SiFormError[]>([]);\n private readonly touched = signal(false);\n private readonly canShowTooltip = computed(() => this.errors().length > 0 && this.touched());\n private currentErrors: ValidationErrors | null = null;\n\n constructor() {\n this.tooltipService.createTooltip({\n placement: () => 'auto',\n element: this.elementRef,\n describedBy: this.describedBy,\n injector: Injector.create({\n providers: [{ provide: SI_FORM_VALIDATION_TOOLTIP_DATA, useValue: this.errors }]\n }),\n canShow: this.canShowTooltip,\n tooltip: () => SiFormValidationTooltipComponent,\n // Not actually used, but errors in the context triggers a resize if the errors changes.\n tooltipContext: this.errors\n });\n }\n\n ngDoCheck(): void {\n const nextErrors = this.ngControl.errors;\n this.touched.set(!!this.ngControl.touched);\n\n if (this.currentErrors !== nextErrors) {\n this.currentErrors = nextErrors;\n this.updateErrors();\n }\n }\n\n private updateErrors(): void {\n const errors = this.formValidationService\n .resolveErrors(\n this.ngControl.name,\n this.currentErrors,\n this.formErrorMapper(),\n this.formContainer?.formErrorMapper()\n )\n .filter(error => !!error.message);\n\n this.errors.set(errors);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Provider } from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\nimport { buildDefaults, SiFormValidationErrorService } from './si-form-validation-error.service';\n\n/**\n * The error mapper is used to resolve an angular validation error to a {@link TranslatableString}.\n * It will be merged with already existing error mappers.\n */\nexport const provideFormValidationErrorMapper = (\n mapper: SiFormValidationErrorMapper\n): Provider => ({\n provide: SiFormValidationErrorService,\n // defaults must always be provided in case this is called in app.config\n useFactory: () => new SiFormValidationErrorService({ ...buildDefaults(), ...mapper })\n});\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { SiFormFieldsetComponent } from './form-fieldset/si-form-fieldset.component';\nimport { SiFormContainerComponent } from './si-form-container/si-form-container.component';\nimport { SiFormItemComponent } from './si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\nimport { provideFormValidationErrorMapper } from './si-form-validation-error.provider';\n\n@NgModule({\n imports: [SiFormContainerComponent, SiFormFieldsetComponent, SiFormItemComponent],\n exports: [SiFormContainerComponent, SiFormFieldsetComponent, SiFormItemComponent]\n})\nexport class SiFormModule {\n /**\n * Overrides the default configuration of the form module.\n *\n * @param errorMapper - The error mappers is used to resolve angular validation errors.\n * It will be merged with already existing error mappers.\n */\n // We have the errorMapper wrapped in an object, to allow the addition of more configuration fields without breaking the API.\n static withConfiguration({\n validationErrorMapper\n }: {\n validationErrorMapper: SiFormValidationErrorMapper;\n }): ModuleWithProviders<SiFormModule> {\n return {\n ngModule: SiFormModule,\n providers: [provideFormValidationErrorMapper(validationErrorMapper)]\n };\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-form-container/si-form-container.component';\nexport * from './si-form-field/si-form-field.component';\nexport * from './si-form-field/si-form-field.provider';\nexport * from './si-form-item/si-form-item.component';\nexport * from './si-form-validation-tooltip/si-form-validation-tooltip.directive';\nexport * from './form-fieldset/si-form-fieldset.component';\nexport * from './si-form.module';\nexport * from './si-form-item.control';\nexport * from './si-form-validation-error.provider';\nexport * from './si-form-validation-error.model';\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-form.mjs","sources":["../../../../projects/element-ng/form/si-form-container/si-form-container.component.ts","../../../../projects/element-ng/form/si-form-container/si-form-container.component.html","../../../../projects/element-ng/form/form-fieldset/si-form-fieldset.component.ts","../../../../projects/element-ng/form/form-fieldset/si-form-fieldset.component.html","../../../../projects/element-ng/form/si-form-item.control.ts","../../../../projects/element-ng/form/si-form-validation-error.service.ts","../../../../projects/element-ng/form/si-form-field/si-form-field.component.ts","../../../../projects/element-ng/form/si-form-field/si-form-field.component.html","../../../../projects/element-ng/form/si-form-field/si-form-field.provider.ts","../../../../projects/element-ng/form/si-form-item/si-form-field-native.control.ts","../../../../projects/element-ng/form/si-form-item/si-form-item.component.ts","../../../../projects/element-ng/form/si-form-item/si-form-item.component.html","../../../../projects/element-ng/form/si-form-validation-tooltip/si-form-validation-tooltip.component.ts","../../../../projects/element-ng/form/si-form-validation-tooltip/si-form-validation-tooltip.directive.ts","../../../../projects/element-ng/form/si-form-validation-error.provider.ts","../../../../projects/element-ng/form/si-form.module.ts","../../../../projects/element-ng/form/index.ts","../../../../projects/element-ng/form/siemens-element-ng-form.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input\n} from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { Breakpoints, SiResponsiveContainerDirective } from '@siemens/element-ng/resize-observer';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\n\nexport interface SiFormValidationError {\n controlName?: string;\n controlNameTranslationKey?: string;\n errorCode: TranslatableString;\n errorCodeTranslationKey?: string;\n errorParams?: any;\n}\n\n/**\n * @deprecated This component should no longer be used.\n *\n * When providing a form wide error mapper, use the {@link provideFormValidationErrorMapper}.\n * ```ts\n * import { provideFormValidationErrorMapper } form '@siemens/element-ng/forms'\n *\n * @Component({\n * template: `<form>...</form>`\n * providers: [provideFormValidationErrorMapper({\n * 'name.required': 'CUSTOM_REQUIRED_ERROR'\n * })]\n * })\n * class MyFormComponent {}\n * ```\n *\n * When using the column layout, use the `form-col-layout` classes.\n *\n * ```html\n * <!-- Responsive column layout -->\n * <form class=\"responsive-form-col-layout\">...</form>\n * <!-- Always column layout -->\n * <form class=\"form-col-layout\">...</form>\n * ```\n *\n * For a custom breakpoint use the SCSS mixin:\n *\n * ```scss\n * @use '@siemens/element-theme/src/styles/bootstrap/mixins/form-layout';\n *\n * // Custom responsive breakpoint\n * .custom-form-col-layout {\n * // Above 400px the column layout is used\n * @include form-layout.responsive-form-col-layout(400px);\n * }\n * ```\n */\n@Component({\n selector: 'si-form-container',\n imports: [NgTemplateOutlet, SiResponsiveContainerDirective],\n templateUrl: './si-form-container.component.html',\n styleUrl: './si-form-container.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n '[style.--si-form-label-width]': 'labelWidth()'\n }\n})\nexport class SiFormContainerComponent<TControl extends { [K in keyof TControl]: AbstractControl }> {\n /**\n * Set the form entity to the container to enable the overall form validation on in\n * the form container edit panel.\n */\n readonly form = input<FormGroup<TControl>>();\n\n /**\n * A form container in readonly mode is only displaying the form content without ability\n * to change it. The edit panel with typically save and cancel buttons is hidden. Set\n * to true to display the edit panel.\n *\n * @defaultValue false\n */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n /**\n * The container hosts the form within a siResizeContainer to configure the breakpoint for\n * different screen sizes. Optionally, change the container breakpoints with the contentContainerBreakpoints\n * input.\n */\n readonly contentContainerBreakpoints = input<Breakpoints>();\n\n /**\n * In some scenarios, one may not want the form container to be responsible for the layout relevant\n * `si-container-[xs|...]` classes, but let this be done by a different, nested component, e.g. by a\n * group box. In these cases, the property should be set to true.\n *\n * @defaultValue false\n */\n readonly disableContainerBreakpoints = input(false, { transform: booleanAttribute });\n\n /**\n * Every validation error has an errorCode. This map holds translate keys for error codes. The keys can\n * be used to display a translated message for each validation error. The defaults old english readable\n * key defaults for the Angular standard validators of the `Validators` class like `min`, `max` or `required`.\n *\n * Use the input to set your own translate keys for the form validators you need.\n */\n readonly errorCodeTranslateKeyMap = input<\n Map<string, string> | SiFormValidationErrorMapper | undefined\n >();\n\n /**\n * A map the maps from control names of the form to their translate keys.\n * The initial map is empty and the user is responsible to add the required\n * translate keys.\n *\n * @defaultValue\n * ```\n * new Map<string, string>()\n * ```\n */\n readonly controlNameTranslateKeyMap = input(new Map<string, string>());\n\n /**\n * Disables the automatic error printing in all nested {@link SiFormItemComponent}. Error printing will be enabled by default in v46.\n *\n * @defaultValue false\n */\n readonly disableErrorPrinting = input(false, { transform: booleanAttribute });\n\n /**\n * A custom width value to be applied to all labels.\n *\n * @example labelWidth=\"100px\".\n */\n readonly labelWidth = input<string>();\n\n protected hasParentContainer = !!inject(SiFormContainerComponent, {\n optional: true,\n skipSelf: true\n });\n\n /** @internal */\n readonly formErrorMapper = computed(() => {\n const map = this.errorCodeTranslateKeyMap();\n\n let customMapper: SiFormValidationErrorMapper | undefined;\n if (map instanceof Map) {\n customMapper = Object.fromEntries(map.entries());\n } else if (map) {\n customMapper = map;\n }\n\n return {\n ...customMapper\n };\n });\n\n /**\n * Indicates whether the user interacted with the form.\n * @returns `true`, if the user selected at least one form element and\n * [blurred]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/blur_event} by losing focus again\n * (e.g. by setting focus on another element), or by editing the content of a form element.\n * Otherwise `false`.\n */\n get userInteractedWithForm(): boolean {\n const form = this.form();\n return !!form && (form.dirty || form.touched);\n }\n\n /**\n * Indicates whether content editor message shall be styled as success.\n * @returns `true`, if {@link SiFormContainerComponent.userInteractedWithForm} is true and\n * the form is valid.\n */\n get validFormContainerMessage(): boolean {\n return this.userInteractedWithForm && this.form()!.status === 'VALID';\n }\n\n /**\n * Indicates whether the content editor message shall be styled as warning.\n * @returns `true`, if {@link SiFormContainerComponent.userInteractedWithForm} is true and\n * the form is invalid.\n */\n get invalidFormContainerMessage(): boolean {\n return this.userInteractedWithForm && this.form()!.status === 'INVALID';\n }\n\n protected getControlNameTranslateKey(controlName: string): string | undefined {\n const controlNameTranslateKeyMap = this.controlNameTranslateKeyMap();\n if (!controlNameTranslateKeyMap) {\n return undefined;\n }\n return controlNameTranslateKeyMap.get(controlName) ?? controlName;\n }\n}\n","<div class=\"d-flex flex-column align-content-stretch flex-grow-1 flex-shrink-1\">\n @if (disableContainerBreakpoints() || hasParentContainer) {\n <div class=\"flex-grow-1 flex-shrink-1\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n } @else {\n <div\n class=\"flex-grow-1 flex-shrink-1\"\n siResponsiveContainer\n [breakpoints]=\"contentContainerBreakpoints()\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\" />\n </div>\n }\n\n @if (!readonly()) {\n <div class=\"d-flex flex-row flex-nowrap flex-grow-0 flex-shrink-0 py-4\">\n <div\n class=\"d-flex flex-grow-1 flex-shrink-1 justify-content-end text-end overflow-hidden mx-6 my-auto\"\n [class.text-success]=\"validFormContainerMessage\"\n [class.text-danger]=\"invalidFormContainerMessage\"\n >\n <ng-content select=\"[si-form-container-message]\" />\n </div>\n\n <div class=\"m-auto flex-grow-0 flex-shrink-0\">\n <ng-content select=\"[si-form-container-buttons]\" />\n </div>\n </div>\n }\n</div>\n\n<ng-template #contentTemplate>\n <ng-content select=\"[si-form-container-content]\" />\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { booleanAttribute, Component, computed, input, signal } from '@angular/core';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormFieldsetControl } from './si-form-fieldset.control';\n\n@Component({\n selector: 'si-form-fieldset',\n imports: [SiTranslatePipe],\n templateUrl: './si-form-fieldset.component.html',\n styleUrl: '../si-form.shared.scss',\n host: {\n role: 'group',\n class: 'si-form-fieldset',\n '[style.--si-form-label-width]': 'labelWidth()',\n '[attr.aria-labelledby]': 'labelId'\n }\n})\nexport class SiFormFieldsetComponent {\n private static labelIdCounter = 0;\n\n /** The label for the entire fieldset. */\n readonly label = input.required<TranslatableString>();\n\n /** Overrides the parent label width. */\n readonly labelWidth = input<string>();\n\n /**\n * Adds a required marker to the label\n *\n * @defaultValue false\n */\n readonly required = input(false, { transform: booleanAttribute });\n\n /**\n * Switches all child inputs to inline mode\n *\n * @defaultValue false\n */\n readonly inline = input(false, { transform: booleanAttribute });\n\n private readonly formItems = signal<SiFormFieldsetControl[]>([]);\n\n /** @internal */\n readonly hasOnlyRadios = computed(() => {\n // Check if the fieldset only contains radio buttons.\n // Reactive and signal form radios share a control, while template-driven radios share a name.\n const items = this.formItems();\n if (items.length > 1) {\n const first = items[0].control();\n const firstRadioGroupName = items[0].radioGroupName?.();\n return (\n (first != null && items.every(item => item.control() === first)) ||\n (firstRadioGroupName != null &&\n items.every(item => item.radioGroupName?.() === firstRadioGroupName))\n );\n }\n\n return false;\n });\n\n protected readonly errors = computed(() => this.formItems()[0].errors());\n protected readonly touched = computed(() => this.formItems().some(item => item.touched()));\n protected readonly isRequired = computed(\n () =>\n this.required() || (this.hasOnlyRadios() && this.formItems().every(item => item.required()))\n );\n\n protected readonly labelId = `__si-form-fieldset-label-${SiFormFieldsetComponent.labelIdCounter++}`;\n\n /** @internal */\n registerControl(item: SiFormFieldsetControl): void {\n this.formItems.update(items => [...items, item]);\n }\n\n /** @internal */\n unregisterControl(item: SiFormFieldsetControl): void {\n this.formItems.update(items => items.filter(i => i !== item));\n }\n}\n","<div class=\"form-label d-flex gap-2\">\n <span [class.required]=\"isRequired()\" [id]=\"labelId\">{{ label() | translate }}</span>\n <ng-content select=\"[si-help-button]\" />\n</div>\n<div>\n <div [class]=\"inline() ? '' : 'd-flex flex-column gap-2 mb-2'\">\n <ng-content />\n </div>\n @if (hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [class.d-block]=\"touched()\">\n @for (error of errors(); track error) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { InjectionToken, Signal } from '@angular/core';\n\nexport const SI_FORM_ITEM_CONTROL = new InjectionToken<SiFormItemControl>('si.form-item.control');\n\n/**\n * Common interface for form item controls.\n * Controls that should be connected to {@link SiFormItemComponent} must implement this interface\n * and must be provided using the {@link SI_FORM_ITEM_CONTROL} token.\n */\nexport interface SiFormItemControl {\n /** The actual id of the control that should be used in the `for` attribute of a label. */\n readonly id?: string | Signal<string | undefined>;\n\n /**\n * ID that should be assigned to the label element inside the {@link SiFormItemComponent}.\n *\n * If the target control is not of type <i>input</i>, <i>select</i> or <i>button</i>, it cannot be referenced by a label.\n * Instead, aria-labelledby must be used to create a reference to a label.\n * In such a case, an implementation of {@link SiFormItemControl} must provide the id of the label in {@link labelledby}.\n * {@link SiFormItemComponent} will apply the id to the label\n * so that it can be used inside the control to reference it in the aria-labelledby attribute.\n */\n readonly labelledby?: string | Signal<string | undefined> | null;\n\n /**\n * Generated ID that the {@link SiFormItemComponent} will assign to the element containing the error messages.\n * Implementations of {@link SiFormItemControl} must generate this ID\n * and assign it to the `aria-describedby` attribute of their focusable elements.\n */\n readonly errormessageId: string | Signal<string>;\n\n /** If the control is meant to be used a checkbox. This affects the label positioning. */\n readonly isFormCheck?: boolean;\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injectable } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport type { FieldState } from '@angular/forms/signals';\nimport { t } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormError } from './si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\n\n/**\n * Creates the map of default error resolver.\n * This is a function as $localize requires an injection context.\n *\n * @internal\n */\nexport const buildDefaults = (): SiFormValidationErrorMapper => ({\n // Phone number specific\n notSupportedPhoneNumberCountry: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.PHONE_COUNTRY:Unsupported country/region code`\n ),\n invalidPhoneNumberFormat: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.INVALID_PHONE:Invalid phone number`\n ),\n // IP address specific\n ipv4Address: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.IPV4:Invalid IPv4 address`),\n ipv6Address: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.IPV6:Invalid IPv6 address`),\n // Min / max\n max: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.MAX:Max. {{max}}`),\n min: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.MIN:Min. {{min}}`),\n maxlength: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.MAX_LENGTH:Max. {{requiredLength}} characters`\n ),\n minlength: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.MIN_LENGTH:Min. {{requiredLength}} characters`\n ),\n // Date specific\n dateFormat: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.DATE_FORMAT:Invalid date`),\n endBeforeStart: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.END_BEFORE_START:End date before start date`\n ),\n invalidEndDateFormat: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.DATE_FORMAT_END:Invalid end date`\n ),\n invalidStartDateFormat: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.DATE_FORMAT_START:Invalid start date`\n ),\n maxDate: t(\n () =>\n $localize`:@@SI_FORM_CONTAINER.ERROR.MAX_DATE:Date up to and including {{maxString}} required`\n ),\n minDate: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.MIN_DATE:Date from {{minString}} required`),\n maxTime: t(\n () =>\n $localize`:@@SI_FORM_CONTAINER.ERROR.MAX_TIME:Time up to and including {{maxString}} required`\n ),\n minTime: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.MIN_TIME:Time from {{minString}} required`),\n rangeAfterMaxDate: t(\n () =>\n $localize`:@@SI_FORM_CONTAINER.ERROR.RANGE_AFTER_MAX_DATE:Period up to and including {{maxString}} required`\n ),\n rangeBeforeMinDate: t(\n () =>\n $localize`:@@SI_FORM_CONTAINER.ERROR.RANGE_BEFORE_MIN_DATE:Period from {{minString}} required`\n ),\n // Time units\n hours: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.HOURS:Integer between 0 and {{max}} required`\n ),\n minutes: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.MINUTES:Integer between 0 and 59 required`),\n seconds: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.SECONDS:Integer between 0 and 59 required`),\n milliseconds: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.MILLISECONDS:Integer between 0 and 999 required`\n ),\n // Various\n email: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.EMAIL:Invalid email address`),\n numberFormat: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.NUMBER_FORMAT:Number required`),\n pattern: t(\n () => $localize`:@@SI_FORM_CONTAINER.ERROR.PATTERN:Required value format not fulfilled`\n ),\n required: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.REQUIRED:Required`),\n requiredTrue: t(() => $localize`:@@SI_FORM_CONTAINER.ERROR.REQUIRED_TRUE:Required`)\n});\n\n/**\n * A service to resolve the validation error of an Angular control to a message or translation key.\n *\n * It can be provided using {@link provideFormValidationErrorMapper}.\n * If not provided, there will be a default instance in the root injector using only the default keys.\n *\n * There can be multiple instances to support providing in a lazy loaded module.\n * If the service cannot find a message, it will try to resolve it using a parent service if available.\n *\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n useFactory: () => new SiFormValidationErrorService(buildDefaults())\n})\nexport class SiFormValidationErrorService {\n private readonly parent = inject(SiFormValidationErrorService, {\n optional: true,\n skipSelf: true\n });\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n constructor(private errorMapper: SiFormValidationErrorMapper) {}\n\n /**\n * Resolves validation errors for Angular signal forms.\n *\n * If the validation error has no message associated, the resolution flow of {@link resolveErrors} is followed.\n *\n * @param state - the fieldState of the formfield.\n */\n resolveFormFieldErrors(state: FieldState<any>): SiFormError[] {\n return state.errors().map(error => {\n const { message, kind, fieldTree, formField, ...rawErrorParams } = error;\n const errorParams = this.getErrorParams(rawErrorParams);\n if (!message) {\n return this.resolveError(kind, state.name(), errorParams);\n } else {\n return { message, key: kind, params: errorParams };\n }\n });\n }\n\n /** Returns legacy reactive-form parameters stored in `context`, or the signal-form error. */\n private getErrorParams(error: object): unknown {\n const { context } = error as { context?: unknown };\n return context ?? error;\n }\n\n /**\n * Resolves the provided form errors to a list of {@link SiFormError}.\n * To resolution order is:\n * 1. componentMapper\n * 2. containerMapper using the controlName\n * 3. containerMapper without controlName\n * 4. errorMapper of the service using the controlName\n * 5. errorMapper of the service\n * 6: parent service\n */\n resolveErrors(\n controlName: string | number | null | undefined,\n errors: ValidationErrors | null,\n componentMapper?: SiFormValidationErrorMapper,\n containerMapper?: SiFormValidationErrorMapper\n ): SiFormError[] {\n if (!errors) {\n return [];\n }\n /*\n * Converts the angular error object (like: {required: true, minLength: {actualLength: 1, requiredLength: 3}})\n * to SiFormError[].\n * Therefore, the error key is look up in the error mappers.\n * If it can be resolved, the error will be printed using the resolved text.\n */\n return Object.entries(errors).map(([key, params]) =>\n this.resolveError(key, controlName, params, componentMapper, containerMapper)\n );\n }\n\n private resolveError(\n key: string,\n controlName: string | number | null | undefined,\n params: any,\n componentMapper?: SiFormValidationErrorMapper,\n containerMapper?: SiFormValidationErrorMapper\n ): SiFormError {\n return (\n this.resolveMessage(key, controlName, params, componentMapper) ??\n this.resolveMessage(key, controlName, params, containerMapper) ??\n this.resolveMessage(key, controlName, params, this.errorMapper) ??\n this.parent?.resolveError(key, controlName, params) ?? { key, params }\n );\n }\n\n private resolveMessage(\n key: string,\n controlName: string | number | null | undefined,\n params: any,\n mapper?: SiFormValidationErrorMapper\n ): SiFormError | undefined {\n if (!mapper) {\n return undefined;\n }\n\n const resolver = mapper[`${controlName}.${key}`] ?? mapper[key];\n\n if (resolver) {\n const message = typeof resolver === 'function' ? resolver(params) : resolver;\n return message ? { key, message, params } : undefined;\n }\n return undefined;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n inject,\n input,\n isSignal\n} from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormFieldsetComponent } from '../form-fieldset/si-form-fieldset.component';\nimport { SiFormFieldsetControl } from '../form-fieldset/si-form-fieldset.control';\nimport { SI_FORM_ITEM_CONTROL } from '../si-form-item.control';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\n\n/**\n * Constructs a full form field including error messages, labels and aria-* attributes.\n * It must be used with Angular's signal forms.\n *\n * @example\n * ```html\n * <si-form-field label=\"Name\">\n * <input class=\"form-control\" [formField]=\"form.name\" />\n *\n * <!-- Optional help button -->\n * <button\n * si-help-button\n * type=\"button\"\n * siHelpTitle=\"Help for name\"\n * siHelpContent=\"The context help description\"\n * >More information about the name</button>\n * </si-form-field>\n * ```\n */\n@Component({\n selector: 'si-form-field',\n imports: [SiTranslatePipe, NgTemplateOutlet],\n templateUrl: './si-form-field.component.html',\n styleUrl: './si-form-field.component.scss',\n host: {\n '[class.required]': 'showRequired()',\n '[class.form-check]': 'isFormCheck()',\n '[class.form-check-inline]': 'fieldset?.inline()',\n '[class.si-form-input]': '!fieldset'\n }\n})\nexport class SiFormFieldComponent implements SiFormFieldsetControl {\n private static idCounter = 0;\n\n /**\n * The label to be displayed in the form field.\n * It will be translated if a translation key is available.\n */\n readonly label = input.required<TranslatableString>();\n\n private readonly formField = contentChild.required(FormField);\n private readonly fieldControl = contentChild(SI_FORM_ITEM_CONTROL, { descendants: true });\n\n protected readonly fieldset = inject(SiFormFieldsetComponent, { optional: true });\n\n private readonly validationErrorService = inject(SiFormValidationErrorService);\n\n private readonly generatedId = `__si-form-field-${SiFormFieldComponent.idCounter++}`;\n\n /** The id of the connected control, used for the label's `for` attribute. */\n protected readonly controlId = computed(() => {\n const id = this.fieldControl()?.id;\n return (isSignal(id) ? id() : id) ?? (this.formField().element.id || this.generatedId);\n });\n\n protected readonly errormessageId = computed(() => {\n const id = this.fieldControl()?.errormessageId;\n return (isSignal(id) ? id() : id) ?? `${this.controlId()}-errormessage`;\n });\n\n protected readonly labelledby = computed(() => {\n const labelledby = this.fieldControl()?.labelledby;\n return isSignal(labelledby) ? labelledby() : labelledby;\n });\n\n /** Whether the connected control is a form-check (checkbox, radio or switch). */\n protected readonly isFormCheck = computed(\n () =>\n this.fieldControl()?.isFormCheck ??\n this.formField().element.classList.contains('form-check-input')\n );\n\n private readonly fieldState = computed(() => this.formField().state());\n\n /** @internal */\n readonly control = computed(() => this.fieldState().fieldTree);\n\n /** @internal */\n readonly required = computed(() => this.fieldState().required());\n\n /** @internal */\n readonly showRequired = computed(() => this.required() && !this.isPartOfRadioGroup());\n\n private readonly invalid = computed(() => {\n const state = this.fieldState();\n return state.touched() && state.invalid();\n });\n\n /** @internal */\n readonly touched = computed(() => this.fieldState().touched());\n\n protected readonly isPartOfRadioGroup = computed(() => this.fieldset?.hasOnlyRadios() ?? false);\n\n /** @internal */\n readonly errors = computed(() => {\n const state = this.fieldState();\n if (!state.touched()) {\n return [];\n }\n\n return this.validationErrorService.resolveFormFieldErrors(state);\n });\n\n constructor() {\n if (this.fieldset) {\n this.fieldset.registerControl(this);\n inject(DestroyRef).onDestroy(() => this.fieldset!.unregisterControl(this));\n }\n\n effect(() => this.syncControlId());\n effect(() => this.syncErrorDescription());\n effect(() => this.syncInvalidState());\n }\n\n private syncControlId(): void {\n const element = this.formField().element;\n if (!element.id) {\n element.id = this.generatedId;\n }\n }\n\n /** Associates the error messages with the projected control for assistive technologies. */\n private syncErrorDescription(): void {\n this.formField().element.setAttribute('aria-describedby', this.errormessageId());\n }\n\n /**\n * Reflects the validation state onto the projected control via `aria-invalid`. This is needed\n * because signal forms does not set `aria-invalid`, and the native `:user-invalid` pseudo-class\n * ignores `markAsTouched()`. The matching `.ng-invalid`/`.ng-touched` classes that drive the\n * styling are added by signal forms itself, see `provideSiFormFieldConfig()`.\n */\n private syncInvalidState(): void {\n const element = this.formField().element;\n if (this.invalid()) {\n element.setAttribute('aria-invalid', 'true');\n } else {\n element.removeAttribute('aria-invalid');\n }\n }\n}\n","@if (!isFormCheck()) {\n <ng-container [ngTemplateOutlet]=\"labelTemplate\" />\n} @else if (!fieldset) {\n <!-- Empty spacer so the control aligns with the label column in form-col-layout. -->\n <div class=\"form-label\"></div>\n}\n<div class=\"form-item-content\">\n <ng-content />\n @if (isFormCheck()) {\n <ng-container [ngTemplateOutlet]=\"labelTemplate\" />\n }\n @if (!isPartOfRadioGroup()) {\n <ng-container [ngTemplateOutlet]=\"feedbackTemplate\" />\n }\n</div>\n\n<ng-template #labelTemplate>\n <div\n class=\"d-flex gap-2\"\n [class.form-label]=\"!isFormCheck()\"\n [class.form-check-label]=\"isFormCheck()\"\n >\n @if (labelledby()) {\n <span [id]=\"labelledby()\" [class.required]=\"showRequired()\">{{ label() | translate }}</span>\n } @else {\n <label [for]=\"controlId()\" [class.required]=\"showRequired()\">{{ label() | translate }}</label>\n }\n <ng-content select=\"[si-help-button]\" />\n </div>\n</ng-template>\n\n<ng-template #feedbackTemplate>\n <div class=\"invalid-feedback\" [class.d-block]=\"errors().length\" [attr.id]=\"errormessageId()\">\n @for (error of errors(); track $index) {\n <div>\n {{ error.message ?? error.key | translate: error.params }}\n </div>\n }\n </div>\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Provider } from '@angular/core';\nimport { provideSignalFormsConfig, SignalFormsConfig } from '@angular/forms/signals';\nimport { NG_STATUS_CLASSES } from '@angular/forms/signals/compat';\n\n/**\n * Provides the signal forms configuration required by {@link SiFormFieldComponent}.\n *\n * It restores the `ng-*` classes applied by the directives of {@link @angular/forms#FormsModule | FormsModule} / {@link @angular/forms#ReactiveFormsModule | ReactiveFormsModule}.\n *\n * @example\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideSiFormFieldConfig()]\n * });\n * ```\n */\nexport const provideSiFormFieldConfig = (config: SignalFormsConfig = {}): Provider[] =>\n provideSignalFormsConfig({\n ...config,\n classes: {\n ...NG_STATUS_CLASSES,\n ...config.classes\n }\n });\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ElementRef } from '@angular/core';\n\nimport { SiFormItemControl } from '../si-form-item.control';\n\n/**\n * This will be used by the `si-form-item` to create a form item control if none is provided.\n * This is typically the case for native form controls like `input`, `textarea` and `select`.\n * It allows accessing the control's id and type.\n */\nexport class SiFormFieldNativeControl implements SiFormItemControl {\n private static idCounter = 0;\n private static readonly supportedTypes = ['INPUT', 'TEXTAREA', 'SELECT', 'METER', 'PROGRESS'];\n\n static createForElementRef(\n element: ElementRef<HTMLElement> | undefined\n ): SiFormFieldNativeControl | undefined {\n if (!element) {\n return undefined;\n }\n\n if (!SiFormFieldNativeControl.supportedTypes.includes(element.nativeElement.tagName)) {\n return undefined;\n }\n\n return new SiFormFieldNativeControl(element.nativeElement);\n }\n\n private constructor(private readonly element: HTMLElement) {\n if (!element.id) {\n element.id = `__si-form-field-native-control-${SiFormFieldNativeControl.idCounter++}`;\n }\n\n this.errormessageId = `${this.id}-errormessage`;\n if (element instanceof HTMLInputElement) {\n this.isFormCheck = element.type === 'checkbox' || element.type === 'radio';\n } else {\n this.isFormCheck = false;\n }\n\n element.setAttribute('aria-describedby', this.errormessageId);\n }\n\n isFormCheck: boolean;\n\n get id(): string {\n return this.element?.id;\n }\n\n set id(value: string) {\n this.element.id = value;\n }\n\n readonly errormessageId: string;\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentChecked,\n AfterContentInit,\n booleanAttribute,\n Component,\n computed,\n contentChild,\n ElementRef,\n inject,\n input,\n isSignal,\n OnChanges,\n OnDestroy,\n OnInit,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport {\n FormControl,\n NgControl,\n RequiredValidator,\n ValidationErrors,\n ValidatorFn\n} from '@angular/forms';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormFieldsetComponent } from '../form-fieldset/si-form-fieldset.component';\nimport { SiFormFieldsetControl } from '../form-fieldset/si-form-fieldset.control';\nimport { SiFormContainerComponent } from '../si-form-container/si-form-container.component';\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from '../si-form-item.control';\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\nimport { SiFormFieldNativeControl } from './si-form-field-native.control';\n\n/** @internal */\nexport interface SiFormError {\n key: string;\n message?: TranslatableString;\n params: any;\n}\n\n@Component({\n selector: 'si-form-item',\n imports: [SiTranslatePipe, NgTemplateOutlet],\n templateUrl: './si-form-item.component.html',\n styleUrl: '../si-form.shared.scss',\n host: {\n '[class.required]': 'required()',\n '[style.--si-form-label-width]': 'labelWidthCssVar()',\n '[class.form-check]': 'fieldControl()?.isFormCheck',\n '[class.form-check-inline]': 'fieldset?.inline()',\n '[class.si-form-input]': '!fieldset'\n }\n})\nexport class SiFormItemComponent\n implements\n AfterContentInit,\n AfterContentChecked,\n OnChanges,\n OnInit,\n OnDestroy,\n SiFormFieldsetControl\n{\n /**\n * The label to be displayed in the form item.\n * It will be translated if a translation key is available.\n */\n readonly label = input.required<TranslatableString>();\n\n /**\n * A custom width value to be applied to the label.\n * A value of 0 is allowed as well to visually hide away the label area.\n *\n * Numbers will be converted to pixels.\n * Using numbers is discouraged and might be dropped.\n *\n * @example labelWidth=\"100px\"\n */\n readonly labelWidth = input<string | number>();\n\n /**\n * Disables the automatic error printing. Error printing will be enabled by default in v46.\n *\n * @defaultValue false\n */\n readonly disableErrorPrinting = input(false, { transform: booleanAttribute });\n\n /** Maps validation errors of the contained control to custom messages. */\n readonly formErrorMapper = input<SiFormValidationErrorMapper>();\n\n /**\n * Defines that this form item is required for the overall form to be valid.\n *\n * @defaultValue false\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly requiredInput = input(false, { transform: booleanAttribute, alias: 'required' });\n\n protected readonly fieldControlQuery = contentChild(SI_FORM_ITEM_CONTROL, { descendants: true });\n /** @internal */\n readonly ngControl = contentChild(NgControl, { descendants: true });\n protected readonly controlElementRef = contentChild<NgControl, ElementRef<HTMLElement>>(\n NgControl,\n {\n read: ElementRef,\n descendants: true\n }\n );\n protected readonly requiredValidator = contentChild(RequiredValidator, { descendants: true });\n\n /** @internal */\n readonly errors = signal<SiFormError[]>([]);\n\n /** @internal */\n readonly touched = signal(false);\n\n protected fieldset = inject(SiFormFieldsetComponent, { optional: true });\n protected container = inject(SiFormContainerComponent, { optional: true });\n\n protected get formItemId(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.id) ? (fieldControl.id() ?? null) : (fieldControl?.id ?? null);\n }\n\n protected get formItemLabelledBy(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.labelledby)\n ? (fieldControl.labelledby() ?? null)\n : (fieldControl?.labelledby ?? null);\n }\n\n protected get formItemErrormessageId(): string | null {\n const fieldControl = this.fieldControl();\n return isSignal(fieldControl?.errormessageId)\n ? (fieldControl?.errormessageId() ?? null)\n : (fieldControl?.errormessageId ?? null);\n }\n\n protected readonly fieldControl = computed(\n () => this.fieldControlQuery() ?? this.fieldControlNative()\n );\n\n private validationErrorService = inject(SiFormValidationErrorService);\n private requiredTestControl = new FormControl('');\n private validator?: ValidatorFn | null;\n private previousErrors?: ValidationErrors | null;\n private readonly hasRequiredValidator = signal(false);\n private readonly fieldControlNative = signal<SiFormItemControl | undefined>(undefined);\n\n protected readonly labelWidthCssVar = computed(() => {\n const labelWidth = this.labelWidth();\n if (typeof labelWidth === 'number') {\n return `${labelWidth}px`;\n }\n\n return labelWidth;\n });\n\n protected readonly printErrors = computed(() => {\n return !this.disableErrorPrinting() && !(this.container?.disableErrorPrinting() ?? false);\n });\n\n /** @internal */\n readonly required = computed(() => this.requiredInput() || this.hasRequiredValidator());\n\n /** @internal */\n readonly control = computed(() => this.ngControl()?.control);\n\n /** @internal */\n readonly radioGroupName = computed(() => {\n const element = this.controlElementRef()?.nativeElement;\n if (element?.tagName === 'INPUT') {\n const inputElement = element as HTMLInputElement;\n return inputElement.type === 'radio' ? inputElement.name || undefined : undefined;\n }\n\n return undefined;\n });\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.formErrorMapper) {\n this.updateValidationMessages();\n }\n }\n\n ngOnInit(): void {\n this.fieldset?.registerControl(this);\n }\n\n ngAfterContentInit(): void {\n if (!this.fieldControlQuery()) {\n this.fieldControlNative.set(\n SiFormFieldNativeControl.createForElementRef(this.controlElementRef())\n );\n }\n }\n\n ngAfterContentChecked(): void {\n this.updateRequiredState();\n this.updateValidationMessages();\n this.touched.set(!!this.ngControl()?.touched);\n }\n\n ngOnDestroy(): void {\n this.fieldset?.unregisterControl(this);\n }\n\n private updateRequiredState(): void {\n const requiredValidator = this.requiredValidator();\n if (requiredValidator) {\n // the easy case: required validator is applied in the template: <input required>\n this.hasRequiredValidator.set(booleanAttribute(requiredValidator.required));\n } else {\n // No required validator is applied via template, it could still be applied in the code.\n // If validators are applied via code, the validator object will change of controls.\n // So we only need to check for required if the validator object was changed.\n const validator = this.ngControl()?.control?.validator;\n\n if (this.validator !== validator) {\n this.validator = validator;\n this.requiredTestControl.setValidators(this.validator ?? null);\n this.requiredTestControl.updateValueAndValidity();\n this.hasRequiredValidator.set(this.requiredTestControl.errors?.required ?? false);\n }\n }\n }\n\n private updateValidationMessages(): void {\n const control = this.ngControl();\n const currentErrors = control?.errors;\n if (this.previousErrors !== currentErrors) {\n if (control && this.printErrors()) {\n this.errors.set(\n this.validationErrorService\n .resolveErrors(\n control.name,\n control.errors,\n this.formErrorMapper(),\n this.container?.formErrorMapper()\n )\n .filter(error => error.message)\n );\n this.previousErrors = currentErrors;\n } else if (this.errors().length) {\n this.errors.set([]);\n }\n }\n }\n}\n","<!--Block the space if no form-field is provided. Otherwise it looks weird in the formly field inline representation.-->\n@if (fieldControl()?.isFormCheck && !fieldset) {\n <div class=\"form-label\"></div>\n}\n@if (fieldControl()?.isFormCheck) {\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n <ng-container [ngTemplateOutlet]=\"labelTemplate\" />\n <ng-container [ngTemplateOutlet]=\"feedbackTemplate\" />\n </div>\n} @else {\n <ng-container [ngTemplateOutlet]=\"labelTemplate\" />\n <div class=\"form-item-content\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n <ng-container [ngTemplateOutlet]=\"feedbackTemplate\" />\n </div>\n}\n\n<ng-template #labelTemplate>\n @if (label()) {\n <div\n class=\"d-flex gap-2 align-items-start\"\n [class.form-label]=\"!fieldControl()?.isFormCheck\"\n [class.form-check-label]=\"fieldControl()?.isFormCheck\"\n >\n @let labeledBy = formItemLabelledBy;\n @let required = this.required() && !this.fieldset?.hasOnlyRadios();\n @if (labeledBy) {\n <span [id]=\"labeledBy\" [class.required]=\"required\">{{ label()! | translate }}</span>\n } @else {\n <label [for]=\"formItemId\" [class.required]=\"required\">{{ label()! | translate }}</label>\n }\n <ng-content select=\"[si-help-button]\" />\n </div>\n }\n</ng-template>\n<ng-template #feedbackTemplate>\n @if (printErrors() && !fieldset?.hasOnlyRadios()) {\n <div class=\"invalid-feedback\" [attr.id]=\"formItemErrormessageId\">\n @for (error of errors(); track error.key) {\n <div>\n {{ error.message | translate: error.params }}\n </div>\n }\n </div>\n }\n <ng-content select=\".warning-feedback, .info-feedback, .invalid-feedback\" />\n</ng-template>\n<ng-template #content>\n <ng-content />\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, inject, InjectionToken, Signal } from '@angular/core';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormError } from '../si-form-item/si-form-item.component';\n\nexport const SI_FORM_VALIDATION_TOOLTIP_DATA = new InjectionToken<Signal<SiFormError[]>>(\n 'SiFormValidationTooltipData'\n);\n\n@Component({\n selector: 'si-form-validation-tooltip',\n imports: [SiTranslatePipe],\n template: `\n @for (error of errors(); track error.key) {\n <div>{{ error.message | translate: error.params }}</div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n 'class': 'd-flex flex-column gap-2 text-start'\n }\n})\nexport class SiFormValidationTooltipComponent {\n protected errors = inject(SI_FORM_VALIDATION_TOOLTIP_DATA);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n computed,\n Directive,\n DoCheck,\n ElementRef,\n inject,\n Injector,\n input,\n signal\n} from '@angular/core';\nimport { NgControl, ValidationErrors } from '@angular/forms';\nimport { SiTooltipService } from '@siemens/element-ng/tooltip';\n\nimport { SiFormContainerComponent } from '../si-form-container/si-form-container.component';\nimport { SiFormError } from '../si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from '../si-form-validation-error.model';\nimport { SiFormValidationErrorService } from '../si-form-validation-error.service';\nimport {\n SI_FORM_VALIDATION_TOOLTIP_DATA,\n SiFormValidationTooltipComponent\n} from './si-form-validation-tooltip.component';\n\n/**\n * Directive to show a tooltip with validation errors of a form control.\n *\n * In general, `si-form-item` should be used.\n * This directive is intended only for cases where the tooltip cannot be shown inline.\n * This is typically the case for tables and lists where the validation message would break the layout.\n *\n * @example\n * ```html\n * <input siFormValidationTooltip [formControl]=\"control\" />\n * ```\n */\n@Directive({\n selector: '[siFormValidationTooltip]',\n providers: [SiTooltipService],\n host: {\n '[attr.aria-describedby]': 'describedBy'\n }\n})\nexport class SiFormValidationTooltipDirective implements DoCheck {\n private static idCounter = 0;\n\n private tooltipService = inject(SiTooltipService);\n private formValidationService = inject(SiFormValidationErrorService);\n private formContainer = inject(SiFormContainerComponent, { optional: true });\n /** Maps validation errors of the associated form control to custom tooltip messages. */\n readonly formErrorMapper = input<SiFormValidationErrorMapper>();\n private ngControl = inject(NgControl);\n private elementRef = inject(ElementRef);\n\n protected readonly describedBy = `__si-form-validation-tooltip-${SiFormValidationTooltipDirective.idCounter++}`;\n private readonly errors = signal<SiFormError[]>([]);\n private readonly touched = signal(false);\n private readonly canShowTooltip = computed(() => this.errors().length > 0 && this.touched());\n private currentErrors: ValidationErrors | null = null;\n\n constructor() {\n this.tooltipService.createTooltip({\n placement: () => 'auto',\n element: this.elementRef,\n describedBy: this.describedBy,\n injector: Injector.create({\n providers: [{ provide: SI_FORM_VALIDATION_TOOLTIP_DATA, useValue: this.errors }]\n }),\n canShow: this.canShowTooltip,\n tooltip: () => SiFormValidationTooltipComponent,\n // Not actually used, but errors in the context triggers a resize if the errors changes.\n tooltipContext: this.errors\n });\n }\n\n ngDoCheck(): void {\n const nextErrors = this.ngControl.errors;\n this.touched.set(!!this.ngControl.touched);\n\n if (this.currentErrors !== nextErrors) {\n this.currentErrors = nextErrors;\n this.updateErrors();\n }\n }\n\n private updateErrors(): void {\n const errors = this.formValidationService\n .resolveErrors(\n this.ngControl.name,\n this.currentErrors,\n this.formErrorMapper(),\n this.formContainer?.formErrorMapper()\n )\n .filter(error => !!error.message);\n\n this.errors.set(errors);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Provider } from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\nimport { buildDefaults, SiFormValidationErrorService } from './si-form-validation-error.service';\n\n/**\n * The error mapper is used to resolve an angular validation error to a {@link TranslatableString}.\n * It will be merged with already existing error mappers.\n */\nexport const provideFormValidationErrorMapper = (\n mapper: SiFormValidationErrorMapper\n): Provider => ({\n provide: SiFormValidationErrorService,\n // defaults must always be provided in case this is called in app.config\n useFactory: () => new SiFormValidationErrorService({ ...buildDefaults(), ...mapper })\n});\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { SiFormFieldsetComponent } from './form-fieldset/si-form-fieldset.component';\nimport { SiFormContainerComponent } from './si-form-container/si-form-container.component';\nimport { SiFormItemComponent } from './si-form-item/si-form-item.component';\nimport { SiFormValidationErrorMapper } from './si-form-validation-error.model';\nimport { provideFormValidationErrorMapper } from './si-form-validation-error.provider';\n\n@NgModule({\n imports: [SiFormContainerComponent, SiFormFieldsetComponent, SiFormItemComponent],\n exports: [SiFormContainerComponent, SiFormFieldsetComponent, SiFormItemComponent]\n})\nexport class SiFormModule {\n /**\n * Overrides the default configuration of the form module.\n *\n * @param errorMapper - The error mappers is used to resolve angular validation errors.\n * It will be merged with already existing error mappers.\n */\n // We have the errorMapper wrapped in an object, to allow the addition of more configuration fields without breaking the API.\n static withConfiguration({\n validationErrorMapper\n }: {\n validationErrorMapper: SiFormValidationErrorMapper;\n }): ModuleWithProviders<SiFormModule> {\n return {\n ngModule: SiFormModule,\n providers: [provideFormValidationErrorMapper(validationErrorMapper)]\n };\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-form-container/si-form-container.component';\nexport * from './si-form-field/si-form-field.component';\nexport * from './si-form-field/si-form-field.provider';\nexport * from './si-form-item/si-form-item.component';\nexport * from './si-form-validation-tooltip/si-form-validation-tooltip.directive';\nexport * from './form-fieldset/si-form-fieldset.component';\nexport * from './si-form.module';\nexport * from './si-form-item.control';\nexport * from './si-form-validation-error.provider';\nexport * from './si-form-validation-error.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -347,7 +347,7 @@ const STATUS_ICON_CONFIG = new InjectionToken('STATUS_ICON_CONFIG', {
347
347
  icon: 'elementCircleFilled',
348
348
  color: 'status-neutral',
349
349
  stacked: 'elementStateQuestionMark',
350
- stackedColor: 'text-primary',
350
+ stackedColor: 'status-neutral-contrast',
351
351
  background: 'background-0',
352
352
  severity: 8,
353
353
  ariaLabel: t(() => $localize `:@@SI_ICON_STATUS.UNKNOWN:Unknown`)
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-icon.mjs","sources":["../../../../projects/element-ng/icon/si-icon-legacy.component.ts","../../../../projects/element-ng/icon/si-icon-legacy.component.html","../../../../projects/element-ng/icon/si-icons.ts","../../../../projects/element-ng/icon/si-icon.component.ts","../../../../projects/element-ng/icon/si-icon.module.ts","../../../../projects/element-ng/icon/status-icon.ts","../../../../projects/element-ng/icon/si-status-icon.component.ts","../../../../projects/element-ng/icon/element-icons.ts","../../../../projects/element-ng/icon/index.ts","../../../../projects/element-ng/icon/siemens-element-ng-icon.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Component, computed, input } from '@angular/core';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\n/**\n * @deprecated This component should no longer be used.\n * Use the {@link SiIconComponent} instead.\n * Existing usages can be replaced as follows:\n *\n * ```html\n * <!-- before -->\n * <si-icon icon=\"element-user\" color=\"text-danger\" />\n * <!-- after -->\n * <si-icon icon=\"element-user\" class=\"icon text-danger\" />\n * ```\n *\n * **Important:** Previously, the class `icon` was automatically applied. Unless not needed,\n * it must now be applied manually.\n * The icon class scales up the icon compared to its surrounding text.\n *\n * Stacked icons need to be constructed in HTML directly.\n * If applicable, the `si-status-icon` component should be used instead.\n *\n * ```html\n * <!-- before -->\n * <si-icon\n * icon=\"element-circle-filled\"\n * color=\"status-success\"\n * stackedIcon=\"element-state-tick\"\n * stackedColor=\"status-success-contrast\"\n * alt=\"Success\"\n * />\n *\n * <!-- after -->\n * <div class=\"icon-stack icon\" aria-label=\"Success\">\n * <si-icon icon=\"element-circle-filled\" class=\"status-success\" />\n * <si-icon icon=\"element-state-tick\" class=\"status-success-contrast\" />\n * </div>\n * ```\n */\n@Component({\n selector: 'si-icon-legacy',\n imports: [SiTranslatePipe],\n templateUrl: './si-icon-legacy.component.html',\n styles: ':host, span { line-height: 1; }'\n})\nexport class SiIconLegacyComponent {\n /** Icon token, see {@link https://element.siemens.io/icons/element} */\n readonly icon = input<string>();\n /** Color class, see {@link https://element.siemens.io/fundamentals/typography/#color-variants-classes} */\n readonly color = input<string>();\n /** Icon token, see {@link https://element.siemens.io/fundamentals/icons/} */\n readonly stackedIcon = input<string>();\n /** Color class, see {@link https://element.siemens.io/fundamentals/icons/} */\n readonly stackedColor = input<string>();\n /** Alternative name or translation key for icon. Used for A11y. */\n readonly alt = input<TranslatableString>();\n /**\n * Text-size class for icon size, see {@link https://element.siemens.io/fundamentals/typography/#type-styles-classes}\n *\n * @defaultValue 'icon'\n */\n readonly size = input<string>('icon');\n\n protected readonly altText = computed(() => {\n return this.alt() ?? this.icon()?.replace('element-', '').split('-').join(' ') ?? '';\n });\n}\n","<span\n [class]=\"`d-inline-block position-relative ${icon() ?? ''} ${color() ?? ''} ${size()}`\"\n [attr.aria-label]=\"altText() ? (altText() | translate) : null\"\n [attr.aria-hidden]=\"!altText()\"\n [attr.role]=\"altText() ? 'img' : 'presentation'\"\n>\n @if (stackedIcon()) {\n <i\n aria-hidden=\"true\"\n [class]=\"`position-absolute start-0 ${stackedIcon()} ${stackedColor() ?? ''}`\"\n ></i>\n }\n</span>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { SiThemeService } from '@siemens/element-ng/theme';\n\ninterface RegisteredIcon {\n content: string | undefined;\n // Count how often an icon was registered to only remove it if it is no longer in use.\n referenceCount: number;\n}\n\nconst registeredIcons = new Map<string, RegisteredIcon>();\n\n/**\n * Adds the provided icons.\n * It requires an Angular InjectionContent.\n * The Icons are available until the component is destroyed.\n * Call this function only in the component which actually uses the icon.\n * Importing all icons on the global level is discouraged.\n *\n * When using a string instead of the object to use an icon,\n * use the kebab-case version of the icon name.\n *\n * @example\n * ```ts\n * import { elementIcon } from '@siemens/element-icons';\n * import { addIcons } from '@siemens/element-ng/icon';\n *\n * @Component({`<si-icon [icon]=\"icons.elementIcon\"`})\n * class MyComponent {\n * icons = addIcons({ elementIcon })\n * }\n * ```\n */\nexport const addIcons = <T extends string>(icons: Record<T, string>): Record<T, string> => {\n const iconMap = {} as Record<T, string>;\n for (const [key, content] of Object.entries<string>(icons)) {\n const registeredIcon = registeredIcons.get(key) ?? {\n content,\n referenceCount: 0\n };\n registeredIcon.referenceCount++;\n registeredIcons.set(key, registeredIcon);\n iconMap[key as T] = key;\n }\n\n // Delete registered Icons after Component is destroyed to optimize memory usage.\n // WeakMap must not be used, as the Icon can only be removed on component destruction.\n // When using a WeakMap it would also get destroyed if it is not referenced, but the component may use it later again.\n inject(DestroyRef).onDestroy(() => {\n for (const key of Object.keys(icons)) {\n const registeredIcon = registeredIcons.get(key);\n if (registeredIcon!.referenceCount === 1) {\n registeredIcons.delete(key);\n } else {\n registeredIcon!.referenceCount--;\n }\n }\n });\n\n return iconMap;\n};\n\nconst getIcon = (key: string): string | undefined => registeredIcons.get(key)?.content;\n\n@Injectable({ providedIn: 'root' })\nexport class IconService {\n private themeService = inject(SiThemeService);\n\n getIcon(name: string): string | undefined {\n const camelCaseName = this.kebabToCamelCase(name);\n return this.themeService.themeIcons()[camelCaseName] ?? getIcon(camelCaseName);\n }\n\n private kebabToCamelCase(str: string): string {\n return str?.replace(/-./g, match => match.charAt(1).toUpperCase());\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Component, computed, inject, input } from '@angular/core';\n\nimport { IconService } from './si-icons';\n\n/**\n * Component to render a font or SVG icon depending on the configuration.\n * If no SVG icon is found, the component will fall back to render the icon-font.\n * In that case, an application must ensure that the icon font is loaded.\n * This component will only attach the respective class.\n *\n * The content of this component is hidden in the a11y tree.\n * If needed, the consumer must set proper labels.\n */\n@Component({\n selector: 'si-icon',\n template: ` <div aria-hidden=\"true\" [class]=\"svgIcon() ? 'svg-element-icon' : fontIcon()\"></div>`,\n styleUrl: './si-icon.component.scss',\n host: {\n '[attr.data-icon]': 'icon()',\n '[style.--svg-element-icon]': 'svgIcon()'\n }\n})\nexport class SiIconComponent {\n /**\n * Define which icon should be rendered.\n * Provide using:\n * - value of the icon map provided by `addIcons`\n * - (not recommended): plain string in kebab-case or camelCase\n *\n * @example\n * ```ts\n * import { elementUser } from '@siemens/element-icons';\n *\n * @Component({template: `\n * <si-icon [icon]=\"icons.elementUser\" />\n * <si-icon icon=\"element-user\" />\n * <si-icon icon=\"elementUser\" />\n *\n * `})\n * class MyComponent {\n * icons = addIcons(elementUser);\n * }\n * ```\n */\n readonly icon = input.required<string>();\n\n private readonly iconService = inject(IconService);\n\n protected readonly svgIcon = computed(() => {\n const icon = this.iconService.getIcon(this.icon());\n if (!icon) {\n return undefined;\n }\n\n return `url(\"${icon.replace(/\"/g, '\\\\\"')}\")`;\n });\n\n /** Icon class, which is ensured to be kebab-case. */\n protected readonly fontIcon = computed(() =>\n this.svgIcon() ? undefined : this.camelToKebabCase(this.icon())\n );\n\n private isKebabCase(str: string): boolean {\n return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(str);\n }\n\n /**\n * Converts a camelCase string to kebab-case.\n * If the string is already in kebab-case, it returns it unchanged.\n *\n * Note: This conversion has limitations with mixed alphanumeric cases.\n * Complex number-letter combinations may not convert as expected.\n */\n private camelToKebabCase(str: string): string {\n return this.isKebabCase(str)\n ? str\n : str\n ?.replace(/([a-z])([A-Z0-9])/g, '$1-$2')\n .replace(/([0-9])([A-Z])/g, '$1-$2')\n .toLowerCase();\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiIconLegacyComponent } from './si-icon-legacy.component';\nimport { SiIconComponent } from './si-icon.component';\n\n@NgModule({\n imports: [SiIconComponent, SiIconLegacyComponent],\n exports: [SiIconComponent, SiIconLegacyComponent]\n})\nexport class SiIconModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { InjectionToken } from '@angular/core';\nimport {\n elementCircleFilled,\n elementOctagonFilled,\n elementSquare45Filled,\n elementSquareFilled,\n elementStateExclamationMark,\n elementStateInfo,\n elementStatePause,\n elementStateProgress,\n elementStateQuestionMark,\n elementStateTick,\n elementTriangleFilled\n} from '@siemens/element-icons';\nimport { EntityStatusType, StatusIcon } from '@siemens/element-ng/common';\nimport { t } from '@siemens/element-translate-ng/translate';\n\nimport { addIcons } from './si-icons';\n\n/**\n * The status icon configuration.\n *\n * @experimental\n */\nexport const STATUS_ICON_CONFIG = new InjectionToken<{ [key in EntityStatusType]: StatusIcon }>(\n 'STATUS_ICON_CONFIG',\n {\n providedIn: 'root',\n factory: () => {\n addIcons({\n elementCircleFilled,\n elementOctagonFilled,\n elementSquare45Filled,\n elementSquareFilled,\n elementStateExclamationMark,\n elementStateInfo,\n elementStatePause,\n elementStateProgress,\n elementStateQuestionMark,\n elementStateTick,\n elementTriangleFilled\n });\n return {\n success: {\n icon: 'elementCircleFilled',\n color: 'status-success',\n stacked: 'elementStateTick',\n stackedColor: 'status-success-contrast',\n background: 'background-success-subtle',\n severity: 5,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.SUCCESS:Success`)\n },\n info: {\n icon: 'elementSquareFilled',\n color: 'status-info',\n stacked: 'elementStateInfo',\n stackedColor: 'status-info-contrast',\n background: 'background-information-subtle',\n severity: 4,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.INFO:Info`)\n },\n caution: {\n icon: 'elementSquare45Filled',\n color: 'status-caution',\n stacked: 'elementStateExclamationMark',\n stackedColor: 'status-caution-contrast',\n background: 'background-caution-subtle',\n severity: 3,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.CAUTION:Caution`)\n },\n warning: {\n icon: 'elementTriangleFilled',\n color: 'status-warning',\n stacked: 'elementStateExclamationMark',\n stackedColor: 'status-warning-contrast',\n background: 'background-warning-subtle',\n severity: 2,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.WARNING:Warning`)\n },\n danger: {\n icon: 'elementCircleFilled',\n color: 'status-danger',\n stacked: 'elementStateExclamationMark',\n stackedColor: 'status-danger-contrast',\n background: 'background-danger-subtle',\n severity: 1,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.DANGER:Danger`)\n },\n critical: {\n icon: 'elementOctagonFilled',\n color: 'status-critical',\n stacked: 'elementStateExclamationMark',\n stackedColor: 'status-critical-contrast',\n background: 'background-critical-subtle',\n severity: 0,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.CRITICAL:Critical`)\n },\n progress: {\n icon: 'elementCircleFilled',\n color: 'status-info',\n stacked: 'elementStateProgress',\n stackedColor: 'status-info-contrast',\n background: 'background-information-subtle',\n severity: 7,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.PROGRESS:Progress`)\n },\n pending: {\n icon: 'elementCircleFilled',\n color: 'status-caution',\n stacked: 'elementStatePause',\n stackedColor: 'status-caution-contrast',\n background: 'background-caution-subtle',\n severity: 6,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.PENDING:Pending`)\n },\n unknown: {\n icon: 'elementCircleFilled',\n color: 'status-neutral',\n stacked: 'elementStateQuestionMark',\n stackedColor: 'text-primary',\n background: 'background-0',\n severity: 8,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.UNKNOWN:Unknown`)\n }\n };\n }\n }\n);\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Component, computed, inject, input } from '@angular/core';\nimport { EntityStatusType } from '@siemens/element-ng/common';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiIconComponent } from './si-icon.component';\nimport { STATUS_ICON_CONFIG } from './status-icon';\n\n@Component({\n selector: 'si-status-icon',\n imports: [SiIconComponent, SiTranslatePipe],\n template: `\n @let iconValue = statusIcon();\n @if (iconValue) {\n <si-icon [class]=\"iconValue.color\" [icon]=\"iconValue.icon\" />\n <si-icon [class]=\"iconValue.stackedColor\" [icon]=\"iconValue.stacked\" />\n <span class=\"visually-hidden\">{{ iconValue.ariaLabel | translate }}</span>\n }\n `,\n host: { class: 'icon-stack' }\n})\nexport class SiStatusIconComponent {\n private readonly statusIcons = inject(STATUS_ICON_CONFIG);\n\n /** Status that determines the rendered stacked icon and accessible label. */\n readonly status = input.required<EntityStatusType>();\n\n protected readonly statusIcon = computed(() => this.statusIcons[this.status()]);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n\nexport const elementCheckedImageShape =\n 'data:image/svg+xml;base64,PHN2ZyBpZD0iSWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+CiAgPHRpdGxlPm9rPC90aXRsZT4KICA8cGF0aCBkPSJNMzc5LjUxLDE1Ni43NmwtMTczLDE3My03NC03NGExMiwxMiwwLDEsMC0xNywxN2w4Mi41LDgyLjVhMTIsMTIsMCwwLDAsMTcsMGwxODEuNS0xODEuNWExMiwxMiwwLDAsMC0xNy0xN1oiLz4KPC9zdmc+Cg==';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-icon.module';\nexport * from './status-icon';\nexport { addIcons } from './si-icons';\nexport * from './si-icon.component';\nexport * from './si-icon-legacy.component';\nexport * from './si-status-icon.component';\nexport { elementCheckedImageShape } from './element-icons';\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-icon.mjs","sources":["../../../../projects/element-ng/icon/si-icon-legacy.component.ts","../../../../projects/element-ng/icon/si-icon-legacy.component.html","../../../../projects/element-ng/icon/si-icons.ts","../../../../projects/element-ng/icon/si-icon.component.ts","../../../../projects/element-ng/icon/si-icon.module.ts","../../../../projects/element-ng/icon/status-icon.ts","../../../../projects/element-ng/icon/si-status-icon.component.ts","../../../../projects/element-ng/icon/element-icons.ts","../../../../projects/element-ng/icon/index.ts","../../../../projects/element-ng/icon/siemens-element-ng-icon.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Component, computed, input } from '@angular/core';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\n/**\n * @deprecated This component should no longer be used.\n * Use the {@link SiIconComponent} instead.\n * Existing usages can be replaced as follows:\n *\n * ```html\n * <!-- before -->\n * <si-icon icon=\"element-user\" color=\"text-danger\" />\n * <!-- after -->\n * <si-icon icon=\"element-user\" class=\"icon text-danger\" />\n * ```\n *\n * **Important:** Previously, the class `icon` was automatically applied. Unless not needed,\n * it must now be applied manually.\n * The icon class scales up the icon compared to its surrounding text.\n *\n * Stacked icons need to be constructed in HTML directly.\n * If applicable, the `si-status-icon` component should be used instead.\n *\n * ```html\n * <!-- before -->\n * <si-icon\n * icon=\"element-circle-filled\"\n * color=\"status-success\"\n * stackedIcon=\"element-state-tick\"\n * stackedColor=\"status-success-contrast\"\n * alt=\"Success\"\n * />\n *\n * <!-- after -->\n * <div class=\"icon-stack icon\" aria-label=\"Success\">\n * <si-icon icon=\"element-circle-filled\" class=\"status-success\" />\n * <si-icon icon=\"element-state-tick\" class=\"status-success-contrast\" />\n * </div>\n * ```\n */\n@Component({\n selector: 'si-icon-legacy',\n imports: [SiTranslatePipe],\n templateUrl: './si-icon-legacy.component.html',\n styles: ':host, span { line-height: 1; }'\n})\nexport class SiIconLegacyComponent {\n /** Icon token, see {@link https://element.siemens.io/icons/element} */\n readonly icon = input<string>();\n /** Color class, see {@link https://element.siemens.io/fundamentals/typography/#color-variants-classes} */\n readonly color = input<string>();\n /** Icon token, see {@link https://element.siemens.io/fundamentals/icons/} */\n readonly stackedIcon = input<string>();\n /** Color class, see {@link https://element.siemens.io/fundamentals/icons/} */\n readonly stackedColor = input<string>();\n /** Alternative name or translation key for icon. Used for A11y. */\n readonly alt = input<TranslatableString>();\n /**\n * Text-size class for icon size, see {@link https://element.siemens.io/fundamentals/typography/#type-styles-classes}\n *\n * @defaultValue 'icon'\n */\n readonly size = input<string>('icon');\n\n protected readonly altText = computed(() => {\n return this.alt() ?? this.icon()?.replace('element-', '').split('-').join(' ') ?? '';\n });\n}\n","<span\n [class]=\"`d-inline-block position-relative ${icon() ?? ''} ${color() ?? ''} ${size()}`\"\n [attr.aria-label]=\"altText() ? (altText() | translate) : null\"\n [attr.aria-hidden]=\"!altText()\"\n [attr.role]=\"altText() ? 'img' : 'presentation'\"\n>\n @if (stackedIcon()) {\n <i\n aria-hidden=\"true\"\n [class]=\"`position-absolute start-0 ${stackedIcon()} ${stackedColor() ?? ''}`\"\n ></i>\n }\n</span>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { SiThemeService } from '@siemens/element-ng/theme';\n\ninterface RegisteredIcon {\n content: string | undefined;\n // Count how often an icon was registered to only remove it if it is no longer in use.\n referenceCount: number;\n}\n\nconst registeredIcons = new Map<string, RegisteredIcon>();\n\n/**\n * Adds the provided icons.\n * It requires an Angular InjectionContent.\n * The Icons are available until the component is destroyed.\n * Call this function only in the component which actually uses the icon.\n * Importing all icons on the global level is discouraged.\n *\n * When using a string instead of the object to use an icon,\n * use the kebab-case version of the icon name.\n *\n * @example\n * ```ts\n * import { elementIcon } from '@siemens/element-icons';\n * import { addIcons } from '@siemens/element-ng/icon';\n *\n * @Component({`<si-icon [icon]=\"icons.elementIcon\"`})\n * class MyComponent {\n * icons = addIcons({ elementIcon })\n * }\n * ```\n */\nexport const addIcons = <T extends string>(icons: Record<T, string>): Record<T, string> => {\n const iconMap = {} as Record<T, string>;\n for (const [key, content] of Object.entries<string>(icons)) {\n const registeredIcon = registeredIcons.get(key) ?? {\n content,\n referenceCount: 0\n };\n registeredIcon.referenceCount++;\n registeredIcons.set(key, registeredIcon);\n iconMap[key as T] = key;\n }\n\n // Delete registered Icons after Component is destroyed to optimize memory usage.\n // WeakMap must not be used, as the Icon can only be removed on component destruction.\n // When using a WeakMap it would also get destroyed if it is not referenced, but the component may use it later again.\n inject(DestroyRef).onDestroy(() => {\n for (const key of Object.keys(icons)) {\n const registeredIcon = registeredIcons.get(key);\n if (registeredIcon!.referenceCount === 1) {\n registeredIcons.delete(key);\n } else {\n registeredIcon!.referenceCount--;\n }\n }\n });\n\n return iconMap;\n};\n\nconst getIcon = (key: string): string | undefined => registeredIcons.get(key)?.content;\n\n@Injectable({ providedIn: 'root' })\nexport class IconService {\n private themeService = inject(SiThemeService);\n\n getIcon(name: string): string | undefined {\n const camelCaseName = this.kebabToCamelCase(name);\n return this.themeService.themeIcons()[camelCaseName] ?? getIcon(camelCaseName);\n }\n\n private kebabToCamelCase(str: string): string {\n return str?.replace(/-./g, match => match.charAt(1).toUpperCase());\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Component, computed, inject, input } from '@angular/core';\n\nimport { IconService } from './si-icons';\n\n/**\n * Component to render a font or SVG icon depending on the configuration.\n * If no SVG icon is found, the component will fall back to render the icon-font.\n * In that case, an application must ensure that the icon font is loaded.\n * This component will only attach the respective class.\n *\n * The content of this component is hidden in the a11y tree.\n * If needed, the consumer must set proper labels.\n */\n@Component({\n selector: 'si-icon',\n template: ` <div aria-hidden=\"true\" [class]=\"svgIcon() ? 'svg-element-icon' : fontIcon()\"></div>`,\n styleUrl: './si-icon.component.scss',\n host: {\n '[attr.data-icon]': 'icon()',\n '[style.--svg-element-icon]': 'svgIcon()'\n }\n})\nexport class SiIconComponent {\n /**\n * Define which icon should be rendered.\n * Provide using:\n * - value of the icon map provided by `addIcons`\n * - (not recommended): plain string in kebab-case or camelCase\n *\n * @example\n * ```ts\n * import { elementUser } from '@siemens/element-icons';\n *\n * @Component({template: `\n * <si-icon [icon]=\"icons.elementUser\" />\n * <si-icon icon=\"element-user\" />\n * <si-icon icon=\"elementUser\" />\n *\n * `})\n * class MyComponent {\n * icons = addIcons(elementUser);\n * }\n * ```\n */\n readonly icon = input.required<string>();\n\n private readonly iconService = inject(IconService);\n\n protected readonly svgIcon = computed(() => {\n const icon = this.iconService.getIcon(this.icon());\n if (!icon) {\n return undefined;\n }\n\n return `url(\"${icon.replace(/\"/g, '\\\\\"')}\")`;\n });\n\n /** Icon class, which is ensured to be kebab-case. */\n protected readonly fontIcon = computed(() =>\n this.svgIcon() ? undefined : this.camelToKebabCase(this.icon())\n );\n\n private isKebabCase(str: string): boolean {\n return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(str);\n }\n\n /**\n * Converts a camelCase string to kebab-case.\n * If the string is already in kebab-case, it returns it unchanged.\n *\n * Note: This conversion has limitations with mixed alphanumeric cases.\n * Complex number-letter combinations may not convert as expected.\n */\n private camelToKebabCase(str: string): string {\n return this.isKebabCase(str)\n ? str\n : str\n ?.replace(/([a-z])([A-Z0-9])/g, '$1-$2')\n .replace(/([0-9])([A-Z])/g, '$1-$2')\n .toLowerCase();\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiIconLegacyComponent } from './si-icon-legacy.component';\nimport { SiIconComponent } from './si-icon.component';\n\n@NgModule({\n imports: [SiIconComponent, SiIconLegacyComponent],\n exports: [SiIconComponent, SiIconLegacyComponent]\n})\nexport class SiIconModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { InjectionToken } from '@angular/core';\nimport {\n elementCircleFilled,\n elementOctagonFilled,\n elementSquare45Filled,\n elementSquareFilled,\n elementStateExclamationMark,\n elementStateInfo,\n elementStatePause,\n elementStateProgress,\n elementStateQuestionMark,\n elementStateTick,\n elementTriangleFilled\n} from '@siemens/element-icons';\nimport { EntityStatusType, StatusIcon } from '@siemens/element-ng/common';\nimport { t } from '@siemens/element-translate-ng/translate';\n\nimport { addIcons } from './si-icons';\n\n/**\n * The status icon configuration.\n *\n * @experimental\n */\nexport const STATUS_ICON_CONFIG = new InjectionToken<{ [key in EntityStatusType]: StatusIcon }>(\n 'STATUS_ICON_CONFIG',\n {\n providedIn: 'root',\n factory: () => {\n addIcons({\n elementCircleFilled,\n elementOctagonFilled,\n elementSquare45Filled,\n elementSquareFilled,\n elementStateExclamationMark,\n elementStateInfo,\n elementStatePause,\n elementStateProgress,\n elementStateQuestionMark,\n elementStateTick,\n elementTriangleFilled\n });\n return {\n success: {\n icon: 'elementCircleFilled',\n color: 'status-success',\n stacked: 'elementStateTick',\n stackedColor: 'status-success-contrast',\n background: 'background-success-subtle',\n severity: 5,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.SUCCESS:Success`)\n },\n info: {\n icon: 'elementSquareFilled',\n color: 'status-info',\n stacked: 'elementStateInfo',\n stackedColor: 'status-info-contrast',\n background: 'background-information-subtle',\n severity: 4,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.INFO:Info`)\n },\n caution: {\n icon: 'elementSquare45Filled',\n color: 'status-caution',\n stacked: 'elementStateExclamationMark',\n stackedColor: 'status-caution-contrast',\n background: 'background-caution-subtle',\n severity: 3,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.CAUTION:Caution`)\n },\n warning: {\n icon: 'elementTriangleFilled',\n color: 'status-warning',\n stacked: 'elementStateExclamationMark',\n stackedColor: 'status-warning-contrast',\n background: 'background-warning-subtle',\n severity: 2,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.WARNING:Warning`)\n },\n danger: {\n icon: 'elementCircleFilled',\n color: 'status-danger',\n stacked: 'elementStateExclamationMark',\n stackedColor: 'status-danger-contrast',\n background: 'background-danger-subtle',\n severity: 1,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.DANGER:Danger`)\n },\n critical: {\n icon: 'elementOctagonFilled',\n color: 'status-critical',\n stacked: 'elementStateExclamationMark',\n stackedColor: 'status-critical-contrast',\n background: 'background-critical-subtle',\n severity: 0,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.CRITICAL:Critical`)\n },\n progress: {\n icon: 'elementCircleFilled',\n color: 'status-info',\n stacked: 'elementStateProgress',\n stackedColor: 'status-info-contrast',\n background: 'background-information-subtle',\n severity: 7,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.PROGRESS:Progress`)\n },\n pending: {\n icon: 'elementCircleFilled',\n color: 'status-caution',\n stacked: 'elementStatePause',\n stackedColor: 'status-caution-contrast',\n background: 'background-caution-subtle',\n severity: 6,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.PENDING:Pending`)\n },\n unknown: {\n icon: 'elementCircleFilled',\n color: 'status-neutral',\n stacked: 'elementStateQuestionMark',\n stackedColor: 'status-neutral-contrast',\n background: 'background-0',\n severity: 8,\n ariaLabel: t(() => $localize`:@@SI_ICON_STATUS.UNKNOWN:Unknown`)\n }\n };\n }\n }\n);\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Component, computed, inject, input } from '@angular/core';\nimport { EntityStatusType } from '@siemens/element-ng/common';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiIconComponent } from './si-icon.component';\nimport { STATUS_ICON_CONFIG } from './status-icon';\n\n@Component({\n selector: 'si-status-icon',\n imports: [SiIconComponent, SiTranslatePipe],\n template: `\n @let iconValue = statusIcon();\n @if (iconValue) {\n <si-icon [class]=\"iconValue.color\" [icon]=\"iconValue.icon\" />\n <si-icon [class]=\"iconValue.stackedColor\" [icon]=\"iconValue.stacked\" />\n <span class=\"visually-hidden\">{{ iconValue.ariaLabel | translate }}</span>\n }\n `,\n host: { class: 'icon-stack' }\n})\nexport class SiStatusIconComponent {\n private readonly statusIcons = inject(STATUS_ICON_CONFIG);\n\n /** Status that determines the rendered stacked icon and accessible label. */\n readonly status = input.required<EntityStatusType>();\n\n protected readonly statusIcon = computed(() => this.statusIcons[this.status()]);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n\nexport const elementCheckedImageShape =\n 'data:image/svg+xml;base64,PHN2ZyBpZD0iSWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+CiAgPHRpdGxlPm9rPC90aXRsZT4KICA8cGF0aCBkPSJNMzc5LjUxLDE1Ni43NmwtMTczLDE3My03NC03NGExMiwxMiwwLDEsMC0xNywxN2w4Mi41LDgyLjVhMTIsMTIsMCwwLDAsMTcsMGwxODEuNS0xODEuNWExMiwxMiwwLDAsMC0xNy0xN1oiLz4KPC9zdmc+Cg==';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-icon.module';\nexport * from './status-icon';\nexport { addIcons } from './si-icons';\nexport * from './si-icon.component';\nexport * from './si-icon-legacy.component';\nexport * from './si-status-icon.component';\nexport { elementCheckedImageShape } from './element-icons';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAAA;;;AAGG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCG;MAOU,qBAAqB,CAAA;;AAEvB,IAAA,IAAI,GAAG,KAAK;wFAAU;;AAEtB,IAAA,KAAK,GAAG,KAAK;yFAAU;;AAEvB,IAAA,WAAW,GAAG,KAAK;+FAAU;;AAE7B,IAAA,YAAY,GAAG,KAAK;gGAAU;;AAE9B,IAAA,GAAG,GAAG,KAAK;uFAAsB;AAC1C;;;;AAIG;IACM,IAAI,GAAG,KAAK,CAAS,MAAM;6EAAC;AAElB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;IACtF,CAAC;gFAAC;uGApBS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjDlC,sbAaA,EAAA,MAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDgCY,eAAe,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAId,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;+BACE,gBAAgB,EAAA,OAAA,EACjB,CAAC,eAAe,CAAC,EAAA,QAAA,EAAA,sbAAA,EAAA,MAAA,EAAA,CAAA,6BAAA,CAAA,EAAA;;;AE7C5B;;;AAGG;AAUH,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0B;AAEzD;;;;;;;;;;;;;;;;;;;;AAoBG;AACI,MAAM,QAAQ,GAAG,CAAmB,KAAwB,KAAuB;IACxF,MAAM,OAAO,GAAG,EAAuB;AACvC,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAS,KAAK,CAAC,EAAE;QAC1D,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;YACjD,OAAO;AACP,YAAA,cAAc,EAAE;SACjB;QACD,cAAc,CAAC,cAAc,EAAE;AAC/B,QAAA,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC;AACxC,QAAA,OAAO,CAAC,GAAQ,CAAC,GAAG,GAAG;IACzB;;;;AAKA,IAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;QAChC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACpC,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/C,YAAA,IAAI,cAAe,CAAC,cAAc,KAAK,CAAC,EAAE;AACxC,gBAAA,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7B;iBAAO;gBACL,cAAe,CAAC,cAAc,EAAE;YAClC;QACF;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,OAAO;AAChB;AAEA,MAAM,OAAO,GAAG,CAAC,GAAW,KAAyB,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO;MAGzE,WAAW,CAAA;AACd,IAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AAE7C,IAAA,OAAO,CAAC,IAAY,EAAA;QAClB,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACjD,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC;IAChF;AAEQ,IAAA,gBAAgB,CAAC,GAAW,EAAA;QAClC,OAAO,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE;uGAVW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA;;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACnElC;;;AAGG;AAKH;;;;;;;;AAQG;MAUU,eAAe,CAAA;AAC1B;;;;;;;;;;;;;;;;;;;;AAoBG;IACM,IAAI,GAAG,KAAK,CAAC,QAAQ;6EAAU;AAEvB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAE/B,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,SAAS;QAClB;QAEA,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA,EAAA,CAAI;IAC9C,CAAC;gFAAC;;IAGiB,QAAQ,GAAG,QAAQ,CAAC,MACrC,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iFAChE;AAEO,IAAA,WAAW,CAAC,GAAW,EAAA;AAC7B,QAAA,OAAO,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7C;AAEA;;;;;;AAMG;AACK,IAAA,gBAAgB,CAAC,GAAW,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG;AACzB,cAAE;AACF,cAAE;AACE,kBAAE,OAAO,CAAC,oBAAoB,EAAE,OAAO;AACtC,iBAAA,OAAO,CAAC,iBAAiB,EAAE,OAAO;AAClC,iBAAA,WAAW,EAAE;IACtB;uGA1DW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,kSAPhB,CAAA,qFAAA,CAAuF,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qYAAA,CAAA,EAAA,CAAA;;2FAOtF,eAAe,EAAA,UAAA,EAAA,CAAA;kBAT3B,SAAS;+BACE,SAAS,EAAA,QAAA,EACT,uFAAuF,EAAA,IAAA,EAE3F;AACJ,wBAAA,kBAAkB,EAAE,QAAQ;AAC5B,wBAAA,4BAA4B,EAAE;AAC/B,qBAAA,EAAA,MAAA,EAAA,CAAA,qYAAA,CAAA,EAAA;;;ACxBH;;;AAGG;MAUU,YAAY,CAAA;uGAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAHb,eAAe,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA,CACtC,eAAe,EAAE,qBAAqB,CAAA,EAAA,CAAA;wGAErC,YAAY,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,eAAe,EAAE,qBAAqB,CAAC;AACjD,oBAAA,OAAO,EAAE,CAAC,eAAe,EAAE,qBAAqB;AACjD,iBAAA;;;ACZD;;;AAGG;AAoBH;;;;AAIG;MACU,kBAAkB,GAAG,IAAI,cAAc,CAClD,oBAAoB,EACpB;AACE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,QAAQ,CAAC;YACP,mBAAmB;YACnB,oBAAoB;YACpB,qBAAqB;YACrB,mBAAmB;YACnB,2BAA2B;YAC3B,gBAAgB;YAChB,iBAAiB;YACjB,oBAAoB;YACpB,wBAAwB;YACxB,gBAAgB;YAChB;AACD,SAAA,CAAC;QACF,OAAO;AACL,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,YAAY,EAAE,yBAAyB;AACvC,gBAAA,UAAU,EAAE,2BAA2B;AACvC,gBAAA,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC;AAChE,aAAA;AACD,YAAA,IAAI,EAAE;AACJ,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,UAAU,EAAE,+BAA+B;AAC3C,gBAAA,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,2BAAA,CAA6B;AAC1D,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,uBAAuB;AAC7B,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,OAAO,EAAE,6BAA6B;AACtC,gBAAA,YAAY,EAAE,yBAAyB;AACvC,gBAAA,UAAU,EAAE,2BAA2B;AACvC,gBAAA,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC;AAChE,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,uBAAuB;AAC7B,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,OAAO,EAAE,6BAA6B;AACtC,gBAAA,YAAY,EAAE,yBAAyB;AACvC,gBAAA,UAAU,EAAE,2BAA2B;AACvC,gBAAA,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC;AAChE,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,OAAO,EAAE,6BAA6B;AACtC,gBAAA,YAAY,EAAE,wBAAwB;AACtC,gBAAA,UAAU,EAAE,0BAA0B;AACtC,gBAAA,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,+BAAA,CAAiC;AAC9D,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,OAAO,EAAE,6BAA6B;AACtC,gBAAA,YAAY,EAAE,0BAA0B;AACxC,gBAAA,UAAU,EAAE,4BAA4B;AACxC,gBAAA,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC;AAClE,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,OAAO,EAAE,sBAAsB;AAC/B,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,UAAU,EAAE,+BAA+B;AAC3C,gBAAA,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC;AAClE,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,YAAY,EAAE,yBAAyB;AACvC,gBAAA,UAAU,EAAE,2BAA2B;AACvC,gBAAA,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC;AAChE,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,OAAO,EAAE,0BAA0B;AACnC,gBAAA,YAAY,EAAE,yBAAyB;AACvC,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC;AAChE;SACF;IACH;AACD,CAAA;;AClIH;;;AAGG;MAqBU,qBAAqB,CAAA;AACf,IAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;;IAGhD,MAAM,GAAG,KAAK,CAAC,QAAQ;+EAAoB;AAEjC,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;mFAAC;uGANpE,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAVtB;;;;;;;GAOT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EARS,eAAe,iEAAE,eAAe,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAW/B,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC;AAC3C,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA,CAAA;AACD,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY;AAC5B,iBAAA;;;ACvBD;;;AAGG;AAEI,MAAM,wBAAwB,GACnC;;ACNF;;;AAGG;;ACHH;;AAEG;;;;"}