@fundamental-ngx/platform 0.55.9 → 0.55.10
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-platform-form.mjs","sources":["../../../../libs/platform/form/form-group/constants.ts","../../../../libs/platform/form/helpers.ts","../../../../libs/platform/form/input-message-group-with-template/input-message-group-with-template.component.ts","../../../../libs/platform/form/input-message-group-with-template/input-message-group-with-template.component.html","../../../../libs/platform/form/form-group/config/default-form-field-hint-options.ts","../../../../libs/platform/form/form-group/fdp-form.tokens.ts","../../../../libs/platform/form/form-group/form-field-error/tokens.ts","../../../../libs/platform/form/form-group/form-field-error/form-field-error.directive.ts","../../../../libs/platform/form/form-group/form-field-extras/form-field-extras.component.ts","../../../../libs/platform/form/form-group/helpers.ts","../../../../libs/platform/form/form-group/services/form-field-layout.service.ts","../../../../libs/platform/form/form-group/form-field/form-field.component.ts","../../../../libs/platform/form/form-group/form-field/form-field.component.html","../../../../libs/platform/form/form-generator/dynamic-form-control.ts","../../../../libs/platform/form/form-generator/config/default-validation-errors.ts","../../../../libs/platform/form/checkbox/checkbox.component.ts","../../../../libs/platform/form/checkbox/checkbox.component.html","../../../../libs/platform/form/checkbox-group/checkbox-group.component.ts","../../../../libs/platform/form/checkbox-group/checkbox-group.component.html","../../../../libs/platform/form/checkbox-group/checkbox-group.module.ts","../../../../libs/platform/form/form-generator/providers/providers.ts","../../../../libs/platform/form/form-generator/base-dynamic-form-generator-control.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.html","../../../../libs/platform/form/date-picker/date-picker.component.ts","../../../../libs/platform/form/date-picker/date-picker.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.html","../../../../libs/platform/form/text-area/text-area.config.ts","../../../../libs/platform/form/text-area/text-area.component.ts","../../../../libs/platform/form/text-area/text-area.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.html","../../../../libs/platform/form/input/input.component.ts","../../../../libs/platform/form/input/input.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.html","../../../../libs/platform/form/multi-input/multi-input.config.ts","../../../../libs/platform/form/multi-input/base-multi-input.ts","../../../../libs/platform/form/multi-input/multi-input.interface.ts","../../../../libs/platform/form/multi-input/multi-input-mobile/multi-input-mobile.component.ts","../../../../libs/platform/form/multi-input/multi-input-mobile/multi-input-mobile.component.html","../../../../libs/platform/form/multi-input/multi-input-mobile/multi-input-mobile.module.ts","../../../../libs/platform/form/auto-complete/auto-complete.directive.ts","../../../../libs/platform/form/multi-input/multi-input.component.ts","../../../../libs/platform/form/multi-input/multi-input.component.html","../../../../libs/platform/form/multi-input/multi-input.module.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.html","../../../../libs/platform/form/radio-group/radio/radio.component.ts","../../../../libs/platform/form/radio-group/radio/radio.component.html","../../../../libs/platform/form/radio-group/radio-group.component.ts","../../../../libs/platform/form/radio-group/radio-group.component.html","../../../../libs/platform/form/radio-group/radio-group.module.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.html","../../../../libs/platform/form/select/select.config.ts","../../../../libs/platform/form/select/commons/base-select.ts","../../../../libs/platform/form/select/select/select.component.ts","../../../../libs/platform/form/select/select/select.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.html","../../../../libs/platform/form/switch/switch/switch.config.ts","../../../../libs/platform/form/switch/switch/switch.component.ts","../../../../libs/platform/form/switch/switch/switch.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.html","../../../../libs/platform/form/form-generator/config/default-components-list.ts","../../../../libs/platform/form/form-generator/form-generator-components-accessor.service.ts","../../../../libs/platform/form/form-generator/helpers.ts","../../../../libs/platform/form/form-generator/form-generator.service.ts","../../../../libs/platform/form/form-generator/dynamic-form-control.directive.ts","../../../../libs/platform/form/form-group/form-field-error/form-field-error-description.directive.ts","../../../../libs/platform/form/form-group/form-field-error/form-field-error-heading.directive.ts","../../../../libs/platform/form/form-group/form-field-group/form-field-group.component.ts","../../../../libs/platform/form/form-group/form-group-header/form-group-header.component.ts","../../../../libs/platform/form/form-group/form-group-header/form-group-header.component.html","../../../../libs/platform/form/models/field.model.ts","../../../../libs/platform/form/form-group/pipes/field-group-row-value.pipe.ts","../../../../libs/platform/form/form-group/form-group.component.ts","../../../../libs/platform/form/form-group/form-group.component.html","../../../../libs/platform/form/form-group/fdp-form.module.ts","../../../../libs/platform/form/form-generator/form-generator-field/form-generator-field.component.ts","../../../../libs/platform/form/form-generator/form-generator-field/form-generator-field.component.html","../../../../libs/platform/form/form-helpers.ts","../../../../libs/platform/form/auto-complete/auto-complete.module.ts","../../../../libs/platform/form/checkbox/checkbox.module.ts","../../../../libs/platform/form/combobox/combobox.interface.ts","../../../../libs/platform/form/combobox/combobox-mobile/combobox/combobox-mobile.component.ts","../../../../libs/platform/form/combobox/combobox-mobile/combobox/combobox-mobile.component.html","../../../../libs/platform/form/combobox/combobox-mobile/combobox-mobile.module.ts","../../../../libs/platform/form/combobox/combobox.config.ts","../../../../libs/platform/form/combobox/directives/combobox-item.directive.ts","../../../../libs/platform/form/combobox/commons/base-combobox.ts","../../../../libs/platform/form/combobox/combobox/combobox.component.ts","../../../../libs/platform/form/combobox/combobox/combobox.component.html","../../../../libs/platform/form/combobox/combobox.module.ts","../../../../libs/platform/form/date-picker/date-picker.module.ts","../../../../libs/platform/form/datetime-picker/errors.ts","../../../../libs/platform/form/datetime-picker/datetime-picker.component.ts","../../../../libs/platform/form/datetime-picker/datetime-picker.component.html","../../../../libs/platform/form/datetime-picker/datetime-picker.module.ts","../../../../libs/platform/form/form-generator/config/default-form-generator-hint-options.ts","../../../../libs/platform/form/form-generator/dynamic-form-control-field.directive.ts","../../../../libs/platform/form/form-generator/form-generator.tokens.ts","../../../../libs/platform/form/form-generator/pipes/get-hint-options.pipe.ts","../../../../libs/platform/form/form-generator/pipes/get-ordered-form-controls.pipe.ts","../../../../libs/platform/form/form-generator/form-generator/form-generator.component.ts","../../../../libs/platform/form/form-generator/form-generator/form-generator.component.html","../../../../libs/platform/form/form-generator/fdp-form-generator.module.ts","../../../../libs/platform/form/input/fdp-input.module.ts","../../../../libs/platform/form/input-group/constants.ts","../../../../libs/platform/form/input-group/addon-body.component.ts","../../../../libs/platform/form/input-group/addon.component.ts","../../../../libs/platform/form/input-group/input-group.config.ts","../../../../libs/platform/form/input-group/input.component.ts","../../../../libs/platform/form/input-group/input-group.component.ts","../../../../libs/platform/form/input-group/input-group.component.html","../../../../libs/platform/form/input-group/input-group.module.ts","../../../../libs/platform/form/multi-combobox/multi-combobox.config.ts","../../../../libs/platform/form/multi-combobox/commons/base-multi-combobox.ts","../../../../libs/platform/form/multi-combobox/multi-combobox.interface.ts","../../../../libs/platform/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.ts","../../../../libs/platform/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.html","../../../../libs/platform/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.ts","../../../../libs/platform/form/multi-combobox/multi-combobox/multi-combobox.component.ts","../../../../libs/platform/form/multi-combobox/multi-combobox/multi-combobox.component.html","../../../../libs/platform/form/multi-combobox/multi-combobox.module.ts","../../../../libs/platform/form/select/select.module.ts","../../../../libs/platform/form/step-input/step-input.config.ts","../../../../libs/platform/form/step-input/step-input.util.ts","../../../../libs/platform/form/step-input/base.step-input.ts","../../../../libs/platform/form/step-input/step-input-control.directive.ts","../../../../libs/platform/form/step-input/step-input-action-button.ts","../../../../libs/platform/form/step-input/step-input-decrement.directive.ts","../../../../libs/platform/form/step-input/step-input-increment.directive.ts","../../../../libs/platform/form/step-input/number/number-step-input.component.ts","../../../../libs/platform/form/step-input/number/number-step-input.component.html","../../../../libs/platform/form/step-input/step-input.module.ts","../../../../libs/platform/form/switch/switch.module.ts","../../../../libs/platform/form/text-area/text-area.module.ts","../../../../libs/platform/form/time-picker/time-picker.component.ts","../../../../libs/platform/form/time-picker/time-picker.component.html","../../../../libs/platform/form/time-picker/time-picker.module.ts","../../../../libs/platform/form/fundamental-ngx-platform-form.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ColumnLayout } from '@fundamental-ngx/platform/shared';\n\nexport const FORM_GROUP_CHILD_FIELD_TOKEN = new InjectionToken<string>('FORM_GROUP_CHILD_FIELD_TOKEN');\n\nexport const DefaultHorizontalLabelLayout: ColumnLayout = {\n XL: 4,\n L: 4,\n M: 4,\n S: 12\n};\n\nexport const DefaultVerticalLabelLayout: ColumnLayout = {\n S: 12\n};\n\nexport const DefaultHorizontalFieldLayout: ColumnLayout = {\n XL: 8,\n L: 8,\n M: 8,\n S: 12\n};\n\nexport const DefaultVerticalFieldLayout: ColumnLayout = {\n S: 12\n};\n\nexport const DefaultGapLayout: ColumnLayout = {\n S: 0\n};\n","import { FormStates } from '@fundamental-ngx/cdk/forms';\n\n/**\n * Returns form state based on priority.\n * @param states Error states of the form fields.\n * @param priorityStates Array of prioritized states.\n * @returns first found form state of `priorityStates`.\n */\nexport function getFormState(\n states: FormStates[],\n priorityStates: FormStates[] = ['error', 'warning', 'information', 'success', 'default']\n): FormStates {\n let priorityState: FormStates = 'default';\n\n priorityStates.some((state) => {\n const firstErrorState = states.find((formState) => formState === state);\n\n if (!firstErrorState) {\n return false;\n }\n\n priorityState = firstErrorState;\n return true;\n });\n\n return priorityState;\n}\n","import { ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormInputMessageGroupComponent } from '@fundamental-ngx/core/form';\nimport {\n PopoverBodyComponent,\n PopoverComponent,\n PopoverControlComponent,\n TriggerConfig\n} from '@fundamental-ngx/core/popover';\n\n/**\n * This extends core implementation to support richer extensibility and instead of relying\n * only on ng-content selector this will allow you to put any content as trigger.\n *\n * Let's think of u\n */\n@Component({\n selector: 'fdp-input-message-group',\n templateUrl: './input-message-group-with-template.component.html',\n styleUrl: './input-message-group-with-template.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [PopoverComponent, PopoverControlComponent, NgTemplateOutlet, PopoverBodyComponent]\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class InputMessageGroupWithTemplate extends FormInputMessageGroupComponent {\n /**\n * To allow user to determine what event he wants to trigger the messages to show\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: (string | TriggerConfig)[] = [\n {\n trigger: 'focusin',\n openAction: true,\n closeAction: false\n },\n {\n trigger: 'focusout',\n openAction: false,\n closeAction: true\n }\n ];\n /**\n * Custom trigger element.\n */\n @ContentChild('triggerItem', { static: false })\n triggerItemTemplate: TemplateRef<any>;\n}\n","<fd-popover\n #popover\n (isOpenChange)=\"openChanged($event)\"\n additionalBodyClass=\"fd-popover__body--input-message-group\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [fillControlMode]=\"fillControlMode\"\n [isOpen]=\"isOpen\"\n [placement]=\"placement\"\n [triggers]=\"triggers\"\n [disableScrollbar]=\"true\"\n class=\"fd-form-input-message-group fd-popover--input-message-group\"\n>\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"triggerItemTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content></ng-content>\n </fd-popover-body>\n</fd-popover>\n","import { FieldHintOptions } from '@fundamental-ngx/platform/shared';\n\nexport const defaultFormFieldHintOptions: Omit<FieldHintOptions, 'content'> = {\n placement: 'right',\n position: 'after',\n trigger: [\n { trigger: 'mouseenter', openAction: true, closeAction: false },\n { trigger: 'mouseleave', openAction: false, closeAction: true },\n { trigger: 'focusin', openAction: true, closeAction: false },\n { trigger: 'focusout', openAction: false, closeAction: true }\n ],\n glyph: 'hint',\n target: 'auto'\n};\n","import { InjectionToken } from '@angular/core';\nimport { Column, ColumnLayout, FieldHintOptions } from '@fundamental-ngx/platform/shared';\nimport { defaultFormFieldHintOptions } from './config/default-form-field-hint-options';\n\nexport const FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT = new InjectionToken<Omit<FieldHintOptions, 'content'>>(\n 'Form field default hint options',\n {\n factory: () => defaultFormFieldHintOptions\n }\n);\n\nexport interface HintLayoutConfig {\n hintOnInputBreakpoints: Array<keyof ColumnLayout>;\n hintPlaceMinSize: Column;\n}\n\nexport const FDP_FORM_FIELD_HINT_LAYOUT_CONFIG = new InjectionToken<HintLayoutConfig>(\n 'Configuration for setting default values for configuring how places for inline help are coming',\n {\n factory: () => ({\n hintOnInputBreakpoints: ['M', 'L', 'XL'],\n hintPlaceMinSize: 1\n })\n }\n);\n","import { InjectionToken } from '@angular/core';\n\nexport const FDP_FORM_ERROR_DIRECTIVE = new InjectionToken('FdpFormErrorDirective');\n","import { ChangeDetectorRef, Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport {\n FormError,\n FormErrorDescription,\n FormErrorHeading,\n FormFieldErrorContext\n} from '@fundamental-ngx/platform/shared';\nimport { Subject } from 'rxjs';\nimport { FDP_FORM_ERROR_DIRECTIVE } from './tokens';\n\n@Directive({\n selector: '[fdpFormFieldError]',\n providers: [\n {\n provide: FDP_FORM_ERROR_DIRECTIVE,\n useExisting: FormFieldErrorDirective\n }\n ],\n standalone: true\n})\nexport class FormFieldErrorDirective<T = any> implements FormError<T>, OnInit {\n /** Used to connect data with model for typings support. */\n @Input()\n fdpFormFieldErrorAs: T;\n\n /** Error name */\n @Input('fdpFormFieldError')\n error: string;\n\n /** Error type */\n @Input()\n fdpFormFieldErrorType: FormStates = 'error';\n\n /** @hidden */\n detectChanges$ = new Subject<void>();\n\n /** Error type. Defines which type to return. Either self, or from heading directive. */\n get type(): FormStates {\n return this._headingDirective?.fdpFormFieldErrorHeadingType ?? this.fdpFormFieldErrorType;\n }\n\n /** @hidden */\n private _headingDirective: FormErrorHeading | undefined;\n\n /** @hidden */\n private _descriptionDirective: FormErrorDescription | undefined;\n\n /** @hidden */\n private _detectTimeout: ReturnType<typeof setTimeout>;\n\n /** @hidden */\n get _headingTemplateRef(): TemplateRef<FormFieldErrorContext<T>> {\n return this._headingDirective?.templateRef ?? this.templateRef;\n }\n\n /** @hidden */\n get _descriptionTemplateRef(): TemplateRef<FormFieldErrorContext<T>> | null {\n return this._descriptionDirective?.templateRef ?? null;\n }\n\n /** @hidden */\n constructor(\n public templateRef: TemplateRef<FormFieldErrorContext<T>>,\n private _viewContainer: ViewContainerRef,\n private _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: FormFieldErrorDirective,\n ctx: FormFieldErrorContext<any>\n ): ctx is FormFieldErrorContext<any> {\n return true;\n }\n\n /** @hidden */\n ngOnInit(): void {\n // We need to create view in order to initialize child directives immediately.\n this._createView();\n }\n\n /** Registers child heading directive. */\n registerHeading(directive: FormErrorHeading): void {\n this._headingDirective = directive;\n this._detectChanges();\n }\n\n /** Registers child description directive. */\n registerDescription(directive: FormErrorDescription): void {\n this._descriptionDirective = directive;\n this._detectChanges();\n }\n\n /** @hidden */\n private _createView(): void {\n this._viewContainer.createEmbeddedView(this.templateRef);\n this._viewContainer.detach();\n }\n\n /** @hidden */\n private _detectChanges(): void {\n // Since child directives can register itself almost instantly, we need to trigger detect changes only one time,\n // in order to bypass error with expected/actual directives count.\n clearTimeout(this._detectTimeout);\n this._detectTimeout = setTimeout(() => {\n this._cdr.detectChanges();\n this.detectChanges$.next();\n }, 5);\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'fdp-form-field-extras',\n template: '<ng-content></ng-content>',\n // \"display: flex\" is used in order to have margin included in control's dimensions\n styles: [':host { display: flex; white-space: normal; }'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class FormFieldControlExtrasComponent {}\n","import { ColumnLayout, ColumnLayoutGridClass } from '@fundamental-ngx/platform/shared';\n\n/** @hidden */\nexport function normalizeColumnLayout(layout: ColumnLayout, defaultColumn = 12): Required<ColumnLayout> {\n layout['S'] = layout['S'] !== undefined ? layout['S'] : defaultColumn;\n layout['M'] = layout['M'] || layout['S'];\n layout['L'] = layout['L'] || layout['M'];\n layout['XL'] = layout['XL'] || layout['L'];\n\n return layout as Required<ColumnLayout>;\n}\n\n/** @hidden */\nexport function generateColumnClass(layout: ColumnLayout): string {\n return Object.entries(layout)\n .reduce((overall, value) => {\n overall.push(`fd-col-${ColumnLayoutGridClass[value[0]]}--${value[1]}`);\n return overall;\n }, [] as string[])\n .join(' ');\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { GRID_COLUMNS_NUMBER as maxColumnsPerRow } from '@fundamental-ngx/core/layout-grid';\nimport { ColumnLayout } from '@fundamental-ngx/platform/shared';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { FDP_FORM_FIELD_HINT_LAYOUT_CONFIG, HintLayoutConfig } from '../fdp-form.tokens';\nimport { normalizeColumnLayout } from '../helpers';\n\ntype Layouts = {\n labelColumnLayout: ColumnLayout;\n fieldColumnLayout: ColumnLayout;\n gapColumnLayout: ColumnLayout;\n};\n\n/**\n * Should be used in component level. Ideally placed on container component,\n * so that every it's child FormField can have shared information about peers'\n * need about inline help place.\n */\n@Injectable()\nexport class FormFieldLayoutService {\n /**\n * Will notify if inline help place is needed. If any of the FormFields in group have\n * hintOptions config set the way that it might end up on 'input', then it will emit true\n */\n readonly needsInlineHelpPlace: Observable<boolean>;\n /** @hidden */\n private _needsInlineHelpPlace$ = new BehaviorSubject<boolean>(false);\n /** @hidden */\n private _elementsMap: Map<Record<string, any>, boolean> = new Map();\n\n /** @hidden */\n constructor(@Inject(FDP_FORM_FIELD_HINT_LAYOUT_CONFIG) private _hintLayoutConfig: HintLayoutConfig) {\n this.needsInlineHelpPlace = this._needsInlineHelpPlace$.pipe(distinctUntilChanged());\n }\n\n /**\n * Notify service about target component's requirement for the place for inline help\n */\n setNeedsInlineHelp(target: Record<string, any>, isNeeded: boolean): void {\n this._elementsMap.set(target, isNeeded);\n this._updateCombinedValue();\n }\n\n /**\n * Function will give place for hint in case it does not have it yet,\n * if combined needsInlineHelpPlace value is true\n */\n getFixedLayouts(layouts: Layouts): Layouts {\n const fieldColumnLayout = normalizeColumnLayout({ ...layouts.fieldColumnLayout });\n const labelColumnLayout = normalizeColumnLayout({ ...layouts.labelColumnLayout });\n const gapColumnLayout = normalizeColumnLayout({\n ...(layouts.gapColumnLayout ? layouts.gapColumnLayout : { S: 0 })\n });\n if (this._needsInlineHelpPlace$.value) {\n this._hintLayoutConfig.hintOnInputBreakpoints.forEach((sizeName) => {\n const shouldFitInOneLine =\n labelColumnLayout[sizeName] + fieldColumnLayout[sizeName] + gapColumnLayout[sizeName] <=\n maxColumnsPerRow;\n if (gapColumnLayout[sizeName] < this._hintLayoutConfig.hintPlaceMinSize) {\n gapColumnLayout[sizeName] = this._hintLayoutConfig.hintPlaceMinSize;\n }\n if (gapColumnLayout[sizeName] + fieldColumnLayout[sizeName] > maxColumnsPerRow) {\n const diff = gapColumnLayout[sizeName] + fieldColumnLayout[sizeName] - maxColumnsPerRow;\n fieldColumnLayout[sizeName] -= diff;\n }\n if (shouldFitInOneLine) {\n const maxAllocatedPlaceForFieldAndLabel = maxColumnsPerRow - gapColumnLayout[sizeName];\n while (\n labelColumnLayout[sizeName] + fieldColumnLayout[sizeName] >\n maxAllocatedPlaceForFieldAndLabel\n ) {\n fieldColumnLayout[sizeName] -= 1;\n }\n }\n });\n }\n return { fieldColumnLayout, labelColumnLayout, gapColumnLayout };\n }\n\n /**\n * Remove component from the combined value calculations\n */\n removeEntry(target: Record<string, any>): void {\n this._elementsMap.delete(target);\n this._updateCombinedValue();\n }\n\n /**\n * Will loop through all registered components and if any of them has need for\n * inline help place, then it will notify listeners about it and also will set\n * local variable\n * @hidden\n */\n private _updateCombinedValue(): void {\n for (const [, needed] of this._elementsMap) {\n if (needed) {\n return this._needsInlineHelpPlace$.next(true);\n }\n }\n this._needsInlineHelpPlace$.next(false);\n }\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Provider,\n QueryList,\n Self,\n Signal,\n SimpleChanges,\n SkipSelf,\n TemplateRef,\n ViewChild,\n ViewChildren,\n booleanAttribute,\n forwardRef,\n inject\n} from '@angular/core';\nimport { AbstractControl, FormControl, ValidatorFn, Validators } from '@angular/forms';\nimport { FD_FORM_FIELD, FormFieldControl, FormStates } from '@fundamental-ngx/cdk/forms';\nimport { uniqBy } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject, Subscription, combineLatest, filter, tap } from 'rxjs';\nimport { map, startWith, switchMap } from 'rxjs/operators';\n\nimport { CommonModule, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { FormItemComponent, FormLabelComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { InlineHelpDirective } from '@fundamental-ngx/core/inline-help';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport {\n Column,\n ColumnLayout,\n FieldHintInput,\n FieldHintOptions,\n FormError,\n FormFieldErrorDirectiveContext,\n FormFieldGroup,\n FormGroupContainer,\n HintContent,\n PlatformFormField,\n PlatformFormFieldControl,\n RESPONSIVE_BREAKPOINTS_CONFIG,\n ResponsiveBreakPointConfig,\n ResponsiveBreakpointsService\n} from '@fundamental-ngx/platform/shared';\nimport { getFormState } from '../../helpers';\nimport { InputMessageGroupWithTemplate } from '../../input-message-group-with-template/input-message-group-with-template.component';\nimport { defaultFormFieldHintOptions } from '../config/default-form-field-hint-options';\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../constants';\nimport {\n FDP_FORM_FIELD_HINT_LAYOUT_CONFIG,\n FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT,\n HintLayoutConfig\n} from '../fdp-form.tokens';\nimport { FormFieldErrorDirective } from '../form-field-error/form-field-error.directive';\nimport { FormFieldControlExtrasComponent } from '../form-field-extras/form-field-extras.component';\nimport { generateColumnClass, normalizeColumnLayout } from '../helpers';\nimport { FormFieldLayoutService } from '../services/form-field-layout.service';\n\nlet defaultId = 0;\n\nconst formFieldProvider: Provider = {\n provide: FD_FORM_FIELD,\n useExisting: forwardRef(() => FormFieldComponent)\n};\n\nconst formGroupChildProvider: Provider = {\n provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n useExisting: forwardRef(() => FormFieldComponent)\n};\n\nfunction columnTransformer(v: Column | `${Column}`): Column {\n return parseInt(v + '', 10) as Column;\n}\n\nfunction rankTransformer(v: string | number): number {\n return parseInt(v + '', 10);\n}\n\n/**\n * Form Field represent actual row and aggregates common behavior for the input field such as\n * error, label or hint.\n * Hint is also responsible for listening for FieldControl changes and trigger necessary\n * change detection\n *\n */\n@Component({\n selector: 'fdp-form-field',\n templateUrl: 'form-field.component.html',\n styleUrl: './form-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [formFieldProvider, formGroupChildProvider, FormFieldLayoutService],\n imports: [\n CommonModule,\n FormItemComponent,\n NgTemplateOutlet,\n InputMessageGroupWithTemplate,\n FormMessageComponent,\n FormLabelComponent,\n LinkComponent,\n IconComponent,\n InlineHelpDirective\n ]\n})\nexport class FormFieldComponent\n implements PlatformFormField, AfterContentInit, AfterViewInit, OnDestroy, OnInit, OnChanges\n{\n /** Form field label */\n @Input()\n label: string;\n\n /**\n * Suffix for ids of control elements inside this form field\n */\n @Input()\n id: string = (++defaultId).toString();\n\n /** Hint to be placed next to label */\n @Input()\n hint: Nullable<FieldHintInput>;\n\n /**\n * Indicates when form field label should not be displayed\n */\n @Input()\n noLabelLayout = false;\n\n /**\n * The list of validators applied to the form field.\n */\n @Input()\n validators: Array<ValidatorFn> = [Validators.nullValidator];\n\n /**\n * Rank is used for ordering.\n * First lower number, then - higher\n */\n @Input({ transform: rankTransformer })\n rank: number;\n\n /**\n * Placeholder for the field\n */\n @Input()\n placeholder: string;\n\n /** Form Container column it belongs to */\n @Input()\n column: number;\n\n /** object for placing field in column in each screen layout */\n @Input()\n set columnLayout(layout: ColumnLayout | undefined) {\n if (!layout) {\n return;\n }\n this._columnLayout = layout;\n this._isColumnLayoutEnabled = true;\n this._setLayout();\n }\n\n get columnLayout(): ColumnLayout {\n return this._columnLayout;\n }\n\n /**\n * Defines label's column layout.\n */\n @Input()\n set labelColumnLayout(value: ColumnLayout | undefined) {\n if (!value) {\n return;\n }\n this._labelColumnLayout = normalizeColumnLayout(value);\n this._labelColumnLayoutClass = generateColumnClass(this._labelColumnLayout);\n this._labelColumnLayout$.next(this._labelColumnLayout);\n }\n\n get labelColumnLayout(): ColumnLayout {\n return this._labelColumnLayout;\n }\n\n /**\n * Defines field's column layout.\n */\n @Input()\n set fieldColumnLayout(value: ColumnLayout | undefined) {\n if (!value) {\n return;\n }\n\n this._fieldColumnLayout = normalizeColumnLayout(value);\n this._fieldColumnLayoutClass = generateColumnClass(this._fieldColumnLayout);\n this._fieldColumnLayout$.next(this._fieldColumnLayout);\n }\n\n get fieldColumnLayout(): ColumnLayout {\n return this._fieldColumnLayout;\n }\n\n /**\n * Defines gap column layout.\n */\n @Input()\n set gapColumnLayout(value: ColumnLayout | undefined) {\n if (!value) {\n return;\n }\n\n this._gapColumnLayout = normalizeColumnLayout(value);\n this._gapColumnLayoutClass = generateColumnClass(this._gapColumnLayout);\n this._gapColumnLayout$.next(this._gapColumnLayout);\n }\n\n get gapColumnLayout(): ColumnLayout {\n return this._gapColumnLayout;\n }\n\n /**\n * Translations template reference.\n * This is in most of the cases set from parent container (form-group)\n */\n @Input()\n i18Strings: TemplateRef<any>;\n\n /** Set when form field is a mandatory one. */\n @Input({ transform: booleanAttribute })\n required = false;\n\n /**\n * Indicates if field is editable\n */\n @Input({ transform: booleanAttribute })\n set editable(value: boolean) {\n if (this._editable === value) {\n return;\n }\n this._editable = value;\n this._updateControlProperties();\n }\n\n get editable(): boolean {\n return this._editable;\n }\n\n /**\n * Form field custom width in columns must be between 1 - 12\n */\n @Input({ transform: columnTransformer })\n columns: Column = 6;\n\n /**\n * marks field as disabled. used in reactive form approach.\n */\n @Input()\n disabled = false;\n\n /** Whether label text should be appended with colon. */\n @Input()\n colon = false;\n\n /**\n * Form Group Container to bind the Form-Field to.\n * This will override default value injected by constructor\n */\n @Input()\n formGroupContainer: FormGroupContainer;\n\n /** Emits whenever formFieldControl's state changes */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onChange: EventEmitter<string> = new EventEmitter<string>();\n\n /** Emits whenever column layout is changed */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onColumnChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * @hidden\n * Form field template reference\n */\n @ViewChild('renderer', { static: true })\n renderer: TemplateRef<any>;\n\n /** @hidden */\n @ContentChild(FormFieldControlExtrasComponent, { read: ElementRef })\n formFieldExtras?: ElementRef<HTMLElement>;\n\n /** @hidden */\n @ViewChild('labelCol') labelCol?: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n @ViewChild(InputMessageGroupWithTemplate, { read: ElementRef })\n inputMessageGroup: ElementRef<HTMLElement>;\n\n /** @hidden */\n @ViewChild('innerErrorRenderers')\n innerErrorRenderers: TemplateRef<any>;\n\n /** @hidden */\n @ContentChildren(FormFieldErrorDirective)\n private _errorDirectiveQuery: QueryList<FormError>;\n\n /** @hidden */\n @ViewChildren(InputMessageGroupWithTemplate)\n private readonly _inputMessageGroupCmp: QueryList<InputMessageGroupWithTemplate>;\n\n /** Combined Error directives from field itself and parent form container. */\n get errorDirectives(): FormError[] {\n return uniqBy([...this._errorDirectives, ...this._formGroupErrorDirectives], 'error');\n }\n\n /** @hidden */\n isHorizontal$: Signal<boolean | undefined>;\n\n /**\n * Child FormFieldControl\n */\n control: PlatformFormFieldControl | null;\n\n /** @hidden */\n _labelColumnLayoutClass: string;\n\n /** @hidden */\n _fieldColumnLayoutClass: string;\n\n /** @hidden */\n _gapColumnLayoutClass: string;\n\n /**\n * hint and hint placement coerced to the FieldHintOptions\n */\n hintOptions: FieldHintOptions = defaultFormFieldHintOptions as unknown as FieldHintOptions;\n\n /** @hidden */\n _errorDirectives: FormError[] = [];\n\n /** Grouped errors. */\n groupedErrors: FormFieldErrorDirectiveContext[] = [];\n\n /** Event emited when errors object being changed. */\n errorsChange$ = new Subject<void>();\n\n /**\n * @hidden\n * Optional FormControl\n */\n formControl: FormControl;\n\n /** @hidden */\n get _groupHost(): FormGroupContainer | FormFieldGroup {\n return this.formFieldGroup ? this.formFieldGroup : this.formGroupContainer;\n }\n\n /**\n * Will be updated during onChanges and resize, resulting correct placement of the\n * hint respecting passed configs and given breakpoint of screen.\n */\n hintTarget?: string;\n\n /** @hidden */\n protected _editable = true;\n\n /** @hidden */\n private _isColumnLayoutEnabled = false;\n\n /** @hidden column number for different screen sizes */\n private _xlColumnNumber: number;\n\n /** @hidden */\n private _lgColumnNumber: number;\n\n /** @hidden */\n private _mdColumnNumber: number;\n\n /** @hidden */\n private _sColumnNumber = 1;\n\n /** @hidden */\n private _columnLayout: ColumnLayout;\n\n /** @hidden */\n private readonly _responsiveBreakPointConfig: ResponsiveBreakPointConfig;\n\n /** @hidden */\n private _labelColumnLayout: ColumnLayout;\n\n /** @hidden */\n private _fieldColumnLayout: ColumnLayout;\n /** @hidden */\n private _gapColumnLayout: ColumnLayout;\n\n /** @hidden */\n private _formGroupErrorDirectives: FormError[] = [];\n\n /** @hidden */\n private _formGroupErrorDirectivesSubscription: Subscription;\n\n /** @hidden */\n private _errorDirectivesCdr: Subscription;\n\n /** @hidden whether label and control are vertically aligned */\n private get _isHorizontalAlignment(): boolean {\n if (!this.inputMessageGroup || !this.labelCol) {\n return false;\n }\n const inputMessageGroupY = this.inputMessageGroup.nativeElement.getBoundingClientRect().y;\n const labelColRect = this.labelCol.nativeElement.getBoundingClientRect();\n const labelColBottomY = labelColRect.y + labelColRect.height;\n return labelColBottomY > inputMessageGroupY;\n }\n\n /**\n * @hidden\n * Sum of extra heights inside form control and formFieldExtras.\n * Label will be shifted by this number in order to be properly aligned with the control\n */\n get _controlExtrasHeightPx(): number | null {\n if (this.noLabelLayout || !this._isHorizontalAlignment) {\n // proceed only if 1. there's a label; 2. control has vertical alignment\n return null;\n }\n return (\n (this.formFieldExtras?.nativeElement.offsetHeight ?? 0) + (this.control?.extraContentHeightPx ?? 0) || null\n );\n }\n\n /** @hidden */\n private _labelColumnLayout$: BehaviorSubject<ColumnLayout>;\n /** @hidden */\n private _fieldColumnLayout$: BehaviorSubject<ColumnLayout>;\n /** @hidden */\n private _gapColumnLayout$: BehaviorSubject<ColumnLayout>;\n /** @hidden */\n private _needsInlineHelpPlaceSubscription?: Subscription;\n\n /** @hidden */\n private _breakPointObserver: Observable<any>;\n\n /** @hidden */\n private _formFieldLayoutService: FormFieldLayoutService;\n /** @hidden */\n private readonly _defaultHintOptions: FieldHintOptions;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(\n private _cd: ChangeDetectorRef,\n @Optional() formGroupContainer: FormGroupContainer,\n @Optional() readonly formFieldGroup: FormFieldGroup,\n @Optional()\n @Inject(RESPONSIVE_BREAKPOINTS_CONFIG)\n readonly _defaultResponsiveBreakPointConfig: ResponsiveBreakPointConfig,\n readonly _responsiveBreakpointsService: ResponsiveBreakpointsService,\n @Inject(FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT) _providedHintOptions: FieldHintOptions,\n @Inject(FDP_FORM_FIELD_HINT_LAYOUT_CONFIG) private _hintLayoutConfig: HintLayoutConfig,\n @Self() _selfFormFieldLayoutService: FormFieldLayoutService,\n @Optional() @SkipSelf() _parentFormFieldLayoutService: FormFieldLayoutService\n ) {\n this._defaultHintOptions = {\n ...defaultFormFieldHintOptions,\n ..._providedHintOptions\n };\n this._formFieldLayoutService = _parentFormFieldLayoutService || _selfFormFieldLayoutService;\n this._labelColumnLayout$ = new BehaviorSubject(this._labelColumnLayout);\n this._fieldColumnLayout$ = new BehaviorSubject(this._fieldColumnLayout);\n this._gapColumnLayout$ = new BehaviorSubject(this._gapColumnLayout);\n // formGroupContainer can be injected only if current form-field is located\n // insight formGroupContainer content.\n // If this is not the case the formGroupContainer\n // will be undefined (known angular issue),\n // in such case formGroupContainer can be pointed explicitly using\n // component input annotation\n this.formGroupContainer = formGroupContainer;\n this._responsiveBreakPointConfig = _defaultResponsiveBreakPointConfig || new ResponsiveBreakPointConfig();\n this._breakPointObserver = this._responsiveBreakpointsService.observeBreakpointByConfig(\n this._responsiveBreakPointConfig\n );\n\n this.isHorizontal$ = toSignal(\n combineLatest([\n this._labelColumnLayout$.pipe(filter(Boolean), map(normalizeColumnLayout)),\n this._fieldColumnLayout$.pipe(filter(Boolean), map(normalizeColumnLayout)),\n this._gapColumnLayout$.pipe(map((g) => normalizeColumnLayout(g || { S: 0 })))\n ]).pipe(\n switchMap(([label, field, gap]) =>\n this._breakPointObserver.pipe(\n map(\n (breakpointName) =>\n label[breakpointName] + field[breakpointName] + gap[breakpointName] <= 12\n )\n )\n )\n )\n );\n }\n\n /**\n * Sets initial values for label, field and gap columns\n */\n setDefaultColumnLayout(): void {\n // If layout already defined, no need to set default one.\n if (this.labelColumnLayout) {\n return;\n }\n this.listenToInlineHelpPlaceRequirementChanges(() => (this.labelColumnLayout ? this : this._groupHost));\n }\n\n /** @hidden */\n listenToInlineHelpPlaceRequirementChanges(getSource: () => any): void {\n if (this._needsInlineHelpPlaceSubscription) {\n this._needsInlineHelpPlaceSubscription.unsubscribe();\n this._needsInlineHelpPlaceSubscription = void 0;\n }\n const setLayouts = (source: any): void => {\n this.labelColumnLayout = source.labelColumnLayout;\n this.fieldColumnLayout = source.fieldColumnLayout;\n this.gapColumnLayout = source.gapColumnLayout;\n };\n this._needsInlineHelpPlaceSubscription = this._formFieldLayoutService.needsInlineHelpPlace\n .pipe(\n map(() => this._formFieldLayoutService.getFixedLayouts(getSource())),\n tap(setLayouts),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe();\n }\n\n /** @hidden */\n ngOnInit(): void {\n // provides capability to make a field disabled. useful in reactive form approach.\n this.formControl =\n (this.formGroupContainer?.formGroup?.get(this.id) as FormControl) ??\n new FormControl({ value: null, disabled: this.disabled });\n\n if (this.columns && (this.columns < 1 || this.columns > 12)) {\n throw new Error('[columns] accepts numbers between 1 - 12');\n }\n\n if (this._isColumnLayoutEnabled) {\n this._breakPointObserver\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((breakPointName) => this._updateLayout(breakPointName));\n }\n\n this._addToFormGroup();\n\n this.listenToInlineHelpPlaceRequirementChanges(() => this);\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hint) {\n this._updateHintOptions();\n this._formFieldLayoutService.setNeedsInlineHelp(\n this,\n (this.hintOptions.target === 'input' || this.hintOptions.target === 'auto') && !!this.hint\n );\n }\n if (changes.hint && changes.hint.firstChange) {\n this._breakPointObserver\n .pipe(\n tap((sizeName) => {\n if (this.hintOptions.target === 'auto') {\n this.hintTarget = this._hintLayoutConfig.hintOnInputBreakpoints.includes(sizeName)\n ? 'input'\n : 'label';\n } else {\n this.hintTarget = this.hintOptions.target;\n }\n }),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe();\n }\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._cd.markForCheck();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._assignErrorDirectives();\n\n this._errorDirectiveQuery.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._assignErrorDirectives();\n });\n this._updateControlProperties();\n this._validateErrorHandler();\n this._listenToFormMessage();\n this._cd.detectChanges();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._formFieldLayoutService.removeEntry(this);\n this._removeFromFormGroup();\n this._errorDirectivesCdr?.unsubscribe();\n this._formGroupErrorDirectivesSubscription?.unsubscribe();\n }\n\n /** @hidden */\n hasErrors(): boolean {\n return this._editable && !!this.control?.controlInvalid;\n }\n\n /**\n * Register underlying form control\n * @param formFieldControl\n */\n registerFormFieldControl(formFieldControl: FormFieldControl): void {\n if (this.control) {\n throw Error('Form field can contain only one FormFieldControl');\n }\n\n this.control = formFieldControl as PlatformFormFieldControl;\n\n formFieldControl.stateChanges.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._updateControlProperties();\n // need to call explicitly detectChanges() instead of markForCheck before the\n // modified validation state of the control passes over checked phase\n this.onChange.emit('stateChanges');\n this.groupErrors();\n this._cd.detectChanges();\n });\n\n // Refresh UI when value changes\n if (formFieldControl?.ngControl?.valueChanges) {\n formFieldControl.ngControl.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.onChange.emit('valueChanges');\n this.groupErrors();\n this._cd.markForCheck();\n });\n }\n\n if (formFieldControl?.ngControl?.control) {\n const control = formFieldControl.ngControl.control;\n\n const hasRequiredValidator =\n this.validators.includes(Validators.required) || this.validators.includes(Validators.requiredTrue);\n\n if (this.required && !hasRequiredValidator) {\n this.validators.push(Validators.required);\n }\n\n if (hasRequiredValidator) {\n this.required = true;\n }\n\n // if form control is disabled, in reactive form approach\n if (this.disabled) {\n control.disable();\n }\n\n /**\n * There is a case when a \"form-group\" initial state is VALID,\n * and on the next loop a child form-filed extends it and make\n * the form-group INVALID.\n * In such case we get the error\n * \"ExpressionChangedAfterItHasBeenCheckedError. Previous value is ng-valid, current value is ng-invalid\".\n * To fix it we have to postpone adding form-field validators\n *\n */\n Promise.resolve().then(() => {\n control.setValidators(Validators.compose(this.validators));\n control.updateValueAndValidity({ emitEvent: false });\n });\n\n this._addControlToFormGroup(formFieldControl?.ngControl?.control);\n }\n\n this._cd.markForCheck();\n }\n\n /**\n * Unregister underlying form control\n * @param formFieldControl\n */\n unregisterFormFieldControl(formFieldControl: FormFieldControl): void {\n if (formFieldControl !== this.control) {\n return;\n }\n\n this.control = null;\n\n this._removeControlFromFormGroup();\n }\n\n /**\n * Groups\n */\n groupErrors(): void {\n // Queue task because firing it right away may cause error with showing empty message.\n setTimeout(() => {\n this.groupedErrors = [];\n const errors = this.control?.ngControl?.errors;\n if (!errors) {\n return [];\n }\n\n this.errorDirectives.forEach((directive) => {\n if (!errors[directive.error]) {\n return;\n }\n\n this.groupedErrors.push({\n directive,\n error: errors[directive.error]\n });\n });\n this.errorsChange$.next();\n this._cd.markForCheck();\n });\n }\n\n /**\n * Gets prioritized control state based on the error types it has.\n */\n getPriorityState(): FormStates {\n if (this.groupedErrors.length === 0) {\n return this.hasErrors() ? 'error' : 'default';\n }\n\n return getFormState(this.groupedErrors.map((error) => error.directive.type));\n }\n\n /**\n * Sets error directives.\n */\n setErrorDirectives(directives: QueryList<FormError>): void {\n this._formGroupErrorDirectivesSubscription?.unsubscribe();\n\n if (!directives) {\n return;\n }\n\n this._formGroupErrorDirectives = directives.toArray();\n\n this._formGroupErrorDirectivesSubscription = directives.changes\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._formGroupErrorDirectives = directives.toArray();\n });\n }\n\n /**\n * Returns whether content of the provided hint is a string.\n * @hidden\n */\n isStringHint(hintOptions: HintContent): hintOptions is string {\n return typeof hintOptions === 'string';\n }\n\n /**\n * @hidden\n * Listens to form message component changes and passes its instance to the form control component.\n */\n private _listenToFormMessage(): void {\n this._inputMessageGroupCmp.changes\n .pipe(\n startWith(null),\n map(() => this._inputMessageGroupCmp.first),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((component) => {\n if (!this.control) {\n return;\n }\n this.control!.formMessage = component;\n });\n }\n\n /** @hidden */\n private _validateErrorHandler(): void {\n if (\n this._editable &&\n this.control &&\n this._hasValidators() &&\n !this.i18Strings &&\n this.errorDirectives.length === 0\n ) {\n throw new Error('Validation strings are required for the any provided validations.');\n }\n }\n\n /** @hidden */\n private _hasValidators(): boolean {\n return this.validators && this.validators.length > 1;\n }\n\n /**\n * @hidden\n * Add FormField to FormGroup\n */\n private _addToFormGroup(): void {\n if (!this.formGroupContainer || this.formFieldGroup) {\n return;\n }\n\n this.formGroupContainer.addFormField(this);\n }\n\n /**\n * @hidden\n * Remove FormField from FormGroup\n */\n private _removeFromFormGroup(): void {\n if (!this.formGroupContainer) {\n return;\n }\n this.formGroupContainer.removeFormField(this);\n }\n\n /**\n * @hidden\n * Add FormControl from FormGroup\n */\n private _addControlToFormGroup(control: AbstractControl): void {\n if (!this.formGroupContainer || !!this.formFieldGroup?.formName) {\n return;\n }\n this.formGroupContainer.addFormControl(this.id, control);\n }\n\n /**\n * @hidden\n * Remove FormControl from FormGroup\n */\n private _removeControlFromFormGroup(): void {\n if (!this.formGroupContainer) {\n return;\n }\n this.formGroupContainer.removeFormControl(this.id);\n }\n\n /**\n * @hidden\n * Need to be able to set these properties on every level.\n * - Global FormGroup Level as well each field\n *\n * Todo: use more elegant way to set these properties.\n */\n private _updateControlProperties(): void {\n if (this.control && this._editable) {\n this.control.id = this.id;\n this.control.required = this.required;\n\n if (this.placeholder) {\n this.control.placeholder = this.placeholder;\n }\n }\n }\n\n /** @hidden */\n private _setLayout(): void {\n try {\n const normalized = normalizeColumnLayout(this.columnLayout, 1);\n this.columnLayout = normalized;\n this._sColumnNumber = normalized['S'];\n this._mdColumnNumber = normalized['M'];\n this._lgColumnNumber = normalized['L'];\n this._xlColumnNumber = normalized['XL'];\n } catch {\n this._isColumnLayoutEnabled = false;\n }\n }\n\n /** @hidden */\n private _updateLayout(currentBreakingPointName: string): void {\n if (this._isColumnLayoutEnabled) {\n switch (currentBreakingPointName) {\n case 'S':\n this.column = this._sColumnNumber;\n break;\n case 'M':\n this.column = this._mdColumnNumber;\n break;\n case 'L':\n this.column = this._lgColumnNumber;\n break;\n case 'XL':\n this.column = this._xlColumnNumber;\n break;\n default:\n this.column = this._xlColumnNumber;\n }\n }\n\n // emit column change, so form-group knows it and re-arranges the fields\n this.onColumnChange.emit(true);\n }\n\n /** @hidden */\n private _updateHintOptions(): void {\n // placement is here set up because hintPlacement is deprecated\n if (typeof this.hint === 'string' || this.hint instanceof TemplateRef) {\n this.hintOptions = {\n ...this._defaultHintOptions,\n content: this.hint\n };\n } else if (typeof this.hint === 'object') {\n this.hintOptions = {\n ...this._defaultHintOptions,\n ...this.hint\n };\n }\n }\n\n /** @hidden */\n private _assignErrorDirectives(): void {\n this._errorDirectivesCdr?.unsubscribe();\n this._errorDirectives = this._errorDirectiveQuery.toArray();\n this._errorDirectivesCdr = new Subscription();\n\n this._errorDirectives.forEach((directive) => {\n this._errorDirectivesCdr.add(\n directive.detectChanges$.subscribe(() => {\n this.groupErrors();\n this._cd.detectChanges();\n })\n );\n });\n }\n}\n","<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n @if (!noLabelLayout) {\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n }\n <ng-template [ngTemplateOutlet]=\"withFormMessage\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"gapTemplate\"></ng-template>\n </div>\n <span aria-hidden=\"true\" [style.display]=\"'none'\" [id]=\"'fdp-form-hint-' + id\">\n @if (isStringHint(hintOptions.content)) {\n {{ hintOptions.content }}\n } @else {\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n }\n </span>\n</ng-template>\n<ng-template #withFormMessage>\n <fdp-input-message-group\n class=\"fd-col\"\n [class]=\"_fieldColumnLayoutClass\"\n [attr.aria-labelledby]=\"'fdp-form-label-' + id\"\n >\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n <fd-form-message [type]=\"error.directive.type\">\n <div>\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n </div>\n </fd-form-message>\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <fd-form-message type=\"error\">\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n </fd-form-message>\n }\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #innerErrorRenderers>\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n <div>\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n </div>\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n }\n</ng-template>\n\n<ng-template #labelTemplate>\n @if (hintTarget === 'label') {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n } @else {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n }\n</ng-template>\n\n<ng-template #gapTemplate>\n @if (hintTarget === 'input' && hintOptions.content) {\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n } @else {\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n }\n</ng-template>\n","import { AbstractControlOptions, AsyncValidatorFn, FormControl, FormGroup, ValidatorFn } from '@angular/forms';\n\nimport { DynamicAbstractControlOptions } from './interfaces/dynamic-abstract-control';\nimport { DynamicFormFieldGroupMap, PreparedDynamicFormFieldItem } from './interfaces/dynamic-form-item';\n\nexport type DynamicFormGroupControl = DynamicFormControl | DynamicFormControlGroup;\n\nexport interface DynamicFormGroupControls {\n [key: string]: DynamicFormGroupControl;\n}\n\nexport class DynamicFormControlGroup extends FormGroup {\n /** @hidden */\n public formItem: DynamicFormFieldGroupMap;\n /** @hidden */\n public type = 'group';\n /** @hidden */\n declare public controls: DynamicFormGroupControls;\n\n /** @hidden */\n constructor(\n formItem: DynamicFormFieldGroupMap,\n controls: DynamicFormGroupControls,\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(controls, validatorOrOpts, asyncValidator);\n this.formItem = formItem;\n }\n}\n\nexport class DynamicFormControl extends FormControl {\n /** @hidden */\n public formItem: PreparedDynamicFormFieldItem;\n /** @hidden */\n public type = 'field';\n\n /**\n * @description Creates a new `DynamicFormControl` instance.\n *\n * @param formState Initializes the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n * @param formItem `DynamicFormItem` object\n *\n */\n constructor(formState: any, validatorOrOpts: DynamicAbstractControlOptions) {\n super(formState, validatorOrOpts);\n this.formItem = validatorOrOpts.dynamicFormItem;\n }\n}\n","export const DEFAULT_VALIDATION_ERRORS = {\n required: 'This field is required',\n validator: 'This field is invalid'\n};\n","import {\n AfterViewInit,\n Attribute,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport {\n CheckboxComponent as CoreCheckboxComponent,\n CheckboxComponent as FdCheckboxComponent,\n FdCheckboxValues\n} from '@fundamental-ngx/core/checkbox';\nimport { FormItemComponent } from '@fundamental-ngx/core/form';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\n/** Change event object emitted by Platform Checkbox. */\nexport class PlatformCheckboxChange {\n /** The source Checkbox of the event. */\n source: CheckboxComponent;\n /**\n * The new `checked` value of the checkbox.\n * possible value: true/false and array of checkbox values.\n */\n checked: any;\n}\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'fdp-checkbox',\n templateUrl: './checkbox.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => CheckboxComponent), multi: true }],\n imports: [FormItemComponent, CoreCheckboxComponent, FormsModule]\n})\nexport class CheckboxComponent extends BaseInput implements AfterViewInit {\n /**\n * Checkbox tooltip\n */\n @Input()\n title: string;\n\n /** Sets label for checkbox. */\n @Input()\n label: string;\n\n /** true when checkbox has indeterminate state */\n @Input()\n tristate = false;\n\n // this is undesired to have \"checked\" input instead of \"value\"\n // but it was done this way initially and we have to keep this in order to not break anything\n /**\n * Checked state of the checkbox control.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('checked')\n set value(selectValue: any) {\n this.setValue(selectValue);\n }\n get value(): any {\n return this.getValue();\n }\n\n /** when true indeterminate state can be selected */\n @Input()\n tristateSelectable = false;\n\n /** Values returned by control. */\n @Input()\n values: FdCheckboxValues;\n\n /** Whether checkbox should be rendered standalone (without any text). */\n @Input()\n standalone = false;\n\n /** Whether the checkbox should be rendered in display-only mode. */\n @Input()\n displayOnly = false;\n\n /**\n * Emitting checked event for non-form checkbox\n */\n @Output()\n readonly checkedChange = new EventEmitter<any>();\n\n /**\n * @hidden\n * is needed for the checkbox group to access component values\n */\n @ViewChild(FdCheckboxComponent)\n coreCheckbox: FdCheckboxComponent;\n\n /** @hidden */\n constructor(@Attribute('tabIndexValue') public tabIndexValue: number = 0) {\n super();\n // necessary to fulfill baseInput check.\n // case: fdp-checkbox passed in declarative fdp-checkbox-group without id and name.\n this.name = `fdp-checkbox-${nextUniqueId++}`;\n this.tabIndexValue = tabIndexValue;\n }\n /** update controller on checkbox state change */\n public onModelChange(value: any): void {\n this.value = value;\n this._emitChangeEvent();\n this.stateChanges.next('checkbox: onModelChange');\n }\n\n /**\n * Method to emit change event\n */\n private _emitChangeEvent(): void {\n this.checkedChange.emit(this.value);\n\n const event = new PlatformCheckboxChange();\n event.source = this;\n event.checked = this.value;\n }\n}\n","<div fd-form-item>\n <fd-checkbox\n [inputId]=\"id\"\n [name]=\"name\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [label]=\"label\"\n [tristate]=\"tristate\"\n [values]=\"values\"\n [tristateSelectable]=\"tristateSelectable\"\n [state]=\"state\"\n [title]=\"title\"\n [required]=\"required\"\n [ariaLabel]=\"ariaLabel || null\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [ngModel]=\"value\"\n [standalone]=\"standalone\"\n [displayOnly]=\"displayOnly\"\n (ngModelChange)=\"onModelChange($event)\"\n (focusChange)=\"_onFocusChanged($event)\"\n >\n <ng-content></ng-content>\n </fd-checkbox>\n</div>\n","import { SelectionModel } from '@angular/cdk/collections';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n QueryList,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { RangeSelector } from '@fundamental-ngx/cdk/utils';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormGroupComponent } from '@fundamental-ngx/core/form';\nimport { coerceArraySafe, InLineLayoutCollectionBaseInput, SelectItem } from '@fundamental-ngx/platform/shared';\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\n\n/**\n * Checkbox group implementation based on the\n * https://github.com/SAP/fundamental-ngx/wiki/Platform:-CheckboxGroup-Technical-Design\n * documents.\n */\n@Component({\n selector: 'fdp-checkbox-group',\n templateUrl: './checkbox-group.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => CheckboxGroupComponent), multi: true }],\n imports: [FormGroupComponent, NgTemplateOutlet, CheckboxComponent, FormsModule]\n})\nexport class CheckboxGroupComponent extends InLineLayoutCollectionBaseInput {\n /**\n * value for selected checkboxes.\n */\n @Input()\n set value(selectedValue: any[]) {\n this.setValue(selectedValue);\n this._updateSelectionModelByValue();\n }\n get value(): any[] {\n return this.getValue();\n }\n\n /**\n * To Display multiple checkboxes in a line\n */\n @Input()\n set isInline(inline: boolean) {\n this._inlineCurrentValue$.next(inline);\n }\n get isInline(): boolean {\n return this._inlineCurrentValue$.value;\n }\n\n /** Children checkboxes passed as content */\n @ContentChildren(CheckboxComponent)\n contentCheckboxes: QueryList<CheckboxComponent>;\n\n /** Children checkboxes created from passed list values. */\n @ViewChildren(CheckboxComponent)\n viewCheckboxes: QueryList<CheckboxComponent>;\n\n /** Emits checked change event */\n @Output()\n readonly valueChange: EventEmitter<string[]> = new EventEmitter<string[]>();\n\n /** @hidden */\n readonly _selectionModel = new SelectionModel(true);\n\n /** @hidden */\n private readonly _rangeSelector = new RangeSelector();\n\n /**\n * @hidden\n * @param selectionState actual value of the checkbox\n * @param checkboxTrueValue thuthy value to compare the \"selectionState\" with\n */\n onModelChanged(selectionState: any, checkboxTrueValue: any): void {\n const isSelected = selectionState === checkboxTrueValue;\n if (isSelected) {\n this._selectionModel.select(checkboxTrueValue);\n } else {\n this._selectionModel.deselect(checkboxTrueValue);\n }\n this._setValueBySelectionModel();\n this.onTouched();\n this.valueChange.emit(this.value);\n }\n\n /** @hidden */\n onCheckboxClick(index: number, source: 'contentChildren' | 'list', event?: MouseEvent): void {\n // this handler will be invoked after \"valueChange\"\n const queryList = source === 'list' ? this.viewCheckboxes : this.contentCheckboxes;\n const target = queryList.get(index);\n\n const isChecked = this._selectionModel.isSelected(target?.values.trueValue);\n this._rangeSelector.onRangeElementToggled(index, event);\n\n if (!this._rangeSelector.lastRangeSelectionState?.isRangeSelection) {\n // no need to proceed, if it's not a range selection - current checkbox is already updated\n return;\n }\n\n this._rangeSelector.applyValueToEachInRange((idx) => {\n const checkbox = queryList.get(idx);\n if (checkbox?.disabled) {\n return;\n }\n const checkboxValue = checkbox?.values.trueValue;\n if (isChecked) {\n this._selectionModel.select(checkboxValue);\n } else {\n this._selectionModel.deselect(checkboxValue);\n }\n });\n this._setValueBySelectionModel();\n this.valueChange.emit(this.value);\n }\n\n /** @hidden */\n writeValue(selectedValue: any): void {\n super.writeValue(coerceArraySafe(selectedValue));\n this._updateSelectionModelByValue();\n }\n\n /**\n * access display value for objects, acts as checkbox label.\n */\n getDisplayValue(item: any): string {\n return this.displayValue(item);\n }\n\n /**\n * access lookup value for objects, acts as checkbox value.\n */\n getLookupValue(item: any): string {\n return this.lookupValue(item);\n }\n\n /** @hidden */\n getListItemDisabledValue(item: CheckboxGroupComponent['list'][number]): boolean {\n return this.disabled || !!(<SelectItem>item)?.disabled;\n }\n\n /** @inheritdoc */\n protected setValue(value: any, emitOnChange = true): void {\n super.setValue(coerceArraySafe(value), emitOnChange);\n }\n\n /** @hidden */\n private _setValueBySelectionModel(): void {\n super.setValue(this._selectionModel.selected);\n this.markForCheck();\n }\n\n /** @hidden */\n private _updateSelectionModelByValue(): void {\n this._selectionModel.clear();\n this.value.forEach((v) => this._selectionModel.select(v));\n this.markForCheck();\n }\n}\n","<fd-form-group\n [isInline]=\"isInline\"\n role=\"group\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-required]=\"required\"\n>\n @if (!list) {\n @for (checkbox of contentCheckboxes; track checkbox; let i = $index) {\n <ng-template\n [ngTemplateOutlet]=\"checkboxtmpt\"\n [ngTemplateOutletContext]=\"{\n id: id + i,\n idx: i,\n source: 'contentChildren',\n name: name,\n checkboxValue: checkbox.coreCheckbox?.values?.trueValue,\n labeltext: checkbox.label,\n disabled: disabled || checkbox.disabled,\n ariaLabel: checkbox.ariaLabel,\n ariaLabelledBy: checkbox.ariaLabelledBy,\n ariaDescribedBy: checkbox.ariaDescribedBy,\n title: checkbox.title\n }\"\n >\n </ng-template>\n }\n } @else {\n <ng-template [ngTemplateOutlet]=\"listvalues\"></ng-template>\n }\n</fd-form-group>\n<ng-template #listvalues>\n @for (item of list; track item; let i = $index) {\n <ng-template\n [ngTemplateOutlet]=\"checkboxtmpt\"\n [ngTemplateOutletContext]=\"{\n id: id + i,\n idx: i,\n source: 'list',\n name: name,\n checkboxValue: getLookupValue(item),\n labeltext: getDisplayValue(item),\n disabled: getListItemDisabledValue(item)\n }\"\n >\n </ng-template>\n }\n</ng-template>\n<ng-template\n #checkboxtmpt\n let-id=\"id\"\n let-idx=\"idx\"\n let-source=\"source\"\n let-name=\"name\"\n let-checkboxValue=\"checkboxValue\"\n let-labeltext=\"labeltext\"\n let-checkboxDisabled=\"disabled\"\n let-ariaLabel=\"ariaLabel\"\n let-ariaLabelledBy=\"ariaLabelledBy\"\n let-ariaDescribedBy=\"ariaDescribedBy\"\n let-title=\"title\"\n>\n <fdp-checkbox\n [id]=\"id\"\n [name]=\"name\"\n [values]=\"{ trueValue: checkboxValue }\"\n [label]=\"labeltext\"\n [ariaLabel]=\"ariaLabel\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [title]=\"title\"\n [disabled]=\"checkboxDisabled\"\n [state]=\"state\"\n [ngModel]=\"_selectionModel.isSelected(checkboxValue) ? checkboxValue : false\"\n (ngModelChange)=\"onModelChanged($event, checkboxValue)\"\n (click)=\"onCheckboxClick(idx, source, $event)\"\n >\n </fdp-checkbox>\n</ng-template>\n","import { NgModule } from '@angular/core';\n\nimport { CheckboxGroupComponent } from './checkbox-group.component';\n\n@NgModule({\n imports: [CheckboxGroupComponent],\n exports: [CheckboxGroupComponent]\n})\nexport class PlatformCheckboxGroupModule {}\n","import { forwardRef, InjectionToken, Provider, StaticProvider } from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport { FD_FORM_FIELD } from '@fundamental-ngx/cdk/forms';\n\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../../form-group/constants';\nimport { FormFieldComponent } from '../../form-group/form-field/form-field.component';\nimport { DynamicFormFieldItem } from '../interfaces/dynamic-form-item';\nimport { FormGeneratorConfig } from '../interfaces/form-generator-module-config';\n\nexport const dynamicFormFieldProvider: StaticProvider = {\n provide: FD_FORM_FIELD,\n useExisting: forwardRef(() => FormFieldComponent)\n};\n\nexport const dynamicFormGroupChildProvider: StaticProvider = {\n provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n useExisting: forwardRef(() => FormFieldComponent)\n};\n\nexport const FORM_GENERATOR_ITEM_CONFIG = new InjectionToken<DynamicFormFieldItem>('FormGeneratorItemConfig');\n\nexport const FORM_GENERATOR_CONFIG = new InjectionToken<FormGeneratorConfig>('FormGeneratorConfig');\n\nexport const defaultFormGeneratorConfig: FormGeneratorConfig = {\n controlNameSeparator: '|',\n ungroupedControlsName: 'ungrouped'\n};\n\nexport const defaultFormGeneratorConfigProvider: Provider = {\n provide: FORM_GENERATOR_CONFIG,\n useValue: defaultFormGeneratorConfig\n};\n\nexport const defaultFormGeneratorItemConfig: Partial<DynamicFormFieldItem> = {\n useMessageAsPlaceholder: true,\n required: false,\n validators: [Validators.nullValidator]\n};\n\nexport const defaultFormGeneratorItemConfigProvider: Provider = {\n provide: FORM_GENERATOR_ITEM_CONFIG,\n useValue: defaultFormGeneratorItemConfig\n};\n","import { Directive, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport { PlatformFormField, SelectItem } from '@fundamental-ngx/platform/shared';\nimport { BaseDynamicFormFieldItem, PreparedDynamicFormFieldItem } from './interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from './providers/providers';\n\nexport interface BaseDynamicFormGeneratorControlInterface {\n formItem: PreparedDynamicFormFieldItem;\n name: string;\n id: string;\n form: FormGroup;\n formField: PlatformFormField;\n}\n\n/**\n * Abstract class that used as a base for the Dynamic Form Generator components.\n */\n@Directive({\n providers: [dynamicFormFieldProvider, dynamicFormGroupChildProvider]\n})\nexport abstract class BaseDynamicFormGeneratorControl<T extends BaseDynamicFormFieldItem = BaseDynamicFormFieldItem>\n implements BaseDynamicFormGeneratorControlInterface\n{\n /**\n * @description @see DynamicFormItem.\n */\n @Input() formItem: PreparedDynamicFormFieldItem<T>;\n\n /**\n * @description Id of the control.\n */\n @Input() id: string;\n\n /**\n * @description Represents form control name.\n */\n @Input() name: string;\n\n /**\n * @description Reference to the @see FormGroup class.\n */\n @Input() form: FormGroup;\n\n /**\n * @description Reference to the @see FormFieldComponent.\n */\n @Input() formField: PlatformFormField;\n\n /** @description Inner form group name */\n @Input() formGroupName: string;\n\n /** @description Returns form item choices. */\n get choices(): SelectItem[] {\n return this.formItem.choices ?? [];\n }\n\n /** @description Returns form item placeholder. */\n get placeholder(): string {\n if (!this.formItem) {\n return '';\n }\n if (this.formItem?.placeholder) {\n return this.formItem?.placeholder;\n }\n return (this.formItem?.useMessageAsPlaceholder && this.formItem?.message) || '';\n }\n\n /** @hidden */\n get readonly(): boolean {\n return this.formItem?.readonly ?? false;\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformCheckboxGroupModule } from '../../../checkbox-group/checkbox-group.module';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-checkbox',\n templateUrl: './dynamic-form-generator-checkbox.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, PlatformCheckboxGroupModule]\n})\nexport class DynamicFormGeneratorCheckboxComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-checkbox-group\n [id]=\"id\"\n [isInline]=\"formItem.guiOptions?.inline || false\"\n [inlineLayout]=\"formItem.guiOptions?.inlineLayout\"\n [name]=\"name\"\n [list]=\"choices\"\n [formControlName]=\"name\"\n ></fdp-checkbox-group>\n </ng-container>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n CalendarType,\n CalendarYearGrid,\n DateRange,\n DaysOfWeek,\n FdCalendarView,\n FdCalendarViewEnum\n} from '@fundamental-ngx/core/calendar';\nimport { DatePickerComponent, DatePickerComponent as FdDatePickerComponent } from '@fundamental-ngx/core/date-picker';\nimport { DATE_TIME_FORMATS, DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { Placement, SpecialDayRule } from '@fundamental-ngx/core/shared';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\n/**\n * The Platform date picker component is a wrapper around fd-date-picker using platform form.\n * It is able to provide form field functionalities as well along with fd-date-picker functions.\n *\n * <fdp-form-group #ffg [formGroup]=\"datePickerForm\">\n * <fdp-form-field #ffl1 id=\"birthday\">\n * <fdp-date-picker name=\"birthday\" type=\"single\" [formControl]=\"ffl1.formControl\"></fdp-date-picker>\n * </fdp-form-field>\n * </fdp-form-group>\n *\n */\n\n@Component({\n selector: 'fdp-date-picker',\n templateUrl: './date-picker.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformDatePickerComponent, multi: true }],\n host: {\n '(blur)': 'onTouched()'\n },\n imports: [DatePickerComponent, FormsModule]\n})\nexport class PlatformDatePickerComponent<D> extends BaseInput {\n /**\n * date-picker value set as controller value\n */\n @Input()\n set value(value: D | Array<D> | DateRange<D> | Array<DateRange<D>>) {\n super.setValue(value);\n }\n get value(): DateRange<D> | D {\n return super.getValue();\n }\n\n /** below code taken from core/date-picker */\n /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */\n @Input()\n type: CalendarType = 'single';\n\n /** The currently selected date model in single mode. */\n @Input()\n selectedDate: Nullable<D>;\n\n /** The currently selected date model in multiple mode. */\n @Input()\n selectedMultipleDates: Array<D> = [];\n\n /** The currently selected date model with start and end in range mode. */\n @Input()\n selectedRangeDate: DateRange<D>;\n\n /** The currently selected date model with multiple ranges. */\n @Input()\n selectedMultipleDateRanges: Array<DateRange<D>> = [];\n\n /** The day of the week the calendar should start on. 1 represents Sunday, 2 is Monday, 3 is Tuesday, and so on. */\n @Input()\n startingDayOfWeek: DaysOfWeek;\n\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected on Day View.\n */\n @Input()\n rangeHoverEffect = false;\n\n /** Whether to validate the date picker input. */\n @Input()\n useValidation = true;\n\n /** Enables Today-Selection-Button if true */\n @Input()\n showTodayButton = false;\n\n /** Label for Today-Selection-Button */\n @Input()\n todayButtonLabel = 'Today';\n\n /** Whether a null input is considered valid. */\n @Input()\n allowNull = true;\n\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n @Input()\n activeView: FdCalendarView = FdCalendarViewEnum.Day;\n\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n @Input()\n placement: Placement = 'bottom-start';\n\n /** The element to which the popover should be appended. */\n @Input()\n appendTo: ElementRef;\n\n /** Defines if date picker should be closed after date choose */\n @Input()\n closeOnDateChoose = true;\n\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n set state(state: FormStates) {\n super.state = state;\n }\n get state(): FormStates {\n if (this.fdDatePickerComponent?._isInvalidDateInput || !this._datePickerValid) {\n return 'error';\n }\n\n return super.state;\n }\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = true;\n\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n @Input()\n specialDaysRules: SpecialDayRule<D>[] = [];\n\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n yearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 5,\n yearMapping: (num: number) => num.toString()\n };\n\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n aggregatedYearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 3,\n yearMapping: (num: number) => num.toString()\n };\n\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n @Input()\n markWeekends = true;\n\n /**\n * Whether user wants to show week numbers next to days\n */\n @Input()\n showWeekNumbers = true;\n\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n @Input()\n allowMultipleSelection = false;\n\n /** Whether the date picker is open. Can be used through two-way binding. */\n @Input()\n isOpen = false;\n\n /** Should date picker be inlined. */\n @Input()\n inline = true;\n\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n @Input()\n processInputOnBlur = false;\n\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n @Input()\n preventScrollOnFocus = false;\n\n /** Whether date picker should rendered in mobile mode. */\n @Input()\n mobile = false;\n\n /** Mobile mode configuration. */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n @Input()\n mobileLandscape = false;\n\n /** Whether calendar is used inside mobile in portrait mode */\n @Input()\n mobilePortrait = false;\n\n /** Event emitted when the state of the isOpen property changes. */\n @Output()\n readonly isOpenChange = new EventEmitter<boolean>();\n\n /** Event thrown every time selected date in single mode is changed */\n @Output()\n readonly selectedDateChange: EventEmitter<Nullable<D>> = new EventEmitter<Nullable<D>>();\n\n /** Event thrown every time the selected dates in multiple mode are changed. */\n @Output()\n readonly selectedMultipleDatesChange: EventEmitter<Array<D>> = new EventEmitter<Array<D>>();\n\n /** Event thrown every time selected first or last date in range mode is changed */\n @Output()\n readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n @Output()\n readonly selectedMultipleDateRangesChange: EventEmitter<Array<DateRange<D>>> = new EventEmitter<\n Array<DateRange<D>>\n >();\n\n /** Event thrown every time calendar active view is changed */\n @Output()\n readonly activeViewChange = new EventEmitter<FdCalendarView>();\n\n /**\n * @hidden core date-picker as child\n */\n @ViewChild(FdDatePickerComponent)\n fdDatePickerComponent: FdDatePickerComponent<D>;\n\n /** @hidden */\n private _datePickerValid = true;\n\n /** @hidden */\n private readonly _dateTimeAdapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, {\n optional: true\n });\n\n /** @hidden */\n private readonly _dateTimeFormats = inject<DateTimeFormats>(DATE_TIME_FORMATS, {\n optional: true\n });\n\n /** @hidden */\n constructor() {\n super();\n\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n }\n\n /**\n * Function used to disable certain dates in the calendar.\n */\n @Input()\n disableFunction: (value: D) => boolean = () => false;\n\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n */\n @Input()\n disableRangeStartFunction: (value: D) => boolean = () => false;\n\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n */\n @Input()\n disableRangeEndFunction: (value: D) => boolean = () => false;\n\n /** @hidden */\n writeValue(value: D | Array<D> | DateRange<D> | Array<DateRange<D>> | null): void {\n super.writeValue(value);\n this.detectChanges();\n }\n\n /**\n * validates date on date change.\n * @param value D | DateRange<D>\n */\n handleDateChange(value: D | Array<D> | DateRange<D> | Array<DateRange<D>>): void {\n this.value = value;\n\n if (this.allowMultipleSelection) {\n if (this.type === 'single' && !this.value && !this.allowNull) {\n this._datePickerValid = false;\n } else if (this.type === 'range' && !this.allowNull) {\n const dateRanges = this.value as Array<DateRange<D>>;\n this._datePickerValid = dateRanges.every((range) => !!range.start);\n } else {\n this._datePickerValid = true;\n }\n\n this.stateChanges.next('date picker: handleDateInputChange');\n\n if (this.type === 'single') {\n this.handleSelectedMultipleDatesChange(this.selectedMultipleDates);\n } else if (this.type === 'range') {\n this.handleSelectedMultipleDateRangesChange(this.selectedMultipleDateRanges);\n }\n } else {\n if (this.type === 'single' && !this.value && !this.allowNull) {\n this._datePickerValid = false;\n } else if (this.type === 'range' && !this.allowNull) {\n const dateRange = this.value as DateRange<D>;\n this._datePickerValid = !!dateRange.start;\n } else {\n this._datePickerValid = true;\n }\n\n this.stateChanges.next('date picker: handleDateInputChange');\n\n if (this.type === 'single') {\n this.handleSelectedDateChange(this.selectedDate);\n } else if (this.type === 'range') {\n this.handleSelectedRangeDateChange(this.selectedRangeDate);\n }\n }\n this.markForCheck();\n }\n\n /**\n * Method that handles changes when popover is opened or closed.\n */\n handleOpenChange = (open: boolean): void => {\n this.isOpenChange.emit(open);\n };\n\n /** @hidden */\n handleSelectedDateChange = (fdDate: Nullable<D>): void => {\n this.selectedDateChange.emit(fdDate);\n };\n\n /** @hidden */\n handleSelectedMultipleDatesChange = (fdDate: Array<D>): void => {\n this.selectedMultipleDatesChange.emit(fdDate);\n };\n\n /** @hidden */\n handleSelectedRangeDateChange = (fdRangeDate: DateRange<D>): void => {\n this.selectedRangeDateChange.emit(fdRangeDate);\n };\n\n /** @hidden */\n handleSelectedMultipleDateRangesChange = (fdRangeDate: Array<DateRange<D>>): void => {\n this.selectedMultipleDateRangesChange.emit(fdRangeDate);\n };\n\n /** @hidden */\n handleActiveViewChange = (fdCalendarView: FdCalendarView): void => {\n this.activeViewChange.emit(fdCalendarView);\n };\n}\n\n/** @hidden */\nexport function createMissingDateImplementationError(provider: string): Error {\n return Error(\n `FdpDatePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDateModule, or provide a ` +\n `custom implementation.`\n );\n}\n","<fd-date-picker\n [inputId]=\"id\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n [type]=\"type\"\n [state]=\"state\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [selectedDate]=\"selectedDate\"\n [selectedMultipleDates]=\"selectedMultipleDates\"\n [selectedRangeDate]=\"selectedRangeDate\"\n [selectedMultipleDateRanges]=\"selectedMultipleDateRanges\"\n [showTodayButton]=\"showTodayButton\"\n [todayButtonLabel]=\"todayButtonLabel\"\n [startingDayOfWeek]=\"startingDayOfWeek\"\n [rangeHoverEffect]=\"rangeHoverEffect\"\n [useValidation]=\"useValidation\"\n [allowNull]=\"allowNull\"\n [activeView]=\"activeView\"\n [placement]=\"placement\"\n [appendTo]=\"appendTo\"\n [disabled]=\"disabled\"\n [closeOnDateChoose]=\"closeOnDateChoose\"\n [buttonFocusable]=\"buttonFocusable\"\n [specialDaysRules]=\"specialDaysRules\"\n [yearGrid]=\"yearGrid\"\n [aggregatedYearGrid]=\"aggregatedYearGrid\"\n [markWeekends]=\"markWeekends\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [allowMultipleSelection]=\"allowMultipleSelection\"\n [isOpen]=\"isOpen\"\n [disableFunction]=\"disableFunction\"\n [disableRangeStartFunction]=\"disableRangeStartFunction\"\n [disableRangeEndFunction]=\"disableRangeEndFunction\"\n [inline]=\"inline\"\n [processInputOnBlur]=\"processInputOnBlur\"\n [preventScrollOnFocus]=\"preventScrollOnFocus\"\n [mobile]=\"mobile\"\n [mobileConfig]=\"mobileConfig\"\n [mobileLandscape]=\"mobileLandscape\"\n [mobilePortrait]=\"mobilePortrait\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"handleDateChange($event)\"\n (isOpenChange)=\"handleOpenChange($event)\"\n (activeViewChange)=\"handleActiveViewChange($event)\"\n (selectedDateChange)=\"handleSelectedDateChange($event)\"\n (selectedMultipleDatesChange)=\"handleSelectedMultipleDatesChange($event)\"\n (selectedRangeDateChange)=\"handleSelectedRangeDateChange($event)\"\n (selectedMultipleDateRangesChange)=\"handleSelectedMultipleDateRangesChange($event)\"\n>\n <ng-content></ng-content>\n</fd-date-picker>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformDatePickerComponent } from '../../../date-picker/date-picker.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-datepicker',\n templateUrl: './dynamic-form-generator-datepicker.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, PlatformDatePickerComponent]\n})\nexport class DynamicFormGeneratorDatepickerComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-date-picker\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [formControlName]=\"name\"\n [inline]=\"formItem.guiOptions?.inline !== false\"\n [allowNull]=\"false\"\n ></fdp-date-picker>\n </ng-container>\n</ng-container>\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\n\n/**\n * Default options for platform Text Area\n */\n@Injectable({ providedIn: 'root' })\nexport class TextAreaConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<TextAreaConfig>): () => TextAreaConfig {\n const useFactory = (): TextAreaConfig => Object.assign(new TextAreaConfig(), obj);\n return useFactory;\n }\n}\n","import { BACKSPACE, DELETE } from '@angular/cdk/keycodes';\nimport {\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Input,\n OnInit,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\nimport { KeyUtil, Nullable } from '@fundamental-ngx/cdk/utils';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { TextAreaConfig } from './text-area.config';\n\nconst VALID_WRAP_TYPES = ['hard', 'soft', 'off'];\n\nexport type WrapType = 'hard' | 'soft' | 'off';\n\n/**\n * Textarea field implementation that is compliant with Platform's FormGroup/FormField design\n *\n */\n@Component({\n selector: 'fdp-textarea',\n templateUrl: 'text-area.component.html',\n styleUrl: 'text-area.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: FD_FORM_FIELD_CONTROL,\n useExisting: TextAreaComponent,\n multi: true\n }\n ],\n imports: [FormControlComponent, FormsModule, FdTranslatePipe]\n})\nexport class TextAreaComponent extends BaseInput implements AfterViewChecked, OnInit, AfterViewInit {\n /**\n * The height to which the textarea will grow when `growing` is set.\n */\n @Input()\n height: Nullable<string>;\n\n /**\n * The number of rows that will be visible when `growing` is set.\n * If both `growingMaxLines` and `height` are provided, `height` value takes precedence.\n */\n @Input()\n growingMaxLines: Nullable<number>;\n\n /**\n * The textarea `cols` attribute wrapped- the number of letters visible per line.\n * If width is set to auto, this attribute has no effect.\n */\n @Input()\n cols: number;\n\n /**\n * The textarea `wrap` attribute - can be one of three: 'off', 'hard' or 'soft'.\n */\n @Input()\n wrapType: WrapType = 'soft';\n\n /** The maximum number of characters allowed to enter.\n * If `showExceededText` is false, `maxLength` has native textarea's behavior of disallowing typing beyond `maxLength`.\n * If `showExceededText` is true, user is allowed to type beyond `maxLength`, but error states and counter messages showing\n * the exceeded count is displayed.\n */\n @Input()\n maxLength: number;\n\n /**\n * Whether counter message should be shown.\n * If `showExceededText` is false, no state changes or error messages are shown. User is simply not allowed to type\n * beyond the `maxLength` characters.\n */\n @Input()\n showExceededText = false;\n\n /**\n * Whether this textarea can grow.\n */\n @Input()\n growing = false;\n\n /**\n * The textarea's value\n */\n @Input()\n set value(value: any) {\n if (value) {\n super.setValue(value);\n } else {\n // when custom value not set, we should set/reset counter to maxlength value when it becomes undefined\n this.exceededCharCount = this.maxLength ? this.maxLength : 0;\n // reset state by resetting value\n super.setValue('');\n }\n }\n get value(): any {\n return super.getValue();\n }\n\n /** @hidden */\n @ViewChild('counter')\n _textareaCounter?: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n hasTextExceeded = false;\n\n /** @hidden excess character count */\n exceededCharCount = 0;\n\n /** @hidden a string placeholder that toggles between 'remaining' and 'excess' for the select ICU expression */\n counterExcessOrRemaining = 'remaining';\n\n /** @hidden flag to check if there is an initial value set */\n isValueCustomSet = false;\n\n /** @hidden */\n /** to keep track of number of characters in the textarea */\n private _textAreaCharCount = 0;\n\n /** @hidden */\n private _isPasted = false;\n\n /** for i18n counter message translation */\n private readonly remainingText = 'remaining';\n /** for i18n counter message translation */\n private readonly excessText = 'excess';\n\n /**\n * @hidden\n * @see PlatformFormFieldControl.extraContentHeightPx\n */\n get extraContentHeightPx(): number | undefined {\n return this._textareaCounter?.nativeElement.offsetHeight;\n }\n\n /** @hidden */\n private get _shouldTrackTextLimit(): boolean {\n return this.maxLength > 0 && !this.showExceededText;\n }\n\n /** @hidden */\n constructor(protected _textAreaConfig: TextAreaConfig) {\n super();\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /** when backpress or delete key is pressed when showExceededText field is not set, simply remove excess characters,\n /* else handle autogrow case\n */\n @HostListener('keyup', ['$event'])\n handleBackPress(event: KeyboardEvent): void {\n // if not showing exceeded text message/interactions or growing, and custom value set\n if (this.growing) {\n this.autoGrowTextArea();\n this.isValueCustomSet = false; // set it to false first time it comes here\n }\n if (this._shouldTrackTextLimit && KeyUtil.isKeyCode(event, [DELETE, BACKSPACE])) {\n // for the custom value set and showExceededText=false case, on any key press, remove excess characters\n if (this.value) {\n this._textAreaCharCount = this.value.length;\n if (this._textAreaCharCount > this.maxLength) {\n // remove excess characters\n this.value = this.value.substring(0, this.maxLength);\n this.isValueCustomSet = false; // since value is now changed, it is no longer custom set\n }\n }\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (!this.wrapType || VALID_WRAP_TYPES.indexOf(this.wrapType) === -1) {\n throw new Error(`Textarea wrap type ${this.wrapType} is not supported`);\n }\n // if not custom set, set counter to max length value, else it calculates remaining/exceeded characters.\n if (!this.value) {\n this.exceededCharCount = this.maxLength || 0;\n } else {\n this.isValueCustomSet = true;\n }\n super.ngOnInit();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n // set max height\n this._setMaxHeight();\n\n // don't set any error state if we are not showing counter message\n if (!this._shouldTrackTextLimit) {\n this.state = undefined;\n }\n\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n ngAfterViewChecked(): void {\n // when value is custom set(initial value is present), the heights don't get\n // set to show the full text in the ngAfterViewInit immediately. therefore, we call autoGrowTextArea in\n // ngAfterViewChecked and detect changes again.\n if (this.value && this.isValueCustomSet) {\n this.autoGrowTextArea(); // if applicable, grow the textarea when value is custom set\n this.stateChanges.next('textarea: ngAfterViewChecked');\n }\n }\n\n /** write value for ControlValueAccessor */\n writeValue(value: any): void {\n super.writeValue(value ?? '');\n this.updateCounterInteractions();\n this.stateChanges.next('textarea: writeValue');\n }\n\n /** update the counter message and related interactions */\n updateCounterInteractions(): void {\n this._textAreaCharCount = this.value?.length ?? 0;\n\n if (this.maxLength) {\n // newly added to avoid unnecessary iteration, remove if issue found\n this.validateLengthOnCustomSet();\n }\n }\n\n /** if exceeded maxlength when set as a value in code, highlight the exceeded text. */\n validateLengthOnCustomSet(): void {\n if (this._textAreaCharCount > this.maxLength) {\n if (this._isPasted) {\n this._targetElement.focus();\n this._targetElement.setSelectionRange(this.maxLength, this._textAreaCharCount);\n }\n\n this.counterExcessOrRemaining = this.excessText;\n this.exceededCharCount = this._textAreaCharCount - this.maxLength;\n } else {\n this.counterExcessOrRemaining = this.remainingText;\n this.exceededCharCount = this.maxLength - this._textAreaCharCount;\n }\n\n this._isPasted = false;\n }\n\n /** handle exceeded maxlength case when text is pasted */\n handlePasteInteraction(): void {\n this._isPasted = true;\n\n // Wrapped in timeout to make selecting range working\n setTimeout(() => this.updateCounterInteractions());\n }\n\n /** handle auto growing of textarea */\n autoGrowTextArea(): void {\n if (this.growing) {\n this._targetElement.style.height = 'inherit';\n const textareaTotalHeight = this._getTextareaTotalHeight();\n const maxHeight = parseInt(this._targetElement.style.maxHeight as string, 10);\n if (maxHeight) {\n if (textareaTotalHeight <= maxHeight) {\n this._targetElement.style.height = textareaTotalHeight + 'px';\n } else {\n if (this.height) {\n this._targetElement.style.height = this.height;\n } else {\n this._targetElement.style.height = maxHeight + 'px';\n }\n }\n } else {\n // no bound max height, keep growing\n this._targetElement.style.height = textareaTotalHeight + 'px';\n }\n }\n }\n\n /**\n * get line height of textarea\n */\n getTextareaLineHeight(): number {\n // Get the computed styles for the element\n if (this._targetElement) {\n const computed = window.getComputedStyle(this._targetElement);\n\n // Calculate the height\n return parseInt(computed.getPropertyValue('line-height'), 10);\n }\n return 20; // default line height if nothing is defined\n }\n\n /**\n * get the updated state when character count breaches `maxLength`\n */\n getUpdatedState(): FormStates {\n if (this._getContentLength() > this.maxLength) {\n this.hasTextExceeded = true; // set flag for error message to also change accordingly\n this.counterExcessOrRemaining = this.excessText;\n\n return this.state;\n }\n this.hasTextExceeded = false;\n this.counterExcessOrRemaining = this.remainingText;\n\n return this.state; // return any other errors found by parent form field\n }\n\n /** @hidden Native element */\n get _targetElement(): HTMLTextAreaElement {\n return this._elementRef?.nativeElement;\n }\n\n /** @hidden get the length of the textarea content */\n private _getContentLength(): number {\n let contentLength;\n if (this._targetElement) {\n contentLength = this._targetElement.value.length;\n }\n if (this.value) {\n contentLength = this.value.length;\n }\n return contentLength;\n }\n\n /** @hidden get the total height including borders and scroll height */\n private _getTextareaTotalHeight(): number {\n // Get the computed styles for the element\n const computed = window.getComputedStyle(this._targetElement);\n // Calculate the height\n return (\n parseInt(computed.getPropertyValue('border-top-width'), 10) +\n this._targetElement.scrollHeight +\n parseInt(computed.getPropertyValue('border-bottom-width'), 10)\n );\n }\n\n /** @hidden set initial max height **/\n private _setMaxHeight(): void {\n if (this.growing && this._targetElement) {\n if (this.growingMaxLines) {\n this._targetElement.style.maxHeight = this.growingMaxLines * this.getTextareaLineHeight() + 'px';\n }\n if (this.height) {\n this._targetElement.style.maxHeight = this.height;\n }\n } else {\n if (this.growingMaxLines) {\n // nothing to do here. rows attribute takes care.\n }\n if (this.height) {\n this._targetElement.style.height = this.height;\n }\n }\n }\n}\n","<textarea\n #inputElementRef\n fd-form-control\n [disabled]=\"disabled\"\n [attr.id]=\"id\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"id + '-counter'\"\n [attr.aria-required]=\"required\"\n [attr.placeholder]=\"placeholder\"\n [attr.rows]=\"growing ? 2 : height ? 2 : growingMaxLines\"\n [attr.cols]=\"cols\"\n [attr.wrap]=\"wrapType\"\n [attr.maxlength]=\"!showExceededText ? maxLength : null\"\n [attr.readonly]=\"readonly ? true : null\"\n [(ngModel)]=\"value\"\n [state]=\"getUpdatedState()\"\n (paste)=\"handlePasteInteraction()\"\n (blur)=\"_onFocusChanged(false)\"\n (focus)=\"_onFocusChanged(true)\"\n></textarea>\n<!-- ICU recommends full text in format -->\n@if (showExceededText) {\n <div class=\"fd-textarea-counter\" aria-live=\"polite\" aria-atomic=\"true\" [attr.id]=\"id + '-counter'\" #counter>\n <!-- render spaces instead of the actual value while translation string is loading in order to avoid content jumps -->\n @if (counterExcessOrRemaining === 'excess') {\n <span\n [innerHtml]=\"\n (exceededCharCount === 1\n ? 'platformTextarea.counterMessageCharactersOverTheLimitSingular'\n : 'platformTextarea.counterMessageCharactersOverTheLimitPlural'\n ) | fdTranslate: { count: exceededCharCount } : ' '\n \"\n ></span>\n } @else {\n <span\n [innerHtml]=\"\n (exceededCharCount === 1\n ? 'platformTextarea.counterMessageCharactersRemainingSingular'\n : 'platformTextarea.counterMessageCharactersRemainingPlural'\n ) | fdTranslate: { count: exceededCharCount } : ' '\n \"\n ></span>\n }\n </div>\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TextAreaComponent } from '../../../text-area/text-area.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-editor',\n templateUrl: './dynamic-form-generator-editor.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, TextAreaComponent]\n})\nexport class DynamicFormGeneratorEditorComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-textarea [id]=\"id\" [placeholder]=\"placeholder\" [name]=\"name\" [formControlName]=\"name\"></fdp-textarea>\n </ng-container>\n</ng-container>\n","/**\n * @license\n * F. Kolar\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n *\n */\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\nconst VALID_INPUT_TYPES = ['text', 'number', 'email', 'password'];\n\nexport type InputType = 'text' | 'number' | 'email' | 'password';\n\n/**\n * Input field implementation to be compliant with our FormGroup/FormField design and also to\n * achieve certain this in Angular this component is re-using several ideas from MatDesign\n *\n */\n@Component({\n selector: 'fdp-input',\n templateUrl: 'input.component.html',\n styleUrl: './input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: InputComponent, multi: true }],\n imports: [FormControlComponent, FormsModule]\n})\nexport class InputComponent extends BaseInput implements OnInit, AfterViewInit {\n /** Input type */\n @Input()\n type: InputType = 'text';\n\n /**\n * @hidden\n * This `required` field is used internally by other components such as Input Group.\n * Input group will not be able to set required value to input, until `required` is input through the`@Input` property.\n */\n @Input()\n declare required: boolean;\n\n /** return the value in the text box */\n @Input()\n set value(value: any) {\n super.setValue(value);\n }\n get value(): any {\n return super.getValue();\n }\n\n /** Emits event on focus change */\n @Output() focusChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** @hidden */\n get inputElementRef(): ElementRef {\n return this._elementRef;\n }\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n if (!this.type || VALID_INPUT_TYPES.indexOf(this.type) === -1) {\n throw new Error(` Input type ${this.type} is not supported`);\n }\n }\n\n /** @hidden */\n _onFocus(): void {\n this._onFocusChanged(true);\n // propagate event\n this.focusChange.emit(true);\n }\n\n /** @hidden */\n _onBlur(): void {\n this._onFocusChanged(false);\n // propagate event\n this.focusChange.emit(false);\n }\n}\n","<!--\n Does it make sense to have some other state than error?\n-->\n<input\n #inputElementRef\n fd-form-control\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{ standalone: true }\"\n [attr.id]=\"id\"\n [attr.name]=\"name\"\n [type]=\"type\"\n [attr.placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [state]=\"state\"\n [readOnly]=\"readonly\"\n (blur)=\"_onBlur()\"\n (focus)=\"_onFocus()\"\n [ariaLabel]=\"ariaLabel\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.aria-required]=\"required\"\n/>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { InputComponent } from '../../../input/input.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { InputDynamicFormFieldItem } from '../../interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-input',\n templateUrl: './dynamic-form-generator-input.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, InputComponent]\n})\nexport class DynamicFormGeneratorInputComponent extends BaseDynamicFormGeneratorControl<InputDynamicFormFieldItem> {}\n","@if (formField) {\n <ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-input\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [type]=\"formItem.controlType || 'text'\"\n [formControlName]=\"name\"\n [readonly]=\"readonly\"\n ></fdp-input>\n </ng-container>\n </ng-container>\n}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { DataProvider, MatchingStrategy, PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Multi-Input\n */\n@Injectable({ providedIn: 'root' })\nexport class MultiInputConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /**\n * String matching strategy for typeahead list. Default: 'starts with per term'\n */\n matchingStrategy: MatchingStrategy = MatchingStrategy.STARTS_WITH;\n\n /**\n * Maps data providers\n */\n providers: Map<string, DataProvider<any>> | null = new Map();\n\n /** @hidden */\n constructor(platformConfig: PlatformConfig) {\n this.contentDensity = platformConfig.contentDensity;\n }\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<MultiInputConfig>): (platformConfig: PlatformConfig) => MultiInputConfig {\n const useFactory = (platformConfig: PlatformConfig): MultiInputConfig =>\n Object.assign(new MultiInputConfig(platformConfig), obj);\n return useFactory;\n }\n}\n","import {\n ALT,\n BACKSPACE,\n CONTROL,\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n LEFT_ARROW,\n RIGHT_ARROW,\n SHIFT,\n TAB,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport { combineLatest, fromEvent, isObservable, Observable, Subject, Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FocusEscapeDirection, KeyUtil, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { FdpListComponent, ListComponent } from '@fundamental-ngx/platform/list';\nimport {\n ArrayMultiInputDataSource,\n CollectionBaseInput,\n isDataSource,\n isFunction,\n isJsObject,\n isOptionItem,\n isString,\n MatchingBy,\n MatchingStrategy,\n MultiInputDataSource,\n MultiInputOption,\n ObservableMultiInputDataSource\n} from '@fundamental-ngx/platform/shared';\nimport { TextAlignment } from '../combobox';\nimport { MultiInputConfig } from './multi-input.config';\n\nexport type FdpMultiInputDataSource<T> = MultiInputDataSource<T> | Observable<T[]> | T[];\n\n@Directive()\nexport abstract class BaseMultiInput extends CollectionBaseInput implements AfterViewInit, OnChanges, OnDestroy {\n /** @hidden */\n abstract controlTemplate: TemplateRef<any>;\n\n /** @hidden */\n abstract listTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * Define is this item selected\n */\n abstract isSelectedOptionItem(selectedItem: MultiInputOption): boolean;\n\n /**\n * @hidden\n * Emit select OptionItem\n * */\n abstract selectOptionItem(item: MultiInputOption): void;\n\n /**\n * @hidden\n * Define value as selected\n * */\n abstract setAsSelected(item: MultiInputOption[]): void;\n\n /**\n * @hidden\n * Mathod for marking list option as selected.\n */\n abstract _markListItemsAsSelected(): void;\n\n /** Provides maximum height for the optionPanel */\n @Input()\n maxHeight = '250px';\n\n /** Datasource for suggestion list */\n @Input()\n set dataSource(value: FdpMultiInputDataSource<any>) {\n if (value) {\n this._initializeDataSource(value);\n }\n }\n\n get dataSource(): FdpMultiInputDataSource<any> {\n return this._dataSource;\n }\n\n /** Whether the autocomplete should be enabled; Enabled by default */\n @Input()\n autoComplete = true;\n\n /**\n * Todo: Name of the entity for which DataProvider will be loaded. You can either pass list of\n * items or use this entityClass and internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input()\n entityClass: string;\n\n /** Whether the Multi Input should be built on mobile mode */\n @Input()\n mobile = false;\n\n /** Multi Input Mobile Configuration, it's applied only, when mobile is enabled */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /**\n * Whether AddOn Button should be focusable\n * @default false\n */\n @Input()\n buttonFocusable = false;\n\n /** Tells the multi input if we need to group items */\n @Input()\n group = false;\n\n /** A field name to use to group data by (support dotted notation) */\n @Input()\n groupKey?: string;\n\n /** The field to show data in secondary column */\n @Input()\n description?: string;\n\n /** The field to show avatar image data in secondary column */\n @Input()\n avatarsrc?: string;\n\n /** Show the second column (Applicable for two columns layout) */\n @Input()\n showSecondaryText = false;\n\n /** Horizontally align text inside the second column (Applicable for two columns layout) */\n @Input()\n secondaryTextAlignment: TextAlignment = 'right';\n\n /** Turns on/off Adjustable Width feature */\n @Input()\n autoResize = false;\n /** Whether to open the dropdown when the addon button is clicked. */\n @Input()\n openDropdownOnAddOnClicked = true;\n\n /** Value of the multi input */\n @Input()\n set value(value: any) {\n const selectedItems = Array.isArray(value) ? value : [value];\n this.setAsSelected(this._convertToOptionItems(selectedItems));\n super.setValue(value);\n }\n\n get value(): any {\n return super.getValue();\n }\n\n /** @hidden Emits event when the menu is opened/closed */\n @Output()\n readonly isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when data loading is started. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDataRequested = new EventEmitter<void>();\n\n /** Event emitted when data loading is finished. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDataReceived = new EventEmitter<void>();\n\n /** Event emitted when the search term changes. Use *$event* to access the new term. */\n @Output()\n readonly searchTermChange: EventEmitter<string> = new EventEmitter<string>();\n\n /** Emits event when the addon button is clicked. */\n @Output()\n readonly addOnButtonClicked: EventEmitter<Event> = new EventEmitter<Event>();\n\n /** @hidden */\n @ViewChild(FdpListComponent)\n listComponent: ListComponent<MultiInputOption>;\n\n /** @hidden */\n @ContentChildren(TemplateDirective)\n customTemplates: QueryList<TemplateDirective>;\n\n /** @hidden */\n @ViewChild('searchInputElement', { read: ElementRef })\n searchInputElement: ElementRef;\n\n /** @hidden\n * Custom Option item Template\n * */\n optionItemTemplate: TemplateRef<any>;\n\n /** @hidden\n * Custom Group Header item Template\n * */\n groupItemTemplate: TemplateRef<any>;\n\n /** @hidden\n * Custom Secondary item Template\n * */\n secondaryItemTemplate: TemplateRef<any>;\n\n /** @hidden\n * Custom Selected option item Template\n * */\n selectedItemTemplate: TemplateRef<any>;\n\n /** input text of the input. */\n inputText: string;\n\n /** Whether the Multi Input is opened. */\n isOpen = false;\n\n /** @hidden */\n get canClose(): boolean {\n return !(this.mobile && this.mobileConfig.approveButtonText);\n }\n\n /**\n * @hidden\n * List of matched suggestions\n * */\n _suggestions: MultiInputOption[];\n\n /** @hidden\n * List of matched suggestions\n * */\n _newSuggestions: MultiInputOption[];\n\n /** @hidden\n * Max width of list container\n * */\n maxWidth?: number;\n\n /** @hidden\n * Min width of list container\n * */\n minWidth?: number;\n\n /**\n * Need for opening mobile version\n *\n * @hidden\n */\n openChange = new Subject<boolean>();\n\n /** @hidden */\n protected readonly multiInputConfig = inject(MultiInputConfig);\n\n /** @hidden */\n protected _dataSource: FdpMultiInputDataSource<any>;\n\n /** @hidden */\n protected readonly dialogConfig = inject(DialogConfig, { optional: true });\n /** @hidden emits whenever there're changes to the inputs, that affect the data creation from data source */\n private readonly _updateDataSourceValues$ = new Subject<void>();\n /** @hidden */\n private _matchingStrategy: MatchingStrategy = this.multiInputConfig.matchingStrategy;\n /** @hidden */\n private _dsSubscription?: Subscription;\n\n /** @hidden */\n private _element: HTMLElement = this.elementRef.nativeElement;\n\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n private readonly _nonOpeningKeys: number[] = [\n ESCAPE,\n ENTER,\n CONTROL,\n TAB,\n SHIFT,\n UP_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n LEFT_ARROW,\n ALT,\n BACKSPACE\n ];\n\n /** @hidden */\n private _originalSuggestions: any[] = [];\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._initWindowResize();\n this._assignCustomTemplates();\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if ('group' in changes || 'groupKey' in changes) {\n this._updateDataSourceValues$.next();\n }\n if ('avatarSrc' in changes || 'description' in changes || 'title' in changes || 'value' in changes) {\n this._suggestions = this._convertToOptionItems(this._originalSuggestions);\n }\n }\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as MultiInputDataSource<any>).close();\n }\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n }\n }\n\n /** write value for ControlValueAccessor */\n writeValue(value: any): void {\n const selectedItems = Array.isArray(value) ? value : [value];\n this.setAsSelected(this._convertToOptionItems(selectedItems));\n super.writeValue(value);\n }\n\n /** @hidden */\n _popoverOpenChangeHandle(isOpen: boolean): void {\n if (!isOpen) {\n this.close();\n }\n }\n\n /** Opens the select popover body. */\n open(): void {\n this.isOpen = true;\n this.isOpenChange.emit(this.isOpen);\n this.openChange.next(this.isOpen);\n this.markForCheck();\n setTimeout(() => {\n this._markListItemsAsSelected();\n if (this.inputText) {\n return;\n }\n });\n }\n /** Closes the select popover body. */\n close(): void {\n this.isOpen = false;\n this.inputText = '';\n this.searchTermChanged();\n this.isOpenChange.emit(false);\n this.openChange.next(false);\n this.searchInputElement.nativeElement.focus();\n this.markForCheck();\n }\n\n /** @hidden */\n convertObjectToMultiInputOption(items: any[]): MultiInputOption[] {\n return this._convertObjectsToOptionItems(items);\n }\n\n /** @hidden */\n searchTermChanged(text: string = this.inputText): void {\n if (text) {\n this.open();\n }\n const map = new Map();\n map.set('query', text);\n map.set('limit', 12);\n this.ds?.match(map);\n\n this.searchTermChange.emit(text);\n\n this.detectChanges();\n }\n\n /** @hidden */\n showList(isOpen: boolean): void {\n if (this.isOpen !== isOpen) {\n if (isOpen) {\n this.open();\n } else {\n this.searchTermChanged('');\n this.close();\n }\n }\n }\n\n /** @hidden */\n handleOptionItem(value: MultiInputOption): void {\n if (value) {\n this.selectOptionItem(value);\n }\n }\n\n /** @hidden */\n handlePressEnter(event: KeyboardEvent, value: MultiInputOption): void {\n if (!KeyUtil.isKeyCode(event, ENTER)) {\n return;\n }\n\n this.handleOptionItem(value);\n }\n\n /**\n * Handle Keydown on Input\n * @hidden\n */\n onInputKeydownHandler(event: KeyboardEvent): void {\n if (this.readonly) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, TAB) && this.isOpen) {\n this.close();\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n event.preventDefault();\n\n if (event.altKey) {\n this.showList(true);\n }\n\n if (this.isOpen) {\n this.listComponent?._setCurrentActiveItemIndex(0);\n this.listComponent?.listItems.first.focus();\n } else {\n this._chooseOtherItem(1);\n }\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n event.preventDefault();\n\n this._chooseOtherItem(-1);\n } else if (!event.ctrlKey && !KeyUtil.isKeyCode(event, this._nonOpeningKeys)) {\n this.showList(true);\n }\n }\n\n /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n\n /** @hidden */\n private _displayFn = (value: any): string => this.displayValue(value);\n\n /** @hidden */\n private _secondaryFn = (value: any): string => {\n if (isOptionItem(value)) {\n return value.secondaryText ?? '';\n } else if (isJsObject(value) && this.description) {\n const currentItem = this.objectGet(value, this.description);\n\n return isFunction(currentItem) ? currentItem() : currentItem;\n } else {\n return value;\n }\n };\n\n /** @hidden */\n protected get ds(): MultiInputDataSource<any> {\n return this.dataSource as MultiInputDataSource<any>;\n }\n\n /** @hidden\n * Method that picks other value moved from current one by offset, called only when Multi Input is closed */\n private _chooseOtherItem(offset: number): void {\n const index: number = this._suggestions.findIndex((value) => value.label === this.inputText);\n\n if (this._suggestions[index + offset]) {\n this.handleOptionItem(this._suggestions[index + offset]);\n }\n }\n\n /** @hidden */\n private _initializeDataSource(ds: FdpMultiInputDataSource<any>): void {\n this._suggestions = [];\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as MultiInputDataSource<any>).close();\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n this._dsSubscription = undefined;\n }\n }\n // Convert whatever comes in as DataSource so we can work with it identically\n this._dataSource = this._openDataStream(ds);\n }\n\n /** @hidden */\n private _openDataStream(ds: FdpMultiInputDataSource<any>): MultiInputDataSource<any> {\n const initDataSource = this._toDataStream(ds);\n\n if (initDataSource === undefined) {\n throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n }\n /**\n * This is single point of data entry to the component. We dont want to set data on different\n * places. If any new data comes in either you do a search and you want to pass initial data\n * its here.\n */\n this._dsSubscription = new Subscription();\n const dsSub = combineLatest([initDataSource.open(), this._updateDataSourceValues$.pipe(startWith(null))])\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(([data]) => {\n this._originalSuggestions = data;\n this._suggestions = this._convertToOptionItems(data);\n this.stateChanges.next('initDataSource.open().');\n\n this.detectChanges();\n });\n this._dsSubscription.add(dsSub);\n\n this._dsSubscription.add(initDataSource.onDataRequested().subscribe(this.onDataRequested));\n this._dsSubscription.add(initDataSource.onDataReceived().subscribe(this.onDataReceived));\n\n initDataSource.dataProvider.setLookupKey(this.lookupKey);\n const matchingBy: MatchingBy = {\n firstBy: this._displayFn\n };\n\n if (this.description) {\n matchingBy.secondaryBy = this._secondaryFn;\n }\n\n initDataSource.dataProvider.setMatchingBy(matchingBy);\n initDataSource.dataProvider.setMatchingStrategy(this._matchingStrategy);\n\n // initial data fetch\n const map = new Map();\n map.set('query', '*');\n map.set('limit', 12);\n initDataSource.match(map);\n\n return initDataSource;\n }\n\n /** @hidden */\n private _toDataStream(source: FdpMultiInputDataSource<any>): MultiInputDataSource<any> | undefined {\n if (isDataSource(source)) {\n return source as MultiInputDataSource<any>;\n }\n\n if (Array.isArray(source)) {\n // default implementation to work on top of arrays\n return new ArrayMultiInputDataSource<any>(source);\n }\n\n if (isObservable(source)) {\n return new ObservableMultiInputDataSource<any>(source);\n }\n\n return undefined;\n }\n\n /** @hidden */\n private _initWindowResize(): void {\n this._getOptionsListWidth();\n\n if (!this.autoResize) {\n return;\n }\n\n fromEvent(window, 'resize')\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => this._getOptionsListWidth());\n }\n\n /** @hidden */\n private _getOptionsListWidth(): void {\n const body = document.body;\n const rect = (this._element.querySelector('fd-input-group') as HTMLElement).getBoundingClientRect();\n const scrollBarWidth = body.offsetWidth - body.clientWidth;\n this.maxWidth = window.innerWidth - scrollBarWidth - rect.left;\n this.minWidth = rect.width - 2;\n }\n\n /**\n * Convert original data to OptionItems Interface\n * @hidden\n */\n private _convertToOptionItems(items: any[]): MultiInputOption[] {\n const item = items[0];\n\n const elementTypeIsOptionItem = isOptionItem(item);\n if (elementTypeIsOptionItem) {\n return items as MultiInputOption[];\n }\n\n const elementTypeIsObject = isJsObject(item);\n if (elementTypeIsObject) {\n return this._convertObjectsToOptionItems(items);\n }\n\n const elementTypeIsString = isString(item);\n if (elementTypeIsString) {\n return this._convertPrimitiveToOptionItems(items);\n }\n\n return [];\n }\n\n /**\n * Convert data to OptionItems Interface\n * @hidden\n */\n private _convertObjectsToOptionItems(items: any[]): MultiInputOption[] {\n if (this.group && this.groupKey) {\n return this._convertObjectsToGroupOptionItems(items);\n } else if (this.showSecondaryText && this.description) {\n return this._convertObjectsToSecondaryOptionItems(items);\n } else {\n return this._convertObjectsToDefaultOptionItems(items);\n }\n }\n\n /**\n * Convert object[] data to Group OptionItems Interface\n * @hidden\n */\n private _convertObjectsToGroupOptionItems<K>(items: K[]): MultiInputOption[] {\n const group: { [key: string]: K[] } = {};\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const keyValue = this.groupKey && item[this.groupKey];\n if (!keyValue) {\n continue;\n }\n\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n\n group[keyValue].push(item);\n }\n\n return Object.keys(group).map((key) => {\n const selectItem: MultiInputOption = {\n label: key,\n value: null,\n isGroup: true\n };\n\n const currentGroup = group[key];\n\n if (this.showSecondaryText && this.description) {\n selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n } else {\n selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n }\n return selectItem;\n });\n }\n\n /**\n * Convert object[] data to Secondary OptionItems Interface\n * @hidden\n */\n private _convertObjectsToSecondaryOptionItems<K>(items: K[]): MultiInputOption[] {\n const selectItems: MultiInputOption[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n avatarSrc: this.avatarsrc ? this.objectGet(value, this.avatarsrc) : null,\n description: this.description ? this.objectGet(value, this.description) : null,\n value\n });\n }\n\n return selectItems;\n }\n\n /**\n * Convert Primitive data(Boolean, String, Number) to OptionItems Interface\n * @hidden\n */\n private _convertPrimitiveToOptionItems(items: any[]): MultiInputOption[] {\n const selectItems: MultiInputOption[] = [];\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({ label: value, value });\n }\n\n return selectItems;\n }\n\n /**\n * Convert object[] to OptionItems Interface (Default)\n * @hidden\n */\n private _convertObjectsToDefaultOptionItems(items: any[]): MultiInputOption[] {\n const selectItems: MultiInputOption[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n value\n });\n }\n\n return selectItems;\n }\n\n /** @hidden\n * Assign custom templates\n * */\n private _assignCustomTemplates(): void {\n this.customTemplates.forEach((template) => {\n switch (template.name) {\n case 'optionItemTemplate':\n this.optionItemTemplate = template.templateRef;\n break;\n case 'groupItemTemplate':\n this.groupItemTemplate = template.templateRef;\n break;\n case 'secondaryItemTemplate':\n this.secondaryItemTemplate = template.templateRef;\n break;\n case 'selectedItemTemplate':\n this.selectedItemTemplate = template.templateRef;\n break;\n }\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\n\nexport const MULTIINPUT_COMPONENT = new InjectionToken<string[]>('PlatformMultiInputInterface');\n\nexport interface PlatformMultiInputInterface extends MobileMode {\n _selected: any[];\n openChange: Subject<boolean>;\n\n _dialogApprove(): void;\n _dialogDismiss(selectedBackup: any[]): void;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { MULTIINPUT_COMPONENT, PlatformMultiInputInterface } from '../multi-input.interface';\n\n@Component({\n selector: 'fdp-multi-input-mobile',\n templateUrl: './multi-input-mobile.component.html',\n styleUrl: './multi-input-mobile.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [DialogModule, TemplateDirective, BarModule, NgTemplateOutlet, CdkScrollable, ScrollbarDirective]\n})\nexport class PlatformMultiInputMobileComponent extends MobileModeBase<PlatformMultiInputInterface> implements OnInit {\n /** @hidden */\n @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n /** @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n childContent: Nullable<{\n listTemplate: TemplateRef<any>;\n controlTemplate: TemplateRef<any>;\n }> = null;\n\n /** @hidden */\n private _selectedBackup: any[];\n\n /** @hidden */\n constructor(@Inject(MULTIINPUT_COMPONENT) multiInputComponent: PlatformMultiInputInterface) {\n super(multiInputComponent, MobileModeControl.MULTI_INPUT);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenOnMultiInputOpenChange();\n }\n\n /** @hidden */\n _handleApprove(): void {\n this.dialogRef.close();\n this._component._dialogApprove();\n }\n\n /** @hidden */\n _handleDismiss(): void {\n this.dialogRef.dismiss();\n this._component._dialogDismiss(this._selectedBackup);\n }\n\n /** @hidden */\n private _listenOnMultiInputOpenChange(): void {\n this._component.openChange\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n\n /** @hidden */\n private _toggleDialog(open: boolean): void {\n if (!open) {\n this._handleApprove();\n return;\n }\n\n this._selectedBackup = [...this._component._selected];\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n\n /** @hidden */\n private _open(): void {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n disablePaddings: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n escKeyCloseable: false,\n container: this._elementRef.nativeElement\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-dialog-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"_handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\" class=\"fdp-multi-dialog-input\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"_handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"_handleDismiss()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { PlatformMultiInputMobileComponent } from './multi-input-mobile.component';\n\n@NgModule({\n imports: [PlatformMultiInputMobileComponent],\n exports: [PlatformMultiInputMobileComponent]\n})\nexport class PlatformMultiInputMobileModule {}\n","import { BACKSPACE, CONTROL, DELETE, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { Directive, ElementRef, EventEmitter, HostListener, Input, NgZone, Output, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { OptionItem } from '@fundamental-ngx/platform/shared';\nimport { fromEvent } from 'rxjs';\n\nexport interface AutoCompleteEvent {\n term: string;\n forceClose: boolean;\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fdp-auto-complete]',\n standalone: true\n})\nexport class AutoCompleteDirective {\n /** Values that will fill missing text in the input. */\n @Input()\n options: OptionItem[];\n\n /**\n * Input text, that is taken from ngModel of formControl,\n * there has to be difference between native input value and model value\n */\n @Input()\n inputText: string;\n\n /** Check is directive use in mobile view to prevent additional blur events */\n @Input()\n mobile: boolean;\n\n /** Event thrown, when the auto ahead text is accepted */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onComplete: EventEmitter<AutoCompleteEvent> = new EventEmitter<AutoCompleteEvent>();\n\n /** @hidden */\n private readonly _completeKeys: number[] = [ENTER];\n\n /** @hidden */\n private readonly _fillKeys: number[] = [LEFT_ARROW, RIGHT_ARROW];\n\n /** @hidden */\n private readonly _stopKeys: number[] = [BACKSPACE, DELETE, ESCAPE];\n\n /** @hidden */\n private _oldValue: string;\n\n /** @hidden */\n private _lastKeyUpEvent: KeyboardEvent;\n\n /** @hidden */\n private get _element(): HTMLInputElement {\n return this._elementRef.nativeElement;\n }\n\n /** @hidden */\n private _isComposing = false;\n\n /** @hidden */\n private readonly _zone = inject(NgZone);\n\n /** @hidden */\n constructor(private readonly _elementRef: ElementRef<HTMLInputElement>) {\n /**\n * Fixes #10710 / #12983\n * With chinese characters inputText property update was triggered after the keyup event trigger.\n * By ensuring that we set all properties we can proceed with stable data.\n */\n this._zone.runOutsideAngular(() => {\n const keyupEvent = fromEvent<KeyboardEvent>(this._elementRef.nativeElement, 'keyup');\n const compositionStartEvent = fromEvent<CompositionEvent>(\n this._elementRef.nativeElement,\n 'compositionstart'\n );\n const compositionEndEvent = fromEvent<CompositionEvent>(this._elementRef.nativeElement, 'compositionend');\n\n keyupEvent.pipe(takeUntilDestroyed()).subscribe((evt) => this.handleKeyboardEvent(evt));\n\n compositionStartEvent.pipe(takeUntilDestroyed()).subscribe(() => {\n this._isComposing = true;\n });\n\n compositionEndEvent.pipe(takeUntilDestroyed()).subscribe(() => {\n this._isComposing = false;\n this.inputText = this._elementRef.nativeElement.value;\n });\n });\n }\n\n /** @hidden */\n @HostListener('blur')\n handleBlur(): void {\n if (Boolean(this.inputText) && !this.mobile) {\n this._element.value = this.inputText;\n }\n }\n\n /** @hidden */\n handleKeyboardEvent(event: KeyboardEvent): void {\n if (!this._isComposing) {\n if (KeyUtil.isKeyCode(event, this._stopKeys)) {\n this._element.value = this.inputText;\n } else if (KeyUtil.isKeyCode(event, this._completeKeys)) {\n this._sendCompleteEvent(true);\n } else if (KeyUtil.isKeyCode(event, this._fillKeys)) {\n this._sendCompleteEvent(false);\n } else if (!this._isControlKey(event) && this.inputText) {\n /** Prevention from triggering typeahead, when having crtl/cmd + keys */\n if (!this._triggerTypeAhead()) {\n return;\n }\n\n this._oldValue = this.inputText;\n const item = this._searchByStrategy();\n\n if (item) {\n this._typeahead(item.label);\n }\n }\n }\n\n this._lastKeyUpEvent = event;\n }\n\n /** @hidden */\n private _typeahead(displayedValue: string): void {\n const selectionStartIndex = this.inputText.length;\n this._element.value = displayedValue;\n\n this._setSelectionRange(selectionStartIndex, displayedValue.length);\n }\n\n /** @hidden */\n private _setSelectionRange(selectionStart: number, selectionEnd: number): void {\n const direction = this._element.selectionDirection;\n\n this._element.setSelectionRange(selectionStart, selectionEnd, direction ?? undefined);\n }\n\n /** @hidden */\n private _isControlKey(event: KeyboardEvent): boolean {\n return KeyUtil.isKeyCode(event, CONTROL) || event.ctrlKey;\n }\n\n /** @hidden */\n private _triggerTypeAhead(): boolean {\n return !(\n this._lastKeyUpEvent &&\n KeyUtil.isKeyCode(this._lastKeyUpEvent, CONTROL) &&\n this.inputText === this._oldValue\n );\n }\n\n /** @hidden */\n private _sendCompleteEvent(forceClose: boolean): void {\n this.onComplete.emit({\n term: this._element.value,\n forceClose\n });\n\n if (this.inputText !== this._oldValue) {\n const inputTextLength = this.inputText.length;\n this._element.setSelectionRange(inputTextLength, inputTextLength);\n }\n }\n\n /** @hidden */\n private _searchByStrategy(): OptionItem | undefined {\n const [firstItem] = this.options;\n if (!firstItem) {\n return;\n }\n\n if (firstItem.isGroup) {\n let matchedSelectItem: OptionItem | undefined;\n\n for (const option of this.options) {\n if (!option.children) {\n continue;\n }\n matchedSelectItem = this._findByStrategyStartsWith(option.children, this.inputText);\n\n if (matchedSelectItem) {\n break;\n }\n }\n\n if (matchedSelectItem) {\n return matchedSelectItem;\n }\n }\n\n return this._findByStrategyStartsWith(this.options, this.inputText);\n }\n\n /** @hidden */\n private _findByStrategyStartsWith(options: OptionItem[], inputText: string): OptionItem | undefined {\n return options.find((option) => option.label.toLocaleLowerCase().startsWith(inputText.toLocaleLowerCase()));\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n Injector,\n Input,\n OnInit,\n Optional,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n ViewEncapsulation,\n forwardRef\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { DisplayFnPipe, DynamicComponentService, InitialFocusDirective, KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { TokenComponent, TokenizerComponent } from '@fundamental-ngx/core/token';\nimport {\n BaseListItem,\n ListComponent,\n ModifyItemEvent,\n PlatformListModule,\n SelectionType,\n StandardListItemComponent\n} from '@fundamental-ngx/platform/list';\nimport {\n DATA_PROVIDERS,\n DataProvider,\n MultiInputDataSource,\n MultiInputOption,\n isFunction\n} from '@fundamental-ngx/platform/shared';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { MultiAnnouncerDirective } from '@fundamental-ngx/core/multi-combobox';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport equal from 'fast-deep-equal';\nimport { AutoCompleteDirective, AutoCompleteEvent } from '../auto-complete/auto-complete.directive';\nimport { InputType } from '../input/input.component';\nimport { BaseMultiInput } from './base-multi-input';\nimport { PlatformMultiInputMobileComponent } from './multi-input-mobile/multi-input-mobile.component';\nimport { MULTIINPUT_COMPONENT } from './multi-input.interface';\n\nlet uniqueHiddenLabel = 0;\n\nexport class MultiInputSelectionChangeEvent {\n /**\n * Multi Input selection change event\n * @param source Multi Input component\n * @param payload Selected value\n */\n constructor(\n public source: PlatformMultiInputComponent,\n public payload: any // Contains selected item\n ) {}\n}\n\n@Component({\n selector: 'fdp-multi-input',\n templateUrl: './multi-input.component.html',\n styleUrl: './multi-input.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FD_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => PlatformMultiInputComponent),\n multi: true\n },\n contentDensityObserverProviders()\n ],\n imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n InputGroupModule,\n TokenComponent,\n TokenizerComponent,\n FormControlComponent,\n FormsModule,\n AutoCompleteDirective,\n InitialFocusDirective,\n PlatformListModule,\n StandardListItemComponent,\n DisplayFnPipe,\n ContentDensityModule,\n FdTranslatePipe,\n MultiAnnouncerDirective\n ]\n})\nexport class PlatformMultiInputComponent extends BaseMultiInput implements OnInit, AfterViewInit {\n /** @hidden TODO: remove when permanently deleting the deprecated tokenHiddenId input */\n protected tokenCountHiddenLabel = `fdp-multi-input-token-count-id-${uniqueHiddenLabel++}`;\n\n /** @deprecated Now handled internally by tokenizer. */\n @Input()\n tokenHiddenId: string = this.tokenCountHiddenLabel;\n\n /** type Represent the type of input used for the multi Input */\n @Input()\n type: InputType;\n\n /** boolean type represents the focus set for the respective multi input */\n @Input()\n autofocus = false;\n\n /** */\n @Input()\n glyphAriaLabel: string;\n\n /** Title text for the add-on icon button. */\n @Input()\n addonIconTitle: string;\n\n /** @hidden */\n @ViewChild(ListComponent)\n listTemplateDD: ListComponent<MultiInputOption>;\n\n /** Selected values from the list items. */\n _selected: any[] = [];\n\n /** Selected items of the multi input. */\n @Input()\n set selected(selectedValue: any[]) {\n this.value = selectedValue;\n }\n get selected(): any[] {\n return this._selected;\n }\n\n /**\n *\n */\n @Input()\n selectionMode: SelectionType = 'none';\n\n /** Whether the list in byline mode. */\n @Input()\n hasByLine = false;\n\n /** @hidden */\n selectedValue?: MultiInputOption;\n\n /** @hidden */\n get isGroup(): boolean {\n return !!(this.group && this.groupKey);\n }\n\n /** @hidden Whether the input is disabled. */\n protected _disabled = false;\n\n /** Whether the multi input is disabled. */\n @Input()\n set disabled(value) {\n this._disabled = value;\n }\n get disabled(): boolean {\n return this._disabled;\n }\n\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * `equal` will apply a width to the body equivalent to the width of the control.\n * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: string[] = [];\n\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n @Input()\n closeOnOutsideClick = true;\n\n /** Callback function when add-on button clicked. */\n @Input()\n addOnButtonClickFn: () => void;\n\n /** Event emitted when item is selected. */\n @Output()\n readonly selectionChange = new EventEmitter<MultiInputSelectionChangeEvent>();\n\n /** @hidden */\n @ViewChild(TokenizerComponent)\n tokenizer: TokenizerComponent;\n\n /** @hidden */\n @ViewChild('controlTemplate')\n controlTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('listTemplate')\n listTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChildren(BaseListItem)\n private readonly _listItems: QueryList<BaseListItem>;\n\n /** @hidden */\n constructor(\n /** @hidden */\n readonly _dynamicComponentService: DynamicComponentService,\n /** @hidden */\n private readonly _viewContainerRef: ViewContainerRef,\n /** @hidden */\n private readonly _injector: Injector,\n /** @hidden */\n @Optional() @Inject(DATA_PROVIDERS) private _providers: Map<string, DataProvider<any>>,\n readonly contentDensityObserver: ContentDensityObserver\n ) {\n super();\n }\n\n /** Display function. Accepts an object of the same type as the\n * items passed to dropdownValues as argument, and outputs a string.\n * An arrow function can be used to access the *this* keyword in the calling component.\n * See multi input examples for details. */\n @Input()\n displayFn = (str: string): string => str;\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n\n const providers = this._providers?.size === 0 ? this.multiInputConfig.providers : this._providers;\n // if we have both prefer dataSource\n if (!this.dataSource && this.entityClass && providers?.has(this.entityClass)) {\n this.dataSource = new MultiInputDataSource(providers.get(this.entityClass)!);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n\n if (this.mobile) {\n this._setUpMobileMode();\n }\n }\n\n /** @hidden Method to emit change event */\n emitChangeEvent<T>(modelValue: T): void {\n const event = new MultiInputSelectionChangeEvent(this, modelValue);\n\n this.selectionChange.emit(event);\n }\n\n /** @hidden */\n _checkboxSelected(value: any, event: ModifyItemEvent): void {\n const isSelected = event.source._selected;\n const index = this.selected.findIndex((selectvalue) => equal(selectvalue, value));\n\n if (isSelected && index > -1) {\n return;\n }\n\n this.addToArray(value, false);\n }\n\n /** @hidden */\n addToArray(value: any, focusOnInput = true): void {\n const index = this.selected.findIndex((selectvalue) => equal(selectvalue, value));\n if (index === -1) {\n this.selected.push(value);\n } else {\n this.selected.splice(index, 1);\n }\n if (!this.mobile && focusOnInput) {\n this.close();\n }\n this._updateModel(this.selected);\n if (focusOnInput) {\n this.searchInputElement.nativeElement.focus();\n }\n this.emitChangeEvent(value ? this.selected : null);\n this.detectChanges();\n }\n\n /** @hidden */\n addOnButtonClick(event: Event): void {\n if (isFunction(this.addOnButtonClickFn)) {\n this.addOnButtonClickFn();\n return;\n }\n if (!this.openDropdownOnAddOnClicked && this.isOpen) {\n this.showList(false);\n } else if (this.openDropdownOnAddOnClicked) {\n this.showList(!this.isOpen);\n this.searchInputElement?.nativeElement.focus();\n }\n\n this.addOnButtonClicked.emit(event);\n }\n\n /** @hidden */\n onInputGroupClicked(): void {\n if (this.mobile && !this.isOpen) {\n this.open();\n }\n }\n\n /** @hidden */\n moreClicked(): void {\n this.open();\n this._suggestions = this.selected;\n this.markForCheck();\n }\n\n /** @hidden */\n deleteToken(selectedValue: MultiInputOption): void {\n if (this.tokenizer.tokenList.length > 0) {\n this.tokenizer.tokenList.forEach((token) => {\n if (token.tokenWrapperElement.nativeElement.textContent === selectedValue.label) {\n this.selected.splice(this.selected.indexOf(selectedValue), 1);\n }\n });\n }\n this._updateModel(this.selected);\n this.searchInputElement.nativeElement.focus();\n this.close();\n this.markForCheck();\n }\n\n /** @hidden */\n removeToken(token: any): void {\n this.selected.splice(this.selected.indexOf(token), 1);\n this.emitChangeEvent(token ? this.selected : null);\n this.searchInputElement.nativeElement.focus();\n if (this.selected.length === 0) {\n this._selected = [];\n }\n this._updateModel(this.selected);\n this.markForCheck();\n }\n\n /** @hidden */\n removeSelectedTokens(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n if (this.isOpen) {\n this.listComponent._setCurrentActiveItemIndex(0);\n this.listTemplateDD.listItems.first.focus();\n } else {\n this.showList(!this.isOpen);\n this.searchInputElement.nativeElement.focus();\n }\n }\n this.markForCheck();\n }\n\n /** @hidden Define is selected item selected */\n isSelectedOptionItem(selectedItem: any): boolean {\n return (\n (this.lookupKey && this.lookupValue(this.selected) === this.lookupValue(selectedItem)) ||\n this.displayValue(this.selected) === this.displayValue(selectedItem)\n );\n }\n\n /** @hidden Method to set selected item */\n selectOptionItem(item: MultiInputOption): void {\n if (this.mobile) {\n this.selectedValue = item;\n this.inputText = item.label;\n this.detectChanges();\n\n return;\n }\n\n this.inputText = item.label;\n this._checkAndUpdate(item);\n this.showList(false);\n }\n\n /** @hidden Method to set as selected */\n setAsSelected(item: MultiInputOption[]): void {\n this._selected = item;\n this.inputText = '';\n this._markListItemsAsSelected();\n }\n\n /**\n * @hidden\n * Mathod for marking items in dropdown as selected.\n */\n _markListItemsAsSelected(): void {\n this._listItems?.forEach((listItem) => {\n const isSelected = !!this._selected.find((value) => equal(value.value, listItem.value));\n listItem.setSelected(isSelected);\n });\n }\n\n /** @hidden */\n _onAutoComplete(event: AutoCompleteEvent): void {\n if (!event.forceClose || !this._suggestions) {\n return;\n }\n\n const [item] = this.isGroup ? this._suggestions[0]?.children || [] : this._suggestions;\n if (item && item.label === event.term) {\n this.addToArray(item);\n }\n }\n\n /** @hidden */\n _onKeydownEnter(event: Event): void {\n if (this.inputText) {\n event.preventDefault();\n }\n }\n\n /** @hidden Handle dialog dismissing, closes popover and sets backup data. */\n _dialogDismiss(selected: any[]): void {\n this._selected = selected;\n this.showList(false);\n }\n\n /** @hidden Handle dialog approval, closes popover and propagates data changes. */\n _dialogApprove(): void {\n this.onChange(this.selected);\n this._updateModel(this.selected);\n this.showList(false);\n }\n\n /** @hidden if not selected update model */\n private _checkAndUpdate(modelValue: MultiInputOption): void {\n if (this.isSelectedOptionItem(modelValue)) {\n return;\n }\n\n const optionItem = this._getSelectedOptionItem(this.inputText);\n\n this._updateModel(optionItem ? optionItem.value : this.inputText);\n }\n\n /** @hidden */\n private _getSelectedOptionItem(text: string): MultiInputOption | undefined {\n if (!this.isGroup) {\n return this._suggestions.find((item) => item.label === text);\n }\n\n return this._suggestions\n .reduce((result: MultiInputOption[], item: MultiInputOption) => {\n item.children && result.push(...item.children);\n\n return result;\n }, [])\n .find((item) => item.label === text);\n }\n\n /** @hidden Update model */\n private _updateModel(value: any): void {\n // setting value, it will call setValue()\n this.value = value;\n }\n\n /** @hidden */\n private async _setUpMobileMode(): Promise<void> {\n const injector = Injector.create({\n providers: [{ provide: MULTIINPUT_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._dynamicComponentService.createDynamicComponent(\n { listTemplate: this.listTemplate, controlTemplate: this.controlTemplate },\n PlatformMultiInputMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n { injector }\n );\n }\n}\n","<div class=\"fd-multi-input\">\n <ng-template [ngTemplateOutlet]=\"mobile ? controlTemplate : desktopTemplate\"></ng-template>\n</div>\n<ng-template #desktopTemplate>\n <fd-popover\n additionalBodyClass=\"fdp-multi-input__list-container\"\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"(!autoResize && minWidth) || 0\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body>\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-input-group\n [button]=\"true\"\n [buttonFocusable]=\"buttonFocusable\"\n [isControl]=\"true\"\n glyph=\"value-help\"\n [state]=\"state\"\n [disabled]=\"disabled\"\n (keydown)=\"removeSelectedTokens($event)\"\n (addOnButtonClicked)=\"addOnButtonClick($event)\"\n (click)=\"onInputGroupClicked()\"\n [glyphAriaLabel]=\"glyphAriaLabel\"\n [iconTitle]=\"addonIconTitle\"\n >\n <fd-tokenizer\n [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n [showOverflowPopover]=\"false\"\n #tokenizer\n class=\"fd-multi-input-tokenizer-custom\"\n (moreClickedEvent)=\"moreClicked()\"\n tabindex=\"-1\"\n role=\"listbox\"\n fdMultiAnnouncer\n [multiAnnouncerOptions]=\"isOpen ? _suggestions : []\"\n >\n @for (token of selected; track token; let i = $index) {\n <fd-token\n [readOnly]=\"disabled\"\n (onCloseClick)=\"removeToken(token)\"\n [attr.aria-posinset]=\"i\"\n [attr.aria-setsize]=\"selected.length\"\n >\n <span>{{ token.label | displayFnPipe: displayFn }}</span>\n </fd-token>\n }\n <input\n #searchInputElement\n type=\"text\"\n class=\"fd-input fd-multi-input-tokenizer-input fd-tokenizer__input fd-input-group__input\"\n fdp-auto-complete\n autocomplete=\"off\"\n (onComplete)=\"_onAutoComplete($event)\"\n (keydown.enter)=\"_onKeydownEnter($event)\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [inputText]=\"inputText\"\n [options]=\"_suggestions\"\n fd-input-group-input\n fd-form-control\n [attr.id]=\"id\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"searchTermChanged()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [attr.placeholder]=\"selected.length ? null : placeholder\"\n (focus)=\"onTouched(); tokenizer._showAllTokens()\"\n (blur)=\"tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n aria-haspopup=\"listbox\"\n [attr.aria-readonly]=\"readonly\"\n [ariaLabel]=\"ariaLabel || ('coreMultiInput.multiInputAriaLabel' | fdTranslate)\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.aria-required]=\"required\"\n aria-roledescription=\"Multi Value Input\"\n fdkInitialFocus\n [enabled]=\"autofocus\"\n />\n </fd-tokenizer>\n </fd-input-group>\n</ng-template>\n<ng-template #listTemplate>\n @if (_suggestions && _suggestions.length) {\n <fdp-list\n [noBorder]=\"true\"\n #listTemplateDD\n [hasByLine]=\"hasByLine\"\n [selectionMode]=\"selectionMode\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [interceptTabKey]=\"false\"\n (keydown.tab)=\"close()\"\n (keydown.escape)=\"close()\"\n >\n @if (!isGroup) {\n @for (listItem of _suggestions; track listItem) {\n <fdp-standard-list-item\n [title]=\"listItem.label\"\n [description]=\"listItem.description || ''\"\n [avatar]=\"listItem.avatarSrc\"\n [value]=\"listItem.value\"\n (itemSelected)=\"selectionMode !== 'multi' && addToArray(listItem, true)\"\n (itemCheckboxSelected)=\"_checkboxSelected(listItem, $event)\"\n (buttonClicked)=\"deleteToken(listItem)\"\n role=\"option\"\n >\n </fdp-standard-list-item>\n }\n }\n @if (isGroup) {\n @for (group of _suggestions; track group) {\n @if (!groupItemTemplate) {\n <fdp-list-group-header [groupHeaderTitle]=\"group.label\"></fdp-list-group-header>\n }\n @if (groupItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem; let i = $index) {\n <fdp-standard-list-item\n [title]=\"optionItem.label\"\n [value]=\"optionItem.value\"\n (itemSelected)=\"addToArray(optionItem, true)\"\n (itemCheckboxSelected)=\"addToArray(optionItem, false)\"\n (buttonClicked)=\"deleteToken(optionItem)\"\n role=\"option\"\n >\n </fdp-standard-list-item>\n }\n }\n }\n </fdp-list>\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { PlatformMultiInputComponent } from './multi-input.component';\n\n@NgModule({\n imports: [PlatformMultiInputComponent],\n exports: [PlatformMultiInputComponent]\n})\nexport class PlatformMultiInputModule {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformMultiInputComponent } from '../../../multi-input';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-multi-input',\n templateUrl: './dynamic-form-generator-multi-input.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, PlatformMultiInputComponent]\n})\nexport class DynamicFormGeneratorMultiInputComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-multi-input\n [id]=\"id\"\n [formControlName]=\"name\"\n [placeholder]=\"placeholder\"\n type=\"text\"\n [name]=\"name\"\n [dataSource]=\"choices\"\n displayKey=\"label\"\n lookupKey=\"label\"\n [autofocus]=\"true\"\n >\n </fdp-multi-input>\n </ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ObjectStatusComponent } from '@fundamental-ngx/platform/object-status';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { ObjectStatusDynamicFormFieldItem } from '../../interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-object-status',\n templateUrl: './dynamic-form-generator-object-status.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, ObjectStatusComponent]\n})\nexport class DynamicFormGeneratorObjectStatusComponent extends BaseDynamicFormGeneratorControl<ObjectStatusDynamicFormFieldItem> {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-object-status\n [label]=\"formItem.default\"\n [status]=\"formItem.guiOptions?.status\"\n [glyph]=\"formItem.guiOptions?.icon\"\n ></fdp-object-status>\n </ng-container>\n</ng-container>\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RadioButtonComponent as CoreRadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\nlet uniqueId = 0;\n\n@Component({\n selector: 'fdp-radio-button',\n templateUrl: './radio.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CoreRadioButtonComponent, FormsModule, NgTemplateOutlet]\n})\nexport class RadioButtonComponent extends BaseInput implements AfterViewInit, FocusableOption {\n /** sets radio button tooltip */\n @Input()\n title: string;\n\n /**\n * Includes the Radio in the page tab sequence.\n */\n @Input()\n tabIndex = -1;\n\n /** value for Radio button */\n @Input()\n set value(newValue: any) {\n this._value = newValue;\n }\n get value(): any {\n return super.getValue();\n }\n\n /** used for radio button creation if list value present */\n @Input()\n forceRender = false;\n\n /** reference of template */\n @ViewChild('renderer')\n renderer: TemplateRef<any>;\n\n /** click event to emit */\n @Output()\n readonly checked: EventEmitter<RadioButtonComponent> = new EventEmitter();\n\n /** Access radio button child element passed as content of radio button group */\n @ViewChild(CoreRadioButtonComponent, { static: false })\n private coreRadioButton: CoreRadioButtonComponent;\n\n /** @hidden */\n _currentValue: any;\n\n /** @hidden Radio checked status */\n _isChecked = false;\n\n /** @hidden */\n constructor() {\n super();\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n // @hidden have to set default initial values as base class has check and throws error\n this.id = `fdp-radio-id-${uniqueId}`;\n this.name = `fdp-radio-name-${uniqueId}`;\n uniqueId++;\n }\n\n /** @hidden Controlvalue accessor */\n writeValue(value: any): void {\n this._valueChange(value);\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n _valueChange(value: any, emitEvent = false): void {\n if (this.disabled) {\n emitEvent = false;\n }\n\n this._currentValue = value;\n this._isChecked = this._currentValue === super.getValue();\n if (this._isChecked && emitEvent) {\n this.checked.emit(this);\n }\n this.tabIndex = this._isChecked ? 0 : -1;\n this.detectChanges();\n if (emitEvent) {\n this.onChange(value);\n this.onTouched();\n }\n }\n\n /** method for cdk FocusKeymanager */\n focus(): void {\n this.coreRadioButton?.inputElement.nativeElement.focus();\n }\n\n /** method to select radio button */\n select(): void {\n this._valueChange(super.getValue());\n }\n\n /** method to uncheck radio button */\n unselect(): void {\n this._valueChange(undefined);\n }\n\n /** Setting tabIndex for radio accessibility */\n setTabIndex(index: 0 | -1): void {\n this.tabIndex = index;\n this.markForCheck();\n }\n}\n","<ng-template #renderer>\n <fd-radio-button\n [id]=\"id\"\n [name]=\"name\"\n [value]=\"value\"\n [state]=\"state\"\n [disabled]=\"disabled\"\n [tabIndex]=\"_isChecked ? 0 : tabIndex\"\n [title]=\"title\"\n [ariaLabel]=\"ariaLabel\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [ngModel]=\"_currentValue\"\n (ngModelChange)=\"_valueChange($event, true)\"\n >\n <ng-content></ng-content>\n </fd-radio-button>\n</ng-template>\n@if (forceRender) {\n <ng-template [ngTemplateOutlet]=\"renderer\"></ng-template>\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChildren,\n ViewEncapsulation,\n forwardRef,\n inject\n} from '@angular/core';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { merge } from 'rxjs';\nimport { startWith, switchMap } from 'rxjs/operators';\n\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { InLineLayoutCollectionBaseInput, SelectItem } from '@fundamental-ngx/platform/shared';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormGroupComponent, FormItemComponent } from '@fundamental-ngx/core/form';\nimport { RadioButtonComponent } from './radio/radio.component';\n\n/**\n * Radio group implementation based on the\n * https://github.com/SAP/fundamental-ngx/wiki/Platform:-RadioGroup-Technical-Design\n * documents.\n */\n\n// Increasing integer for generating unique ids for radio components.\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'fdp-radio-group',\n templateUrl: './radio-group.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => RadioGroupComponent), multi: true }],\n imports: [FormGroupComponent, FormItemComponent, NgTemplateOutlet, RadioButtonComponent]\n})\nexport class RadioGroupComponent\n extends InLineLayoutCollectionBaseInput\n implements AfterViewInit, AfterContentChecked, OnDestroy\n{\n /** Value of selected radio button */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('selected')\n set value(newValue: any) {\n super.setValue(newValue);\n }\n get value(): any {\n return super.getValue();\n }\n\n /** To Display Radio buttons in a line */\n @Input()\n set isInline(inline: boolean) {\n this._inlineCurrentValue$.next(inline);\n }\n get isInline(): boolean {\n return this._inlineCurrentValue$.value;\n }\n\n /** None value radio button created */\n @Input()\n hasNoValue = false;\n\n /** Label for None value radio button */\n @Input()\n noValueLabel = 'None';\n\n /** Children radio buttons part of Group radio button, passed as content */\n @ContentChildren(RadioButtonComponent)\n contentRadioButtons: QueryList<RadioButtonComponent>;\n\n /** Children radio buttons part of Group radio button, created from list of values */\n @ViewChildren(RadioButtonComponent)\n viewRadioButtons: QueryList<RadioButtonComponent>;\n\n /** Selected radio button change event raised */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-native\n change: EventEmitter<RadioButtonComponent> = new EventEmitter<RadioButtonComponent>();\n\n /** @hidden */\n private _activeItemSet = false;\n\n /** @hidden The currently selected radio button. Should match value. */\n private _selected: RadioButtonComponent | null = null;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden FocusKeyManager instance */\n private _keyboardEventsManager: FocusKeyManager<RadioButtonComponent>;\n\n /** @hidden */\n constructor() {\n super();\n this.id = `radio-group-${nextUniqueId++}`;\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n _handleKeydown(event: KeyboardEvent): void {\n event.stopImmediatePropagation();\n if (this._keyboardEventsManager) {\n // sets Active item. so arrow key starts after the active item.\n // Need to do only once, when one radio is already selected\n if (this._selected && !this._activeItemSet) {\n this._keyboardEventsManager.setActiveItem(this._selected);\n this._activeItemSet = true;\n }\n\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW])) {\n // passing the event to key manager so we get a change fired\n this._keyboardEventsManager.onKeydown(event);\n }\n }\n }\n\n /** Control Value Accessor */\n writeValue(value: any): void {\n super.writeValue(value);\n this.contentRadioButtons?.forEach((b) => this._selectUnselect(b));\n this.viewRadioButtons?.forEach((b) => this._selectUnselect(b));\n }\n\n /** Access display value for objects, acts as checkbox label. */\n getDisplayValue(item: any): string {\n return this.displayValue(item);\n }\n\n /**\n * Called on button click for view radio button, created from list of values\n * @param event\n */\n selected(event: RadioButtonComponent): void {\n this._selectedValueChanged(event);\n }\n\n /** @hidden Selecting default button as provided as input */\n ngAfterContentChecked(): void {\n if (!this._validateRadioButtons()) {\n throw new Error('fdp-radio-button-group must contain a fdp-radio-button');\n }\n this.contentRadioButtons.forEach((button) => (button.state = this.state));\n this.markForCheck();\n }\n\n /**\n * @hidden\n * Initialize properties once fd-radio-buttons are available.\n * This allows us to propagate relevant attributes to associated buttons.\n */\n ngAfterViewInit(): void {\n setTimeout(() => {\n this._initialSetup(this.contentRadioButtons);\n this._initialSetup(this.viewRadioButtons);\n });\n super.ngAfterViewInit();\n }\n\n /** @hidden Destroys event subscription. */\n ngOnDestroy(): void {\n this._keyboardEventsManager?.destroy();\n }\n\n /** @hidden */\n _getListItemDisabledValue(item: RadioGroupComponent['list'][number]): boolean {\n return this.disabled || (typeof item === 'object' && !!(<SelectItem>item).disabled);\n }\n\n /** @hidden */\n private _initialSetup(radioButtons: QueryList<RadioButtonComponent>): void {\n if (!radioButtons || radioButtons?.length === 0) {\n return;\n }\n\n this._keyboardEventsManager?.destroy();\n this._keyboardEventsManager = new FocusKeyManager(radioButtons).withWrap().withHorizontalOrientation('ltr');\n\n radioButtons.changes\n .pipe(\n startWith(radioButtons),\n switchMap(() => {\n let firstEnabledButtonIndex = -1;\n const checkedEvents = radioButtons.map((button, i) => {\n if (this.list) {\n button.state = this.state;\n } else {\n this._setProperties(button);\n }\n\n this._selectUnselect(button);\n\n // finding first enabled button to set tabIndex=0\n if (!button.disabled && !this._disabled && firstEnabledButtonIndex < 0) {\n firstEnabledButtonIndex = i;\n }\n\n return button.checked.asObservable();\n });\n\n // accessibility requirement\n if (!this._selected && radioButtons && firstEnabledButtonIndex > -1) {\n radioButtons.toArray()[firstEnabledButtonIndex].setTabIndex(0);\n }\n return merge(...checkedEvents);\n }),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((ev) => this._selectedValueChanged(ev));\n }\n\n /**\n * @hidden\n * Selects given button, if value matches\n * @param button\n */\n private _selectUnselect(button: RadioButtonComponent): void {\n if (button.value !== this.value) {\n button.unselect();\n\n return;\n }\n\n // selected button\n if (this._selected !== button) {\n this._selected = button;\n }\n\n if (!button._isChecked) {\n button.select();\n }\n }\n\n /** @hidden Called every time a radio button is clicked, In content child as well as viewchild */\n private _selectedValueChanged(button: RadioButtonComponent): void {\n if (this._selected !== button) {\n this._resetTabIndex(button);\n\n if (this._selected) {\n this._selected.unselect();\n }\n\n this._selected = button;\n button.select();\n }\n\n this.value = button.value;\n this.change.emit(button);\n this.onTouched();\n }\n\n /** @hidden resets tabIndex for first radio in radio group. for accessibility tabIndex was set */\n private _resetTabIndex(selectedRadio: RadioButtonComponent): void {\n if (this.viewRadioButtons || this.contentRadioButtons) {\n const radios = this.viewRadioButtons.length > 0 ? this.viewRadioButtons : this.contentRadioButtons;\n radios.forEach((radio) => {\n if (radio !== selectedRadio && radio.tabIndex === 0) {\n radio.tabIndex = -1;\n }\n });\n }\n }\n\n /**\n * @hidden\n * @param button Set initial values, used while content children creation\n */\n private _setProperties(button: RadioButtonComponent): void {\n if (button) {\n button.name = this.name;\n button.state = this.state;\n button.disabled = button.disabled ? button.disabled : this._disabled;\n }\n }\n\n /** @hidden Make sure we have expected child. */\n private _validateRadioButtons(): boolean {\n return (\n this.contentRadioButtons.filter((item) => !(item instanceof RadioButtonComponent || item['renderer']))\n .length === 0\n );\n }\n}\n","<fd-form-group\n [isInline]=\"isInline\"\n role=\"radiogroup\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-orientation]=\"isInline ? 'horizontal' : 'vertical'\"\n [attr.aria-required]=\"required\"\n>\n @if (!list) {\n @for (radio of contentRadioButtons; track radio) {\n <div fd-form-item>\n <ng-template\n [ngTemplateOutlet]=\"radio?.renderer || null\"\n [ngTemplateOutletContext]=\"{\n name: name,\n value: radio.value,\n state: state,\n disabled: disabled || radio.disabled,\n ariaLabel: radio.ariaLabel,\n ariaLabelledBy: radio.ariaLabelledBy,\n ariaDescribedBy: radio.ariaDescribedBy,\n title: radio.title\n }\"\n ></ng-template>\n </div>\n }\n } @else {\n <ng-template [ngTemplateOutlet]=\"listvalues\"></ng-template>\n }\n</fd-form-group>\n<ng-template #listvalues>\n @if (hasNoValue) {\n <div fd-form-item>\n <fdp-radio-button [name]=\"name\" value=\"None\" [state]=\"state\" [disabled]=\"disabled\" [forceRender]=\"true\">\n {{ noValueLabel }}\n </fdp-radio-button>\n </div>\n }\n @for (item of list; track item) {\n <div fd-form-item>\n <fdp-radio-button\n [name]=\"name\"\n [value]=\"lookupValue(item)\"\n [state]=\"state\"\n [disabled]=\"_getListItemDisabledValue(item)\"\n [forceRender]=\"true\"\n >\n {{ getDisplayValue(item) }}\n </fdp-radio-button>\n </div>\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { RadioGroupComponent } from './radio-group.component';\nimport { RadioButtonComponent } from './radio/radio.component';\n\n@NgModule({\n imports: [RadioGroupComponent, RadioButtonComponent],\n exports: [RadioGroupComponent, RadioButtonComponent]\n})\nexport class PlatformRadioGroupModule {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformRadioGroupModule } from '../../../radio-group/radio-group.module';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-radio',\n templateUrl: './dynamic-form-generator-radio.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, PlatformRadioGroupModule]\n})\nexport class DynamicFormGeneratorRadioComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-radio-group\n [id]=\"id\"\n [isInline]=\"formItem.guiOptions?.inline || false\"\n [inlineLayout]=\"formItem.guiOptions?.inlineLayout\"\n [name]=\"name\"\n [list]=\"choices\"\n [formControlName]=\"name\"\n ></fdp-radio-group>\n </ng-container>\n</ng-container>\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Combobox\n */\n@Injectable({ providedIn: 'root' })\nexport class SelectConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /** @hidden */\n constructor(platformConfig: PlatformConfig) {\n this.contentDensity = platformConfig.contentDensity;\n }\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<SelectConfig>): (platformConfig: PlatformConfig) => SelectConfig {\n const useFactory = (platformConfig: PlatformConfig): SelectConfig =>\n Object.assign(new SelectConfig(platformConfig), obj);\n return useFactory;\n }\n}\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ENTER } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n QueryList,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport { fromEvent, Observable, Subject, Subscription } from 'rxjs';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SingleDropdownValueControl } from '@fundamental-ngx/cdk/forms';\nimport {\n ContentDensityService,\n FocusEscapeDirection,\n KeyUtil,\n TemplateDirective,\n warnOnce\n} from '@fundamental-ngx/cdk/utils';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconFont } from '@fundamental-ngx/core/icon';\nimport { ListComponent } from '@fundamental-ngx/core/list';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { CollectionBaseInput, isJsObject, isOptionItem, isString } from '@fundamental-ngx/platform/shared';\nimport { TextAlignment } from '../../combobox';\nimport { SelectOptionItem } from '../models/select.models';\nimport { SelectConfig } from '../select.config';\n\nexport type FdpSelectData<T> = SelectOptionItem[] | Observable<T[]> | T[];\n\n/**\n * @deprecated\n * `FdpSelectionChangeEvent` will be removed in future versions in favour of plain value emission\n */\nexport class FdpSelectionChangeEvent {\n /**\n * Select selection change event\n * @param payload selected value\n */\n constructor(\n public payload: any // Contains selected item\n ) {\n warnOnce('FdpSelectionChangeEvent will be removed in future versions in favour of plain value emission');\n }\n}\n\n@Directive()\nexport abstract class BaseSelect\n extends CollectionBaseInput\n implements SingleDropdownValueControl, AfterViewInit, OnDestroy\n{\n /** Provides maximum default height for the optionPanel */\n @Input()\n maxHeight = '250px';\n\n /** Whether the select should be built on mobile mode */\n @Input()\n mobile = false;\n\n /** Tells the select if we need to group items */\n @Input()\n group = false;\n\n /** A field name to use to group data by (support dotted notation) */\n @Input()\n groupKey?: string;\n\n /** The field to show data in secondary column */\n @Input()\n secondaryKey?: string;\n\n /** Show the second column (Applicable for two columns layout) */\n @Input()\n showSecondaryText = false;\n\n /** Glyph to add icon in the select component. */\n @Input()\n glyph = 'slim-arrow-down';\n\n /** Glyph font family */\n @Input()\n glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /** The element to which the popover should be appended. */\n @Input()\n appendTo: ElementRef;\n\n /** Trigger value */\n @Input()\n triggerValue: string;\n\n /**\n * Preset options for the select body width.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control.\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * Leave blank for no effect.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /** Horizontally align text inside the second column (Applicable for two columns layout) */\n @Input()\n secondaryTextAlignment: TextAlignment = 'right';\n\n /**\n * Max width of list container\n * */\n @Input()\n declare width: string;\n\n /** Whether the select component is readonly. */\n @Input()\n readonly = false;\n\n /** Placeholder for the select. Appears in the\n * triggerbox if no option is selected. */\n @Input()\n declare placeholder: string;\n\n /** Whether close the popover on outside click. */\n @Input()\n closeOnOutsideClick = true;\n\n /** Custom template used to build control body. */\n @Input()\n controlTemplate: TemplateRef<any> | undefined;\n\n /** Select Input Mobile Configuration */\n @Input()\n mobileConfig: MobileModeConfig = { hasCloseButton: true };\n\n /**\n * String rendered as first value in the popup which let the user to make 'no selection' from\n * available list of values. When this option is active and use make this selection we save a\n * NULL value\n */\n @Input()\n noValueLabel: string;\n\n /** Whether not to wrap text */\n @Input()\n noWrapText = false;\n\n /** Turns on/off Adjustable Width feature */\n @Input()\n autoResize = false;\n\n /** First Column ratio */\n @Input()\n set firstColumnRatio(value: number) {\n this._firstColumnRatio = coerceNumberProperty(value);\n }\n\n get firstColumnRatio(): number {\n return this._firstColumnRatio;\n }\n\n /** Secoond Column ratio */\n @Input()\n set secondColumnRatio(value: number) {\n this._secondColumnRatio = coerceNumberProperty(value);\n }\n\n get secondColumnRatio(): number {\n return this._secondColumnRatio;\n }\n\n /**\n * Min width of list container\n *\n * */\n @Input()\n minWidth?: number;\n\n /**\n * Max width of list container\n * */\n @Input()\n maxWidth?: number;\n\n /**\n * Action to perform when user shifts focus from the dropdown.\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n @Input()\n tabOutStrategy: 'close' | 'closeAndSelect' = 'close';\n\n /** Data for suggestion list */\n @Input()\n set list(value: any) {\n if (value) {\n this._optionItems = this._convertToOptionItems(value);\n }\n }\n get list(): any {\n return this._optionItems;\n }\n\n /** @hidden */\n get canClose(): boolean {\n return !(this.mobile && this.mobileConfig.approveButtonText);\n }\n\n /** Event emitted when item is selected. */\n @Output()\n selectionChange = new EventEmitter<FdpSelectionChangeEvent>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n listComponent: ListComponent;\n\n /** @hidden */\n @ContentChildren(TemplateDirective)\n customTemplates: QueryList<TemplateDirective>;\n\n /** Custom Option item Template\n * * @hidden\n * */\n _optionItemTemplate: TemplateRef<any>;\n\n /**\n * Custom Secondary item Template\n * @hidden\n * */\n _secondaryItemTemplate: TemplateRef<any>;\n\n /**\n * Custom Selected option item Template\n * @hidden\n * */\n _selectedItemTemplate: TemplateRef<any>;\n\n /** @hidden */\n _contentDensityService: ContentDensityService;\n\n /**\n * List of option items\n * @hidden\n * */\n _optionItems: SelectOptionItem[];\n\n /** @hidden */\n _subscriptions = new Subscription();\n\n /** @hidden */\n protected readonly selectConfig = inject(SelectConfig);\n\n /** @hidden */\n private _searchInputElement: ElementRef;\n\n /** Whether the select is opened. */\n private _isOpen = false;\n\n /**\n * Need for opening mobile version\n *\n * @hidden\n */\n private _openChange = new Subject<boolean>();\n\n /** @hidden */\n private _dsSubscription?: Subscription;\n\n /** @hidden */\n private _element: HTMLElement = this.elementRef.nativeElement;\n\n /** @hidden */\n private _firstColumnRatio: number;\n\n /** @hidden */\n private _secondColumnRatio: number;\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._initWindowResize();\n this._assignCustomTemplates();\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n\n this._subscriptions.unsubscribe();\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n }\n }\n\n /** Is empty search field */\n get isEmptyValue(): boolean {\n return this.value.trim().length === 0;\n }\n\n /** @hidden\n * Close list * */\n close(event: MouseEvent | null = null, forceClose: boolean = false): void {\n if (event) {\n const target = event.target as HTMLInputElement;\n if (target && target.id === this.id) {\n return;\n }\n }\n\n if (this._isOpen && (forceClose || this.canClose)) {\n this._isOpen = false;\n this._openChange.next(this._isOpen);\n this.markForCheck();\n this.onTouched();\n }\n }\n\n /** @hidden */\n showList(isOpen: boolean): void {\n if (this._isOpen !== isOpen) {\n this._isOpen = isOpen;\n this.onTouched();\n this._openChange.next(isOpen);\n }\n\n this.detectChanges();\n }\n\n /** @hidden */\n handlePressEnter(event: KeyboardEvent, value: SelectOptionItem): void {\n if (!KeyUtil.isKeyCode(event, ENTER)) {\n return;\n }\n\n this.setValue(value);\n }\n\n /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this._searchInputElement.nativeElement.focus();\n }\n }\n\n /** @hidden */\n protected setValue(newValue: any, emitOnChange = true): void {\n if (newValue !== this._value) {\n this.writeValue(newValue);\n if (emitOnChange) {\n this.onChange(this.value);\n this.onTouched();\n this.selectionChange.emit({ payload: this.value });\n }\n this.markForCheck();\n }\n }\n\n /** @hidden */\n private _initWindowResize(): void {\n this._getOptionsListWidth();\n\n if (!this.autoResize) {\n return;\n }\n\n fromEvent(window, 'resize')\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => this._getOptionsListWidth());\n }\n\n /** @hidden */\n private _getOptionsListWidth(): void {\n const body = document.body;\n const rect = this._element.getBoundingClientRect();\n const scrollBarWidth = body.offsetWidth - body.clientWidth;\n this.maxWidth = window.innerWidth - scrollBarWidth - rect.left;\n this.minWidth = rect.width - 2;\n }\n\n /**\n * Convert original data to OptionItems Interface\n * @hidden\n */\n private _convertToOptionItems(items: any[]): SelectOptionItem[] {\n const item = items[0];\n\n const elementTypeIsOptionItem = isOptionItem(item);\n if (elementTypeIsOptionItem) {\n return items as SelectOptionItem[];\n }\n\n const elementTypeIsObject = isJsObject(item);\n if (elementTypeIsObject) {\n return this._convertObjectsToOptionItems(items);\n }\n\n const elementTypeIsString = isString(item);\n if (elementTypeIsString) {\n return this._convertPrimitiveToOptionItems(items);\n }\n\n return [];\n }\n\n /**\n * Convert data to OptionItems Interface\n * @hidden\n */\n private _convertObjectsToOptionItems(items: any[]): SelectOptionItem[] {\n if (this.showSecondaryText && this.secondaryKey) {\n return this._convertObjectsToSecondaryOptionItems(items);\n } else {\n return this._convertObjectsToDefaultOptionItems(items);\n }\n }\n\n /**\n * Convert object[] data to Secondary OptionItems Interface\n * @hidden\n */\n private _convertObjectsToSecondaryOptionItems<K>(items: K[]): SelectOptionItem[] {\n const selectItems: SelectOptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n secondaryText: this.objectGet(value, this.secondaryKey),\n value: this.lookupValue(value)\n });\n }\n\n return selectItems;\n }\n\n /**\n * Convert Primitive data(Boolean, String, Number) to OptionItems Interface\n * @hidden\n */\n private _convertPrimitiveToOptionItems(items: string[]): SelectOptionItem[] {\n const selectItems: SelectOptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({ label: value, value });\n }\n\n return selectItems;\n }\n\n /**\n * Convert object[] to OptionItems Interface (Default)\n * @hidden\n */\n private _convertObjectsToDefaultOptionItems(items: any[]): SelectOptionItem[] {\n const selectItems: SelectOptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n value\n });\n }\n\n return selectItems;\n }\n\n /** @hidden\n * Assign custom templates\n * */\n private _assignCustomTemplates(): void {\n this.customTemplates.forEach((template) => {\n switch (template.name) {\n case '_optionItemTemplate':\n this._optionItemTemplate = template.templateRef;\n break;\n case '_secondaryItemTemplate':\n this._secondaryItemTemplate = template.templateRef;\n break;\n case '_selectedItemTemplate':\n this._selectedItemTemplate = template.templateRef;\n break;\n }\n });\n }\n}\n","import {\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Input,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { DynamicComponentService } from '@fundamental-ngx/cdk/utils';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { ListSecondaryDirective } from '@fundamental-ngx/core/list';\nimport { SelectComponent as CoreSelect, SelectModule } from '@fundamental-ngx/core/select';\nimport { BaseSelect } from '../commons/base-select';\n\n@Component({\n selector: 'fdp-select',\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [DynamicComponentService, { provide: FD_FORM_FIELD_CONTROL, useExisting: SelectComponent, multi: true }],\n imports: [SelectModule, FormsModule, IconComponent, NgTemplateOutlet, NgClass, ListSecondaryDirective]\n})\nexport class SelectComponent extends BaseSelect implements AfterViewInit, AfterViewChecked {\n /**\n * Directly sets value to the component that at the ends up at writeValue as well fires\n * change detections\n */\n @Input()\n set value(newValue: any) {\n this.setValue(newValue);\n }\n get value(): any {\n return this._value;\n }\n\n /** Should select be inlined. */\n @Input()\n inline = true;\n\n /** @hidden */\n @ViewChild(CoreSelect, { static: true })\n select: CoreSelect;\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n\n // set columns ratio for 2\n if (this.firstColumnRatio && this.secondColumnRatio) {\n this._setColumnsRatio(this.firstColumnRatio, this.secondColumnRatio);\n }\n\n // set width to avoid resize\n if (this.width) {\n const controlItem = this.elementRef.nativeElement.querySelector('.fd-select__text-content') as HTMLElement;\n controlItem.style.width = this.width;\n }\n\n // setting option items\n this.select._options.forEach((option) => {\n const optionItem = option._getHtmlElement();\n\n // set maxWidth default is 40rem\n if (this.maxWidth) {\n optionItem.setAttribute('style', 'max-width: ' + this.maxWidth + 'px');\n }\n // by default text will be overlapped, below it will help to truncate\n if (this.noWrapText) {\n const listTitle = optionItem.querySelector('.fd-list__title');\n if (listTitle) {\n const listTitleInnerHTML = listTitle.innerHTML;\n listTitle.setAttribute('title', listTitleInnerHTML);\n listTitle.setAttribute('aria-label', listTitleInnerHTML);\n listTitle.classList.add('fd-list__title--no-wrap');\n }\n }\n });\n }\n\n /** @hidden */\n ngAfterViewChecked(): void {\n this.detectChanges();\n }\n\n /**\n * Define is selected item selected\n * @hidden\n */\n _isSelectedOptionItem(selectedItem: any): boolean {\n return this.value === this.lookupValue(selectedItem);\n }\n\n /** @hidden */\n _onSelection(value: any): void {\n this.setValue(value);\n }\n\n /** @hidden */\n _onOpenChange(isOpen: boolean): void {\n if (isOpen) {\n this.formMessage?._popover?.close();\n }\n this.formMessage?._popover?.setIgnoreTriggers(isOpen);\n }\n\n /** @hidden */\n private _setColumnsRatio(firstColumnRatio: number, secondColumnRatio: number): void {\n const totalProportions = firstColumnRatio + secondColumnRatio;\n const firstColumnProportion = Math.round((firstColumnRatio / totalProportions) * 100);\n const secondColumnProportion = 100 - firstColumnProportion;\n\n // setting option items\n this.select._options.forEach((option) => {\n const optionItem = option._getHtmlElement();\n const titleElement = <HTMLElement>optionItem.querySelector('[fd-list-title]');\n this._setOptionAttribute(titleElement, firstColumnProportion);\n\n const secondaryElement = <HTMLElement>optionItem.querySelector('[fd-list-secondary]');\n this._setOptionAttribute(secondaryElement, secondColumnProportion);\n });\n }\n\n /** @hidden */\n private _setOptionAttribute(element: HTMLElement, proportion: number): void {\n element.setAttribute('style', 'width: ' + proportion + '%; max-width: ' + proportion + '%');\n }\n}\n","<fd-select\n [placeholder]=\"placeholder\"\n [glyph]=\"glyph\"\n [glyphFont]=\"glyphFont\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [controlTemplate]=\"controlTemplate\"\n [appendTo]=\"appendTo\"\n [fillControlMode]=\"fillControlMode\"\n [maxHeight]=\"maxHeight\"\n [attr.aria-disabled]=\"disabled || readonly\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.tooltip]=\"value\"\n [attr.aria-readonly]=\"readonly\"\n [attr.role]=\"'listbox'\"\n [value]=\"value\"\n [state]=\"state\"\n [stateMessage]=\"stateMessage\"\n [advancedStateMessage]=\"advancedStateMessage\"\n [mobile]=\"mobile\"\n [mobileConfig]=\"mobileConfig\"\n [inline]=\"inline\"\n [(ngModel)]=\"value\"\n [tabOutStrategy]=\"tabOutStrategy\"\n (valueChange)=\"_onSelection($event)\"\n (isOpenChange)=\"_onOpenChange($event)\"\n>\n <ng-content></ng-content>\n @if (noValueLabel) {\n <li fd-option [disabled]=\"false\" [value]=\"null\">\n {{ noValueLabel }}\n </li>\n }\n @for (item of _optionItems; track item; let index = $index) {\n <li\n fd-option\n [disabled]=\"!!item.disabled\"\n [value]=\"item.value\"\n [attr.aria-labelledby]=\"ariaLabel\"\n [attr.aria-disabled]=\"disabled\"\n >\n @if (item.icon) {\n <fd-icon [glyph]=\"item.icon\" class=\"fd-template-icon icon-margin\"></fd-icon>\n }\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: item, index: index }\"\n ></ng-template>\n <ng-template\n secondary\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: item }\"\n ></ng-template>\n </li>\n }\n</fd-select>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (_isSelectedOptionItem(optionItem) && !!_selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"_selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(_isSelectedOptionItem(optionItem) && _selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!_optionItemTemplate) {\n <span [innerHTML]=\"optionItem.label\"></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"_optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText) {\n @if (!_secondaryItemTemplate) {\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [innerHTML]=\"optionItem.secondaryText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"_secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SelectComponent } from '../../../select/select/select.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { SelectDynamicFormFieldItem } from '../../interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-select',\n templateUrl: './dynamic-form-generator-select.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, SelectComponent]\n})\nexport class DynamicFormGeneratorSelectComponent extends BaseDynamicFormGeneratorControl<SelectDynamicFormFieldItem> {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-select\n [width]=\"formItem.guiOptions?.additionalData?.width\"\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [inline]=\"formItem.guiOptions?.inline !== false\"\n [name]=\"name\"\n [list]=\"formItem.choices\"\n [formControlName]=\"name\"\n [secondaryKey]=\"formItem.secondaryKey\"\n [showSecondaryText]=\"formItem.showSecondaryText ? formItem.showSecondaryText : false\"\n [secondaryTextAlignment]=\"formItem.secondaryTextAlignment ? formItem.secondaryTextAlignment : 'right'\"\n [controlTemplate]=\"formItem.controlTemplate\"\n ></fdp-select>\n </ng-container>\n</ng-container>\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\n\n/**\n * Default options for platform Switch\n */\n@Injectable({ providedIn: 'root' })\nexport class SwitchConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<SwitchConfig>): () => SwitchConfig {\n const useFactory = (): SwitchConfig => Object.assign(new SwitchConfig(), obj);\n return useFactory;\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { SwitchComponent as CoreSwitchComponent } from '@fundamental-ngx/core/switch';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { SwitchConfig } from './switch.config';\n\n/** Switch change event instance */\nexport class SwitchChangeEvent {\n /** The source Switch of the event. */\n source: SwitchComponent;\n /** The new `payload` value of the switch. */\n payload: boolean;\n}\n\n@Component({\n selector: 'fdp-switch',\n templateUrl: './switch.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: SwitchComponent, multi: true }],\n imports: [CoreSwitchComponent, FdTranslatePipe]\n})\nexport class SwitchComponent extends BaseInput {\n /** Whether the switch is semantic */\n @Input()\n semantic = false;\n\n /**\n * Event fired when the state of the switch changes.\n * *$event* can be used to retrieve the new state of the switch.\n */\n @Output()\n readonly switchChange: EventEmitter<SwitchChangeEvent> = new EventEmitter<SwitchChangeEvent>();\n\n /** value for switch control */\n set value(selectValue: any) {\n this.setValue(selectValue);\n }\n get value(): any {\n return this.getValue();\n }\n\n /** @hidden\n * tracking switch current value\n */\n switchCurrentValue = false;\n\n /** @hidden */\n constructor(protected _switchConfig: SwitchConfig) {\n super();\n }\n\n /** update controller on switch state change */\n onValueChange(modelValue: boolean): void {\n this._updateModel(modelValue);\n this.onTouched();\n this.stateChanges.next('switch: onValueChange');\n }\n\n /** write value for ControlValueAccessor */\n writeValue(value: any): void {\n this.switchCurrentValue = value;\n super.writeValue(value);\n }\n\n /** @hidden\n * update model\n */\n private _updateModel(modelValue: boolean): void {\n this._emitChangeEvent(modelValue);\n }\n\n /** @hidden\n * Method to emit change event\n */\n private _emitChangeEvent(modelValue: boolean): void {\n const event = new SwitchChangeEvent();\n event.source = this;\n event.payload = modelValue;\n\n // setting value, it will call setValue()\n this.value = modelValue;\n this.switchChange.emit(event);\n }\n}\n","<fd-switch\n [id]=\"id\"\n [required]=\"required\"\n [name]=\"name\"\n [disabled]=\"disabled\"\n [semantic]=\"semantic\"\n [ariaLabel]=\"ariaLabel || ('platformSwitch.ariaLabel' | fdTranslate)\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [checked]=\"switchCurrentValue\"\n (checkedChange)=\"onValueChange($event)\"\n></fd-switch>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SwitchComponent } from '../../../switch/switch';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-switch',\n templateUrl: './dynamic-form-generator-switch.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, SwitchComponent]\n})\nexport class DynamicFormGeneratorSwitchComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-switch\n [id]=\"id\"\n [name]=\"name\"\n [semantic]=\"formItem.guiOptions?.additionalData?.semantic\"\n [formControlName]=\"name\"\n ></fdp-switch>\n </ng-container>\n</ng-container>\n","import { DynamicFormGeneratorCheckboxComponent } from '../controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component';\nimport { DynamicFormGeneratorDatepickerComponent } from '../controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component';\nimport { DynamicFormGeneratorEditorComponent } from '../controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component';\nimport { DynamicFormGeneratorInputComponent } from '../controls/dynamic-form-generator-input/dynamic-form-generator-input.component';\nimport { DynamicFormGeneratorMultiInputComponent } from '../controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component';\nimport { DynamicFormGeneratorObjectStatusComponent } from '../controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component';\nimport { DynamicFormGeneratorRadioComponent } from '../controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component';\nimport { DynamicFormGeneratorSelectComponent } from '../controls/dynamic-form-generator-select/dynamic-form-generator-select.component';\nimport { DynamicFormGeneratorSwitchComponent } from '../controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component';\nimport { FormComponentDefinition } from '../interfaces/form-component-definition';\n\nexport const DEFAULT_COMPONENTS_LIST: FormComponentDefinition[] = [\n {\n types: ['input', 'email', 'number', 'password'],\n component: DynamicFormGeneratorInputComponent\n },\n {\n types: ['checkbox'],\n component: DynamicFormGeneratorCheckboxComponent\n },\n {\n types: ['radio', 'confirm'],\n component: DynamicFormGeneratorRadioComponent\n },\n {\n types: ['editor', 'textarea'],\n component: DynamicFormGeneratorEditorComponent\n },\n {\n types: ['select', 'list'],\n component: DynamicFormGeneratorSelectComponent\n },\n {\n types: ['datepicker'],\n component: DynamicFormGeneratorDatepickerComponent\n },\n {\n types: ['switch'],\n component: DynamicFormGeneratorSwitchComponent\n },\n {\n types: ['multi-input'],\n component: DynamicFormGeneratorMultiInputComponent\n },\n {\n types: ['object-status'],\n component: DynamicFormGeneratorObjectStatusComponent\n }\n];\n","import { Injectable, Type } from '@angular/core';\nimport { BaseDynamicFormGeneratorControl } from './base-dynamic-form-generator-control';\nimport { DEFAULT_COMPONENTS_LIST } from './config/default-components-list';\nimport { FormComponentDefinition } from './interfaces/form-component-definition';\n\n/**\n * Since form generator service most probably will be provided by parent component,\n * so that forms map does not interfere with other form generators,\n * Components Accessor is a separate service with a global scope, which can be also provided per component.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class FormGeneratorComponentsAccessorService {\n /**\n * @hidden\n */\n private _formComponentDefinitions: FormComponentDefinition[] = DEFAULT_COMPONENTS_LIST;\n\n /**\n * @description Adds custom component to the list of available components for the form generator items.\n * @param component Angular component.\n * @param types types of the form item.\n */\n addComponent(component: Type<BaseDynamicFormGeneratorControl>, types: string[]): boolean {\n const bestMatchComponentIndex = this._formComponentDefinitions.findIndex((c) =>\n c.types?.every((t) => types.includes(t))\n );\n\n if (bestMatchComponentIndex > -1) {\n this._formComponentDefinitions[bestMatchComponentIndex].component = component;\n return true;\n }\n\n // Try to find component in types key. There might be some unique cases when new component might replace multiple.\n const existingComponents = this._formComponentDefinitions.filter((c) =>\n c.types?.filter((t) => types.includes(t))\n );\n\n existingComponents.forEach((existingComponent, index) => {\n existingComponent.types = existingComponent.types?.filter((t) => !types.includes(t));\n this._formComponentDefinitions[index] = existingComponent;\n });\n\n this._formComponentDefinitions.push({\n types,\n component\n });\n\n return true;\n }\n\n /**\n * @description Returns best-matched component based on provided `type` argument\n * @param type form item type\n * @returns @see FormComponentDefinition Component definition for the form item\n */\n getComponentDefinitionByType(type: string): FormComponentDefinition | undefined {\n return this._formComponentDefinitions.find((c) => c.types?.includes(type));\n }\n}\n","import { HintOptions } from '@fundamental-ngx/platform/shared';\nimport {\n DynamicFormFieldGroup,\n DynamicFormFieldGroupMap,\n DynamicFormFieldItem,\n DynamicFormItem,\n DynamicFormItemMap\n} from './interfaces/dynamic-form-item';\n\n/** @hidden */\nexport function isHintOptions(opts: string | HintOptions): opts is HintOptions {\n return !!opts && typeof opts !== 'string';\n}\n\n/** @hidden */\nexport function mapFormItems(formItems?: DynamicFormItem[]): Map<string, DynamicFormItemMap> {\n const mappedItems: Map<string, DynamicFormItemMap> = new Map();\n\n if (!formItems) {\n return mappedItems;\n }\n\n formItems.forEach((item, index) => {\n const mappedItem = transformFormItem(item, index);\n\n mappedItems.set(mappedItem.name, mappedItem);\n });\n\n return mappedItems;\n}\n\n/** @hidden */\nexport function transformFormItem(\n item: DynamicFormItem,\n index: number\n): DynamicFormFieldGroupMap | DynamicFormFieldItem {\n if (isFormGroupItem(item)) {\n const mappedItem = Object.assign({}, item, { items: mapFormItems(item.items) });\n mappedItem.rank = mappedItem.rank || index;\n return mappedItem;\n } else {\n item.rank = item.rank || index;\n }\n return item;\n}\n\n/**\n * Is current form item is a field item.\n * @param item form item.\n * @returns is current form item is a field.\n */\nexport function isFormFieldItem(item: any): item is DynamicFormFieldItem {\n return !!(item as DynamicFormFieldItem).type;\n}\n\n/**\n * Is current form item is a group item.\n * @param item form item.\n * @returns is current form item is a group.\n */\n/** @hidden */\nexport function isFormGroupItem(item: any): item is DynamicFormFieldGroup {\n return !!(item as DynamicFormFieldGroup).items;\n}\n\n/** @hidden */\nexport function getParentItem(path: string[], rootItems: Map<string, DynamicFormItemMap>): DynamicFormItemMap | null {\n return path.reduce((acc: DynamicFormItemMap | null, chunk) => {\n const parent = acc === null ? rootItems : acc.items;\n return parent.get(chunk) || null;\n }, null);\n}\n","import { DestroyRef, Inject, Injectable, Optional, SkipSelf, Type, inject } from '@angular/core';\nimport { AsyncValidatorFn, FormBuilder, Validators } from '@angular/forms';\nimport { isFunction, selectStrategy } from '@fundamental-ngx/cdk/utils';\nimport { cloneDeep, merge } from 'lodash-es';\n\nimport { debounceTime } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SelectItem } from '@fundamental-ngx/platform/shared';\nimport { BaseDynamicFormGeneratorControl } from './base-dynamic-form-generator-control';\nimport { DEFAULT_VALIDATION_ERRORS } from './config/default-validation-errors';\nimport { DynamicFormControl, DynamicFormControlGroup, DynamicFormGroupControl } from './dynamic-form-control';\nimport { FormGeneratorComponentsAccessorService } from './form-generator-components-accessor.service';\nimport { isFormFieldItem } from './helpers';\nimport { DynamicFormGroup } from './interfaces/dynamic-form-group';\nimport {\n DynamicFormFieldItem,\n DynamicFormItem,\n DynamicFormItemChoiceTypes,\n DynamicFormItemMap,\n DynamicFormValue,\n PreparedDynamicFormFieldItem\n} from './interfaces/dynamic-form-item';\nimport { FormComponentDefinition } from './interfaces/form-component-definition';\nimport { FormGeneratorConfig } from './interfaces/form-generator-module-config';\nimport { FORM_GENERATOR_CONFIG, FORM_GENERATOR_ITEM_CONFIG, defaultFormGeneratorConfig } from './providers/providers';\n\n/**\n * @description Form generator service\n */\n@Injectable()\nexport class FormGeneratorService {\n /**\n * Map of generated forms to access later.\n */\n readonly forms: Map<string, DynamicFormGroup> = new Map<string, DynamicFormGroup>();\n\n /**\n * Predefined validation error messages.\n */\n validationErrorHints = DEFAULT_VALIDATION_ERRORS;\n\n /** @hidden */\n private readonly _config: FormGeneratorConfig = defaultFormGeneratorConfig;\n\n /**\n * @hidden\n * An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing)\n */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(\n private _fb: FormBuilder,\n private _componentsAccessor: FormGeneratorComponentsAccessorService,\n @Optional()\n @SkipSelf()\n @Inject(FORM_GENERATOR_ITEM_CONFIG)\n private _defaultItemConfig: Partial<DynamicFormFieldItem>,\n @Optional()\n @SkipSelf()\n @Inject(FORM_GENERATOR_CONFIG)\n private _providedConfig: Partial<FormGeneratorConfig>\n ) {\n this._config = merge(cloneDeep(this._config), cloneDeep(this._providedConfig));\n }\n\n /**\n * @description Generates `FormGroup` class with the list of `DynamicFormControl` control classes\n * defined in `formItems` argument.\n * @param formName Form name.\n * @param formItems the list of form items which used for form control generation.\n * @returns `FormGroup` class with the list of `DynamicFormControl` control classes.\n */\n async generateForm(formName: string, formItems: Map<string, DynamicFormItemMap>): Promise<DynamicFormGroup> {\n const existingForm = this.forms.get(formName);\n const form = this._fb.group({}) as DynamicFormGroup;\n\n const defaultFormGroup = new DynamicFormControlGroup(\n {\n name: this._config.ungroupedControlsName\n },\n {}\n );\n\n defaultFormGroup.formItem.items = new Map();\n\n formItems = this._transformFormItems(formItems);\n\n formItems.forEach((formItem) => {\n if (!isFormFieldItem(formItem)) {\n if (!formItem.items || formItem.items.size === 0) {\n return;\n }\n\n const group = new DynamicFormControlGroup(formItem, {});\n\n formItem.items.forEach((groupFormItem) => {\n const groupFormControl = this._generateDynamicFormItem(\n groupFormItem as PreparedDynamicFormFieldItem,\n form\n );\n\n if (!groupFormControl) {\n return;\n }\n\n group.addControl(groupFormItem.name, groupFormControl);\n\n groupFormControl.updateValueAndValidity({ emitEvent: false });\n });\n\n form.addControl(formItem.name, group);\n return;\n }\n\n const formControl = this._generateDynamicFormItem(formItem as PreparedDynamicFormFieldItem, form);\n\n if (!formControl) {\n return;\n }\n\n defaultFormGroup.addControl(formItem.name, formControl);\n\n defaultFormGroup.formItem.items?.set(formItem.name, formItem);\n\n formControl.updateValueAndValidity({ emitEvent: false });\n });\n\n const formControlNames = Object.keys(defaultFormGroup.controls);\n\n form.addControl(this._config.ungroupedControlsName, defaultFormGroup);\n\n // After we created initial form, we need to get dynamic labels, choices and value\n for (const key of formControlNames) {\n const formItem = formItems.get(key);\n\n if (!isFormFieldItem(formItem)) {\n continue;\n }\n\n const [[message, placeholder, defaultValue], choices] = await Promise.all([\n this._getFormItemProperties<[string, string, any]>(formItem, defaultFormGroup, [\n 'message',\n 'placeholder',\n 'default'\n ]),\n this._getFormItemChoices(formItem, defaultFormGroup)\n ]);\n\n formItem.message = message;\n formItem.placeholder = placeholder;\n formItem.default = defaultValue;\n formItem.choices = choices;\n\n // Update form value since it might be changed\n defaultFormGroup.controls[formItem.name].setValue(formItem.default);\n\n defaultFormGroup.controls[key].formItem = formItem as PreparedDynamicFormFieldItem;\n }\n\n Object.keys(form.controls).forEach((controlName) => {\n const newControl = form.get(controlName) as DynamicFormControlGroup;\n const oldControl = existingForm?.get(controlName) as DynamicFormControlGroup;\n this._cloneOldFormGroup(newControl, oldControl);\n });\n\n this.forms.set(formName, form);\n\n return form;\n }\n\n /**\n * Adds new control to a form.\n * @param control Control to add\n * @param form Form of the control to be added.\n * @param path Group path.\n */\n async addControl(control: DynamicFormItem, form: DynamicFormGroup, path: string[] = []): Promise<void> {\n const formGroup = this.getFormControl(form, ...path);\n\n if (formGroup instanceof DynamicFormControlGroup) {\n const formControl = this._generateDynamicFormItem(control as PreparedDynamicFormFieldItem, form);\n formGroup.addControl(control.name, formControl);\n return;\n }\n }\n\n /**\n * Removes the control with given name from the form.\n * @param controlName\n * @param path\n */\n removeControl(controlName: string, form: DynamicFormGroup, path: string[] = []): void {\n const formGroup = this.getFormControl(form, ...path);\n\n if (formGroup instanceof DynamicFormControlGroup) {\n formGroup.removeControl(controlName);\n }\n }\n\n /**\n * @description Returns form value with applied filters and transformers.\n * @param form Form generator form\n * @param renderValue Whether or not form value will be used for rendering purposes.\n * @returns form value object.\n */\n async getFormValue(\n form: DynamicFormGroup | DynamicFormControlGroup,\n renderValue = false\n ): Promise<DynamicFormValue> {\n await this._triggerFieldsOnchange(form);\n\n const formValue = cloneDeep(form.value);\n\n for (const [i, control] of Object.entries(form.controls)) {\n const formItem = control.formItem;\n\n if (!isFormFieldItem(formItem)) {\n formValue[i] = await this.getFormValue(control as DynamicFormControlGroup, renderValue);\n continue;\n }\n\n if (formItem.shouldShow === false) {\n delete formValue[i];\n continue;\n }\n\n if (formItem.transformer) {\n const obj = formItem.transformer(formValue[i], formValue, formItem);\n formValue[i] = await this._getFunctionValue(obj);\n }\n\n if (renderValue && formItem.valueRenderer) {\n const obj = formItem.valueRenderer(formValue[i], formValue, formItem);\n formValue[i] = await this._getFunctionValue(obj);\n }\n\n if (renderValue && formItem['controlType'] === 'password') {\n formValue[i] = this._formatPasswordValue(formValue[i]);\n }\n }\n\n return this._getFormValueWithoutUngrouped(formValue);\n }\n\n /**\n * @description Adds custom component to the list of available components for the form generator items.\n * @param component Angular component.\n * @param types types of the form item.\n */\n addComponent(component: Type<BaseDynamicFormGeneratorControl>, types: string[]): boolean {\n return this._componentsAccessor.addComponent(component, types);\n }\n\n /**\n * @description Returns best-matched component based on provided `type` argument\n * @param type form item type\n * @returns @see FormComponentDefinition Component definition for the form item\n */\n getComponentDefinitionByType(type: string): FormComponentDefinition | undefined {\n return this._componentsAccessor.getComponentDefinitionByType(type);\n }\n\n /**\n * @returns Object of available errors, where key is an error type,\n * and it's value is a display text.\n */\n getValidationErrorHints(key: string): string {\n return this.validationErrorHints[key];\n }\n\n /**\n * @description Adds custom error hint defined by user.\n * @param type error type from validator.\n * @param value display text.\n */\n addValidationErrorHint(type: string, value: string): void {\n this.validationErrorHints[type] = value;\n }\n\n /**\n * @description Checks if some items of the form should be hidden,\n * or visible based on `when` method result.\n * @param form\n * @returns `Set` where key is item name, and boolean value if field needs to be shown.\n */\n async checkVisibleFormItems(form: DynamicFormGroup): Promise<{ [key: string]: boolean }> {\n const formValue = this._getFormValueWithoutUngrouped(cloneDeep(form.value));\n return await this._checkFormControlsVisibility(form, formValue);\n }\n\n /**\n * Method for searching a form control inside form group. Can also search inside ungrouped form group.\n * @param form Form group.\n * @param controlNames Name of the form control.\n * @returns Found form control.\n */\n getFormControl(form: DynamicFormGroup, ...controlNames: string[]): DynamicFormGroupControl {\n controlNames = controlNames.reduce((names: string[], name) => {\n names = [...names, ...name.split(this._config.controlNameSeparator)];\n\n return names;\n }, []);\n\n let control = form?.get(controlNames);\n\n // If no control found, try to find it in ungrouped group\n if (!control) {\n control = form?.get([this._config.ungroupedControlsName, ...controlNames]);\n }\n\n return control as DynamicFormGroupControl;\n }\n\n /** Resets the form to it's initial state. */\n resetForm(form: DynamicFormGroup): void {\n for (const control of Object.values(form.controls)) {\n if (control instanceof DynamicFormControlGroup) {\n this.resetForm(control);\n return;\n }\n // Get default value\n control.setValue(control.formItem.default);\n }\n }\n\n /** @hidden */\n _getFormValueWithoutUngrouped(value: any): any {\n if (value[this._config.ungroupedControlsName]) {\n const ungroupedGroupValue: Record<string, any> = value[this._config.ungroupedControlsName];\n for (const [fieldName, fieldValue] of Object.entries(ungroupedGroupValue)) {\n value[fieldName] = fieldValue;\n }\n }\n delete value[this._config.ungroupedControlsName];\n\n return value;\n }\n\n /** @hidden */\n private _assignFormItemValidators(\n formItem: PreparedDynamicFormFieldItem,\n form: DynamicFormGroup\n ): PreparedDynamicFormFieldItem {\n let validator: AsyncValidatorFn | null = null;\n\n if (isFunction(formItem.validate)) {\n validator = async (control) => {\n const obj = formItem.validate!(control.value, this._getFormValueWithoutUngrouped(form));\n\n const result = await this._getFunctionValue(obj);\n\n const returnObj = {};\n\n returnObj[`${(<DynamicFormControl>control).formItem.name}Validator`] =\n typeof result === 'boolean' ? true : result;\n\n return result === null ? result : returnObj;\n };\n\n formItem.asyncValidators = formItem.asyncValidators || [];\n formItem.asyncValidators =\n typeof formItem.asyncValidators === 'function' ? [formItem.asyncValidators] : formItem.asyncValidators;\n\n formItem.asyncValidators.push(validator);\n }\n\n formItem.validators = formItem.validators || [Validators.nullValidator];\n\n formItem.required = formItem.required || formItem.validators.includes(Validators.required);\n\n return formItem;\n }\n\n /** @hidden */\n private _generateDynamicFormItem(\n formItem: PreparedDynamicFormFieldItem,\n form: DynamicFormGroup\n ): DynamicFormControl | undefined {\n const formItemComponentType = this.getComponentDefinitionByType(formItem.type);\n\n if (!formItemComponentType) {\n console.warn(`Form item '${formItem.name}' with type '${formItem.type}' has no defined component.\n Please use 'addComponent' method in ${FormGeneratorService.name} to define appropriate relations.`);\n\n return;\n }\n\n formItem = this._assignFormItemValidators(formItem, form);\n\n const formControl = new DynamicFormControl(formItem.default, {\n validators: formItem.validators,\n asyncValidators: formItem.asyncValidators,\n dynamicFormItem: formItem,\n updateOn: 'change'\n });\n\n if (isFunction(formItem.onchange)) {\n formControl.valueChanges\n .pipe(debounceTime(50), takeUntilDestroyed(this._destroyRef))\n .subscribe(async (value) => {\n const obj = formItem.onchange!(value, this.forms, formControl);\n\n await this._getFunctionValue(obj);\n });\n }\n\n formControl.updateValueAndValidity({ emitEvent: false });\n\n return formControl;\n }\n\n /** @hidden */\n private async _checkFormControlsVisibility(\n form: DynamicFormGroup | DynamicFormControlGroup,\n formValue: any\n ): Promise<{ [key: string]: boolean }> {\n let shouldShowFields: { [key: string]: boolean } = {};\n form = form instanceof DynamicFormControlGroup ? form : form;\n\n for (const [key, control] of Object.entries(form.controls)) {\n const formItem = control.formItem;\n\n if (!isFormFieldItem(formItem)) {\n const groupVisibleItems = await this._checkFormControlsVisibility(\n control as DynamicFormControlGroup,\n formValue\n );\n\n shouldShowFields = Object.assign(shouldShowFields, groupVisibleItems);\n continue;\n }\n\n if (!formItem.when) {\n shouldShowFields[key] = true;\n continue;\n }\n\n const obj = formItem.when(formValue, this.forms, control);\n shouldShowFields[key] = await this._getFunctionValue(obj);\n }\n\n return shouldShowFields;\n }\n\n /**\n * @hidden\n * @param formItem\n * @param form\n * @param key\n * @returns\n */\n private async _getFormItemPropertyValue<T = string>(\n formItem: DynamicFormFieldItem,\n form: DynamicFormGroup,\n key: keyof DynamicFormFieldItem\n ): Promise<T> {\n let value = formItem[key];\n\n if (typeof value === 'function') {\n const obj = value(this._getFormValueWithoutUngrouped(form));\n\n value = await this._getFunctionValue(obj);\n }\n\n return (await this._getFunctionValue(value)) as T;\n }\n\n /** @hidden */\n private async _getFormItemProperties<TTypes extends any[] = any[]>(\n formItem: DynamicFormFieldItem,\n form: DynamicFormGroup,\n keys: string[]\n ): Promise<TTypes> {\n const promises: Promise<any>[] = [];\n keys.forEach((key) => {\n promises.push(this._getFormItemPropertyValue(formItem, form, key));\n });\n return (await Promise.all(promises)) as TTypes;\n }\n\n /**\n * @hidden\n * @param formItem\n * @param form\n * @returns\n */\n private async _getFormItemChoices(formItem: DynamicFormFieldItem, form: DynamicFormGroup): Promise<SelectItem[]> {\n const defaultChoices = await this._getFormItemPropertyValue<DynamicFormItemChoiceTypes[]>(\n formItem,\n form,\n 'choices'\n );\n\n if (!defaultChoices) {\n return [];\n }\n\n return defaultChoices.map((c: string | number | SelectItem) =>\n typeof c === 'object' ? c : ({ label: c, value: c } as SelectItem)\n ) as SelectItem[];\n }\n\n /**\n * @hidden\n * @description Returns value from Promise-like, Observable-like, simple function or just some object.\n * @param obj\n * @returns\n */\n private async _getFunctionValue(obj: any): Promise<any> {\n const strategy = selectStrategy(obj);\n\n let result: any;\n\n await strategy.createSubscription(obj, (value: any) => {\n result = value;\n });\n\n if (isFunction(result)) {\n await this._getFunctionValue(result);\n }\n\n return result;\n }\n\n /** @hidden */\n private _formatPasswordValue(password: string): string {\n return '*'.repeat(password?.length);\n }\n\n /** @hidden */\n private _getMergedFormFieldItemConfig(formItem: DynamicFormItemMap): DynamicFormItemMap {\n return merge(cloneDeep(this._defaultItemConfig), formItem);\n }\n\n /** @hidden */\n private _transformFormItems(formItems: Map<string, DynamicFormItemMap>): Map<string, DynamicFormItemMap> {\n formItems.forEach((item, index) => {\n if (!isFormFieldItem(item)) {\n return;\n }\n\n formItems.set(index, this._getMergedFormFieldItemConfig(item));\n });\n\n return formItems;\n }\n\n /** @hidden */\n private async _triggerFieldsOnchange(form: DynamicFormGroup | DynamicFormControlGroup): Promise<void> {\n for (const control of Object.values(form.controls)) {\n const formItem = control.formItem;\n\n if (!isFormFieldItem(formItem)) {\n await this._triggerFieldsOnchange(control as DynamicFormControlGroup);\n continue;\n }\n\n if (formItem.onchange) {\n const obj = formItem.onchange(control.value as any, this.forms, control as DynamicFormControl);\n await this._getFunctionValue(obj);\n }\n }\n }\n\n /** @hidden */\n private _cloneOldFormGroup(newGroup: DynamicFormControlGroup, oldGroup?: DynamicFormControlGroup): void {\n Object.keys(newGroup.controls).forEach((controlName) => {\n const control = newGroup.get(controlName);\n const oldControl = oldGroup?.get(controlName) as DynamicFormControlGroup;\n if (!oldControl) {\n return;\n }\n if (control instanceof DynamicFormControlGroup) {\n this._cloneOldFormGroup(control, oldControl);\n return;\n }\n\n control?.setValue(oldControl.value, { emitEvent: false });\n\n if (oldControl.touched) {\n control?.markAsTouched();\n }\n });\n }\n}\n","import { Directive, Inject, Injector, Input, OnInit, Optional, ViewContainerRef } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport {\n CONTENT_DENSITY_DIRECTIVE,\n ContentDensityGlobalKeyword,\n ContentDensityMode\n} from '@fundamental-ngx/core/content-density';\nimport { PlatformFormField, PlatformFormFieldControl } from '@fundamental-ngx/platform/shared';\nimport { Observable, of } from 'rxjs';\nimport { BaseDynamicFormGeneratorControl } from './base-dynamic-form-generator-control';\nimport { FormGeneratorService } from './form-generator.service';\nimport { PreparedDynamicFormFieldItem } from './interfaces/dynamic-form-item';\n\n/**\n * Dynamic form control directive represents a renderer of the dynamic components\n * based on the information provided in `formItem` input\n */\n@Directive({\n selector: '[fdpDynamicFormControl]',\n standalone: true\n})\nexport class DynamicFormControlDirective implements OnInit {\n /**\n * @description @see DynamicFormItem\n */\n @Input() formItem: PreparedDynamicFormFieldItem;\n\n /**\n * @description Represents form control id.\n */\n @Input()\n id: string;\n\n /**\n * @description Represents form control name.\n */\n @Input() name: string;\n\n /**\n * @description Reference to the @see FormGroup class.\n */\n @Input() form: FormGroup;\n\n /** Form group name path */\n @Input() formGroupNamePath: string;\n\n /**\n * @description Reference to the @see FormFieldComponent\n */\n @Input() formField: PlatformFormField;\n\n /**\n * Control field instance.\n */\n formFieldControl: PlatformFormFieldControl;\n\n /** @hidden */\n constructor(\n private readonly _formGeneratorService: FormGeneratorService,\n private readonly _vcRef: ViewContainerRef,\n private readonly _injector: Injector,\n @Optional() @Inject(CONTENT_DENSITY_DIRECTIVE) private contentDensityDirective: Observable<ContentDensityMode>\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n const foundComponent = this._formGeneratorService.getComponentDefinitionByType(this.formItem.type);\n\n if (!foundComponent) {\n return;\n }\n\n this._vcRef.clear();\n\n const componentRef = this._vcRef.createComponent<BaseDynamicFormGeneratorControl>(foundComponent.component, {\n injector: Injector.create({\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useFactory: () => {\n if (this.formItem?.guiOptions?.contentDensity) {\n return of(this.formItem.guiOptions.contentDensity);\n }\n if (this.contentDensityDirective) {\n return this.contentDensityDirective;\n }\n return of(ContentDensityGlobalKeyword);\n }\n }\n ],\n parent: this._injector\n })\n });\n\n componentRef.instance.formItem = this.formItem;\n componentRef.instance.id = this.id; // This is also done from fdp-form-field\n componentRef.instance.name = this.name;\n componentRef.instance.form = this.form;\n componentRef.instance.formField = this.formField;\n componentRef.instance.formGroupName = this.formGroupNamePath;\n\n this.formFieldControl = componentRef.instance as unknown as PlatformFormFieldControl;\n }\n}\n","import { Directive, Inject, Input, Optional, TemplateRef } from '@angular/core';\nimport { FormError, FormErrorDescription, FormFieldErrorContext } from '@fundamental-ngx/platform/shared';\nimport { FDP_FORM_ERROR_DIRECTIVE } from './tokens';\n\n@Directive({\n selector: '[fdpFormFieldErrorDescription]',\n standalone: true\n})\nexport class FormFieldErrorDescriptionDirective<T = any> implements FormErrorDescription {\n /** Used to connect data with model for typings support. */\n @Input()\n fdpFormFieldErrorDescriptionAs: T;\n\n /** @hidden */\n constructor(\n public templateRef: TemplateRef<FormFieldErrorContext<T>>,\n @Optional() @Inject(FDP_FORM_ERROR_DIRECTIVE) private _formFieldErrorDirective: FormError\n ) {\n this._formFieldErrorDirective?.registerDescription(this);\n }\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: FormFieldErrorDescriptionDirective,\n ctx: FormFieldErrorContext<any>\n ): ctx is FormFieldErrorContext<any> {\n return true;\n }\n}\n","import { Directive, Inject, Input, Optional, TemplateRef } from '@angular/core';\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport { FormError, FormErrorHeading, FormFieldErrorContext } from '@fundamental-ngx/platform/shared';\nimport { FDP_FORM_ERROR_DIRECTIVE } from './tokens';\n\n@Directive({\n selector: '[fdpFormFieldErrorHeading]',\n standalone: true\n})\nexport class FormFieldErrorHeadingDirective<T = any> implements FormErrorHeading {\n /** Used to connect data with model for typings support. */\n @Input()\n fdpFormFieldErrorHeadingAs: T;\n\n /** Error type. */\n @Input()\n fdpFormFieldErrorHeadingType: FormStates | undefined;\n\n /** @hidden */\n constructor(\n public templateRef: TemplateRef<FormFieldErrorContext<T>>,\n @Optional() @Inject(FDP_FORM_ERROR_DIRECTIVE) private _formFieldErrorDirective: FormError\n ) {\n this._formFieldErrorDirective?.registerHeading(this);\n }\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: FormFieldErrorHeadingDirective,\n ctx: FormFieldErrorContext<any>\n ): ctx is FormFieldErrorContext<any> {\n return true;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n forwardRef,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Provider,\n QueryList,\n ViewEncapsulation\n} from '@angular/core';\nimport { FD_FORM_FIELD } from '@fundamental-ngx/cdk/forms';\n\nimport {\n ColumnLayout,\n FormFieldGroup,\n FormGroupContainer,\n HintOptions,\n PlatformFormField\n} from '@fundamental-ngx/platform/shared';\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../constants';\n\nconst formFieldGroupProvider: Provider = {\n provide: FormFieldGroup,\n useExisting: forwardRef(() => FormFieldGroupComponent)\n};\n\nconst formGroupChildProvider: Provider = {\n provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n useExisting: forwardRef(() => FormFieldGroupComponent)\n};\n\n@Component({\n selector: 'fdp-form-field-group',\n template: ` <ng-content></ng-content>`,\n styleUrl: './form-field-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [formFieldGroupProvider, formGroupChildProvider],\n standalone: true\n})\nexport class FormFieldGroupComponent implements FormFieldGroup, OnInit, OnDestroy {\n /**\n * Group header title\n */\n @Input()\n label: string;\n\n /** Group's form name */\n @Input()\n formName: string;\n\n /**\n * Form Group Container to bind the Form-Field-Group to.\n * This will override default value injected by constructor\n */\n @Input()\n formGroupContainer: FormGroupContainer | null = inject(FormGroupContainer, { optional: true });\n\n /**\n * Defines label's column layout.\n */\n @Input()\n set labelColumnLayout(value: ColumnLayout | undefined) {\n if (value) {\n this._labelColumnLayout = value;\n }\n }\n get labelColumnLayout(): ColumnLayout {\n return this._labelColumnLayout;\n }\n /**\n * Defines field's column layout.\n */\n @Input()\n set fieldColumnLayout(value: ColumnLayout | undefined) {\n if (value) {\n this._fieldColumnLayout = value;\n }\n }\n\n get fieldColumnLayout(): ColumnLayout {\n return this._fieldColumnLayout;\n }\n /**\n * Defines gap column layout.\n */\n @Input()\n set gapColumnLayout(value: ColumnLayout | undefined) {\n if (value) {\n this._gapColumnLayout = value;\n }\n }\n get gapColumnLayout(): ColumnLayout {\n return this._gapColumnLayout;\n }\n /**\n * Describes hint options for group header\n */\n @Input()\n hintOptions?: HintOptions;\n /**\n * Get form fields wrapped into form field group\n */\n @ContentChildren(FD_FORM_FIELD, { descendants: true })\n fields: QueryList<PlatformFormField>;\n\n /** @hidden */\n private _labelColumnLayout: ColumnLayout;\n\n /** @hidden */\n private _fieldColumnLayout: ColumnLayout;\n\n /** @hidden */\n private _gapColumnLayout: ColumnLayout;\n\n /** @hidden */\n ngOnInit(): void {\n this._addToFormGroup();\n this._setDefaultLayout();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._removeFromFormGroup();\n }\n\n /** @hidden */\n private _setDefaultLayout(): void {\n // If layout already defined, no need to set default one.\n if (this.labelColumnLayout) {\n return;\n }\n\n this.labelColumnLayout = this.formGroupContainer?.labelColumnLayout;\n this.fieldColumnLayout = this.formGroupContainer?.fieldColumnLayout;\n this.gapColumnLayout = this.formGroupContainer?.gapColumnLayout;\n }\n\n /** @hidden */\n private _addToFormGroup(): void {\n if (!this.formGroupContainer) {\n return;\n }\n this.formGroupContainer.addFormFieldGroup(this);\n }\n\n /** @hidden */\n private _removeFromFormGroup(): void {\n if (!this.formGroupContainer) {\n return;\n }\n this.formGroupContainer.removeFormFieldGroup(this);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { InlineHelpDirective } from '@fundamental-ngx/core/inline-help';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport { HintOptions } from '@fundamental-ngx/platform/shared';\nimport { FieldGroup } from '../../models/field.model';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-form-group-header]',\n templateUrl: './form-group-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class.fd-form-group__header]': 'true'\n },\n imports: [NgTemplateOutlet, LinkComponent, IconComponent, InlineHelpDirective]\n})\nexport class FormGroupHeaderComponent {\n /** Fields Group */\n @Input()\n fieldGroup: Nullable<FieldGroup>;\n\n /** Hint options */\n get hintOptions(): HintOptions | undefined {\n if (this.fieldGroup?.hintOptions) {\n return this.fieldGroup.hintOptions;\n }\n\n return;\n }\n}\n","@if (fieldGroup && hintOptions?.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<h6 class=\"fd-form-group__header-text\">\n {{ fieldGroup?.label }}\n</h6>\n@if (fieldGroup && hintOptions?.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<ng-template #inlineHelpRef>\n @if (hintOptions) {\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [style.vertical-align]=\"'middle'\"\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n }\n</ng-template>\n","import { TemplateRef } from '@angular/core';\nimport { HintOptions } from '@fundamental-ngx/platform/shared';\n\nexport interface FieldColumn {\n [key: number]: Array<Field>;\n}\n\nexport class Field {\n /** @hidden */\n constructor(\n public name?: string,\n public rank?: number,\n public renderer?: TemplateRef<any>,\n public column?: number\n ) {}\n}\n\nexport class FieldGroup {\n /** @hidden */\n constructor(\n public label: string,\n public fields: FieldColumn,\n public hintOptions?: HintOptions\n ) {}\n}\n","import { KeyValue } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { FieldColumn, FieldGroup } from '../../models/field.model';\n\n@Pipe({\n name: 'fieldGroupRowValue',\n standalone: true\n})\nexport class FieldGroupRowValuePipe implements PipeTransform {\n /** @hidden */\n transform(row: KeyValue<any, FieldColumn | FieldGroup>): FieldColumn {\n return row.value instanceof FieldGroup ? row.value.fields : row.value;\n }\n}\n","/**\n * @license\n * F. Kolar\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n *\n */\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Provider,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n forwardRef,\n inject\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, FormGroup, FormsModule, NgForm } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormField } from '@fundamental-ngx/cdk/forms';\nimport { Nullable, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { InlineHelpDirective } from '@fundamental-ngx/core/inline-help';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport {\n ColumnLayout,\n FieldHintOptions,\n FormFieldGroup,\n FormGroupContainer,\n HintInput,\n HintOptions,\n PlatformFormField\n} from '@fundamental-ngx/platform/shared';\nimport { getField, getFormField, isFieldChild, isFieldGroupChild, isFieldGroupWrapperChild } from '../form-helpers';\nimport { Field, FieldColumn, FieldGroup } from '../models/field.model';\nimport {\n DefaultGapLayout,\n DefaultHorizontalFieldLayout,\n DefaultHorizontalLabelLayout,\n DefaultVerticalFieldLayout,\n FORM_GROUP_CHILD_FIELD_TOKEN\n} from './constants';\nimport { FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT } from './fdp-form.tokens';\nimport { FormFieldErrorDirective } from './form-field-error/form-field-error.directive';\nimport { FormFieldComponent } from './form-field/form-field.component';\nimport { FormGroupHeaderComponent } from './form-group-header/form-group-header.component';\nimport { generateColumnClass, normalizeColumnLayout } from './helpers';\nimport { FieldGroupRowValuePipe } from './pipes/field-group-row-value.pipe';\nimport { FormFieldLayoutService } from './services/form-field-layout.service';\n\nexport const formGroupProvider: Provider = {\n provide: FormGroupContainer,\n useExisting: forwardRef(() => FormGroupComponent)\n};\n\ntype FormGroupField = (FormField | FormFieldGroup) & { hintOptions?: HintOptions };\n\nlet formGroupUniqueId = 0;\n\n/**\n *\n * FormGroup represent high order container aggregating FormFields and ability to distribute these\n * fields into columns. It mainly hides implementation details that we need to deal with every\n * time we are building a form. We have input fields , error managements, different states,\n * hints and many more.\n *\n * Well behaved form that has information side by side in multiple\n * columns needs to also know how to merge properly.\n *\n * Just to get the idea about the structure without actual input components inside\n *\n * ```html\n * <fdp-form-group [hintPlacement]=\"'inline'\" columnLayout=\"XL2-L2-M1-S1\">\n * <fdp-form-field [id]=\"'Field A'\" [rank]=\"10\" column=\"1\">\n * </fdp-form-field>\n *\n * <fdp-form-field [id]=\"'Field B'\" [rank]=\"30\" column=\"1\">\n * </fdp-form-field>\n *\n * <fdp-form-field [id]=\"'Field C'\" [rank]=\"20\" column=\"1\">\n * </fdp-form-field>\n *\n * <fdp-form-field [id]=\"Field D\" [rank]=\"20\" column=\"2\">\n * </fdp-form-field>\n *\n *\n * <fdp-form-field [id]=\"'Field E'\" [rank]=\"30\" column=\"2\">\n * </fdp-form-field>\n * </fdp-form-group>\n\n *\n * ````\n *\n *\n * Which can be translated like this\n * [Field A] - First column, rank 10\n * [Field B] - First column, rank 30\n * [Field C] - First column, rank 20\n * [Field D] - Second column, rank 20\n * [Field E] - Second column, rank 30\n *\n * What we expect that it creates following form with two column layout:\n * [Field A] [Field D]\n * [Field C] [Field E]\n * [Field B]\n *\n * You can see all is sorted accordingly by rank (C goes before B).\n *\n * When you move into smaller device and all is merged into one columns the naive solution would be:\n *\n * [Field A]\n * [Field C]\n * [Field B]\n * [Field D]\n * [Field E]\n *\n * The fields needs to restructure according to their original positioning. When Field D was on the\n * top why we should move it to the bottom? The more correct solution should be following.\n *\n * [Field A]\n * [Field D]\n * [Field C]\n * [Field E]\n * [Field B]\n *\n * Fields nicely merge together. they don't wrap.\n *\n *\n * Besides this layout support it also wraps form functionality and it can work with FormGroup.\n * You can also decide if you want your form with <form> element or without it.\n *\n *\n */\n@Component({\n selector: 'fdp-form-group',\n templateUrl: 'form-group.component.html',\n styleUrl: './form-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [formGroupProvider, FormFieldLayoutService, contentDensityObserverProviders()],\n imports: [\n FormsModule,\n NgTemplateOutlet,\n FormGroupHeaderComponent,\n LinkComponent,\n IconComponent,\n InlineHelpDirective,\n KeyValuePipe,\n FieldGroupRowValuePipe,\n ContentDensityModule\n ]\n})\nexport class FormGroupComponent\n implements FormGroupContainer, OnInit, AfterContentInit, AfterViewInit, OnDestroy, OnChanges\n{\n /** Id for the form group element */\n @Input()\n id = `fdp-form-group-${formGroupUniqueId++}`;\n\n /** Name property to be set on a form. Will be used if `useForm` is set to true */\n @Input()\n name: string;\n\n /** Indicates if group is editable */\n @Input()\n editable = true;\n\n /** Indicates when labels should not be displayed */\n @Input()\n noLabelLayout = false;\n\n /** User's custom classes */\n @Input()\n class: string;\n\n /**\n * Form group hint options\n */\n @Input()\n hint: HintInput;\n\n /**\n * Defines column layout for inline items.\n */\n @Input()\n set inlineColumnLayout(value: ColumnLayout) {\n this._inlineColumnLayout = normalizeColumnLayout(value);\n this._updateInlineColumnLayout();\n }\n\n get inlineColumnLayout(): ColumnLayout {\n return this._inlineColumnLayout;\n }\n\n /**\n * Defines label's column layout.\n */\n @Input()\n labelColumnLayout: ColumnLayout = DefaultHorizontalLabelLayout;\n\n /**\n * Defines field's column layout.\n */\n @Input()\n fieldColumnLayout: ColumnLayout = DefaultHorizontalFieldLayout;\n\n /**\n * Defines gap column layout.\n */\n @Input()\n gapColumnLayout: ColumnLayout = DefaultGapLayout;\n\n /** Angular FormGroup where all underlying controls will be attached to. */\n @Input()\n formGroup: FormGroup;\n\n /** This is rather simple for now just to have some Section Title if needed */\n @Input()\n topTitle: string;\n\n /** Form's main title. */\n @Input()\n mainTitle: Nullable<string>;\n\n /** Whether to hide form's main title. Default is false. */\n @Input()\n hideMainTItle = false;\n\n /**\n * Convenient way to initialize internal FormControls from object\n */\n @Input()\n object: any;\n\n /**\n * Translations template reference.\n *\n * This is just here to support several ways to pass translation.\n *\n * One way is to provide ng-template #i18n inside the form-group tag and the other one\n * some global one as binding\n */\n @Input()\n i18Strings: TemplateRef<any>;\n\n /** Whether to wrap all the provided content in a `<form>` */\n @Input({ transform: booleanAttribute })\n useForm = false;\n\n /**\n * Specify the column layout in the format `XLn-Ln-Mn-Sn` where n is the number of columns and can be different for each size.\n * eg: XL2-L2-M2-S1 would create 2-column layouts for XL, L, and M sizes and single-column layout for S size.\n */\n @Input()\n columnLayout: Nullable<string>;\n\n /** Whether all form items should have identical layout provided for form group */\n @Input()\n unifiedLayout = true;\n\n /**\n * onSubmit event\n */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onSubmit: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * Native form element. Available with `[useForm]=\"true\"` input property.\n */\n @ViewChild('nativeForm', { read: NgForm })\n nativeForm: NgForm;\n\n /** @hidden */\n @ContentChild('i18n', { static: true })\n i18Template: TemplateRef<any>;\n\n /**\n * @hidden\n *\n * Keep track of added form fields children in correct order.\n *\n * Since \"descendants: true\" includes fields of nested form group as well.\n *\n * We are forced to use \"ContentChildren\" so FormField children can be used\n * with optional rendering (ngIf) safely.\n *\n * Form fields within the formGroup is driven by multi-zone layout support. We need to be\n * able to add number of FormFields, and based on given configuration (zone, rank) render them\n * under correct zone (top, bottom, left, right).\n *\n * We want to make sure that we don't include content and then try to somehow position it as it\n * would lead to the UI where user can see elementing moving as you try to position it.\n *\n */\n @ContentChildren(FORM_GROUP_CHILD_FIELD_TOKEN as any, { descendants: true })\n protected formGroupChildren: QueryList<FormGroupField>;\n\n /** @hidden */\n @ContentChildren(FormFieldErrorDirective)\n private _errorDirectives: QueryList<FormFieldErrorDirective>;\n\n /** @hidden */\n xlColumnsNumber: number;\n /** @hidden */\n lgColumnsNumber: number;\n /** @hidden */\n mdColumnsNumber: number;\n\n /**\n * @hidden\n * User responsive layout\n */\n xlCol: string;\n\n /**\n * @hidden\n * Packed fields which should be rendered\n */\n formRows: { [key: number]: FieldColumn | FieldGroup } = {};\n\n /** @hidden */\n _hintOptions: Nullable<HintOptions>;\n\n /** @hidden */\n readonly contentDensityObserver = inject(ContentDensityObserver);\n\n /** @hidden */\n _inlineColumnLayoutClass: string;\n\n /** @hidden */\n protected _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _inlineColumnLayout = DefaultVerticalFieldLayout;\n\n /**\n * @hidden\n *\n * List of direct FdpFormGroup's children.\n *\n * Since \"formGroupChildren\" uses \"{ descendants: true }\" option that means\n * \"formGroupChildren\" will keep track of nested FdpFormGroup fields as well.\n * This list relies on the injection mechanism so nested FdpFormGroup's fields/fieldGroups\n * will be omitted\n */\n private _formGroupDirectChildren: Array<FormGroupField> = [];\n\n /** @hidden */\n private readonly _subscriptions = new Subscription();\n\n /** @hidden */\n private readonly _cd = inject(ChangeDetectorRef);\n /** @hidden */\n private readonly _elementRef = inject(ElementRef);\n /** @hidden */\n private readonly _formContainer = inject(ControlContainer, { optional: true });\n /** @hidden */\n private readonly _defaultHintOptions = inject<FieldHintOptions>(FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT);\n\n /** @hidden */\n constructor() {\n this.formGroup = <FormGroup>(this._formContainer ? this._formContainer.control : new FormGroup({}));\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n this.buildComponentCssClass();\n if (changes.hint) {\n if (typeof this.hint === 'string' || this.hint instanceof TemplateRef) {\n this._hintOptions = {\n ...this._defaultHintOptions,\n content: this.hint\n };\n } else {\n this._hintOptions = {\n ...this._defaultHintOptions,\n ...this.hint\n };\n }\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (!this.formGroup) {\n this.formGroup = new FormGroup({});\n }\n this.buildComponentCssClass();\n this._updateInlineColumnLayout();\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this.i18Strings = this.i18Strings ? this.i18Strings : this.i18Template;\n\n this._setUserLayout();\n this._updateFieldByColumn();\n this._updateFormFieldsProperties();\n this._listenToFormGroupChildren();\n this._listenFormFieldColumnChange();\n this._cd.markForCheck();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this.i18Strings = this.i18Strings ? this.i18Strings : this.i18Template;\n\n this._setUserLayout();\n this._updateFieldByColumn();\n this._updateFormFieldsProperties();\n this._listenToFormGroupChildren();\n this._listenFormFieldColumnChange();\n this._trackFormGroupResize();\n this._cd.markForCheck();\n\n this._cd.detectChanges();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n addFormField(formField: PlatformFormField): void {\n // It's needed to set default FormField properties\n // on early stage otherwise validation errors\n // will be thrown on FormField level (e.g. i18string are not defined)\n this._updateFormFieldProperties(formField);\n // keep track of directly registered children\n this._addDirectFormGroupChild(formField);\n }\n\n /** @hidden */\n removeFormField(formField: PlatformFormField): void {\n this._removeDirectFormGroupChild(formField);\n }\n\n /** @hidden */\n addFormFieldGroup(formFieldGroup: FormFieldGroup): void {\n this._addDirectFormGroupChild(formFieldGroup);\n }\n\n /** @hidden */\n removeFormFieldGroup(formFieldGroup: FormFieldGroup): void {\n this._removeDirectFormGroupChild(formFieldGroup);\n }\n\n /** @hidden */\n addFormControl(name: string, control: AbstractControl): void {\n this.formGroup.setControl(name, control);\n // letting control to set value. when provided value is 'false'.\n if (this.object) {\n control.patchValue(this.object[name]);\n }\n }\n\n /** @hidden */\n removeFormControl(name: string): void {\n this.formGroup.removeControl(name);\n }\n\n /** @hidden */\n trackByFn(index: number): number {\n return index;\n }\n\n /** @hidden */\n trackByFieldName(index: number, field: Field): string | undefined {\n return field ? field.name : undefined;\n }\n\n /** @hidden */\n buildComponentCssClass(): string[] {\n return ['fd-container', this.class];\n }\n\n /** @hidden used for template side Type correction */\n $fieldGroup = (f: any): FieldGroup => f;\n\n /** @hidden */\n private _listenToFormGroupChildren(): void {\n this.formGroupChildren.changes.subscribe(() => {\n this._updateFieldByColumn();\n this._cd.markForCheck();\n });\n }\n\n /** @hidden */\n private _listenFormFieldColumnChange(): void {\n this.formGroupChildren.forEach((field: FormGroupField) =>\n (<FormFieldComponent>field).onColumnChange?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._updateFieldByColumn();\n this._cd.markForCheck();\n })\n );\n }\n\n /**\n * @hidden\n * Assign a fields or field group to specified columns with rank.\n * if `columnLayoutType` is given a fields without column property will set on last column.\n * Otherwise the fields set 1 column.\n */\n private _updateFieldByColumn(): void {\n const formChildren = this._getFormGroupChildren();\n const rows: { [key: number]: FieldColumn | FieldGroup } = {};\n let rowNumber = 0;\n let columns: FieldColumn = {};\n\n for (const child of formChildren) {\n if (isFieldChild(child)) {\n const field = getField(child);\n const columnNumber = this._validateFieldColumn(child.column);\n\n if (!columns[columnNumber]) {\n columns[columnNumber] = [];\n }\n columns[columnNumber].push(field);\n }\n\n if (isFieldGroupChild(child)) {\n const fieldGroupColumns: FieldColumn = {};\n if (Object.keys(columns).length) {\n rows[rowNumber] = columns;\n columns = {};\n rowNumber++;\n }\n\n const groupFields = child.fields.map((field) => getField(field));\n groupFields.forEach((groupField) => {\n const columnNumber = this._validateFieldColumn(groupField.column);\n\n if (!fieldGroupColumns[columnNumber]) {\n fieldGroupColumns[columnNumber] = [];\n }\n fieldGroupColumns[columnNumber].push(groupField);\n });\n\n rows[rowNumber] = new FieldGroup(child.label, fieldGroupColumns, child.hintOptions);\n rowNumber++;\n }\n }\n rows[rowNumber] = columns;\n this.formRows = rows;\n }\n\n /** @hidden Validate column number */\n private _validateFieldColumn(columnNumber: number | undefined): number {\n if (this.columnLayout && columnNumber) {\n if (isNaN(columnNumber)) {\n throw new Error('Input a valid column number');\n }\n\n if (columnNumber > this.xlColumnsNumber) {\n throw new Error(`Columns cannot be more than ${this.xlColumnsNumber}`);\n }\n\n return columnNumber;\n }\n\n return this.xlColumnsNumber;\n }\n\n /** @hidden */\n private _updateFormFieldsProperties(): void {\n this._getFormGroupChildren().forEach((formField: FormGroupField) => {\n if (isFieldChild(formField)) {\n this._updateFormFieldProperties(formField);\n }\n\n if (isFieldGroupChild(formField)) {\n formField.fields.forEach((field) => this._updateFormFieldProperties(getFormField(field)));\n }\n });\n }\n\n /**\n * @hidden\n * Pass some global properties to each field. Even formGroup cna be inject directly inside form\n * field we are using here a setter method to initialize the\n *\n */\n private _updateFormFieldProperties(formField: PlatformFormField): void {\n if (this.unifiedLayout) {\n formField.editable = this.editable;\n formField.noLabelLayout = this.noLabelLayout;\n }\n formField.setDefaultColumnLayout();\n formField.i18Strings = formField.i18Strings ? formField.i18Strings : this.i18Strings;\n formField.setErrorDirectives(this._errorDirectives);\n }\n\n /**\n * @hidden\n * if `columnLayoutType` is given, set those column layouts appropriately. Otherwise, a layout will set on 1 column\n */\n private _setUserLayout(): void {\n if (this.columnLayout) {\n this._getColumnNumbers(this.columnLayout);\n if (isNaN(this.xlColumnsNumber) || isNaN(this.lgColumnsNumber) || isNaN(this.mdColumnsNumber)) {\n throw new Error('Input a valid number for columns');\n }\n if (this.xlColumnsNumber > 12 || this.lgColumnsNumber > 12 || this.mdColumnsNumber > 12) {\n throw new Error('Columns cannot be more than 12');\n }\n const lgColumns = 12 / this.lgColumnsNumber;\n const mdColumns = 12 / this.mdColumnsNumber;\n const xlColumns = 12 / this.xlColumnsNumber;\n\n // for `lg` single-column layout, Styles does not use any class, and providing `fd-col-lg--12` has unintended side-effects\n // therefore, we remove the lg class for single-column layout\n if (lgColumns === 12) {\n this.xlCol = `fd-col-xl--${xlColumns} fd-col-md--${mdColumns}`;\n } else {\n this.xlCol = `fd-col-xl--${xlColumns} fd-col-md--${mdColumns} fd-col-lg--${lgColumns}`;\n }\n } else {\n this.xlCol = `fd-col-xl--12 fd-col-md--12 fd-col-lg--12`;\n }\n }\n\n /** @hidden */\n private _getColumnNumbers(layout: string): void {\n const [xl, lg, md] = layout.split('-');\n this.xlColumnsNumber = parseInt(xl.slice(2, xl.length), 10);\n this.lgColumnsNumber = parseInt(lg.slice(1, lg.length), 10);\n this.mdColumnsNumber = parseInt(md.slice(1, md.length), 10);\n }\n\n /** @hidden */\n private _addDirectFormGroupChild(child: FormGroupField): void {\n if (this._formGroupDirectChildren.indexOf(child) > -1) {\n return;\n }\n this._formGroupDirectChildren.push(child);\n }\n\n /** @hidden */\n private _removeDirectFormGroupChild(child: PlatformFormField | FormFieldGroup): void {\n this._formGroupDirectChildren = this._formGroupDirectChildren.filter((_child) => _child !== child);\n }\n\n /**\n * @hidden\n * Get direct form group children in the original order\n */\n private _getFormGroupChildren(): FormGroupField[] {\n if (!this.formGroupChildren) {\n return [];\n }\n const children = this.formGroupChildren\n .toArray()\n .map((child) => (isFieldGroupWrapperChild(child) ? child.fieldRenderer : child));\n\n return children.filter((child) => this._formGroupDirectChildren.includes(child));\n }\n\n /** @hidden */\n private _updateInlineColumnLayout(): void {\n this._inlineColumnLayoutClass = generateColumnClass(this.inlineColumnLayout);\n }\n\n /**\n * @hidden\n * have to trigger change detection here in order to re-check contents\n * inside \"FormField.renderer\" template every time component's dimensions changed\n */\n private _trackFormGroupResize(): void {\n this._subscriptions.add(\n resizeObservable(this._elementRef.nativeElement)\n .pipe(debounceTime(20))\n .subscribe(() => this._cd.markForCheck())\n );\n }\n}\n","@if (useForm) {\n <form #nativeForm (ngSubmit)=\"onSubmit.emit($event)\" [id]=\"id\" [name]=\"name\">\n <ng-template [ngTemplateOutlet]=\"body\"></ng-template>\n </form>\n} @else {\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n}\n<ng-template #body>\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n</ng-template>\n<ng-template #fields>\n @if (mainTitle && !hideMainTItle) {\n <div class=\"fd-form-header\">\n <ng-template [ngTemplateOutlet]=\"mainTitleTemplate\"></ng-template>\n </div>\n }\n <div\n class=\"fd-container fd-form-layout-grid-container\"\n [class.is-compact]=\"contentDensityObserver.isCompactSignal()\"\n >\n @for (column of formRows | keyvalue; track $index) {\n <div class=\"fd-row\">\n @for (fields of column | fieldGroupRowValue | keyvalue; track $index) {\n <div class=\"fd-col fd-form-group\" [class]=\"xlCol\">\n @if ($fieldGroup(column.value); as value) {\n @if (value.label) {\n <div class=\"fd-row\">\n <div class=\"fd-col\">\n <div fdp-form-group-header [fieldGroup]=\"$index === 0 ? value : null\"></div>\n </div>\n </div>\n }\n }\n @for (field of fields.value; track trackByFieldName($index, field)) {\n <div class=\"fd-row fd-form-item\">\n <div class=\"fd-col\" [class]=\"_inlineColumnLayoutClass\" [style.order]=\"field.rank\">\n <ng-template [ngTemplateOutlet]=\"field?.renderer || null\"></ng-template>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n<!-- For nested form-group -->\n<ng-content select=\"fdp-form-group\"></ng-content>\n<ng-template #mainTitleTemplate>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <h5 class=\"fd-form-header__text\">\n {{ mainTitle }}\n </h5>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <ng-template #hintTemplate>\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"_hintOptions!.content\"\n [glyph]=\"_hintOptions!.glyph\"\n [placement]=\"_hintOptions!.placement || null\"\n [triggers]=\"_hintOptions!.trigger || []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n </ng-template>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { InputMessageGroupWithTemplate } from '../input-message-group-with-template/input-message-group-with-template.component';\nimport { FormFieldErrorDescriptionDirective } from './form-field-error/form-field-error-description.directive';\nimport { FormFieldErrorHeadingDirective } from './form-field-error/form-field-error-heading.directive';\nimport { FormFieldErrorDirective } from './form-field-error/form-field-error.directive';\nimport { FormFieldControlExtrasComponent } from './form-field-extras/form-field-extras.component';\nimport { FormFieldGroupComponent } from './form-field-group/form-field-group.component';\nimport { FormFieldComponent } from './form-field/form-field.component';\nimport { FormGroupHeaderComponent } from './form-group-header/form-group-header.component';\nimport { FormGroupComponent } from './form-group.component';\nimport { FieldGroupRowValuePipe } from './pipes/field-group-row-value.pipe';\n\nconst EXPORTABLE_DECLARATIONS = [\n FormGroupComponent,\n FormFieldComponent,\n InputMessageGroupWithTemplate,\n FormFieldGroupComponent,\n FormFieldControlExtrasComponent,\n FormGroupHeaderComponent,\n FieldGroupRowValuePipe,\n FormFieldErrorDirective,\n FormFieldErrorHeadingDirective,\n FormFieldErrorDescriptionDirective\n];\n\n@NgModule({\n imports: [...EXPORTABLE_DECLARATIONS],\n exports: [...EXPORTABLE_DECLARATIONS]\n})\nexport class FdpFormGroupModule {}\n","import {\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnInit,\n Provider,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FD_FORM_FIELD } from '@fundamental-ngx/cdk/forms';\nimport { FieldHintOptions, PlatformFormField } from '@fundamental-ngx/platform/shared';\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../../form-group/constants';\nimport { FormFieldComponent } from '../../form-group/form-field/form-field.component';\nimport { DynamicFormControl } from '../dynamic-form-control';\nimport { DynamicFormControlDirective } from '../dynamic-form-control.directive';\nimport { FormGeneratorService } from '../form-generator.service';\nimport { DynamicFormGroup } from '../interfaces/dynamic-form-group';\nimport { DynamicFormItemValidationObject } from '../interfaces/dynamic-form-item';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FdpFormGroupModule } from '../../form-group/fdp-form.module';\n\nconst formFieldProvider: Provider = {\n provide: FD_FORM_FIELD,\n useExisting: forwardRef(() => FormGeneratorFieldComponent)\n};\n\nconst formGroupChildProvider: Provider = {\n provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n useExisting: forwardRef(() => FormGeneratorFieldComponent)\n};\n\n@Component({\n selector: 'fdp-form-generator-field',\n templateUrl: './form-generator-field.component.html',\n providers: [formFieldProvider, formGroupChildProvider],\n encapsulation: ViewEncapsulation.None,\n imports: [FdpFormGroupModule, FormsModule, ReactiveFormsModule, DynamicFormControlDirective]\n})\nexport class FormGeneratorFieldComponent implements OnInit {\n /**\n * Form control.\n */\n @Input() field: DynamicFormControl;\n\n /**\n * Form generator's form.\n */\n @Input() form: DynamicFormGroup;\n\n /**\n * Translations template reference.\n */\n @Input() i18n: TemplateRef<any>;\n\n /**\n * Form control name\n */\n @Input() formFieldName: string;\n\n /**\n * Path of the form group.\n */\n @Input() formGroupNamePath: string;\n\n /**\n * Rank is used for ordering.\n * The lower number the higher priority.\n */\n @Input() rank: number;\n\n /**\n * Whether this field should be visible.\n */\n @Input() shouldShow: boolean;\n\n /**\n * Describes hint options for field label\n */\n @Input() hintOptions?: FieldHintOptions;\n\n /**\n * Form field component.\n */\n @ViewChild(forwardRef(() => FormFieldComponent)) fieldRenderer: PlatformFormField;\n\n /** @hidden */\n get _placeholder(): string {\n if (!this.field) {\n return '';\n }\n if (this.field.formItem?.placeholder) {\n return this.field.formItem?.placeholder as string;\n }\n if (this.field.formItem?.useMessageAsPlaceholder) {\n return this.field.formItem?.message as string;\n }\n return '';\n }\n\n /** @hidden */\n _errorModels: { type: string; value: any }[] = [];\n\n /** @hidden */\n constructor(\n private _fgService: FormGeneratorService,\n private _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._errorModels = this._getErrors();\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _errorsTrackBy(_: number, error: { type: string; value: any }): string {\n return error.type;\n }\n\n /** @hidden */\n _isAdvancedError(error: any): error is DynamicFormItemValidationObject {\n return error.heading && error.description && error.type;\n }\n\n /** @hidden */\n private _getErrors(): { type: string; value: any }[] {\n const registeredErrors = this._fgService.validationErrorHints;\n\n const returnErrors: { type: string; value: any }[] = [\n {\n type: `${this.field.formItem.name}Validator`,\n value: null\n }\n ];\n\n Object.entries(registeredErrors).forEach((type) => {\n const [errorType, errorValue] = type;\n\n returnErrors.push({\n type: errorType,\n value: errorValue\n });\n });\n\n return returnErrors;\n }\n}\n","<fdp-form-field\n [hint]=\"hintOptions\"\n [placeholder]=\"_placeholder\"\n [id]=\"field.formItem.id || formFieldName\"\n [column]=\"field.formItem.guiOptions?.column || 1\"\n [columnLayout]=\"field.formItem.guiOptions?.columnLayout\"\n [colon]=\"field.formItem.guiOptions?.appendColon === true\"\n [label]=\"field.formItem.message\"\n [validators]=\"field.formItem.validators || []\"\n [required]=\"field.formItem.required\"\n [rank]=\"rank\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [noLabelLayout]=\"field.formItem.guiOptions?.noLabelLayout || false\"\n [formGroup]=\"form\"\n #formField\n>\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n <ng-container\n [formField]=\"formField\"\n [form]=\"form\"\n [formGroupNamePath]=\"formGroupNamePath\"\n fdpDynamicFormControl\n [id]=\"field.formItem.id || formFieldName\"\n [name]=\"formFieldName\"\n [formItem]=\"field.formItem\"\n >\n </ng-container>\n</fdp-form-field>\n","import { PlatformFormField } from '@fundamental-ngx/platform/shared';\nimport { FormGeneratorFieldComponent } from './form-generator/form-generator-field/form-generator-field.component';\nimport { FormFieldGroupComponent } from './form-group/form-field-group/form-field-group.component';\nimport { FormFieldComponent } from './form-group/form-field/form-field.component';\nimport { Field } from './models/field.model';\n\n/** @hidden */\nexport function isFieldChild(child: unknown): child is PlatformFormField {\n return child instanceof FormFieldComponent;\n}\n\n/** @hidden */\nexport function isFieldGroupWrapperChild(child: unknown): child is FormGeneratorFieldComponent {\n return child instanceof FormGeneratorFieldComponent;\n}\n\n/** @hidden */\nexport function isFieldGroupChild(child: unknown): child is FormFieldGroupComponent {\n return child instanceof FormFieldGroupComponent;\n}\n\n/** @hidden */\nexport function getFormField(field: PlatformFormField | FormGeneratorFieldComponent): PlatformFormField {\n return isFieldGroupWrapperChild(field) ? field.fieldRenderer : field;\n}\n\n/** @hidden */\nexport function getField(field: PlatformFormField): Field {\n field = isFieldGroupWrapperChild(field) ? field.fieldRenderer : field;\n\n return new Field(field.id, field.rank, field.renderer, field.column);\n}\n","import { NgModule } from '@angular/core';\n\nimport { AutoCompleteDirective } from './auto-complete.directive';\n\n@NgModule({\n imports: [AutoCompleteDirective],\n exports: [AutoCompleteDirective]\n})\nexport class PlatformAutoCompleteModule {}\n","import { NgModule } from '@angular/core';\nimport { CheckboxComponent } from './checkbox.component';\n\n@NgModule({\n imports: [CheckboxComponent],\n exports: [CheckboxComponent]\n})\nexport class PlatformCheckboxModule {}\n","import { InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\n\nexport const COMBOBOX_COMPONENT = new InjectionToken<string[]>('ComboboxInterface');\n\n/**\n * Combobox Interface to have typing and avoid circular dependency between\n * ComboboxComponent <==> ComboboxMobileComponent\n */\nexport interface ComboboxInterface extends MobileMode {\n inputText: string;\n openChange: Subject<boolean>;\n\n dialogApprove(): void;\n dialogDismiss(backup: string): void;\n detectChanges(): void;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from '../../combobox.interface';\n\n@Component({\n selector: 'fdp-combobox-mobile',\n templateUrl: './combobox-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n DialogModule,\n TitleComponent,\n TemplateDirective,\n BarModule,\n NgTemplateOutlet,\n CdkScrollable,\n ScrollbarDirective\n ]\n})\nexport class ComboboxMobileComponent extends MobileModeBase<ComboboxInterface> implements OnInit {\n /** @hidden */\n @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n /** @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n childContent: Nullable<{\n listTemplate: TemplateRef<any>;\n controlTemplate: TemplateRef<any>;\n }> = null;\n\n /** @hidden */\n private _selectedBackup: string;\n\n /** @hidden */\n constructor(@Inject(COMBOBOX_COMPONENT) comboboxComponent: ComboboxInterface) {\n super(comboboxComponent, MobileModeControl.COMBOBOX);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenOnMultiInputOpenChange();\n }\n\n /** @hidden */\n handleDismiss(): void {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n\n /** @hidden */\n handleApprove(): void {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n\n /** @hidden */\n private _toggleDialog(open: boolean): void {\n if (!open) {\n return;\n }\n\n this._selectedBackup = this._component.inputText;\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n\n /** @hidden */\n private _listenOnMultiInputOpenChange(): void {\n this._component.openChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n\n /** @hidden */\n private _open(): void {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n disablePaddings: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement\n });\n\n // Have to fire \"detectChanges\" to fix \"ExpressionChangedAfterItHasBeenCheckedError\"\n this.dialogRef.afterLoaded.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._component.detectChanges();\n });\n\n const refSub = this.dialogRef.afterClosed.subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { ComboboxMobileComponent } from './combobox/combobox-mobile.component';\n\n@NgModule({\n imports: [ComboboxMobileComponent],\n exports: [ComboboxMobileComponent]\n})\nexport class PlatformComboboxMobileModule {}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { DataProvider, MatchingStrategy, PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Combobox\n */\n@Injectable({ providedIn: 'root' })\nexport class ComboboxConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /**\n * String matching strategy for typeahead list. Default: 'starts with per term'\n */\n matchingStrategy: MatchingStrategy = MatchingStrategy.STARTS_WITH_PER_TERM;\n\n /**\n * Maps data providers\n */\n providers: Map<string, DataProvider<any>> | null = new Map();\n\n /** @hidden */\n constructor(platformConfig: PlatformConfig) {\n this.contentDensity = platformConfig.contentDensity;\n }\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<ComboboxConfig>): (platformConfig: PlatformConfig) => ComboboxConfig {\n const useFactory = (platformConfig: PlatformConfig): ComboboxConfig =>\n Object.assign(new ComboboxConfig(platformConfig), obj);\n return useFactory;\n }\n}\n","import { Directive, InjectionToken, Input, TemplateRef, inject } from '@angular/core';\n\nexport const FDP_COMBOBOX_ITEM_DEF = new InjectionToken<FdpComboboxItemDef>('FdpComboboxItemDefinition');\n\nexport type FdoComboboxItemDefType =\n | 'optionItemTemplate'\n | 'groupItemTemplate'\n | 'secondaryItemTemplate'\n | 'selectedItemTemplate';\n\n@Directive()\nexport abstract class FdpComboboxItemDef<T = unknown> {\n /** @hidden */\n abstract name: FdoComboboxItemDefType;\n /** @hidden */\n templateRef = inject(TemplateRef<T>);\n}\n\n@Directive({\n selector: '[fdpComboboxItem]',\n standalone: true,\n providers: [\n {\n provide: FDP_COMBOBOX_ITEM_DEF,\n useExisting: ComboboxItemDirective\n }\n ]\n})\nexport class ComboboxItemDirective<T = unknown> extends FdpComboboxItemDef<{ $implicit: T; index: number }> {\n /** @hidden */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('fdpComboboxItemUse')\n useModel: T;\n /** @hidden */\n name: FdoComboboxItemDefType = 'optionItemTemplate';\n\n /** @hidden */\n static ngTemplateContextGuard<T>(\n dir: ComboboxItemDirective<T>,\n ctx: { $implicit: T; index: number }\n ): ctx is { $implicit: T; index: number } {\n return true;\n }\n}\n\n@Directive({\n selector: '[fdpComboboxSelectedItem]',\n standalone: true,\n providers: [\n {\n provide: FDP_COMBOBOX_ITEM_DEF,\n useExisting: ComboboxSelectedItemDirective\n }\n ]\n})\nexport class ComboboxSelectedItemDirective<T = unknown> extends FdpComboboxItemDef<{ $implicit: T; index: number }> {\n /** @hidden */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('fdpComboboxSelectedItemUse')\n useModel: T;\n /** @hidden */\n name: FdoComboboxItemDefType = 'selectedItemTemplate';\n\n /** @hidden */\n static ngTemplateContextGuard<T>(\n dir: ComboboxSelectedItemDirective<T>,\n ctx: { $implicit: T; index: number }\n ): ctx is { $implicit: T; index: number } {\n return true;\n }\n}\n\n@Directive({\n selector: '[fdpComboboxGroup]',\n standalone: true,\n providers: [\n {\n provide: FDP_COMBOBOX_ITEM_DEF,\n useExisting: ComboboxItemGroupDirective\n }\n ]\n})\nexport class ComboboxItemGroupDirective extends FdpComboboxItemDef<{ $implicit: { label: string } }> {\n /** @hidden */\n name: FdoComboboxItemDefType = 'groupItemTemplate';\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: ComboboxItemGroupDirective,\n ctx: { $implicit: { label: string } }\n ): ctx is { $implicit: { label: string } } {\n return true;\n }\n}\n\n@Directive({\n selector: '[fdpComboboxSecondaryItem]',\n standalone: true,\n providers: [\n {\n provide: FDP_COMBOBOX_ITEM_DEF,\n useExisting: ComboboxSecondaryItemDirective\n }\n ]\n})\nexport class ComboboxSecondaryItemDirective<T = unknown> extends FdpComboboxItemDef<{ $implicit: T }> {\n /** @hidden */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('fdpComboboxSecondaryItemUse')\n useModel: T;\n\n /** @hidden */\n name: FdoComboboxItemDefType = 'secondaryItemTemplate';\n\n /** @hidden */\n static ngTemplateContextGuard<T>(\n dir: ComboboxSelectedItemDirective<T>,\n ctx: { $implicit: T }\n ): ctx is { $implicit: T } {\n return true;\n }\n}\n","import {\n ALT,\n BACKSPACE,\n CONTROL,\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n LEFT_ARROW,\n NUMPAD_EIGHT,\n NUMPAD_FIVE,\n NUMPAD_FOUR,\n NUMPAD_NINE,\n NUMPAD_ONE,\n NUMPAD_SEVEN,\n NUMPAD_SIX,\n NUMPAD_THREE,\n NUMPAD_TWO,\n NUMPAD_ZERO,\n RIGHT_ARROW,\n SHIFT,\n SPACE,\n TAB,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { Observable, Subject, Subscription, combineLatest, fromEvent, isObservable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\nimport { FocusEscapeDirection, KeyUtil, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { ListComponent } from '@fundamental-ngx/core/list';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport {\n ArrayComboBoxDataSource,\n CollectionBaseInput,\n ComboBoxDataSource,\n MatchingBy,\n MatchingStrategy,\n ObservableComboBoxDataSource,\n OptionItem,\n coerceArraySafe,\n isDataSource,\n isFunction,\n isJsObject,\n isOptionItem,\n isString\n} from '@fundamental-ngx/platform/shared';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SingleDropdownValueControl } from '@fundamental-ngx/cdk/forms';\nimport { AutoCompleteEvent } from '../../auto-complete/auto-complete.directive';\nimport { ComboboxConfig } from '../combobox.config';\nimport { FDP_COMBOBOX_ITEM_DEF, FdpComboboxItemDef } from '../directives/combobox-item.directive';\n\nexport type TextAlignment = 'left' | 'right';\nexport type FdpComboBoxDataSource<T> = ComboBoxDataSource<T> | Observable<T[]> | T[];\n\n@Directive()\nexport abstract class BaseCombobox\n extends CollectionBaseInput\n implements SingleDropdownValueControl, AfterViewInit, OnDestroy\n{\n /** @hidden Method to emit change event */\n abstract emitChangeEvent<K>(value: K): void;\n\n /** @hidden Define is this item selected */\n abstract isSelectedOptionItem(selectedItem: OptionItem): boolean;\n\n /** @hidden Emit select OptionItem */\n abstract selectOptionItem(item: OptionItem): void;\n\n /** @hidden Define value as selected */\n abstract setAsSelected(item: OptionItem[]): void;\n /** Provides maximum height for the optionPanel */\n @Input()\n maxHeight = '250px';\n\n /** Whether the autocomplete should be enabled; Enabled by default */\n @Input()\n autoComplete = true;\n\n /**\n * Todo: Name of the entity for which DataProvider will be loaded. You can either pass list of\n * items or use this entityClass and internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input()\n entityClass: string;\n\n /** Whether the combobox should be built on mobile mode */\n @Input()\n mobile = false;\n\n /** Multi Input Mobile Configuration, it's applied only, when mobile is enabled */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Tells the combo if we need to group items */\n @Input()\n group = false;\n\n /** A field name to use to group data by (support dotted notation) */\n @Input()\n groupKey?: string;\n\n /** The field to show data in secondary column */\n @Input()\n secondaryKey?: string;\n\n /** Show the second column (Applicable for two columns layout) */\n @Input()\n showSecondaryText = false;\n\n /** Horizontally align text inside the second column (Applicable for two columns layout) */\n @Input()\n secondaryTextAlignment: TextAlignment;\n\n /** Turns on/off Adjustable Width feature */\n @Input()\n autoResize = false;\n\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * `equal` will apply a width to the body equivalent to the width of the control.\n * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = false;\n\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: string[] = [];\n\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n @Input()\n closeOnOutsideClick = true;\n\n /** Whether list item options should be rendered as byline. */\n @Input()\n byline = false;\n\n /** Datasource for suggestion list */\n @Input()\n set dataSource(value: FdpComboBoxDataSource<any>) {\n if (value) {\n this._initializeDataSource(value);\n }\n }\n\n get dataSource(): FdpComboBoxDataSource<any> {\n return this._dataSource;\n }\n\n /** Value of the combobox */\n @Input()\n set value(value: any) {\n const selectedItems = coerceArraySafe(value);\n this.setAsSelected(this._convertToOptionItems(selectedItems));\n super.setValue(value);\n }\n\n get value(): any {\n return super.getValue();\n }\n\n /**\n * Action to perform when user shifts focus from the dropdown.\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n @Input()\n tabOutStrategy: 'close' | 'closeAndSelect' = 'closeAndSelect';\n\n /** Event emitted when data loading is started. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataRequested = new EventEmitter<void>();\n\n /** Event emitted when data loading is finished. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataReceived = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n listComponent: ListComponent;\n\n /** @hidden */\n @ContentChildren(TemplateDirective)\n private readonly _customTemplates: QueryList<TemplateDirective>;\n\n /** @hidden */\n @ContentChildren(FDP_COMBOBOX_ITEM_DEF)\n private readonly _customItemDef: QueryList<FdpComboboxItemDef>;\n\n /** @hidden Custom Option item Template */\n optionItemTemplate: TemplateRef<any>;\n\n /** @hidden Custom Group Header item Template */\n groupItemTemplate: TemplateRef<any>;\n\n /** @hidden Custom Secondary item Template */\n secondaryItemTemplate: TemplateRef<any>;\n\n /** @hidden Custom Selected option item Template */\n selectedItemTemplate: TemplateRef<any>;\n\n /** @hidden */\n searchInputElement: ElementRef<HTMLInputElement>;\n\n /** Input text of the input. */\n set inputText(value: string) {\n this._inputTextValue = value;\n\n this.onTouched();\n }\n\n get inputText(): string {\n return this._inputTextValue || '';\n }\n\n /** Whether the combobox is opened. */\n isOpen = false;\n\n /** Whether a combobox can be closed */\n get canClose(): boolean {\n return !(this.mobile && this.mobileConfig.approveButtonText);\n }\n\n /** @hidden List of matched suggestions */\n _suggestions: OptionItem[] = [];\n\n /** @hidden Max width of list container */\n maxWidth?: number;\n\n /** @hidden Min width of list container */\n minWidth?: number;\n\n /** @hidden Need for opening mobile version */\n openChange = new Subject<boolean>();\n\n /** @hidden */\n get isGroup(): boolean {\n return !!(this.group && this.groupKey);\n }\n\n /** Is suggestions list empty */\n get isSuggestionsListEmpty(): boolean {\n return this._suggestions.length === 0;\n }\n\n /** @hidden */\n _flatSuggestions: OptionItem[] = [];\n\n /** @hidden */\n protected _dataSource: FdpComboBoxDataSource<any>;\n\n /** @hidden */\n private _inputTextValue: string;\n\n /** @hidden */\n private readonly _matchingStrategy: MatchingStrategy;\n\n /** @hidden */\n private _dsSubscription?: Subscription;\n\n /** @hidden */\n private _element: HTMLElement = this.elementRef.nativeElement;\n\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n private readonly _nonOpeningKeys: number[] = [\n ESCAPE,\n ENTER,\n CONTROL,\n TAB,\n SHIFT,\n UP_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n LEFT_ARROW,\n ALT\n ];\n\n /** Keys, that are numbers from number keypad */\n private readonly _numberPadNumberKeys: number[] = [\n NUMPAD_ZERO,\n NUMPAD_ONE,\n NUMPAD_TWO,\n NUMPAD_THREE,\n NUMPAD_FOUR,\n NUMPAD_FIVE,\n NUMPAD_SIX,\n NUMPAD_SEVEN,\n NUMPAD_SEVEN,\n NUMPAD_EIGHT,\n NUMPAD_NINE\n ];\n\n /** @hidden */\n protected constructor(\n @Optional() readonly dialogConfig: DialogConfig,\n protected comboboxConfig: ComboboxConfig\n ) {\n super();\n this._matchingStrategy = this.comboboxConfig.matchingStrategy;\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._initWindowResize();\n this._assignCustomTemplates();\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as ComboBoxDataSource<any>).close();\n }\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n }\n }\n\n /** Is empty search field */\n get isEmptyValue(): boolean {\n return this.inputText.trim().length === 0;\n }\n\n /** write value for ControlValueAccessor */\n writeValue(value: any): void {\n const selectedItems = coerceArraySafe(value);\n this.setAsSelected(this._convertToOptionItems(selectedItems));\n super.writeValue(value);\n }\n\n /** @hidden */\n searchTermChanged(text: string): void {\n if (this.inputText === text) {\n return;\n }\n this.inputText = text;\n\n const queryMap = new Map();\n queryMap.set('query', text);\n queryMap.set('limit', 12);\n\n this.ds.match(queryMap);\n }\n\n /** @hidden */\n isOpenChangeHandle(isOpen: boolean): void {\n if (this.isOpen === isOpen) {\n return;\n }\n\n this.isOpen = isOpen;\n this.onTouched();\n this.openChange.next(isOpen);\n this._onOpenChange(this.isOpen);\n\n if (!this.isOpen && !this.mobile) {\n this.searchInputElement.nativeElement.focus({ preventScroll: true });\n }\n\n this.detectChanges();\n }\n\n /** @hidden */\n _onOpenChange(isOpen: boolean): void {\n if (isOpen) {\n this.formMessage._popover.close();\n }\n this.formMessage._popover.setIgnoreTriggers(isOpen);\n }\n\n /** @hidden */\n handleOptionItem(value: OptionItem): void {\n if (value) {\n this.selectOptionItem(value);\n }\n\n this.searchInputElement.nativeElement.focus();\n }\n\n /** @hidden */\n handlePressEnter(event: KeyboardEvent, value: OptionItem): void {\n if (!KeyUtil.isKeyCode(event, ENTER)) {\n return;\n }\n\n this.handleOptionItem(value);\n }\n\n /**\n * Handle Click on Button\n * @hidden\n */\n onPrimaryButtonClick(): void {\n // if it's mobile mode ignore this click\n if (this.mobile) {\n return;\n }\n\n this.isOpenChangeHandle(!this.isOpen);\n\n if (this.isOpen) {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n\n /**\n * Handle click on input group in mobile mode\n * @hidden\n */\n openInMobileMode(): void {\n // if it's already opened just ignore this click\n // if it's not mobile mode just ignore this click\n if (this.isOpen || !this.mobile) {\n return;\n }\n\n // otherwise show options\n this.isOpenChangeHandle(true);\n }\n\n /**\n * Handle Keydown on Input\n * @hidden\n */\n onInputKeydownHandler(event: KeyboardEvent): void {\n if (this.readonly) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, TAB)) {\n this._close();\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n event.preventDefault();\n\n if (event.altKey) {\n this.isOpenChangeHandle(true);\n }\n\n if (this.isOpen && this.listComponent) {\n this.listComponent.setItemActive(0);\n } else if (!this.isOpen) {\n this._chooseOtherItem(1);\n }\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n event.preventDefault();\n\n this._chooseOtherItem(-1);\n } else if (!event.ctrlKey && !KeyUtil.isKeyCode(event, this._nonOpeningKeys)) {\n if (!KeyUtil.isKeyCode(event, this._numberPadNumberKeys)) {\n this.isOpenChangeHandle(true);\n }\n const acceptedKeys =\n !KeyUtil.isKeyCode(event, BACKSPACE) &&\n !KeyUtil.isKeyCode(event, SPACE) &&\n !KeyUtil.isKeyType(event, 'alphabetical') &&\n !KeyUtil.isKeyType(event, 'numeric') &&\n !KeyUtil.isKeyType(event, 'ime') &&\n !KeyUtil.isKeyCode(event, this._numberPadNumberKeys);\n\n if (this.isEmptyValue && acceptedKeys) {\n this.listComponent?.setItemActive(0);\n }\n }\n }\n\n /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n\n /** @hidden */\n _onCompleteTerm(event: AutoCompleteEvent): void {\n if (event.forceClose) {\n this.toggleSelectionByInputText(event.term);\n this.isOpenChangeHandle(false);\n }\n }\n\n /** @hidden */\n toggleSelectionByInputText(text = this.inputText): void {\n let optionItem = this._getSelectItemByInputValue(text);\n if (!optionItem) {\n optionItem = {\n label: text,\n value: text\n };\n }\n\n this.selectOptionItem(optionItem);\n }\n\n /** @hidden */\n _close(): void {\n if (this.tabOutStrategy === 'closeAndSelect') {\n const focusedItem = this.listComponent.getActiveItem();\n if (focusedItem) {\n this.handleOptionItem(focusedItem.value);\n return;\n }\n }\n this.inputText = this.value ? this.inputText : '';\n this.searchInputElement.nativeElement.focus();\n this.isOpenChangeHandle(false);\n this.markForCheck();\n }\n\n /** @hidden */\n protected _getSelectItemByInputValue(displayValue: string): OptionItem | undefined {\n return this._flatSuggestions.find((value) => value.label === displayValue);\n }\n\n /** @hidden */\n protected get ds(): ComboBoxDataSource<any> {\n return this.dataSource as ComboBoxDataSource<any>;\n }\n\n /** @hidden Map grouped values to array. */\n protected _flatGroups(items: OptionItem[]): OptionItem[] {\n return items.reduce((result: OptionItem[], item: OptionItem) => result.concat(item.children ?? []), []);\n }\n\n /** @hidden */\n private _displayFn = (value: any): string => this.displayValue(value);\n\n /** @hidden */\n private _secondaryFn = (value: any): string => {\n if (isOptionItem(value)) {\n return value.secondaryText ?? '';\n }\n\n if (isJsObject(value) && this.secondaryKey) {\n const currentItem = this.objectGet(value, this.secondaryKey);\n\n return isFunction(currentItem) ? currentItem() : currentItem;\n }\n\n return value;\n };\n\n /**\n * @hidden\n * Method that picks other value moved from current one by offset, called only when combobox is closed\n */\n private _chooseOtherItem(offset: number): void {\n const activeValue = this._getSelectItemByValue(this.inputText);\n const index: number = this._suggestions.findIndex((value) => value === activeValue);\n\n if (this._suggestions[index + offset]) {\n this.handleOptionItem(this._suggestions[index + offset]);\n }\n }\n\n /** @hidden */\n private _getSelectItemByValue(displayValue: string): OptionItem | undefined {\n return this._suggestions.find((value) => value.label === displayValue);\n }\n\n /** @hidden */\n private async _initializeDataSource(ds: FdpComboBoxDataSource<any>): Promise<void> {\n this._suggestions = [];\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as ComboBoxDataSource<any>).close();\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n this._dsSubscription = undefined;\n }\n }\n\n // initializing data source in the seperate microtask to let all config options to be set before it\n // for example, \"isGroup\" input is needed for initialization logic and it might not be set at this point\n await Promise.resolve();\n // Convert whatever comes in as DataSource so we can work with it identically\n this._dataSource = this._openDataStream(ds);\n }\n\n /** @hidden */\n private _openDataStream(ds: FdpComboBoxDataSource<any>): ComboBoxDataSource<any> {\n const initDataSource = this._toDataStream(ds);\n\n if (initDataSource === undefined) {\n throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n }\n this._dsSubscription = new Subscription();\n /**\n * This is single point of data entry to the component. We dont want to set data on different\n * places. If any new data comes in either you do a search and you want to pass initial data\n * its here.\n */\n const dsSub = initDataSource\n .open()\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe((data) => {\n this._suggestions = this._convertToOptionItems(data);\n this._flatSuggestions = this.isGroup ? this._flatGroups(this._suggestions) : this._suggestions;\n\n this.stateChanges.next('initDataSource.open().');\n\n this.markForCheck();\n });\n this._dsSubscription.add(dsSub);\n\n this._dsSubscription.add(initDataSource.onDataRequested().subscribe(this.onDataRequested));\n this._dsSubscription.add(initDataSource.onDataReceived().subscribe(this.onDataReceived));\n\n initDataSource.dataProvider.setLookupKey(this.lookupKey);\n const matchingBy: MatchingBy = {\n firstBy: this._displayFn\n };\n\n if (this.secondaryKey) {\n matchingBy.secondaryBy = this._secondaryFn;\n }\n\n initDataSource.dataProvider.setMatchingBy(matchingBy);\n initDataSource.dataProvider.setMatchingStrategy(this._matchingStrategy);\n\n // initial data fetch\n const queryMap = new Map();\n queryMap.set('query', '*');\n queryMap.set('limit', 12);\n initDataSource.match(queryMap);\n\n return initDataSource;\n }\n\n /** @hidden */\n private _toDataStream(source: FdpComboBoxDataSource<any>): ComboBoxDataSource<any> | undefined {\n if (isDataSource(source)) {\n return source as ComboBoxDataSource<any>;\n }\n\n if (Array.isArray(source)) {\n // default implementation to work on top of arrays\n return new ArrayComboBoxDataSource<any>(source);\n }\n\n if (isObservable(source)) {\n return new ObservableComboBoxDataSource<any>(source);\n }\n\n return undefined;\n }\n\n /** @hidden */\n private _initWindowResize(): void {\n this._getOptionsListWidth();\n\n fromEvent(window, 'resize')\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => this._getOptionsListWidth());\n }\n\n /** @hidden */\n private _getOptionsListWidth(): void {\n const gap = 5;\n const { offsetWidth, clientWidth } = document.body;\n const { width, left } = (this._element.querySelector('fd-input-group') as HTMLElement).getBoundingClientRect();\n const scrollBarWidth = offsetWidth - clientWidth;\n\n this.maxWidth = this.autoResize ? window.innerWidth - scrollBarWidth - left - gap : this.minWidth;\n this.minWidth = width - 2;\n\n this.detectChanges();\n }\n\n /**\n * Convert original data to OptionItems Interface\n * @hidden\n */\n private _convertToOptionItems(items: any[]): OptionItem[] {\n const item = items[0];\n\n const elementTypeIsOptionItem = isOptionItem(item);\n if (elementTypeIsOptionItem) {\n return items as OptionItem[];\n }\n\n const elementTypeIsObject = isJsObject(item);\n if (elementTypeIsObject) {\n return this._convertObjectsToOptionItems(items);\n }\n\n const elementTypeIsString = isString(item);\n if (elementTypeIsString) {\n return this._convertPrimitiveToOptionItems(items);\n }\n\n return [];\n }\n\n /**\n * Convert data to OptionItems Interface\n * @hidden\n */\n private _convertObjectsToOptionItems(items: any[]): OptionItem[] {\n if (this.group && this.groupKey) {\n return this._convertObjectsToGroupOptionItems(items);\n } else if (this.showSecondaryText && this.secondaryKey) {\n return this._convertObjectsToSecondaryOptionItems(items);\n } else {\n return this._convertObjectsToDefaultOptionItems(items);\n }\n }\n\n /**\n * Convert object[] data to Group OptionItems Interface\n * @hidden\n */\n private _convertObjectsToGroupOptionItems<K>(items: K[]): OptionItem[] {\n const group: { [key: string]: K[] } = {};\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const keyValue = this.groupKey && item[this.groupKey];\n if (!keyValue) {\n continue;\n }\n\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n\n group[keyValue].push(item);\n }\n\n return Object.keys(group).map((key) => {\n const selectItem: OptionItem = {\n label: key,\n value: null,\n isGroup: true\n };\n\n const currentGroup = group[key];\n\n if (this.showSecondaryText && this.secondaryKey) {\n selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n } else {\n selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n }\n\n return selectItem;\n });\n }\n\n /**\n * Convert object[] data to Secondary OptionItems Interface\n * @hidden\n */\n private _convertObjectsToSecondaryOptionItems<K>(items: K[]): OptionItem[] {\n const selectItems: OptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n secondaryText: this.objectGet(value, this.secondaryKey),\n value\n });\n }\n\n return selectItems;\n }\n\n /**\n * Convert Primitive data(Boolean, String, Number) to OptionItems Interface\n * @hidden\n */\n private _convertPrimitiveToOptionItems(items: any[]): OptionItem[] {\n const selectItems: OptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({ label: value, value });\n }\n\n return selectItems;\n }\n\n /**\n * Convert object[] to OptionItems Interface (Default)\n * @hidden\n */\n private _convertObjectsToDefaultOptionItems(items: any[]): OptionItem[] {\n const selectItems: OptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n value\n });\n }\n\n return selectItems;\n }\n\n /** @hidden Assign custom templates */\n private _assignCustomTemplates(): void {\n combineLatest([this._customTemplates.changes, this._customItemDef.changes])\n .pipe(\n startWith(null),\n map(() =>\n this._customItemDef.length > 0 ? this._customItemDef.toArray() : this._customTemplates.toArray()\n ),\n takeUntilDestroyed(this._destroyed)\n )\n .subscribe((data) => {\n data.forEach((template: FdpComboboxItemDef | TemplateDirective) => {\n switch (template.name) {\n case 'optionItemTemplate':\n this.optionItemTemplate = template.templateRef;\n break;\n case 'groupItemTemplate':\n this.groupItemTemplate = template.templateRef;\n break;\n case 'secondaryItemTemplate':\n this.secondaryItemTemplate = template.templateRef;\n break;\n case 'selectedItemTemplate':\n this.selectedItemTemplate = template.templateRef;\n break;\n }\n });\n });\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Injector,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { DynamicComponentService } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityModule, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { ComboBoxDataSource, DATA_PROVIDERS, DataProvider, OptionItem } from '@fundamental-ngx/platform/shared';\n\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SearchHighlightPipe } from '@fundamental-ngx/cdk/utils';\nimport { FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ListModule, ListSecondaryDirective } from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { AutoCompleteDirective } from '../../auto-complete/auto-complete.directive';\nimport { ComboboxMobileComponent } from '../combobox-mobile/combobox/combobox-mobile.component';\nimport { ComboboxConfig } from '../combobox.config';\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from '../combobox.interface';\nimport { BaseCombobox } from '../commons/base-combobox';\n\nexport class ComboboxSelectionChangeEvent {\n /**\n * Combobox selection event\n * @param source Combobox component\n * @param payload Selected option\n */\n constructor(\n public source: ComboboxComponent,\n public payload: any // Contains selected item\n ) {}\n}\n\n@Component({\n selector: 'fdp-combobox',\n templateUrl: './combobox.component.html',\n styleUrl: './combobox.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: FD_FORM_FIELD_CONTROL, useExisting: ComboboxComponent, multi: true },\n contentDensityObserverProviders()\n ],\n imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n FormInputMessageGroupComponent,\n InputGroupModule,\n FormsModule,\n AutoCompleteDirective,\n FormMessageComponent,\n ListModule,\n NgClass,\n ListSecondaryDirective,\n SearchHighlightPipe,\n FdTranslatePipe,\n ContentDensityModule\n ]\n})\nexport class ComboboxComponent extends BaseCombobox implements ComboboxInterface, OnInit, AfterViewInit {\n /** Event emitted when item is selected. */\n @Output()\n selectionChange = new EventEmitter<ComboboxSelectionChangeEvent>();\n /** @hidden */\n @ViewChild('searchInputElement')\n declare searchInputElement: ElementRef<HTMLInputElement>;\n\n /** @hidden */\n @ViewChild('controlTemplate')\n controlTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('listTemplate')\n listTemplate: TemplateRef<any>;\n\n /** @hidden */\n _selectedElement?: OptionItem;\n\n /** @hidden */\n constructor(\n @Optional() _dialogConfig: DialogConfig,\n readonly _dynamicComponentService: DynamicComponentService,\n private readonly _viewContainerRef: ViewContainerRef,\n private readonly _injector: Injector,\n @Optional() @Inject(DATA_PROVIDERS) private providers: Map<string, DataProvider<any>>,\n _comboboxConfig: ComboboxConfig\n ) {\n super(_dialogConfig, _comboboxConfig);\n }\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n const providers = this.providers?.size === 0 ? this.comboboxConfig.providers : this.providers;\n // if we have both prefer dataSource\n if (!this.dataSource && this.entityClass && providers?.has(this.entityClass)) {\n this.dataSource = new ComboBoxDataSource(providers.get(this.entityClass)!);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n\n if (this.mobile) {\n this._setUpMobileMode();\n }\n }\n\n /** @hidden */\n _onBlur(event: FocusEvent): void {\n if (this.mobile) {\n return;\n }\n\n const target = event.relatedTarget as HTMLElement;\n if (target) {\n const isList = !!target.closest('.fdp-combobox__list-container');\n const isListItem = !!target.closest('.fd-list__item');\n if (isList || isListItem) {\n return;\n }\n }\n\n if ((!this._selectedElement && !this.inputText) || this._selectedElement?.label === this.inputText) {\n return;\n }\n\n const optionItem = this._getSelectedOptionItem(this.inputText);\n\n this._updateModel(optionItem ? optionItem.value : this.inputText);\n }\n\n /** @hidden Method to emit change event */\n emitChangeEvent<T>(modelValue: T): void {\n const event = new ComboboxSelectionChangeEvent(this, modelValue);\n\n this.selectionChange.emit(event);\n }\n\n /** @hidden Method to set selected item */\n selectOptionItem(item: OptionItem): void {\n if (this.mobile) {\n this._selectedElement = item;\n this.inputText = item.label;\n this.detectChanges();\n\n return;\n }\n\n this.inputText = item.label;\n this._checkAndUpdate(item);\n this.isOpenChangeHandle(false);\n }\n\n /** @hidden Method to set as selected */\n setAsSelected(item: OptionItem[]): void {\n const selectedItem = item[0];\n\n if (this.isSelectedOptionItem(selectedItem)) {\n return;\n }\n\n this._selectedElement = (this.isGroup && selectedItem?.children?.[0]) || selectedItem;\n this.inputText = this.displayValue(this._selectedElement);\n }\n\n /** @hidden Define is selected item selected */\n isSelectedOptionItem(selectedItem: any): boolean {\n if (!!this._selectedElement && !!selectedItem) {\n if (this.lookupKey) {\n return this.lookupValue(this._selectedElement) === this.lookupValue(selectedItem);\n } else {\n return selectedItem.value === this._selectedElement.value;\n }\n } else {\n return false;\n }\n }\n\n /** @hidden Define is selected item selected by display value */\n isSelectedOptionItemByDisplayValue(selectedItem: any): boolean {\n return this._selectedElement?.label === selectedItem;\n }\n\n /** Handle dialog dismissing, closes popover and sets backup data. */\n dialogDismiss(term: string): void {\n if (this._selectedElement?.label !== term) {\n this._selectedElement = this._getSelectedOptionItem(term);\n }\n\n this.inputText = term;\n this.isOpenChangeHandle(false);\n }\n\n /** Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove(): void {\n if (this._selectedElement?.label === this.inputText) {\n this._updateModel(this._selectedElement.value);\n } else {\n const optionItem = this._getSelectedOptionItem(this.inputText);\n\n this._updateModel(optionItem ? optionItem.value : this.inputText);\n }\n\n this.isOpenChangeHandle(false);\n }\n\n /** @hidden if not selected update model */\n private _checkAndUpdate(modelValue: OptionItem): void {\n if (this.isSelectedOptionItem(modelValue)) {\n return;\n }\n\n this._updateModel(modelValue.value);\n }\n\n /** @hidden Update model */\n private _updateModel(value: any): void {\n // setting value, it will call setValue()\n this.value = value;\n\n this.emitChangeEvent(value ? value : null);\n }\n\n /** @hidden */\n private async _setUpMobileMode(): Promise<void> {\n const injector = Injector.create({\n providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._dynamicComponentService.createDynamicComponent(\n { listTemplate: this.listTemplate, controlTemplate: this.controlTemplate },\n ComboboxMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n { injector }\n );\n }\n\n /** @hidden */\n private _getSelectedOptionItem(text: string): OptionItem | undefined {\n if (!this.isGroup) {\n return this._suggestions.find((item) => item.label === text);\n }\n\n return this._suggestions\n .reduce((result: OptionItem[], item: OptionItem) => {\n result.push(...(item.children ?? []));\n\n return result;\n }, [])\n .find((item) => item.label === text);\n }\n}\n","<ng-template [ngTemplateOutlet]=\"mobile ? controlTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <fd-popover\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"autoResize ? null : minWidth\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n additionalBodyClass=\"fdp-combobox__popover\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"_suggestions.length === 0\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [state]=\"mobile && isOpen ? null : state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [isControl]=\"true\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled\"\n [glyphAriaLabel]=\"ariaLabel\"\n (click)=\"openInMobileMode()\"\n >\n <input\n #searchInputElement\n fdp-auto-complete\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n (onComplete)=\"_onCompleteTerm($event)\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-required]=\"required\"\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [ngModel]=\"inputText\"\n (ngModelChange)=\"searchTermChanged($event)\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"_onBlur($event)\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n @if (isOpen) {\n <div class=\"fdp-combobox__count-list-results\" role=\"status\">\n @if (_flatSuggestions.length || '0'; as count) {\n {{\n (count === 1\n ? 'platformCombobox.countListResultsSingular'\n : 'platformCombobox.countListResultsPlural'\n ) | fdTranslate: { count: count }\n }}\n }\n </div>\n }\n @if (mobile || isOpen ? null : !!stateMessage) {\n <fd-form-message [type]=\"state\" [innerHtml]=\"stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n [hasMessage]=\"!!stateMessage\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-combobox__list\"\n [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [byline]=\"byline\"\n [attr.aria-labelledby]=\"id + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [style.maxWidth]=\"autoResize && maxWidth + 'px'\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n >\n @if (stateMessage) {\n <li\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n ></li>\n }\n @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n <li fd-list-message tabindex=\"-1\" role=\"presentation\" [type]=\"state || 'default'\">\n <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n </li>\n }\n <ng-content></ng-content>\n @if (isGroup) {\n @for (group of _suggestions; track group) {\n @if (!groupItemTemplate) {\n <li fd-list-group-header role=\"option\">\n <span fd-list-title [attr.title]=\"group.label\">{{ group.label }}</span>\n </li>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (isSelectedOptionItem(optionItem) && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(isSelectedOptionItem(optionItem) && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span [attr.title]=\"optionItem.label\" [innerHTML]=\"optionItem.label | highlight: inputText\"></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText) {\n @if (!secondaryItemTemplate) {\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight: inputText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\n\nimport { ComboboxComponent } from './combobox/combobox.component';\nimport {\n ComboboxItemDirective,\n ComboboxItemGroupDirective,\n ComboboxSecondaryItemDirective,\n ComboboxSelectedItemDirective\n} from './directives/combobox-item.directive';\n\nconst EXPORTABLE_COMPONENTS = [\n ComboboxComponent,\n ComboboxItemDirective,\n ComboboxSelectedItemDirective,\n ComboboxItemGroupDirective,\n ComboboxSecondaryItemDirective\n];\n\n@NgModule({\n imports: [...EXPORTABLE_COMPONENTS],\n exports: [...EXPORTABLE_COMPONENTS]\n})\nexport class PlatformComboboxModule {}\n","import { NgModule } from '@angular/core';\nimport { PlatformDatePickerComponent } from './date-picker.component';\n\n@NgModule({\n imports: [PlatformDatePickerComponent],\n exports: [PlatformDatePickerComponent]\n})\nexport class PlatformDatePickerModule {}\n","/** @hidden */\nexport function createMissingDateImplementationError(provider: string): Error {\n return Error(\n `FdpDatetimePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`\n );\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n inject\n} from '@angular/core';\nimport { FormsModule, NgControl } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\n\nimport { CalendarYearGrid, DaysOfWeek, FdCalendarView, FdCalendarViewEnum } from '@fundamental-ngx/core/calendar';\nimport { DATE_TIME_FORMATS, DateTimeFormats, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { DatetimePickerComponent } from '@fundamental-ngx/core/datetime-picker';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { Placement, SpecialDayRule } from '@fundamental-ngx/core/shared';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { createMissingDateImplementationError } from './errors';\n\n@Component({\n selector: 'fdp-datetime-picker',\n templateUrl: './datetime-picker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformDatetimePickerComponent, multi: true }],\n imports: [DatetimePickerComponent, FormsModule]\n})\nexport class PlatformDatetimePickerComponent<D> extends BaseInput implements AfterViewInit {\n /**\n * value for datetime\n */\n @Input()\n set value(value: D) {\n super.setValue(value);\n }\n get value(): D {\n return super.getValue();\n }\n\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n @Input()\n placement: Placement = 'bottom-start';\n\n /** The element to which the popover should be appended. */\n @Input()\n appendTo: ElementRef;\n\n /**\n * Whether the time component should be meridian (am/pm).\n * Default value is based on the current locale format option\n * */\n @Input()\n meridian: boolean;\n\n /**\n * Whether the time component shows seconds.\n * Default value is based on the current locale format option\n * */\n @Input()\n displaySeconds: boolean;\n\n /**\n * Whether the time component shows minutes.\n * Default value is based on the current locale format option\n * */\n @Input()\n displayMinutes: boolean;\n\n /**\n * Whether the time component shows hours.\n * Default value is based on the current locale format option\n * */\n @Input()\n displayHours: boolean;\n\n /** Whether to perform visual validation on the picker input. */\n @Input()\n useValidation = true;\n\n /** Whether the popover is open. Two-way binding is supported. */\n @Input()\n isOpen = false;\n\n /** The starting day of week for the calendar. */\n @Input()\n startingDayOfWeek: DaysOfWeek;\n\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n @Input()\n activeView: FdCalendarView = FdCalendarViewEnum.Day;\n\n /** Whether a null input is considered valid. */\n @Input()\n allowNull = true;\n\n /**\n * @Input when set to true time component will use 2 digits for each number.\n * For example 9 will become 09\n * but 12 will be kept as 12.\n * Only uses by time component and does not change input format\n */\n @Input() keepTwoDigitsTime = false;\n\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n set state(state: FormStates | undefined) {\n super.state = state;\n }\n\n get state(): FormStates {\n if (this.dateTimePickerComponent?.isInvalidDateInput) {\n // if any other error from core dtp\n return 'error';\n }\n return super.state;\n }\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = true;\n\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n @Input()\n specialDaysRules: SpecialDayRule<D>[] = [];\n\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n yearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 5\n };\n\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n aggregatedYearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 3\n };\n\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n @Input()\n markWeekends = true;\n\n /** @Input Whether to show spinner buttons */\n @Input()\n spinnerButtons = true;\n\n /**\n * Whether user wants to show week numbers next to days\n */\n @Input()\n showWeekNumbers = true;\n\n /** Whether or not to show the datetime picker footer with submit/cancel buttons. */\n @Input()\n showFooter = true;\n\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n @Input()\n processInputOnBlur = false;\n\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n @Input()\n preventScrollOnFocus = false;\n\n /** Whether date picker should rendered in mobile mode. */\n @Input()\n mobile = false;\n\n /** Mobile mode configuration. */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n @Input()\n mobileLandscape = false;\n\n /** Whether calendar is used inside mobile in portrait mode */\n @Input()\n mobilePortrait = false;\n\n /** Event emitted when the state of the isOpen property changes. */\n @Output()\n readonly isOpenChange = new EventEmitter<boolean>();\n\n /** Event thrown every time calendar active view is changed */\n @Output()\n readonly activeViewChange: EventEmitter<FdCalendarView> = new EventEmitter<FdCalendarView>();\n\n /** Event emitted when the date changes. This can be a time or day change. */\n @Output()\n readonly datetimeChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event emitted when popover closes. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onClose: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild(DatetimePickerComponent)\n dateTimePickerComponent: DatetimePickerComponent<D>;\n\n /** @hidden */\n @ViewChild(DatetimePickerComponent, { static: true, read: ElementRef })\n protected _elRef: ElementRef;\n\n /** @hidden */\n @ViewChild(DatetimePickerComponent, { static: true, read: NgControl })\n protected _control: NgControl;\n\n /** @hidden */\n get _isRequired(): boolean {\n return !!this.formField?.required;\n }\n\n /** @hidden */\n private readonly _dateTimeAdapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, {\n optional: true\n });\n\n /** @hidden */\n private readonly _dateTimeFormats = inject<DateTimeFormats>(DATE_TIME_FORMATS, {\n optional: true\n });\n\n /** @hidden */\n constructor() {\n super();\n\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n\n // default model value\n this.value = this._dateTimeAdapter.now();\n }\n\n /**\n * Function used to disable certain dates in the calendar.\n * @param fdDate FdDate\n */\n @Input()\n disableFunction: (value: D) => boolean = () => false;\n\n /**\n * @hidden\n */\n ngAfterViewInit(): void {\n // if used with platform forms, adjust width of datetimepicker to take 100% container space\n if (this.formField) {\n this._adjustPickerWidth();\n }\n }\n\n /** @hidden */\n writeValue(value: D): void {\n super.writeValue(value);\n this.markForCheck();\n }\n\n /**\n * @hidden\n * override base functionality to catch new disabled state\n */\n setDisabledState(disabled: boolean): void {\n super.setDisabledState(disabled);\n this.dateTimePickerComponent?.setDisabledState(disabled);\n }\n\n /**\n * @hidden\n * logic to handle validation from both platform forms and core datetiimepicker\n * @param datetime inputted\n */\n handleDatetimeInputChange(datetime: D): void {\n if (this.dateTimePickerComponent) {\n if (this.dateTimePickerComponent._isInvalidDateInput) {\n if (this.ngControl?.control && this._control.value) {\n this.ngControl.control.setErrors(this._control.errors);\n }\n this.state = 'error';\n } else {\n if (!this.dateTimePickerComponent._inputFieldDate && !this.allowNull) {\n this.state = 'error'; // null value in not allowNull should throw error\n } else {\n this.state = undefined; // resetting to default state\n }\n }\n // only set the value if it is a valid datetime object\n if (this.dateTimePickerComponent._inputFieldDate) {\n this.value = datetime;\n }\n\n this.stateChanges.next('datetime picker: handleDatetimeInputChange');\n }\n\n this.datetimeChange.emit(datetime);\n\n this.onTouched();\n }\n\n /**\n * Method that handles changes when popover is opened or closed.\n */\n handleOpenChange = (open: boolean): void => {\n this.isOpenChange.emit(open);\n };\n /**\n * Method that handle calendar active view change and throws event.\n */\n handleActiveViewChange = (fdCalendarView: FdCalendarView): void => {\n this.activeViewChange.emit(fdCalendarView);\n };\n\n /**\n * @hidden\n * method that adjusts width of datetimepicker to take 100% container space\n */\n private _adjustPickerWidth(): void {\n const customPopoverEl = this._elRef.nativeElement.querySelector('.fd-datetime .fd-popover-custom');\n if (!customPopoverEl) {\n return;\n }\n customPopoverEl.style.display = 'inline';\n }\n}\n","<fd-datetime-picker\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"_isRequired\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n [inputId]=\"id\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [placement]=\"placement\"\n [appendTo]=\"appendTo\"\n [meridian]=\"meridian\"\n [disabled]=\"disabled\"\n [displaySeconds]=\"displaySeconds\"\n [displayMinutes]=\"displayMinutes\"\n [displayHours]=\"displayHours\"\n [useValidation]=\"useValidation\"\n [isOpen]=\"isOpen\"\n [startingDayOfWeek]=\"startingDayOfWeek\"\n [activeView]=\"activeView\"\n [allowNull]=\"allowNull && !_isRequired\"\n [keepTwoDigitsTime]=\"keepTwoDigitsTime\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [specialDaysRules]=\"specialDaysRules\"\n [yearGrid]=\"yearGrid\"\n [aggregatedYearGrid]=\"aggregatedYearGrid\"\n [markWeekends]=\"markWeekends\"\n [spinnerButtons]=\"spinnerButtons\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [showFooter]=\"showFooter\"\n [disableFunction]=\"disableFunction\"\n [processInputOnBlur]=\"processInputOnBlur\"\n [preventScrollOnFocus]=\"preventScrollOnFocus\"\n [mobile]=\"mobile\"\n [mobileConfig]=\"mobileConfig\"\n [mobileLandscape]=\"mobileLandscape\"\n [mobilePortrait]=\"mobilePortrait\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"handleDatetimeInputChange($event)\"\n (activeViewChange)=\"handleActiveViewChange($event)\"\n (isOpenChange)=\"handleOpenChange($event)\"\n (touched)=\"onTouched()\"\n>\n <ng-content></ng-content>\n</fd-datetime-picker>\n","import { NgModule } from '@angular/core';\nimport { PlatformDatetimePickerComponent } from './datetime-picker.component';\n\n@NgModule({\n imports: [PlatformDatetimePickerComponent],\n exports: [PlatformDatetimePickerComponent]\n})\nexport class PlatformDatetimePickerModule {}\n","import { FieldHintOptions } from '@fundamental-ngx/platform/shared';\n\nexport const defaultFormGeneratorHintOptions: Omit<FieldHintOptions, 'content'> = {\n placement: 'right',\n position: 'after',\n trigger: [\n { trigger: 'mouseenter', openAction: true, closeAction: false },\n { trigger: 'mouseleave', openAction: false, closeAction: true },\n { trigger: 'focusin', openAction: true, closeAction: false },\n { trigger: 'focusout', openAction: false, closeAction: true }\n ],\n glyph: 'hint',\n target: 'auto'\n};\n","import { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { AsyncValidatorFn, ValidatorFn } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\n\nimport { DynamicFormControl } from './dynamic-form-control';\n\n/**\n * @description\n * Structural directive, which hides current form item and toggles validation rules for it.\n */\n@Directive({\n selector: '[fdpDynamicFormControlField]',\n standalone: true\n})\nexport class DynamicFormControlFieldDirective implements OnInit {\n /**\n * @description Form control instance.\n */\n @Input()\n set fdpDynamicFormControlField(value: DynamicFormControl) {\n this._control = value;\n\n this._originalValidators = this._control.formItem.validators;\n this._originalAsyncValidators = this._control.formItem.asyncValidators;\n\n this._updateView();\n }\n\n /**\n * @description boolean flag representing if current item should be shown.\n */\n @Input()\n set fdpDynamicFormControlFieldShow(value: boolean) {\n this.shouldShowFormItem = value;\n this._updateView();\n }\n\n /**\n * @hidden\n */\n private _control: DynamicFormControl;\n\n /**\n * @hidden\n */\n private _originalValidators?: Nullable<ValidatorFn | ValidatorFn[]>;\n\n /**\n * @hidden\n */\n private _originalAsyncValidators: Nullable<AsyncValidatorFn | AsyncValidatorFn[]>;\n\n /**\n * @hidden\n */\n private _componentRemoved = true;\n\n /**\n * @hidden\n */\n private _shouldShowFormItem: boolean;\n\n /** @hidden */\n constructor(\n private readonly _templateRef: TemplateRef<any>,\n private readonly _viewContainer: ViewContainerRef\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._updateView();\n }\n\n /**\n * @description If false, validation will be skipped from the form item control\n */\n set shouldShowFormItem(value: boolean) {\n if (value === this._shouldShowFormItem) {\n return;\n }\n\n this._shouldShowFormItem = value;\n\n if (!value) {\n this._control.clearValidators();\n this._control.clearAsyncValidators();\n } else {\n this._control.setValidators(this._originalValidators ?? []);\n this._control.setAsyncValidators(this._originalAsyncValidators ?? []);\n }\n\n this._control.updateValueAndValidity({ emitEvent: false });\n }\n\n /** @hidden */\n private _updateView(): void {\n if (this._shouldShowFormItem && this._componentRemoved) {\n this._viewContainer.createEmbeddedView(this._templateRef);\n this._componentRemoved = false;\n } else if (!this._shouldShowFormItem) {\n this._viewContainer.clear();\n this._componentRemoved = true;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { FieldHintOptions } from '@fundamental-ngx/platform/shared';\nimport { defaultFormGeneratorHintOptions } from './config/default-form-generator-hint-options';\n\nexport const FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS = new InjectionToken<Omit<FieldHintOptions, 'content'>>(\n 'Default options for form-generator hint',\n {\n factory: () => defaultFormGeneratorHintOptions\n }\n);\n","import { Inject, Pipe, PipeTransform, TemplateRef } from '@angular/core';\nimport { FieldHintOptions } from '@fundamental-ngx/platform/shared';\nimport { defaultFormGeneratorHintOptions } from '../config/default-form-generator-hint-options';\nimport { FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS } from '../form-generator.tokens';\nimport { BaseDynamicFormItemGuiOptions, DynamicFormItemGuiOptions } from '../interfaces/dynamic-form-item';\n\n@Pipe({\n name: 'getHintOptions',\n standalone: true\n})\nexport class GetHintOptionsPipe implements PipeTransform {\n /** @hidden */\n private readonly _defaultHintOptions: FieldHintOptions;\n\n /** @hidden */\n constructor(@Inject(FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS) _providedHintOptions: FieldHintOptions) {\n this._defaultHintOptions = {\n ...defaultFormGeneratorHintOptions,\n ..._providedHintOptions\n };\n }\n\n /**\n * Used for extracting hintOptions from GuiOptions. This will coerce string | HintOptions to FieldHintOptions,\n * will combine default value of hints for form generator with provided options.\n */\n transform(\n hintOptions: BaseDynamicFormItemGuiOptions | DynamicFormItemGuiOptions | undefined\n ): FieldHintOptions | undefined {\n if (!hintOptions?.hint) {\n return;\n }\n const formItemHintOptions = hintOptions.hint;\n if (typeof formItemHintOptions === 'string' || formItemHintOptions instanceof TemplateRef) {\n return {\n ...this._defaultHintOptions,\n content: formItemHintOptions\n };\n }\n return {\n ...this._defaultHintOptions,\n ...formItemHintOptions\n };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DynamicFormControl, DynamicFormControlGroup, DynamicFormGroupControl } from '../dynamic-form-control';\n\n@Pipe({\n name: 'getOrderedFieldControls',\n pure: false,\n standalone: true\n})\nexport class GetOrderedFieldControlsPipe implements PipeTransform {\n /** @hidden */\n transform(field: DynamicFormGroupControl): DynamicFormControl[] {\n // casting type explicity to the DynamicFormControl[] as this pipe will be used specifically with this data type\n return Object.values((field as DynamicFormControlGroup).controls).sort((a, b) =>\n (a.formItem.rank ?? -Infinity) > (b.formItem.rank ?? -Infinity) ? 1 : -1\n ) as DynamicFormControl[];\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport { FormControlStatus, FormGroupDirective, FormsModule, NgForm, ReactiveFormsModule } from '@angular/forms';\nimport { Nullable, destroyObservable } from '@fundamental-ngx/cdk/utils';\nimport {\n ColumnLayout,\n FDP_DO_CHECK,\n FDP_FORM_SUBMIT,\n FieldHintOptions,\n HintInput,\n HintOptions,\n PlatformFormFieldControl\n} from '@fundamental-ngx/platform/shared';\nimport { BehaviorSubject, Observable, Subject, Subscription, isObservable, merge, of } from 'rxjs';\nimport { debounceTime, filter, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { FormGeneratorFieldComponent } from '../form-generator-field/form-generator-field.component';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BusyIndicatorModule } from '@fundamental-ngx/core/busy-indicator';\nimport { SkeletonComponent } from '@fundamental-ngx/core/skeleton';\nimport { DefaultGapLayout, DefaultVerticalFieldLayout, DefaultVerticalLabelLayout } from '../../form-group/constants';\nimport { FdpFormGroupModule } from '../../form-group/fdp-form.module';\nimport { defaultFormGeneratorHintOptions } from '../config/default-form-generator-hint-options';\nimport {\n DynamicFormControl,\n DynamicFormControlGroup,\n DynamicFormGroupControl,\n DynamicFormGroupControls\n} from '../dynamic-form-control';\nimport { DynamicFormControlFieldDirective } from '../dynamic-form-control-field.directive';\nimport { FormGeneratorService } from '../form-generator.service';\nimport { FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS } from '../form-generator.tokens';\nimport { getParentItem, isFormFieldItem, mapFormItems, transformFormItem } from '../helpers';\nimport { DynamicFormGroup } from '../interfaces/dynamic-form-group';\nimport {\n DynamicFormItem,\n DynamicFormItemMap,\n DynamicFormItemValidationObject,\n DynamicFormValue\n} from '../interfaces/dynamic-form-item';\nimport { GetHintOptionsPipe } from '../pipes/get-hint-options.pipe';\nimport { GetOrderedFieldControlsPipe } from '../pipes/get-ordered-form-controls.pipe';\n\nlet formUniqueId = 0;\n\nexport type FormGeneratorAcceptableItems = DynamicFormItem[] | Observable<DynamicFormItem[]>;\n\nexport const FDP_FORM_IGNORED_STATUSES: FormControlStatus[] = ['INVALID', 'PENDING', 'DISABLED'];\n\nexport interface SubmitFormEventResult {\n /**\n * @description Indicator if validation has been passed.\n */\n success: boolean;\n /**\n * @description Formatted form value.\n */\n value: DynamicFormValue | null;\n}\n\n/**\n * @description Form Generator component represents a high-level component\n * which includes @see FormGroup inside.\n */\n@Component({\n selector: 'fdp-form-generator',\n templateUrl: './form-generator.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FDP_DO_CHECK,\n useFactory: (formGenerator: FormGeneratorComponent) => formGenerator.doCheck$,\n deps: [FormGeneratorComponent]\n },\n {\n provide: FDP_FORM_SUBMIT,\n useFactory: (formGenerator: FormGeneratorComponent) => formGenerator.ngSubmit$,\n deps: [FormGeneratorComponent]\n }\n ],\n imports: [\n BusyIndicatorModule,\n FdpFormGroupModule,\n FormsModule,\n ReactiveFormsModule,\n NgTemplateOutlet,\n DynamicFormControlFieldDirective,\n FormGeneratorFieldComponent,\n SkeletonComponent,\n GetOrderedFieldControlsPipe,\n GetHintOptionsPipe\n ]\n})\nexport class FormGeneratorComponent implements OnDestroy, OnChanges {\n /** @description Unique form name */\n @Input()\n formName = `fdp-form-generator-${formUniqueId++}`;\n\n /**\n * @description List of @see DynamicFormItem representing the list of items\n * to be rendered in the form.\n */\n @Input()\n set formItems(formItems: FormGeneratorAcceptableItems) {\n if (!formItems) {\n return;\n }\n\n formItems = isObservable(formItems) ? formItems : of(formItems);\n\n this._onFormItemsChange(formItems);\n }\n get formItems(): FormGeneratorAcceptableItems {\n return this._formItems;\n }\n\n /**\n * @description Form main title.\n */\n @Input()\n mainTitle: Nullable<string>;\n\n /**\n * Whether to hide main title. Default is false.\n */\n @Input()\n hideMainTItle = false;\n\n /**\n * @description\n * Hint for the main title\n */\n @Input()\n hint: HintInput;\n\n /**\n * @description Specify the column layout in the format `XLn-Ln-Mn-Sn`\n * where n is the number of columns and can be different for each size.\n * eg: XL2-L2-M2-S1 would create 2-column layouts for XL, L,\n * and M sizes and single-column layout for S size.\n */\n @Input()\n columnLayout: Nullable<string>;\n\n /**\n * Defines label's column layout.\n */\n @Input()\n labelColumnLayout: ColumnLayout = DefaultVerticalLabelLayout;\n\n /**\n * Defines field's column layout.\n */\n @Input()\n fieldColumnLayout: ColumnLayout = DefaultVerticalFieldLayout;\n\n /**\n * Defines gap column layout.\n */\n @Input()\n gapColumnLayout: ColumnLayout = DefaultGapLayout;\n\n /** Whether all form items should have identical layout provided for form group. */\n @Input()\n unifiedLayout = true;\n\n /** Inline column layout */\n @Input()\n inlineColumnLayout: ColumnLayout = DefaultVerticalFieldLayout;\n\n /**\n * @hidden\n * Removes extra empty row.\n * TODO: remove after #7533 has been fixed.\n */\n @Input()\n noAdditionalContent = false;\n\n /**\n * @description Event which notifies parent component that the form has been successfully created\n * and all controls are in place.\n */\n @Output()\n formCreated = new EventEmitter<DynamicFormGroup>();\n\n /**\n * @description Event which notifies parent component that the form has been successfully validated\n * and submitted. Contains form\n */\n @Output()\n formSubmitted = new EventEmitter<DynamicFormValue>();\n\n /**\n * @description Event which notifies parent component that the form was submitted.\n */\n @Output()\n formSubmittedStatus = new EventEmitter<SubmitFormEventResult>();\n\n /**\n * @description Represents the form instance. @see NgForm\n */\n @ViewChild(NgForm)\n ngForm: NgForm;\n\n /** Inner form group directive. */\n @ViewChild(FormGroupDirective)\n formGroup: FormGroupDirective;\n\n /** Inner form fields */\n @ViewChildren(FormGeneratorFieldComponent)\n fields: QueryList<FormGeneratorFieldComponent>;\n\n /** @hidden */\n doCheck$ = new Subject<void>();\n\n /** @hidden */\n ngSubmit$ = new Subject<void>();\n\n /** Array of form field controls. */\n get formFields(): PlatformFormFieldControl[] {\n return this.fields\n ?.toArray()\n .filter((field) => !!field.fieldRenderer?.control)\n .map((field) => field.fieldRenderer.control!);\n }\n\n /**\n * @description Dynamically generated form. @see FormGeneratorService\n */\n form: DynamicFormGroup;\n /**\n * @description List of the form controls.\n */\n formControlItems: DynamicFormGroupControl[];\n\n /**\n * Set of flags representing if particular form item should be visible to the user.\n */\n shouldShowFields: { [key: string]: boolean } = {};\n\n /**\n * Flag representing that form is loading\n */\n formLoading = true;\n\n /**\n * Stream of form loading state.\n */\n loading$ = new BehaviorSubject<boolean>(this.formLoading);\n\n /**\n * Stream of last form submission status.\n */\n formSubmittedStatus$ = new Subject<SubmitFormEventResult>();\n\n /**\n * Stream of last form submission value.\n */\n formValue$ = new BehaviorSubject<DynamicFormValue>({});\n\n /**\n * @hidden\n * To differentiate between first loading when skeletons be shown and subsequent loadings when busy indicator be shown\n */\n _firstLoadingDone = false;\n\n /**\n * @hidden\n */\n hintOptions: HintOptions;\n\n /** @hidden */\n _errorModels: { type: string; value: any }[] = [];\n\n /**\n * @hidden\n */\n private _formItems: FormGeneratorAcceptableItems;\n\n /**\n * @hidden\n */\n private _formValueSubscription: Subscription;\n\n /** @hidden */\n private _refresh$ = new Subject<void>();\n\n /**\n * @hidden\n * An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing)\n */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _defaultHintOptions: FieldHintOptions;\n\n /** @hidden */\n private _ngSubmitSubscription: Subscription | undefined;\n\n /** @hidden */\n private _mappedFormitems: Map<string, DynamicFormItemMap> = new Map();\n\n /** @hidden */\n constructor(\n private _fgService: FormGeneratorService,\n private _cd: ChangeDetectorRef,\n @Inject(FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS) _providedHintOptions: FieldHintOptions\n ) {\n this._defaultHintOptions = {\n ...defaultFormGeneratorHintOptions,\n ..._providedHintOptions\n };\n\n this._errorModels = this._getErrors();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hint) {\n if (typeof this.hint === 'string' || this.hint instanceof TemplateRef) {\n this.hintOptions = {\n ...this._defaultHintOptions,\n content: this.hint\n };\n } else {\n this.hintOptions = {\n ...this._defaultHintOptions,\n ...this.hint\n };\n }\n }\n }\n\n /**\n * @hidden\n */\n ngOnDestroy(): void {\n this._ngSubmitSubscription?.unsubscribe();\n }\n\n /**\n * Refreshes form items visibility with 'when' condition.\n */\n async refreshStepsVisibility(): Promise<void> {\n this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n this._cd.markForCheck();\n }\n\n /**\n * @hidden\n */\n async _onSubmit(): Promise<void> {\n this.form.markAllAsTouched();\n this._cd.detectChanges();\n this.doCheck$.next();\n\n const formValue = await this._fgService.getFormValue(this.form);\n\n this.formSubmittedStatus.emit({ success: !this.form.invalid, value: formValue });\n this.formSubmittedStatus$.next({ success: !this.form.invalid, value: formValue });\n\n if (this.form.invalid) {\n return;\n }\n this.formSubmitted.emit(formValue);\n this.formValue$.next(formValue);\n\n this.form.markAsPristine();\n }\n\n /**\n * Adds new control to an existing form.\n * @param control Control configuration to add.\n * @param path Path of the control.\n */\n async addControl(control: DynamicFormItem, path?: string[]): Promise<void> {\n this._addControlToFormItems(control, path);\n this._fgService.addControl(control, this.form, path);\n\n this.formControlItems = this._getOrderedControls(this.form.controls);\n\n this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n }\n\n /**\n * Removes the control with the given name by the given path.\n * @param name Name of the control.\n * @param path Path of the control.\n */\n async removeControl(name: string, path: string[]): Promise<void> {\n this._removeControlFromItems(name, path);\n this._fgService.removeControl(name, this.form, path);\n this.formControlItems = this._getOrderedControls(this.form.controls);\n\n this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n }\n\n /**\n *\n * @hidden\n */\n _trackFn(index: number, value: DynamicFormGroupControl): string {\n return `${index}_${value.formItem.name}`;\n }\n\n /** @hidden */\n _groupTrackFn(index: number, value: DynamicFormGroupControl): string {\n return (value as DynamicFormControlGroup).formItem.name;\n }\n\n /**\n *\n * @description Programmatically submit form.\n * This method also calls validation for the form items.\n */\n submit(): void {\n this.formGroup.onSubmit(new Event('submit'));\n }\n\n /** @hidden */\n _isAdvancedError(error: any): error is DynamicFormItemValidationObject {\n return error.heading && error.description && error.type;\n }\n\n /** @hidden */\n _errorsTrackBy(_: number, error: { type: string; value: any }): string {\n return error.type;\n }\n\n /**\n * @hidden\n */\n private async _generateForm(): Promise<void> {\n this.formLoading = true;\n this.loading$.next(this.formLoading);\n\n const form = await this._fgService.generateForm(this.formName, this._mappedFormitems);\n\n this._formValueSubscription?.unsubscribe();\n\n this.form = form;\n\n this.formControlItems = this._getOrderedControls(form.controls);\n\n this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n\n this._formValueSubscription = this.form.valueChanges\n .pipe(debounceTime(50), takeUntilDestroyed(this._destroyRef))\n .subscribe(async () => {\n this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n this._cd.markForCheck();\n });\n\n this.formLoading = false;\n this._firstLoadingDone = true;\n\n this._cd.detectChanges();\n\n this.formCreated.emit(this.form);\n this.loading$.next(this.formLoading);\n\n if (!this.formGroup) {\n return;\n }\n\n this._listenToSubmit();\n }\n\n /** @hidden */\n private _getOrderedControls(controls: DynamicFormGroupControls): (DynamicFormControl | DynamicFormControlGroup)[] {\n return Object.values(controls).sort(\n (a, b) => (a.formItem?.rank ?? -Infinity) - (b.formItem?.rank ?? -Infinity)\n );\n }\n\n /** @hidden */\n private _getErrors(): { type: string; value: any }[] {\n const returnErrors: { type: string; value: any }[] = [];\n const registeredErrors = this._fgService.validationErrorHints;\n Object.entries(registeredErrors).forEach((type) => {\n const [errorType, errorValue] = type;\n\n returnErrors.push({\n type: errorType,\n value: errorValue\n });\n });\n\n return returnErrors;\n }\n\n /** @hidden */\n private _listenToSubmit(): void {\n this._ngSubmitSubscription?.unsubscribe();\n this._ngSubmitSubscription = this.formGroup.ngSubmit\n .pipe(\n tap(() => {\n this.ngSubmit$.next();\n }),\n switchMap(() =>\n this.formGroup.statusChanges!.pipe(\n startWith(this.formGroup.status),\n filter((status: FormControlStatus) => status !== 'PENDING'),\n take(1),\n takeUntilDestroyed(this._destroyRef)\n )\n )\n )\n .subscribe(async () => {\n await this._onSubmit();\n this._listenToSubmit();\n });\n }\n\n /** @hidden */\n private _onFormItemsChange(items: Observable<DynamicFormItem[]>): void {\n this._refresh$.next();\n this._refresh$.complete();\n\n this._refresh$ = new Subject();\n\n items.pipe(takeUntil(merge(this._refresh$, destroyObservable(this._destroyRef)))).subscribe((formItems) => {\n this._mappedFormitems = mapFormItems(formItems);\n this._generateForm();\n });\n }\n\n /** @hidden */\n private _applyRank(items: DynamicFormItem[]): DynamicFormItem[] {\n items = items.map((item, index) => {\n item.rank = item.rank || index;\n if (item.items) {\n item.items = this._applyRank(item.items);\n }\n return item;\n });\n\n return items;\n }\n\n /** @hidden */\n private _addControlToFormItems(item: DynamicFormItem, path?: string[]): void {\n if (!path) {\n this._mappedFormitems.set(item.name, transformFormItem(item, this._mappedFormitems.size));\n return;\n }\n\n const parentItem = getParentItem(path, this._mappedFormitems);\n\n if (!parentItem || isFormFieldItem(parentItem)) {\n return;\n }\n\n parentItem.items = parentItem.items || new Map();\n parentItem.items.set(item.name, transformFormItem(item, parentItem.items.size));\n }\n\n /** @hidden */\n private _removeControlFromItems(name: string, path?: string[]): void {\n if (!path) {\n this._mappedFormitems.delete(name);\n return;\n }\n\n const parentItem = getParentItem(path, this._mappedFormitems);\n\n if (!parentItem || isFormFieldItem(parentItem)) {\n return;\n }\n\n parentItem.items?.delete(name);\n }\n}\n","@if (_firstLoadingDone) {\n <fd-busy-indicator [loading]=\"formLoading\" [block]=\"true\">\n @if (form) {\n <fdp-form-group\n [hint]=\"hint\"\n [mainTitle]=\"mainTitle\"\n [hideMainTItle]=\"hideMainTItle\"\n [formGroup]=\"form\"\n [columnLayout]=\"columnLayout\"\n [labelColumnLayout]=\"labelColumnLayout\"\n [fieldColumnLayout]=\"fieldColumnLayout\"\n [gapColumnLayout]=\"gapColumnLayout\"\n [unifiedLayout]=\"unifiedLayout\"\n [inlineColumnLayout]=\"inlineColumnLayout\"\n [useForm]=\"true\"\n >\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n @for (field of formControlItems; track _trackFn($index, field)) {\n <ng-template\n [ngTemplateOutlet]=\"field.type === 'field' ? fieldRenderer : groupRenderer\"\n [ngTemplateOutletContext]=\"{\n field: field,\n formFieldName: field.formItem.name,\n rank: field.formItem?.rank || 0\n }\"\n ></ng-template>\n <ng-template\n #fieldRenderer\n let-field=\"field\"\n let-formFieldName=\"formFieldName\"\n let-formGroupName=\"formGroupName\"\n let-rank=\"rank\"\n >\n <ng-container\n *fdpDynamicFormControlField=\"field; show: shouldShowFields[field.formItem.name] !== false\"\n >\n <fdp-form-generator-field\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [shouldShow]=\"shouldShowFields[field.formItem.name] !== false\"\n [field]=\"field\"\n [formFieldName]=\"formFieldName\"\n [formGroupNamePath]=\"formGroupName\"\n [rank]=\"rank\"\n ></fdp-form-generator-field>\n </ng-container>\n </ng-template>\n <ng-template #groupRenderer>\n <fdp-form-field-group\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [label]=\"field.formItem.message || ''\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [formName]=\"field.formItem.name\"\n >\n @for (\n groupField of field | getOrderedFieldControls;\n track _groupTrackFn($index, groupField)\n ) {\n <ng-container\n *fdpDynamicFormControlField=\"\n groupField;\n show: shouldShowFields[groupField.formItem.name!] !== false\n \"\n >\n <fdp-form-generator-field\n [hintOptions]=\"groupField.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [field]=\"groupField\"\n [shouldShow]=\"shouldShowFields[groupField.formItem.name!] !== false\"\n [formFieldName]=\"groupField.formItem.name\"\n [formGroupNamePath]=\"field.formItem.name\"\n [rank]=\"groupField.formItem.rank || 0\"\n ></fdp-form-generator-field>\n </ng-container>\n }\n </fdp-form-field-group>\n </ng-template>\n }\n @if (!noAdditionalContent) {\n <fdp-form-field [column]=\"1\" [rank]=\"formControlItems.length + 1\">\n <!-- For user-defined elements, like submit button -->\n <ng-content></ng-content>\n </fdp-form-field>\n }\n </fdp-form-group>\n }\n </fd-busy-indicator>\n} @else {\n <fd-skeleton width=\"100%\" height=\"100px\" [style.padding.rem]=\"1\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\nimport { DynamicFormGeneratorCheckboxComponent } from './controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component';\nimport { DynamicFormGeneratorDatepickerComponent } from './controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component';\nimport { DynamicFormGeneratorEditorComponent } from './controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component';\nimport { DynamicFormGeneratorInputComponent } from './controls/dynamic-form-generator-input/dynamic-form-generator-input.component';\nimport { DynamicFormGeneratorMultiInputComponent } from './controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component';\nimport { DynamicFormGeneratorObjectStatusComponent } from './controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component';\nimport { DynamicFormGeneratorRadioComponent } from './controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component';\nimport { DynamicFormGeneratorSelectComponent } from './controls/dynamic-form-generator-select/dynamic-form-generator-select.component';\nimport { DynamicFormGeneratorSwitchComponent } from './controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component';\nimport { DynamicFormControlFieldDirective } from './dynamic-form-control-field.directive';\nimport { DynamicFormControlDirective } from './dynamic-form-control.directive';\nimport { FormGeneratorComponentsAccessorService } from './form-generator-components-accessor.service';\nimport { FormGeneratorFieldComponent } from './form-generator-field/form-generator-field.component';\nimport { FormGeneratorService } from './form-generator.service';\nimport { FormGeneratorComponent } from './form-generator/form-generator.component';\nimport { FormGeneratorModuleConfig } from './interfaces/form-generator-module-config';\nimport { GetHintOptionsPipe } from './pipes/get-hint-options.pipe';\nimport { GetOrderedFieldControlsPipe } from './pipes/get-ordered-form-controls.pipe';\nimport {\n FORM_GENERATOR_CONFIG,\n FORM_GENERATOR_ITEM_CONFIG,\n defaultFormGeneratorConfigProvider,\n defaultFormGeneratorItemConfigProvider\n} from './providers/providers';\n\n/**\n * Adds Form Generator functionality to your application.\n *\n * Can be imported in two ways:\n * * Plain PlatformFormGeneratorModule with default configuration\n * * With `withConfig()` method which allows passing custom default configuration.\n */\n@NgModule({\n imports: [\n FormGeneratorComponent,\n DynamicFormControlFieldDirective,\n DynamicFormControlDirective,\n DynamicFormGeneratorCheckboxComponent,\n DynamicFormGeneratorInputComponent,\n DynamicFormGeneratorEditorComponent,\n DynamicFormGeneratorSelectComponent,\n DynamicFormGeneratorRadioComponent,\n DynamicFormGeneratorDatepickerComponent,\n DynamicFormGeneratorSwitchComponent,\n FormGeneratorFieldComponent,\n DynamicFormGeneratorMultiInputComponent,\n GetOrderedFieldControlsPipe,\n DynamicFormGeneratorObjectStatusComponent,\n GetHintOptionsPipe\n ],\n providers: [\n FormGeneratorService,\n FormGeneratorComponentsAccessorService,\n defaultFormGeneratorItemConfigProvider,\n defaultFormGeneratorConfigProvider\n ],\n exports: [\n FormGeneratorComponent,\n DynamicFormControlFieldDirective,\n DynamicFormControlDirective,\n DynamicFormGeneratorCheckboxComponent,\n DynamicFormGeneratorInputComponent,\n DynamicFormGeneratorEditorComponent,\n DynamicFormGeneratorSelectComponent,\n DynamicFormGeneratorRadioComponent,\n DynamicFormGeneratorDatepickerComponent,\n DynamicFormGeneratorSwitchComponent,\n FormGeneratorFieldComponent,\n ContentDensityModule,\n DynamicFormGeneratorObjectStatusComponent,\n GetHintOptionsPipe\n ]\n})\nexport class PlatformFormGeneratorModule {\n /**\n * Allows configuring module on a global level with custom configuration.\n * @param config User's custom configuration.\n */\n static withConfig(config: Partial<FormGeneratorModuleConfig>): ModuleWithProviders<PlatformFormGeneratorModule> {\n return {\n ngModule: PlatformFormGeneratorModule,\n providers: [\n {\n provide: FORM_GENERATOR_ITEM_CONFIG,\n useValue: config.itemConfig\n },\n {\n provide: FORM_GENERATOR_CONFIG,\n useValue: config.formConfig\n }\n ]\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { InputComponent } from './input.component';\n\n@NgModule({\n imports: [InputComponent],\n exports: [InputComponent]\n})\nexport class PlatformInputModule {}\n","import { InjectionToken } from '@angular/core';\n\nexport const CSS_CLASS_NAME = {\n host: 'fdp-input-group',\n input: 'fd-input-group__input',\n addon: 'fd-input-group__addon',\n addonButton: 'fd-input-group__addon--button',\n button: 'fd-input-group__button'\n} as const;\n\nexport const INPUT_GROUP_CHILD_TOKEN = new InjectionToken<string>('INPUT_GROUP_CHILD_TOKEN');\n","import { ChangeDetectionStrategy, Component, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { CSS_CLASS_NAME } from './constants';\n\n/**\n * Fundamental input group addon body component\n */\n@Component({\n selector: 'fdp-input-group-addon-body',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [contentDensityObserverProviders()],\n imports: [ContentDensityModule]\n})\nexport class InputGroupAddonBodyComponent implements OnInit {\n /**\n * indicates if addon contains a button\n */\n @Input()\n set hasButton(hasButton: boolean) {\n if (hasButton) {\n this._addClassNameToHostElement(CSS_CLASS_NAME.addonButton);\n } else {\n this._removeClassNameFromHostElement(CSS_CLASS_NAME.addonButton);\n }\n }\n\n /** @hidden */\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _renderer: Renderer2,\n contentDensityObserver: ContentDensityObserver\n ) {\n contentDensityObserver.subscribe();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._addClassNameToHostElement(CSS_CLASS_NAME.addon);\n }\n\n /** @hidden */\n private _addClassNameToHostElement(className: string): void {\n this._renderer.addClass(this._elementRef.nativeElement, className);\n }\n\n /** @hidden */\n private _removeClassNameFromHostElement(className: string): void {\n this._renderer.removeClass(this._elementRef.nativeElement, className);\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n Provider,\n Renderer2,\n TemplateRef,\n ViewChild,\n forwardRef\n} from '@angular/core';\n\nimport { ButtonComponent, ButtonModel, FDP_BUTTON } from '@fundamental-ngx/platform/button';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { BaseButton, FD_BUTTON_COMPONENT } from '@fundamental-ngx/core/button';\nimport { CSS_CLASS_NAME, INPUT_GROUP_CHILD_TOKEN } from './constants';\n\nexport const inputGroupAddonChildProvider: Provider = {\n provide: INPUT_GROUP_CHILD_TOKEN,\n useExisting: forwardRef(() => InputGroupAddonComponent)\n};\n\n/**\n * Fundamental input group addon component\n *\n * This component is intended to be used inside `<fdp-input-group>`\n *\n *\n * Input group addon can contain a plain text:\n * ```\n * <fdp-input-group-addon>$</fdp-input-group-addon>\n * ```\n * Icon:\n * ```\n * <fdp-input-group-addon><i class=\"sap-icon--employee\"></i></fdp-input-group-addon>\n * ```\n * Button component:\n * ```\n * <fdp-input-group-addon><fdp-button label=\"Action\"></fdp-button></fdp-input-group-addon>\n * ```\n *\n */\n@Component({\n selector: 'fdp-input-group-addon',\n template: '<ng-template><ng-content></ng-content></ng-template>',\n providers: [inputGroupAddonChildProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class InputGroupAddonComponent implements AfterContentInit {\n /** @hidden */\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n this._setButtonControlOptions();\n }\n get disabled(): boolean {\n return this._disabled;\n }\n\n /** @hidden */\n @ViewChild(TemplateRef)\n contentTemplateRef: TemplateRef<any>;\n\n /** @hidden */\n @ContentChild(FDP_BUTTON)\n platformButton: Nullable<ButtonModel>;\n\n /** @hidden */\n @ContentChild(FD_BUTTON_COMPONENT)\n coreButton: Nullable<BaseButton>;\n\n /** @hidden */\n @ContentChild(ButtonComponent, { read: ElementRef })\n set buttonElementRef(buttonComponentElementRef: ElementRef<HTMLElement>) {\n this._setButtonElementClass(buttonComponentElementRef?.nativeElement);\n }\n\n /** @hidden */\n get button(): Nullable<ButtonModel> {\n return this.platformButton || this.coreButton;\n }\n\n /** @hidden */\n private _disabled = false;\n\n /** @hidden */\n constructor(private _renderer: Renderer2) {}\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._setButtonControlOptions();\n }\n\n /** @hidden */\n private _setButtonControlOptions(): void {\n const button = this.platformButton || this.coreButton;\n\n if (!button) {\n return;\n }\n\n button.fdType = 'transparent';\n button.disabled = this._disabled;\n\n button.markForCheck();\n }\n\n /** @hidden */\n private _setButtonElementClass(buttonComponentElement: HTMLElement): void {\n if (!buttonComponentElement) {\n return;\n }\n const button = buttonComponentElement.querySelector('button');\n this._renderer.addClass(button, CSS_CLASS_NAME.button);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for platform input group\n */\n@Injectable({ providedIn: 'root' })\nexport class InputGroupConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /** @hidden */\n constructor(platformConfig: PlatformConfig) {\n this.contentDensity = platformConfig.contentDensity;\n }\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<InputGroupConfig>): (platformConfig: PlatformConfig) => InputGroupConfig {\n const useFactory = (platformConfig: PlatformConfig): InputGroupConfig =>\n Object.assign(new InputGroupConfig(platformConfig), obj);\n return useFactory;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, Provider, forwardRef } from '@angular/core';\n\nimport { InputType } from '../input/input.component';\nimport { INPUT_GROUP_CHILD_TOKEN } from './constants';\n\n/**\n * fdp-input-group needs it's own input component to\n * register INPUT_GROUP_CHILD in order to render\n * input group content children in the order that they are placed\n *\n */\n\nexport const inputGroupInputChildProvider: Provider = {\n provide: INPUT_GROUP_CHILD_TOKEN,\n useExisting: forwardRef(() => InputGroupInputComponent)\n};\n\n/**\n * Fundamental input group input component\n *\n * This component is intended to be used inside `<fdp-input-group>`\n *\n * Example:\n * ```\n * <fdp-input-group name=\"group\">\n * <fdp-input-group-input type=\"email\"></fdp-input-group-input>\n * </fdp-input-group>\n * ```\n *\n */\n@Component({\n selector: 'fdp-input-group-input',\n template: '',\n providers: [inputGroupInputChildProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class InputGroupInputComponent {\n /** InputType 'text' | 'number' | 'email' | 'password' */\n @Input()\n type: InputType = 'text';\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n forwardRef,\n Input,\n OnInit,\n QueryList,\n Renderer2,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CvaControl, CvaDirective, FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { warnOnce } from '@fundamental-ngx/cdk/utils';\nimport { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { startWith } from 'rxjs/operators';\nimport { InputComponent } from '../input/input.component';\nimport { InputGroupAddonComponent } from './addon.component';\nimport { CSS_CLASS_NAME, INPUT_GROUP_CHILD_TOKEN } from './constants';\nimport { InputGroupConfig } from './input-group.config';\nimport { InputGroupInputComponent } from './input.component';\n\n/**\n * Fundamental input group component\n *\n * ```html\n * <fdp-input-group>\n * <fdp-input-group-addon>$</fdp-input-group-addon>\n * <fdp-input-group-input type=\"number\"></fdp-input-group-input>\n * <fdp-input-group-addon>0.00</fdp-input-group-addon>\n * </fdp-input-group>\n * ```\n *\n */\n@Component({\n selector: 'fdp-input-group',\n templateUrl: './input-group.component.html',\n styleUrl: './input-group.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: CvaDirective,\n inputs: ['placeholder', 'disabled', 'readonly', 'state', 'name', 'stateMessage']\n }\n ],\n providers: [\n CvaControl,\n { provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => InputGroupComponent), multi: true },\n contentDensityObserverProviders()\n ],\n imports: [NgTemplateOutlet, InputGroupModule, FormControlComponent, FormsModule]\n})\nexport class InputGroupComponent implements OnInit, AfterContentInit {\n /** Input value */\n @Input()\n set value(value: any) {\n this._cvaControl.cvaDirective?.setValue(value);\n }\n get value(): any {\n return this._cvaControl.cvaDirective?.value;\n }\n\n /** @hidden */\n @ContentChildren(INPUT_GROUP_CHILD_TOKEN)\n _children: QueryList<InputGroupInputComponent | InputGroupAddonComponent>;\n\n /** @hidden */\n @ContentChild(InputGroupInputComponent)\n _input: InputGroupInputComponent;\n\n /** @hidden */\n @ViewChild(InputComponent, { read: ElementRef })\n set _inputComponentElement(inputComponentElementRef: ElementRef<HTMLElement>) {\n this._setInputElementClass(inputComponentElementRef?.nativeElement);\n }\n\n /** @hidden */\n _beforeInputAddons: InputGroupAddonComponent[] = [];\n\n /** @hidden */\n _afterInputAddons: InputGroupAddonComponent[] = [];\n\n /** @hidden */\n constructor(\n readonly _cvaControl: CvaControl<string | number>,\n private _renderer: Renderer2,\n protected _hostElementRef: ElementRef<HTMLElement>,\n protected _inputGroupConfig: InputGroupConfig\n ) {\n warnOnce(\n `[Deprecated] Platform Input Group Component is deprecated and will be removed in the next major version.\n Please use Core implementation of Input Group Component instead.`\n );\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._cvaControl.listenToChanges();\n /**\n * Assign predefined className to host element\n * to make css selector stronger\n */\n this._addClassNameToHostElement(CSS_CLASS_NAME.host);\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._listenToChildrenQueryListChanges();\n }\n\n /**\n * @hidden\n * override base functionality to catch new disabled state\n */\n setDisabledState(disabled: boolean): void {\n this._cvaControl.cvaDirective?.setDisabledState(disabled);\n this._setAddonsOptions();\n }\n\n /** @hidden */\n _onChangeInputValue(value: string): void {\n this.value = value;\n }\n\n /** @hidden */\n _onKeyPress(event: KeyboardEvent): void {\n // prevent typing non-digit chars\n if (this._input.type === 'number') {\n if (!event.key.match(/([0-9]|[-]|[,]|[.])/)) {\n event.preventDefault();\n }\n }\n }\n\n /** @hidden */\n private _listenToChildrenQueryListChanges(): void {\n this._children.changes.pipe(startWith(this._children)).subscribe(() => {\n this._createAddonsGroups();\n this._setAddonsOptions();\n });\n }\n\n /** @hidden */\n private _setInputElementClass(inputComponentElement: HTMLElement): void {\n if (!inputComponentElement) {\n return;\n }\n\n const inputElement = inputComponentElement.querySelector('input');\n this._renderer.addClass(inputElement, CSS_CLASS_NAME.input);\n }\n\n /** @hidden */\n private _createAddonsGroups(): void {\n const childrenList = this._children.toArray();\n const inputChildIndex = childrenList.findIndex((child) => this._isInputChild(child));\n\n // reset group's containers\n this._beforeInputAddons = [];\n this._afterInputAddons = [];\n\n childrenList.forEach((child, index) => {\n if (!this._isAddonChild(child)) {\n return;\n }\n if (index < inputChildIndex) {\n this._beforeInputAddons.push(child);\n }\n if (index > inputChildIndex) {\n this._afterInputAddons.push(child);\n }\n });\n }\n\n /** @hidden */\n private _isInputChild(child: unknown): child is InputGroupInputComponent {\n return child instanceof InputGroupInputComponent;\n }\n\n /** @hidden */\n private _isAddonChild(child: unknown): child is InputGroupAddonComponent {\n return child instanceof InputGroupAddonComponent;\n }\n\n /** @hidden */\n private _setAddonsOptions(): void {\n const before = this._beforeInputAddons || [];\n const after = this._afterInputAddons || [];\n [...before, ...after].forEach((addon) => {\n addon.disabled = this._cvaControl.cvaDirective?.disabled === true;\n });\n }\n\n /** @hidden */\n private _addClassNameToHostElement(className: string): void {\n this._renderer.addClass(this._hostElementRef.nativeElement, className);\n }\n}\n","<fd-input-group\n [disabled]=\"!!_cvaControl.cvaDirective?.disabled\"\n [(ngModel)]=\"value\"\n [state]=\"_cvaControl?.cvaDirective?.normalizedState$() || 'default'\"\n [stateMessage]=\"_cvaControl.cvaDirective?.stateMessage\"\n>\n <!-- Before input addons area -->\n @for (addon of _beforeInputAddons; track addon) {\n <span fd-input-group-addon [button]=\"!!addon.button\">\n <ng-template [ngTemplateOutlet]=\"addon.contentTemplateRef\"></ng-template>\n </span>\n }\n @if (_input) {\n <input\n [attr.name]=\"_cvaControl.cvaDirective?.name\"\n [attr.id]=\"_cvaControl.cvaDirective?.id\"\n [attr.placeholder]=\"_cvaControl.cvaDirective?.placeholder\"\n [type]=\"_input.type\"\n [disabled]=\"!!_cvaControl.cvaDirective?.disabled\"\n [class.is-disabled]=\"!!_cvaControl.cvaDirective?.disabled\"\n [(ngModel)]=\"value\"\n [ariaLabel]=\"_cvaControl.cvaDirective?.ariaLabel\"\n [ariaLabelledBy]=\"_cvaControl.cvaDirective?.ariaLabelledBy\"\n [attr.required]=\"_cvaControl.cvaDirective?.required\"\n (input)=\"_onChangeInputValue($any($event.target)?.value)\"\n (focus)=\"_cvaControl.cvaDirective?._onFocusChanged(true)\"\n (blur)=\"_cvaControl.cvaDirective?._onFocusChanged(false)\"\n (keypress)=\"_onKeyPress($event)\"\n fd-input-group-input\n fd-form-control\n />\n }\n <!-- Before input addons area -->\n @for (addon of _afterInputAddons; track addon) {\n <span fd-input-group-addon [button]=\"!!addon.button\">\n <ng-template [ngTemplateOutlet]=\"addon.contentTemplateRef\"></ng-template>\n </span>\n }\n</fd-input-group>\n","import { NgModule } from '@angular/core';\n\nimport { InputGroupAddonBodyComponent } from './addon-body.component';\nimport { InputGroupAddonComponent } from './addon.component';\nimport { InputGroupComponent } from './input-group.component';\nimport { InputGroupInputComponent } from './input.component';\n\n@NgModule({\n imports: [InputGroupComponent, InputGroupAddonComponent, InputGroupAddonBodyComponent, InputGroupInputComponent],\n exports: [InputGroupComponent, InputGroupAddonComponent, InputGroupInputComponent]\n})\nexport class PlatformInputGroupModule {}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { DataProvider, MatchingStrategy, PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Multi-Combobox\n */\n@Injectable({ providedIn: 'root' })\nexport class MultiComboboxConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /**\n * String matching strategy for typeahead list. Default: 'starts with per term'\n */\n matchingStrategy: MatchingStrategy = MatchingStrategy.STARTS_WITH_PER_TERM;\n\n /**\n * Maps data providers\n */\n providers: Map<string, DataProvider<any>> | null = new Map();\n\n /** @hidden */\n constructor(platformConfig: PlatformConfig) {\n this.contentDensity = platformConfig.contentDensity;\n }\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(\n obj: Partial<MultiComboboxConfig>\n ): (platformConfig: PlatformConfig) => MultiComboboxConfig {\n const useFactory = (platformConfig: PlatformConfig): MultiComboboxConfig =>\n Object.assign(new MultiComboboxConfig(platformConfig), obj);\n return useFactory;\n }\n}\n","import {\n ALT,\n BACKSPACE,\n CONTROL,\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n LEFT_ARROW,\n RIGHT_ARROW,\n SHIFT,\n TAB,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n InjectionToken,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n signal,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport equal from 'fast-deep-equal';\nimport { fromEvent, isObservable, Observable, Subject, Subscription, timer } from 'rxjs';\nimport { skip } from 'rxjs/operators';\n\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport {\n ContentDensity,\n FocusEscapeDirection,\n KeyUtil,\n Nullable,\n RangeSelector,\n TemplateDirective\n} from '@fundamental-ngx/cdk/utils';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { ListComponent } from '@fundamental-ngx/core/list';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport {\n ArrayMultiComboBoxDataSource,\n coerceArraySafe,\n CollectionBaseInput,\n isDataSource,\n isFunction,\n isJsObject,\n isOptionItem,\n isSelectableOptionItem,\n isString,\n MatchingBy,\n MatchingStrategy,\n MultiComboBoxDataSource,\n ObservableMultiComboBoxDataSource,\n SelectableOptionItem\n} from '@fundamental-ngx/platform/shared';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FD_LANGUAGE, FdLanguage, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { TextAlignment } from '../../combobox';\nimport { MultiComboboxConfig } from '../multi-combobox.config';\n\nexport const MAP_LIMIT = new InjectionToken<number>('Map limit≥', { factory: () => 12 });\n\nexport type FdpMultiComboboxDataSource<T> = MultiComboBoxDataSource<T> | Observable<T[]> | T[];\n\nexport class MultiComboboxSelectionChangeEvent {\n /**\n * Multi Combobox selection change event\n * @param source Multi Combobox component\n * @param selectedItems Selected items\n */\n constructor(\n public source: BaseMultiCombobox,\n public selectedItems: SelectableOptionItem['value'] // Contains selected items\n ) {}\n}\n\n@Directive()\nexport abstract class BaseMultiCombobox extends CollectionBaseInput implements OnChanges, AfterViewInit, OnDestroy {\n /**\n * @hidden\n * Method to set input text as item label.\n */\n abstract setInputTextFromOptionItem(item: SelectableOptionItem): void;\n\n /**\n * @hidden\n * Toggle item selection.\n */\n abstract toggleSelection(item: SelectableOptionItem): void;\n\n /**\n * @hidden\n * Toggle item selection by input text value.\n */\n abstract toggleSelectionByInputText(): void;\n\n /** Provides selected items. */\n @Input()\n selectedItems: any[] = [];\n\n /** Provides maximum height for the optionPanel. */\n @Input()\n maxHeight = '250px';\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = false;\n /** Datasource for suggestion list. */\n @Input()\n set dataSource(value: FdpMultiComboboxDataSource<any>) {}\n\n get dataSource(): FdpMultiComboboxDataSource<any> {\n return this._dataSource;\n }\n\n /** Whether the autocomplete should be enabled; Enabled by default. */\n @Input()\n autoComplete = true;\n\n /**\n * TODO: Name of the entity for which DataProvider will be loaded. You can either pass list of\n * items or use this entityClass and internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input()\n entityClass: string;\n\n /** Whether the multi-combobox should be built on mobile mode. */\n @Input()\n mobile = false;\n\n /** Multi Combobox Mobile Configuration, it's applied only, when mobile is enabled. */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Tells the multi-combobox if we need to group items. */\n @Input()\n group = false;\n\n /** A field name to use to group data by (support dotted notation). */\n @Input()\n groupKey: string;\n\n /** The field to show data in secondary column. */\n @Input()\n secondaryKey: string;\n\n /** Show the second column (applicable for two columns layout). */\n @Input()\n showSecondaryText = false;\n\n /** Horizontally align text inside the second column (applicable for two columns layout). */\n @Input()\n secondaryTextAlignment: TextAlignment = 'right';\n\n /** Turns on/off Adjustable Width feature. */\n @Input()\n autoResize = false;\n /** Value of the multi combobox */\n @Input()\n set value(value: any) {\n super.setValue(value, true);\n }\n\n get value(): any {\n return super.getValue();\n }\n\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /** Sets title attribute to addon button. */\n @Input()\n addonIconTitle: string;\n\n /**\n * @deprecated Use the i18n module to modify the translation for this string.\n * Sets invalid entry message.\n * */\n @Input()\n invalidEntryMessage: Nullable<string>;\n\n /** Turns limitless mode, ON or OFF */\n @Input()\n limitless: boolean;\n\n /** Whether to open the dropdown when the addon button is clicked. */\n @Input()\n openDropdownOnAddOnClicked = true;\n\n /** Event emitted when item is selected. */\n @Output()\n selectionChange = new EventEmitter<MultiComboboxSelectionChangeEvent>();\n\n /** @hidden Emits event when the menu is opened/closed. */\n @Output()\n isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when data loading is started. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataRequested = new EventEmitter<void>();\n\n /** Event emitted when data loading is finished. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataReceived = new EventEmitter<void>();\n\n /** Emits event when the addon button is clicked. */\n @Output()\n addOnButtonClicked: EventEmitter<Event> = new EventEmitter<Event>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n listComponent: ListComponent;\n\n /** @hidden */\n @ViewChild('searchInputElement', { read: ElementRef })\n searchInputElement: ElementRef;\n\n /** @hidden */\n @ContentChildren(TemplateDirective)\n customTemplates: QueryList<TemplateDirective>;\n\n /**\n * @hidden\n * Custom Option item Template.\n */\n optionItemTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * Custom Group Header item Template.\n */\n groupItemTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * Custom Secondary item Template.\n */\n secondaryItemTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * Custom Selected option item Template.\n */\n selectedItemTemplate: TemplateRef<any>;\n\n /** @hidden */\n _contentDensity: ContentDensity;\n\n /** @hidden */\n listTemplate: TemplateRef<any>;\n\n /** Set the input text of the input. */\n set inputText(value: string) {\n this._inputTextValue = value;\n\n this.onTouched();\n }\n\n /** Get the input text of the input. */\n get inputText(): string {\n return this._inputTextValue || '';\n }\n\n /** Is empty search field. */\n get isEmptyValue(): boolean {\n return this.inputText.trim().length === 0;\n }\n\n /** @hidden */\n get isGroup(): boolean {\n return !!(this.group && this.groupKey);\n }\n\n /** Whether the Multi Input is opened. */\n isOpen = false;\n\n /**\n * @hidden\n * List of matched suggestions\n */\n _suggestions: SelectableOptionItem[];\n\n /**\n * @hidden\n * Grouped suggestions mapped to array.\n */\n _flatSuggestions: SelectableOptionItem[] = [];\n\n /** @hidden */\n _fullFlatSuggestions: SelectableOptionItem[] = [];\n\n /**\n * @hidden\n * List of selected suggestions\n */\n _selectedSuggestions: SelectableOptionItem[];\n\n /**\n * @hidden\n * Max width of list container\n */\n maxWidth: number;\n\n /**\n * @hidden\n * Min width of list container\n */\n minWidth: number;\n\n /**\n * @hidden\n * Need for opening mobile version\n */\n openChange = new Subject<boolean>();\n\n /** @hidden */\n selectedShown$ = signal(false);\n\n /** @hidden */\n protected readonly multiComboboxConfig = inject(MultiComboboxConfig);\n\n /** @hidden */\n protected readonly _rangeSelector = new RangeSelector();\n\n /** @hidden */\n protected readonly dialogConfig = inject(DialogConfig, { optional: true });\n\n /** @hidden */\n protected _dataSource: FdpMultiComboboxDataSource<any>;\n\n /** @hidden */\n private _inputTextValue: string;\n\n /** @hidden */\n private _previousInputText: string;\n\n /** @hidden */\n private _matchingStrategy: MatchingStrategy = this.multiComboboxConfig.matchingStrategy;\n\n /** @hidden */\n private _dsSubscription: Subscription | null = null;\n\n /** @hidden */\n private _element: HTMLElement = this.elementRef.nativeElement;\n\n /**\n * @hidden\n * Keys, that won't trigger the popover's open state, when dispatched on search input.\n */\n private readonly _nonOpeningKeys: number[] = [\n BACKSPACE,\n ESCAPE,\n ENTER,\n CONTROL,\n TAB,\n SHIFT,\n UP_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n LEFT_ARROW,\n ALT\n ];\n\n /** @hidden */\n private _timerSub$: Subscription;\n\n /** @hidden */\n private _previousState?: FormStates;\n\n /** @hidden */\n private _previousStateMessage: Nullable<string>;\n\n /** @hidden */\n private readonly _mapLimit = inject(MAP_LIMIT);\n\n /** @hidden */\n private readonly _lang$ = inject(FD_LANGUAGE);\n\n /** @hidden */\n private _translationResolver = new TranslationResolver();\n\n /** @hidden */\n protected constructor() {\n super();\n this._contentDensity = this.multiComboboxConfig.contentDensity;\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n const dataSourceChange = changes['dataSource'];\n\n if (dataSourceChange) {\n this._initializeDataSource(dataSourceChange.currentValue);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._initWindowResize();\n this._assignCustomTemplates();\n this._previousInputText = this.inputText;\n this._subscriptions.add(\n this._lang$.subscribe((lang: FdLanguage) => {\n this.invalidEntryMessage = this._translationResolver.resolve(\n lang,\n 'platformMultiCombobox.invalidEntryError'\n );\n })\n );\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as MultiComboBoxDataSource<any>).close();\n }\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n }\n }\n\n /** write value for ControlValueAccessor */\n writeValue(value: any): void {\n this.selectedItems = coerceArraySafe(value);\n super.writeValue(this.selectedItems);\n this._setSelectedSuggestions();\n this._emitChangeEvent();\n }\n\n /** @hidden */\n popoverOpenChangeHandle(isOpen: boolean): void {\n this.isOpen = isOpen;\n this._rangeSelector.reset();\n if (!isOpen) {\n this.onTouched();\n }\n this._onOpenChange(this.isOpen);\n }\n\n /** @hidden */\n _onOpenChange(isOpen: boolean): void {\n if (isOpen) {\n this.formMessage._popover.close();\n }\n this.formMessage._popover.setIgnoreTriggers(isOpen);\n }\n\n /** Opens the select popover body. */\n open(): void {\n this.isOpen = true;\n this.isOpenChange.emit(this.isOpen);\n this.markForCheck();\n }\n\n /** Closes the select popover body. */\n close(): void {\n this._rangeSelector.reset();\n this.selectedShown$.set(false);\n this.inputText = '';\n this._focusToSearchField();\n\n this.isOpen = false;\n this.isOpenChange.emit(this.isOpen);\n this.markForCheck();\n }\n\n /** @hidden */\n showList(isOpen: boolean): void {\n if (this.isOpen !== isOpen) {\n this.isOpen = isOpen;\n this.onTouched();\n this.openChange.next(isOpen);\n }\n\n if (!this.isOpen) {\n this.searchTermChanged('');\n }\n\n this.markForCheck();\n }\n\n /** @hidden */\n searchTermChanged(text: string = this.inputText): void {\n if (text) {\n this.open();\n }\n\n const map = new Map();\n map.set('query', text);\n\n if (!this.limitless) {\n map.set('limit', this._mapLimit);\n } else {\n map.set('limit', Number.MAX_SAFE_INTEGER);\n }\n\n this.ds.match(map);\n\n this.markForCheck();\n }\n\n /**\n * Handle Click on Button\n * @hidden\n */\n onPrimaryButtonClick(isOpen: boolean): void {\n if (!isOpen) {\n this.searchTermChanged('');\n }\n\n if (this.openDropdownOnAddOnClicked) {\n this.showList(!isOpen);\n } else if (this.isOpen) {\n this.showList(false);\n }\n\n this.searchInputElement?.nativeElement.focus();\n }\n\n /**\n * Handle Keydown on Input\n * @hidden\n */\n onInputKeydownHandler(event: KeyboardEvent): void {\n if (this.readonly) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n event.preventDefault();\n\n if (event.altKey) {\n this.showList(true);\n }\n\n if (this.isOpen && this.listComponent) {\n this.listComponent.setItemActive(0);\n } else if (!this.isOpen) {\n this._chooseOtherItem(1);\n }\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n event.preventDefault();\n\n this._chooseOtherItem(-1);\n } else if (KeyUtil.isKeyCode(event, ENTER)) {\n this.toggleSelectionByInputText();\n } else if (!KeyUtil.isKeyCode(event, [...this._nonOpeningKeys, CONTROL])) {\n this.showList(true);\n const acceptedKeys =\n !KeyUtil.isKeyType(event, 'alphabetical') &&\n !KeyUtil.isKeyType(event, 'numeric') &&\n !KeyUtil.isKeyType(event, 'ime');\n if (acceptedKeys) {\n // SetTimeout is needed for input to receive new value.\n setTimeout(() => {\n if (this.isEmptyValue) {\n this.listComponent?.setItemActive(0);\n }\n });\n }\n }\n }\n\n /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n\n /** @hidden */\n setLimitless(limitless: boolean): void {\n this.limitless = limitless;\n }\n\n /** @hidden */\n getMapLimit(): number {\n return this.limitless ? (this.dataSource as any[]).length : this._mapLimit;\n }\n\n /**\n * @hidden\n * Method to emit change event\n */\n _emitChangeEvent(): void {\n const event = new MultiComboboxSelectionChangeEvent(this, this.value);\n\n this.selectionChange.emit(event);\n }\n\n /**\n * Used to change the value of a control.\n * @param value the value to be applied\n * @param emitOnChange whether to emit \"onChange\" event.\n * Should be \"false\", if the change is made programmatically (internally) by the control, \"true\" otherwise\n */\n protected setValue(value: any, emitOnChange = true): void {\n this.selectedItems = coerceArraySafe(value);\n super.setValue(this.selectedItems, emitOnChange);\n this._setSelectedSuggestions();\n this._emitChangeEvent();\n }\n\n /** @hidden */\n protected _setSelectedSuggestions(): void {\n this._selectedSuggestions = [];\n\n if (!this.selectedItems?.length) {\n return;\n }\n\n for (let i = 0; i < this.selectedItems.length; i++) {\n const selectedItem = this.selectedItems[i];\n const finder = (item: SelectableOptionItem): boolean =>\n item.label === selectedItem || item.value === selectedItem;\n const idFromFullFlatSuggestions = this._fullFlatSuggestions.findIndex(finder);\n const idFromSuggestions = (this._suggestions || []).findIndex(finder);\n const itemIndex = Math.max(idFromFullFlatSuggestions, idFromSuggestions);\n const collection = idFromFullFlatSuggestions !== -1 ? this._fullFlatSuggestions : this._suggestions;\n if (idFromFullFlatSuggestions === -1 && idFromSuggestions === -1) {\n this._convertToOptionItems([selectedItem]).forEach((optionItem: SelectableOptionItem) => {\n optionItem.selected = true;\n this._selectedSuggestions.push(optionItem);\n });\n } else if (\n this._suggestions &&\n collection === this._suggestions &&\n !this._fullFlatSuggestions.includes(collection[itemIndex])\n ) {\n this._fullFlatSuggestions.push(collection[itemIndex]);\n }\n if (itemIndex > -1) {\n this._selectedSuggestions.push(collection[itemIndex]);\n collection[itemIndex].selected = true;\n }\n }\n\n this.detectChanges();\n }\n\n /** @hidden */\n protected get ds(): MultiComboBoxDataSource<any> {\n return this.dataSource as MultiComboBoxDataSource<any>;\n }\n\n /** @hidden */\n protected _focusToSearchField(): void {\n this.searchInputElement?.nativeElement.focus();\n }\n\n /** @hidden */\n protected _getSelectItemByInputValue(displayValue: string): SelectableOptionItem | undefined {\n return this._flatSuggestions.find((value) => value.label === displayValue);\n }\n\n /** @hidden\n * Map grouped values to array. */\n protected _flattenGroups(items: SelectableOptionItem[]): SelectableOptionItem[] {\n return items.reduce((result, item) => result.concat(item.children ?? []), <SelectableOptionItem[]>[]);\n }\n\n /**\n * Convert object[] data to Group OptionItems Interface\n * @hidden\n */\n protected _convertObjectsToGroupOptionItems<K>(items: K[]): SelectableOptionItem[] {\n const group: { [key: string]: K[] } = {};\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const keyValue = item[this.groupKey];\n if (!keyValue) {\n continue;\n }\n\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n\n group[keyValue].push(item);\n }\n\n return Object.keys(group).map((key) => {\n const selectItem: SelectableOptionItem = {\n label: key,\n value: null,\n isGroup: true\n };\n\n const currentGroup = group[key];\n\n if (this.showSecondaryText && this.secondaryKey) {\n selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n } else {\n selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n }\n\n return selectItem;\n });\n }\n\n /** @hidden */\n private _displayFn = (value: any): string => this.displayValue(value);\n\n /** @hidden */\n private _secondaryFn = (value: any): string => {\n if (isOptionItem(value)) {\n return value.secondaryText ?? '';\n } else if (isJsObject(value) && this.secondaryKey) {\n const currentItem = this.objectGet(value, this.secondaryKey);\n\n return isFunction(currentItem) ? currentItem() : currentItem;\n } else {\n return value;\n }\n };\n\n /** @hidden\n * Method that picks other value moved from current one by offset, called only when Multi Combobox is closed */\n private _chooseOtherItem(offset: number): void {\n if (this._selectedSuggestions?.length === this._flatSuggestions.length) {\n this.inputText = '';\n return;\n }\n\n const activeValue = this._getSelectItemByInputValue(this.inputText);\n const index = this._flatSuggestions.findIndex((value) => value === activeValue);\n const position = !this.inputText && offset === -1 ? this._flatSuggestions.length - 1 : index + offset;\n const item = this._flatSuggestions[position];\n\n if (item) {\n this.setInputTextFromOptionItem(item);\n }\n\n const selectedIndex = this._selectedSuggestions.findIndex((value) => value.label === item?.label);\n if (selectedIndex !== -1) {\n this._chooseOtherItem(offset);\n }\n }\n\n /** @hidden */\n private _initializeDataSource(ds: FdpMultiComboboxDataSource<any>): void {\n this._suggestions = [];\n this._flatSuggestions = [];\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as MultiComboBoxDataSource<any>).close();\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n this._dsSubscription = null;\n }\n }\n // Convert whatever comes in as DataSource so we can work with it identically\n this._dataSource = this._openDataStream(ds);\n }\n\n /** @hidden */\n private _openDataStream(ds: FdpMultiComboboxDataSource<any>): MultiComboBoxDataSource<any> {\n const initDataSource = this._toDataStream(ds);\n let isInitDataSource = true;\n\n if (initDataSource === undefined) {\n throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n }\n\n initDataSource.limitless = this.limitless;\n\n /**\n * This is single point of data entry to the component. We dont want to set data on different\n * places. If any new data comes in either you do a search and you want to pass initial data\n * its here.\n */\n this._dsSubscription = new Subscription();\n const dsSub = initDataSource\n .open()\n .pipe(skip(1), takeUntilDestroyed(this._destroyed))\n .subscribe((data) => {\n if (data.length === 0) {\n this._processingEmptyData();\n\n return;\n } else {\n this._previousInputText = this.inputText;\n }\n\n this._suggestions = this._convertToOptionItems(data).map((optionItem: SelectableOptionItem) => {\n const selectedElement = this._selectedSuggestions.find(\n (selectedItem: SelectableOptionItem) => selectedItem.id === optionItem.id\n );\n if (selectedElement) {\n optionItem.selected = selectedElement.selected;\n }\n return optionItem;\n });\n\n this._flatSuggestions = this.isGroup ? this._flattenGroups(this._suggestions) : this._suggestions;\n\n if (isInitDataSource) {\n this._fullFlatSuggestions = this._flatSuggestions;\n isInitDataSource = false;\n }\n\n const selectedSuggestionsLength = this._selectedSuggestions.length;\n if (selectedSuggestionsLength > 0) {\n for (let i = 0; i < selectedSuggestionsLength; i++) {\n const selectedSuggestion = this._selectedSuggestions[i];\n const idx = this._suggestions.findIndex((item) => equal(item.value, selectedSuggestion.value));\n\n if (idx !== -1) {\n this._suggestions[idx].selected = true;\n }\n }\n }\n\n this.stateChanges.next('initDataSource.open().');\n\n this.markForCheck();\n });\n this._dsSubscription.add(dsSub);\n\n this._dsSubscription.add(initDataSource.onDataRequested().subscribe(this.onDataRequested));\n this._dsSubscription.add(initDataSource.onDataReceived().subscribe(this.onDataReceived));\n\n initDataSource.dataProvider.setLookupKey(this.lookupKey);\n const matchingBy: MatchingBy = {\n firstBy: this._displayFn\n };\n\n if (this.secondaryKey) {\n matchingBy.secondaryBy = this._secondaryFn;\n }\n\n initDataSource.dataProvider.setMatchingBy(matchingBy);\n initDataSource.dataProvider.setMatchingStrategy(this._matchingStrategy);\n\n // initial data fetch\n const map = new Map();\n map.set('query', '*');\n\n if (!this.limitless) {\n map.set('limit', MAP_LIMIT);\n } else {\n map.set('limit', Number.MAX_SAFE_INTEGER);\n }\n\n initDataSource.match(map);\n\n return initDataSource;\n }\n\n /** @hidden */\n private _processingEmptyData(): void {\n this.detectChanges();\n\n this.inputText = this._previousInputText;\n\n this._setInvalidEntry();\n\n if (this._timerSub$) {\n this._timerSub$.unsubscribe();\n }\n\n this._timerSub$ = timer(3000).subscribe(() => this._unsetInvalidEntry());\n }\n\n /** @hidden */\n private _setInvalidEntry(): void {\n if (this._previousState || this._previousStateMessage) {\n return;\n }\n\n this._previousState = this.state;\n this.state = 'error';\n\n this._previousStateMessage = this.stateMessage;\n this.stateMessage = this.invalidEntryMessage;\n\n this.markForCheck();\n }\n\n /** @hidden */\n private _unsetInvalidEntry(): void {\n this.state = this._previousState;\n this._previousState = undefined;\n\n this.stateMessage = this._previousStateMessage;\n this._previousStateMessage = undefined;\n\n this.markForCheck();\n }\n\n /** @hidden */\n private _toDataStream(source: FdpMultiComboboxDataSource<any>): MultiComboBoxDataSource<any> | undefined {\n if (isDataSource(source)) {\n return source as MultiComboBoxDataSource<any>;\n }\n\n if (Array.isArray(source)) {\n return new ArrayMultiComboBoxDataSource<any>(source);\n }\n\n if (isObservable(source)) {\n return new ObservableMultiComboBoxDataSource<any>(source);\n }\n\n return undefined;\n }\n\n /** @hidden */\n private _initWindowResize(): void {\n this._getOptionsListWidth();\n\n if (!this.autoResize) {\n return;\n }\n\n fromEvent(window, 'resize')\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => this._getOptionsListWidth());\n }\n\n /** @hidden */\n private _getOptionsListWidth(): void {\n const body = document.body;\n const rect = (this._element.querySelector('fd-input-group') as HTMLElement).getBoundingClientRect();\n const scrollBarWidth = body.offsetWidth - body.clientWidth;\n this.maxWidth = this.autoResize ? window.innerWidth - scrollBarWidth - rect.left : this.minWidth;\n this.minWidth = rect.width - 2;\n this.markForCheck();\n }\n\n /**\n * Convert original data to SelectableOptionItems Interface\n * @hidden\n */\n private _convertToOptionItems(items: any[]): SelectableOptionItem[] {\n const item = items[0];\n\n const elementTypeIsOptionItem = isSelectableOptionItem(item);\n if (elementTypeIsOptionItem) {\n return items as SelectableOptionItem[];\n }\n\n const elementTypeIsObject = isJsObject(item);\n if (elementTypeIsObject) {\n return this._convertObjectsToOptionItems(items);\n }\n\n const elementTypeIsString = isString(item);\n if (elementTypeIsString) {\n return this._convertPrimitiveToOptionItems(items);\n }\n\n return [];\n }\n\n /**\n * Convert data to SelectableOptionItems Interface\n * @hidden\n */\n private _convertObjectsToOptionItems(items: any[]): SelectableOptionItem[] {\n if (this.isGroup) {\n return this._convertObjectsToGroupOptionItems(items);\n } else if (this.showSecondaryText && this.secondaryKey) {\n return this._convertObjectsToSecondaryOptionItems(items);\n } else {\n return this._convertObjectsToDefaultOptionItems(items);\n }\n }\n\n /**\n * Convert object[] data to Secondary SelectableOptionItems Interface\n * @hidden\n */\n private _convertObjectsToSecondaryOptionItems<K>(items: K[]): SelectableOptionItem[] {\n const selectItems: SelectableOptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n id: this.lookupValue(value),\n secondaryText: this.objectGet(value, this.secondaryKey),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n\n return selectItems;\n }\n\n /**\n * Convert Primitive data(Boolean, String, Number) to SelectableOptionItems Interface\n * @hidden\n */\n private _convertPrimitiveToOptionItems(items: any[]): SelectableOptionItem[] {\n const selectItems: SelectableOptionItem[] = [];\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: value,\n id: this.lookupValue(value),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n\n return selectItems;\n }\n\n /**\n * Convert object[] to SelectableOptionItems Interface (Default)\n * @hidden\n */\n private _convertObjectsToDefaultOptionItems(items: any[]): SelectableOptionItem[] {\n const selectItems: SelectableOptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n id: this.lookupValue(value),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n\n return selectItems;\n }\n\n /**\n * @hidden\n * Assign custom templates\n */\n private _assignCustomTemplates(): void {\n this.customTemplates.forEach((template) => {\n switch (template.name) {\n case 'optionItemTemplate':\n this.optionItemTemplate = template.templateRef;\n break;\n case 'groupItemTemplate':\n this.groupItemTemplate = template.templateRef;\n break;\n case 'secondaryItemTemplate':\n this.secondaryItemTemplate = template.templateRef;\n break;\n case 'selectedItemTemplate':\n this.selectedItemTemplate = template.templateRef;\n break;\n }\n });\n }\n}\n","import { InjectionToken, WritableSignal } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\nimport { SelectableOptionItem } from '@fundamental-ngx/platform/shared';\n\nexport const MULTICOMBOBOX_COMPONENT = new InjectionToken<string[]>('MultiComboboxInterface');\n\n/**\n * Combobox Interface to have typing and avoid circular dependency between\n * MultiComboboxComponent <==> MultiComboboxMobileComponent\n */\nexport interface MultiComboboxInterface extends MobileMode {\n _suggestions: SelectableOptionItem[];\n _selectedSuggestions: SelectableOptionItem[];\n selectedShown$: WritableSignal<boolean>;\n openChange: Subject<boolean>;\n\n moreClicked(): void;\n dialogApprove(): void;\n dialogDismiss(backup: SelectableOptionItem[]): void;\n searchTermChanged(term?: string): void;\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnInit, TemplateRef, ViewChild } from '@angular/core';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SelectableOptionItem } from '@fundamental-ngx/platform/shared';\nimport { MULTICOMBOBOX_COMPONENT, MultiComboboxInterface } from '../../multi-combobox.interface';\n\n@Component({\n selector: 'fdp-multi-combobox-mobile',\n templateUrl: './multi-combobox-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogModule,\n TitleComponent,\n TemplateDirective,\n BarModule,\n NgTemplateOutlet,\n ButtonComponent,\n CdkScrollable,\n ScrollbarDirective,\n FdTranslatePipe\n ]\n})\nexport class MultiComboboxMobileComponent extends MobileModeBase<MultiComboboxInterface> implements OnInit {\n /** @hidden */\n @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n /** @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n childContent: Nullable<{\n listTemplate: TemplateRef<any>;\n controlTemplate: TemplateRef<any>;\n }> = null;\n\n /** @hidden */\n selectedShown$ = this._component.selectedShown$;\n\n /** @hidden */\n private _selectedBackup: SelectableOptionItem[];\n\n /** @hidden */\n constructor(@Inject(MULTICOMBOBOX_COMPONENT) multiComboboxComponent: MultiComboboxInterface) {\n super(multiComboboxComponent, MobileModeControl.MULTI_COMBOBOX);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenOnMultiComboboxOpenChange();\n }\n\n /** @hidden */\n showSelected(): void {\n const isSelectedShown = this.selectedShown$();\n\n if (isSelectedShown) {\n this._component.searchTermChanged();\n this.selectedShown$.set(false);\n return;\n }\n\n this._component.moreClicked();\n }\n\n /** @hidden */\n handleDismiss(): void {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n\n /** @hidden */\n handleApprove(): void {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n\n /** @hidden */\n private _toggleDialog(open: boolean): void {\n if (!open) {\n return;\n }\n\n this._selectedBackup = this._component._selectedSuggestions?.length\n ? [...this._component._selectedSuggestions]\n : [];\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n\n /** @hidden */\n private _listenOnMultiComboboxOpenChange(): void {\n this._component.openChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n\n /** @hidden */\n private _open(): void {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n disablePaddings: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n escKeyCloseable: false,\n container: this._elementRef.nativeElement\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title fd-dialog-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n @if (selectedShown$()) {\n <button\n fd-button\n glyph=\"multiselect-all\"\n fdType=\"emphasized\"\n [title]=\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\"\n [attr.aria-label]=\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\"\n class=\"fd-margin-begin--tiny\"\n (click)=\"showSelected()\"\n ></button>\n } @else {\n <button\n fd-button\n glyph=\"multiselect-all\"\n fdType=\"transparent\"\n [title]=\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\"\n [attr.aria-label]=\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\"\n class=\"fd-margin-begin--tiny\"\n (click)=\"showSelected()\"\n ></button>\n }\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { MultiComboboxMobileComponent } from './multi-combobox/multi-combobox-mobile.component';\n\n@NgModule({\n imports: [MultiComboboxMobileComponent],\n exports: [MultiComboboxMobileComponent]\n})\nexport class PlatformMultiComboboxMobileModule {}\n","import { A, DOWN_ARROW, ENTER, ESCAPE, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Inject,\n Injector,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n isDevMode\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { DynamicComponentService, KeyUtil, SearchHighlightPipe, warnOnce } from '@fundamental-ngx/cdk/utils';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent, FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ListModule, ListSecondaryDirective } from '@fundamental-ngx/core/list';\nimport { MultiAnnouncerDirective } from '@fundamental-ngx/core/multi-combobox';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { TokenComponent, TokenizerComponent } from '@fundamental-ngx/core/token';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n DATA_PROVIDERS,\n DataProvider,\n MultiComboBoxDataSource,\n OptionItem,\n SelectableOptionItem\n} from '@fundamental-ngx/platform/shared';\nimport equal from 'fast-deep-equal';\nimport { AutoCompleteDirective, AutoCompleteEvent } from '../../auto-complete/auto-complete.directive';\nimport { BaseMultiCombobox } from '../commons/base-multi-combobox';\nimport { MultiComboboxMobileComponent } from '../multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component';\nimport { MULTICOMBOBOX_COMPONENT } from '../multi-combobox.interface';\n\nlet deprecationWarningShown = false;\n\n/**\n * This component can work with both string primitives as well as with complex objects. In order\n * to use objects user must provide an unique ID to lookupkey, which will be used in comparing\n * each items of array. It is important to provide lookupkey value as there might be multiple\n * items with same name but different properties which is to be differently identified otherwise\n * it will be treated as same objects.\n */\n\n@Component({\n selector: 'fdp-multi-combobox',\n templateUrl: './multi-combobox.component.html',\n styleUrl: './multi-combobox.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: FD_FORM_FIELD_CONTROL,\n useExisting: MultiComboboxComponent,\n multi: true\n },\n contentDensityObserverProviders()\n ],\n imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n FormInputMessageGroupComponent,\n InputGroupModule,\n TokenComponent,\n TokenizerComponent,\n FormControlComponent,\n FormsModule,\n AutoCompleteDirective,\n FormMessageComponent,\n ListModule,\n CheckboxComponent,\n NgClass,\n ListSecondaryDirective,\n SearchHighlightPipe,\n FdTranslatePipe,\n MultiAnnouncerDirective\n ]\n})\nexport class MultiComboboxComponent extends BaseMultiCombobox implements OnInit, AfterViewInit {\n /** @hidden */\n @ViewChild('mobileControlTemplate')\n mobileControlTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('listTemplate')\n declare listTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild(TokenizerComponent)\n _tokenizer: TokenizerComponent;\n\n /**\n * @hidden\n * List of selected suggestions\n */\n _selectedSuggestions: SelectableOptionItem[] = [];\n\n /** @hidden */\n constructor(\n readonly _dynamicComponentService: DynamicComponentService,\n @Optional() @Inject(DATA_PROVIDERS) private _providers: Map<string, DataProvider<any>>,\n private readonly _viewContainerRef: ViewContainerRef,\n private readonly _injector: Injector,\n readonly contentDensityObserver: ContentDensityObserver\n ) {\n super();\n\n if (!deprecationWarningShown && isDevMode()) {\n warnOnce(\n `[DEPRECATION] Platform Multi Combobox component is deprecated since v0.39.0. Please migrate to Core's version.`\n );\n deprecationWarningShown = true;\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n\n const providers = this._providers?.size === 0 ? this.multiComboboxConfig.providers : this._providers;\n // if we have both prefer dataSource\n if (!this.dataSource && this.entityClass && providers?.has(this.entityClass)) {\n this.dataSource = new MultiComboBoxDataSource(providers.get(this.entityClass)!);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n\n if (this.mobile) {\n this._setUpMobileMode();\n }\n\n this._setSelectedSuggestions();\n }\n\n /** @hidden */\n toggleSelection(item: SelectableOptionItem): void {\n const idx = this._getTokenIndexByIdlOrValue(item);\n\n if (idx === -1) {\n this._selectedSuggestions.push(item);\n } else {\n this._selectedSuggestions.splice(idx, 1);\n }\n\n item.selected = !item.selected;\n\n this._propagateChange();\n\n if (!this._selectedSuggestions.length) {\n this._focusToSearchField();\n }\n\n this.detectChanges();\n }\n\n /** @hidden */\n onOptionCheckboxClicked(event: MouseEvent, index: number): void {\n event.stopPropagation();\n this._onListElementClicked(event, index);\n this.inputText = '';\n this.searchTermChanged('');\n }\n\n /** @hidden */\n onCompleteTerm(event: AutoCompleteEvent): void {\n if (event.forceClose) {\n this.toggleSelectionByInputText(event.term);\n this.close();\n }\n }\n\n /** @hidden */\n toggleSelectionByInputText(text = this.inputText): void {\n const item = this._getSelectItemByInputValue(text);\n if (item) {\n this.toggleSelection(item);\n this.inputText = '';\n }\n }\n\n /**\n * @hidden\n * Method that selects all possible options.\n * *select* attribute – if *true* select all, if *false* unselect all\n * */\n handleSelectAllItems(select: boolean): void {\n this._flatSuggestions.forEach((item) => (item.selected = select));\n this._selectedSuggestions = select ? [...this._flatSuggestions] : [];\n this._rangeSelector.reset();\n\n this._propagateChange();\n }\n\n /** @hidden */\n navigateByTokens(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW]) && this.isOpen) {\n this.listComponent.items?.first.focus();\n }\n }\n\n /** @hidden */\n removeToken(token: SelectableOptionItem, event?: MouseEvent): void {\n if (event) {\n event.preventDefault();\n }\n this.toggleSelection(token);\n this._rangeSelector.reset();\n }\n\n /** @hidden */\n moreClicked(): void {\n this._suggestions = this.isGroup\n ? this._convertObjectsToGroupOptionItems(this._selectedSuggestions.map(({ value }) => value))\n : this._suggestions.filter((value) =>\n this._selectedSuggestions.some((item) => equal(item.value, value.value))\n );\n\n this.showList(true);\n this.selectedShown$.set(true);\n this.markForCheck();\n }\n\n /** @hidden */\n onBlur(event: FocusEvent): void {\n const target = event.relatedTarget as HTMLElement;\n if (target) {\n const isList = !!target.closest('.fdp-multi-combobox__list-container');\n if (isList) {\n return;\n }\n if (\n this._suggestions?.length === 1 &&\n this._suggestions[0].label === this.inputText &&\n !this._suggestions[0].selected\n ) {\n this.toggleSelection(this._suggestions[0]);\n }\n this.showList(false);\n this.inputText = '';\n }\n }\n\n /**\n * @hidden\n * Method to set input text as item label.\n */\n setInputTextFromOptionItem(item: OptionItem): void {\n this.inputText = item.label;\n\n if (this.mobile) {\n return;\n }\n\n this.showList(false);\n }\n\n /** @hidden */\n onItemKeyDownHandler(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, ESCAPE)) {\n this._focusToSearchField();\n } else if ((event.ctrlKey || event.metaKey) && event.shiftKey && KeyUtil.isKeyCode(event, A)) {\n event.preventDefault();\n this.handleSelectAllItems(false);\n } else if ((event.ctrlKey || event.metaKey) && KeyUtil.isKeyCode(event, A)) {\n event.preventDefault();\n this.handleSelectAllItems(true);\n } else if (KeyUtil.isKeyCode(event, ENTER)) {\n if (!this.mobile) {\n this.close();\n }\n this._rangeSelector.reset();\n } else if (KeyUtil.isKeyCode(event, SPACE)) {\n this._rangeSelector.reset();\n }\n }\n\n /** @hidden */\n onOptionClicked(event: MouseEvent, index: number): void {\n this._onListElementClicked(event, index);\n this.close();\n }\n\n /** @hidden */\n _addOnClicked(event: Event): void {\n this.addOnButtonClicked.emit(event);\n if (!this.mobile) {\n this.onPrimaryButtonClick(this.isOpen);\n }\n }\n\n /** @hidden Handle dialog dismissing, closes popover and sets backup data. */\n dialogDismiss(backup: SelectableOptionItem[]): void {\n this._selectedSuggestions = [...backup];\n this.inputText = '';\n this.showList(false);\n this.selectedShown$.set(false);\n }\n\n /** @hidden Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove(): void {\n this.inputText = '';\n this.showList(false);\n this._propagateChange(true);\n }\n\n /**\n * @hidden\n * applying range selection. Note, that this function will be invoked after combobox item's value has been changed\n */\n private _onListElementClicked(event: MouseEvent, index: number): void {\n // value has been changed at this point, so it can be safely used\n const selectionState = this._suggestions[index].selected;\n this._rangeSelector.onRangeElementToggled(index, event);\n const toRemoveSet = new Set();\n this._rangeSelector.applyValueToEachInRange((idx) => {\n const current = this._suggestions[idx];\n if (current.selected !== selectionState) {\n if (current.selected) {\n // removing from \"_selectedSuggestions\" list\n toRemoveSet.add(current.value);\n } else {\n // adding current item to \"_selectedSuggestions\"\n this._selectedSuggestions.push(current);\n }\n current.selected = selectionState;\n }\n });\n this._selectedSuggestions = this._selectedSuggestions.filter((s) => !toRemoveSet.has(s.value));\n // selected items should be displayed in the same order as options\n const valueIndexes = new Map<any, number>(this._suggestions.map((s, i) => [s.value, i]));\n this._selectedSuggestions.sort((a, b) => valueIndexes.get(a.value)! - valueIndexes.get(b.value)!);\n this._tokenizer.onResize();\n\n this._tokenizer.tokenizerInnerEl.nativeElement.scrollLeft =\n this._tokenizer.tokenizerInnerEl.nativeElement.scrollWidth;\n }\n\n /** @hidden */\n private _getTokenIndexByIdlOrValue(item: SelectableOptionItem): number {\n return this._selectedSuggestions.findIndex((token) => token.id === item.id || equal(token.value, item.value));\n }\n\n /** @hidden */\n private _mapAndUpdateModel(): void {\n const selectedItems = this._selectedSuggestions.map(({ value }) => value);\n\n // setting value, it will call setValue()\n this.value = selectedItems;\n }\n\n /** @hidden */\n private _propagateChange(emitInMobile?: boolean): void {\n if (!this.mobile || emitInMobile) {\n this.onChange(this._selectedSuggestions);\n this._mapAndUpdateModel();\n }\n }\n\n /** @hidden */\n private async _setUpMobileMode(): Promise<void> {\n const injector = Injector.create({\n providers: [{ provide: MULTICOMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._dynamicComponentService.createDynamicComponent(\n { listTemplate: this.listTemplate, controlTemplate: this.mobileControlTemplate },\n MultiComboboxMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n { injector }\n );\n }\n}\n","<div class=\"fdp-multi-combobox\">\n @if (mobile) {\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n } @else {\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list fdp-multi-combobox__list-container\"\n (isOpenChange)=\"popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"disabled\"\n [fillControlMode]=\"fillControlMode\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize && 100\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n }\n</div>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n class=\"fdp-multi-combobox-input-group-custom\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"disabled || readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled || readonly\"\n [attr.aria-readonly]=\"readonly\"\n [glyphAriaLabel]=\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"_addOnClicked($event)\"\n (click)=\"mobile && !isOpen && onPrimaryButtonClick(false)\"\n (keydown)=\"navigateByTokens($event)\"\n >\n <fd-tokenizer\n #tokenizer\n [compactCollapse]=\"true\"\n [tokenizerFocusable]=\"false\"\n [showOverflowPopover]=\"false\"\n class=\"fdp-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"moreClicked()\"\n fdMultiAnnouncer\n [multiAnnouncerOptions]=\"_suggestions\"\n >\n @for (token of _selectedSuggestions; track token) {\n <fd-token [readOnly]=\"disabled\" (onCloseClick)=\"removeToken(token, $event)\">\n {{ token.label }}\n </fd-token>\n }\n <input\n #searchInputElement\n fdp-auto-complete\n (onComplete)=\"onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [ariaLabel]=\"ariaLabel || ('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"searchTermChanged()\"\n [attr.placeholder]=\"_selectedSuggestions.length ? null : placeholder\"\n (focus)=\"onTouched(); tokenizer._showAllTokens()\"\n (blur)=\"!mobile && onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n [attr.aria-required]=\"required\"\n class=\"fd-tokenizer__input fd-input-group__input\"\n />\n </fd-tokenizer>\n </fd-input-group>\n @if (mobile && isOpen ? false : !!stateMessage) {\n <fd-form-message [type]=\"state\" [innerHtml]=\"stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n class=\"fdp-multi-combobox-input-group-custom\"\n [state]=\"state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"disabled || readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled || readonly\"\n [attr.aria-readonly]=\"readonly\"\n [glyphAriaLabel]=\"ariaLabel\"\n >\n <input\n fdp-auto-complete\n (onComplete)=\"onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [ariaLabel]=\"ariaLabel || ('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"searchTermChanged()\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"!mobile && onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-multi-combobox__list fd-list--multi-input\"\n [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile && maxHeight\"\n [style.min-width]=\"!mobile && minWidth + 'px'\"\n [style.max-width]=\"autoResize && maxWidth + 'px'\"\n [attr.aria-labelledby]=\"id + '-search'\"\n aria-multiselectable=\"true\"\n (keydown.tab)=\"close()\"\n (keydown.escape)=\"close()\"\n >\n @if (stateMessage) {\n <li\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n ></li>\n }\n @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n <li fd-list-message tabindex=\"-1\" role=\"presentation\" [type]=\"state || 'default'\">\n <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n </li>\n }\n <ng-content></ng-content>\n @if (isGroup) {\n @for (group of _suggestions; track group) {\n @if (!groupItemTemplate) {\n <label fd-list-item fd-list-group-header role=\"group\">\n <span fd-list-title>{{ group.label }}</span>\n </label>\n }\n @if (groupItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem) {\n <li\n fd-list-item\n role=\"option\"\n (click)=\"!mobile && onOptionClicked($event, $index)\"\n (keyDown)=\"onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"onOptionCheckboxClicked($event, $index)\"\n (ngModelChange)=\"toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: $index }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions; track optionItem) {\n <li\n fd-list-item\n role=\"option\"\n (click)=\"!mobile && onOptionClicked($event, $index)\"\n (keydown)=\"onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"onOptionCheckboxClicked($event, $index)\"\n (ngModelChange)=\"toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: $index }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (optionItem.selected && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(optionItem.selected && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight: inputText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText) {\n @if (!secondaryItemTemplate) {\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight: inputText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { MultiComboboxComponent } from './multi-combobox/multi-combobox.component';\n\n@NgModule({\n imports: [MultiComboboxComponent],\n exports: [MultiComboboxComponent]\n})\nexport class PlatformMultiComboboxModule {}\n","import { NgModule } from '@angular/core';\n\nimport { SelectComponent } from './select/select.component';\n\n@NgModule({\n imports: [SelectComponent],\n exports: [SelectComponent]\n})\nexport class PlatformSelectModule {}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\n\n/**\n * Default options for platform step input\n */\n\n@Injectable({ providedIn: 'root' })\nexport class StepInputConfig {\n /**\n * ARIA label for increment button\n */\n incrementLabel = 'Increment';\n\n /**\n * ARIA label for decrement button\n */\n decrementLabel = 'Decrement';\n\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n}\n","export const addAndCutFloatingNumberDistortion = (value: number | null, step: number): number => {\n value = value || 0;\n const stepDecimals = `${step}`.split('.')[1];\n const valueDecimals = `${value}`.split('.')[1];\n const stepDecimalsLength = stepDecimals ? stepDecimals.length : 0;\n const valueDecimalsLength = valueDecimals ? valueDecimals.length : 0;\n const longestDecimal = Math.max(valueDecimalsLength, stepDecimalsLength);\n\n return Number((value + step).toFixed(longestDecimal));\n};\n\nexport const getNumberDecimalLength = (value: number): number => {\n const numberStr = (value || 0).toString();\n return (numberStr.split('.')[0] || '').length;\n};\n","import { computed, Directive, EventEmitter, inject, Input, OnInit, Output, Renderer2, signal } from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { StepInputConfig } from './step-input.config';\nimport { addAndCutFloatingNumberDistortion, getNumberDecimalLength } from './step-input.util';\n\n/** Change event object emitted by Platform Step Input component */\nexport class StepInputChangeEvent<T extends StepInputComponent = StepInputComponent, K = number> {\n /**\n * Step input selection change event\n * @param source Step input component\n * @param payload Selected value\n */\n constructor(\n /** The source Step Input of the event. */\n public source: T,\n /** The new value of a control. */\n public payload: K\n ) {}\n}\n\nexport enum StepInputAlign {\n Left = 'left',\n Center = 'center',\n Right = 'right'\n}\n\nexport type StepInputStepFunctionAction = 'increase' | 'decrease';\nexport type StepInputStepFunction = (value: number, action: StepInputStepFunctionAction) => number;\n\nconst ALIGN_INPUT_OPTIONS_LIST = [StepInputAlign.Left, StepInputAlign.Center, StepInputAlign.Right];\n\n/**\n * StepInputComponent is a base abstract class that should be used\n * to create type specific StepInput components such as number, money, unitOfMeasure\n * This holds base Step Input functionality that can be abstracted\n */\n@Directive()\nexport abstract class StepInputComponent extends BaseInput implements OnInit {\n /** Create valueChange event */\n abstract createChangeEvent(value: number): StepInputChangeEvent;\n\n /** Format value for view presentation */\n abstract formatValue(value: number | null): string;\n\n /** Format value for \"in focus\" mode */\n abstract formatValueInFocusMode(value: number): string;\n\n /** Parse value entered \"in focus\" mode */\n abstract parseValueInFocusMode(value: string): number | null;\n /** Sets input value */\n @Input()\n set value(value: Nullable<number>) {\n if (value !== this._value) {\n super.setValue(value);\n this._calculateCanDecrementIncrement();\n }\n }\n get value(): Nullable<number> {\n return super.getValue();\n }\n\n /** Sets minimum value boundary */\n @Input()\n set min(min: number) {\n this._min = !isNaN(min) ? min : -Number.MAX_VALUE;\n this._calculateCanDecrement();\n }\n get min(): number {\n return this._min;\n }\n\n /** Sets maximum value boundary */\n @Input()\n set max(max: number) {\n this._max = !isNaN(max) ? max : Number.MAX_VALUE;\n this._calculateCanIncrement();\n }\n get max(): number {\n return this._max;\n }\n\n /** Sets input step value */\n @Input()\n set step(step: number) {\n this._checkAndThrowErrorIfStepDoesntMatchPrecision(this.precision, step);\n this._step = step;\n this._calculateCanDecrementIncrement();\n }\n get step(): number {\n return this._step;\n }\n\n /** Custom function to calculate step dynamically */\n @Input()\n set stepFn(stepFn: StepInputStepFunction) {\n this._stepFn = stepFn;\n this._calculateCanDecrementIncrement();\n }\n\n /** Number of digits after the decimal point */\n @Input()\n set precision(precision: number) {\n this._checkAndThrowErrorIfStepDoesntMatchPrecision(precision, this.step);\n this._precision = precision;\n }\n get precision(): number {\n return this._precision;\n }\n\n /** Sets largeStep multiplier */\n @Input()\n largerStep = 2;\n\n /** Hides -/+ icons and shows labels */\n @Input()\n showLabels = false;\n\n /** Horizontally aligns value inside input */\n @Input()\n set align(align: StepInputAlign | null) {\n this._align$.set(align);\n }\n get align(): StepInputAlign | null {\n return this._align$();\n }\n\n /**\n * ARIA label for increment button\n */\n @Input()\n incrementLabel: string = inject(StepInputConfig).incrementLabel;\n\n /**\n * ARIA label for decrement button\n */\n @Input()\n decrementLabel: string = inject(StepInputConfig).decrementLabel;\n\n /** Emits new value when control value has changed */\n @Output()\n valueChange = new EventEmitter<StepInputChangeEvent>();\n\n /** @hidden */\n lastEmittedValue: number;\n\n /** @hidden */\n canIncrement = true;\n\n /** @hidden */\n canDecrement = true;\n\n /** @hidden\n * Indicates if control has an error\n */\n isErrorState = false;\n\n /** @hidden */\n get canChangeValue(): boolean {\n return !(this.disabled || !this.editable);\n }\n\n /** @hidden */\n readonly _align$ = signal<StepInputAlign | null>(null);\n\n /** @hidden */\n readonly _textAlign$ = computed(() => {\n const align = this._align$();\n\n const isRtl = !!this._rtlService?.rtlSignal();\n\n if (!ALIGN_INPUT_OPTIONS_LIST.includes(align!)) {\n return null;\n }\n if (isRtl && align === StepInputAlign.Left) {\n return StepInputAlign.Right;\n }\n if (isRtl && align === StepInputAlign.Right) {\n return StepInputAlign.Left;\n }\n return align;\n });\n\n /** @hidden */\n private _max: number = Number.MAX_VALUE;\n\n /** @hidden */\n private _min: number = -Number.MAX_VALUE;\n\n /** @hidden */\n private _step = 1;\n\n /** @hidden */\n private _stepFn: StepInputStepFunction;\n\n /** @hidden */\n private _precision: number;\n\n /** @hidden */\n private _pendingEnteredValue: number | Error | null = null;\n\n /** @hidden */\n private get _currentValue(): number | null {\n const pendingValue = this._pendingEnteredValue;\n\n if (pendingValue instanceof Error) {\n return null;\n }\n\n if (pendingValue === null) {\n return this._value;\n }\n\n return pendingValue;\n }\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n\n this._calculateCanDecrementIncrement();\n\n this._updateViewValue();\n\n this.lastEmittedValue = this._value;\n\n this._listenToFormErrorState();\n }\n\n /** @hidden\n * Override writeValue method to keep input view value up to date\n */\n writeValue(value: number): void {\n super.writeValue(value);\n this._updateViewValue();\n this._resetPendingEnteredValue();\n }\n\n /** Increase value */\n increase(step = this._getStepValueForIncrease()): void {\n if (!this.canIncrement) {\n return;\n }\n const value = addAndCutFloatingNumberDistortion(this._currentValue, step);\n this.value = this._validateValueByLimits(value);\n this._emitChangedValue();\n }\n\n /** Decrease value */\n decrease(step = this._getStepValueForDecrease()): void {\n if (!this.canDecrement) {\n return;\n }\n const value = addAndCutFloatingNumberDistortion(this._currentValue, -step);\n this.value = this._validateValueByLimits(value);\n this._emitChangedValue();\n }\n\n /** Increase value by large step */\n largeStepIncrease(): void {\n const step = this._getStepValueForIncrease() * this.largerStep;\n this.increase(step);\n }\n\n /** Decrease value by large step */\n largeStepDecrease(): void {\n const step = this._getStepValueForDecrease() * this.largerStep;\n this.decrease(step);\n }\n\n /** @hidden\n * catch value during entering from view.\n */\n onEnterValue(value: string): void {\n let pendingValue = this.parseValueInFocusMode(value);\n\n if (pendingValue !== null) {\n pendingValue = this._validateValueByLimits(pendingValue);\n }\n\n // could not parse value, value is invalid\n if (pendingValue === null) {\n this._setPendingEnteredValue(new Error('value is invalid'));\n } else {\n this._setPendingEnteredValue(pendingValue);\n }\n }\n\n /** @hidden\n * Commit entered value from view.\n */\n commitEnteredValue(): void {\n const newValue = this._currentValue;\n\n const needToUpdateView = this._value === newValue;\n\n this.value = newValue;\n\n if (needToUpdateView) {\n this._updateViewValue();\n }\n\n if (this._value !== this.lastEmittedValue) {\n this._emitChangedValue();\n }\n }\n\n /** @hidden\n * Indicates when input gets focused\n */\n onFocus(): void {\n super._onFocusChanged(true);\n // When focus happens by \"Tab\" key an input field value gets selected by default.\n // In cases when new_formatted_value !== previous_value the selection gets lost.\n // So it's needed to track selection before new value rendering and restore it.\n const { selectionStart, selectionEnd } = this._getValueSelection();\n this._updateViewValue();\n if (selectionEnd - selectionStart > 0) {\n this._setValueSelection(selectionStart, selectionEnd);\n }\n }\n\n /** @hidden\n * Indicates when input loses focus\n */\n onBlur(): void {\n super._onFocusChanged(false);\n this._updateViewValue();\n }\n\n /** @hidden */\n private _listenToFormErrorState(): void {\n this.stateChanges\n .asObservable()\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => {\n const oldValue = this.isErrorState;\n this.isErrorState = this.state === 'error';\n if (this.isErrorState !== oldValue) {\n this.markForCheck();\n }\n });\n }\n\n /** @hidden */\n private _emitChangedValue(): void {\n const value = this._value;\n this.lastEmittedValue = value;\n this.valueChange.emit(this.createChangeEvent(value));\n }\n\n /** @hidden */\n private _getStepValueForIncrease(): number {\n return this._getStepValue('increase');\n }\n\n /** @hidden */\n private _getStepValueForDecrease(): number {\n return this._getStepValue('decrease');\n }\n\n /** @hidden\n * Get step value based either on \"stepFn\" or \"step\"\n */\n private _getStepValue(action: StepInputStepFunctionAction): number {\n // steFn has precedence\n if (typeof this._stepFn === 'function') {\n return this._stepFn(this._currentValue ?? this.min, action);\n }\n return this.step;\n }\n\n /** @hidden */\n private _updateViewValue(): void {\n const formatted = this._formatValue();\n this._renderValue(formatted);\n }\n\n /** @hidden */\n private _formatValue(value = this._value): string {\n if (this.focused) {\n return this.formatValueInFocusMode(value);\n }\n return this.formatValue(value);\n }\n\n /** @hidden */\n private _renderValue(value: string): void {\n const inputEl = this._getInputNativeElement();\n this._renderer.setProperty(inputEl, 'value', value);\n }\n\n /** @hidden */\n private _getInputNativeElement(): HTMLInputElement | null {\n return this._elementRef.nativeElement as HTMLInputElement | null;\n }\n\n /** @hidden */\n private _getValueSelection(): { selectionStart: number; selectionEnd: number } {\n const inputEl = this._getInputNativeElement();\n const selectionStart = inputEl?.selectionStart || 0;\n const selectionEnd = inputEl?.selectionEnd || 0;\n return { selectionStart, selectionEnd };\n }\n\n /** @hidden */\n private _setValueSelection(selectionStart: number, selectionEnd: number): void {\n const inputEl = this._getInputNativeElement();\n if (!inputEl) {\n return;\n }\n inputEl.setSelectionRange(selectionStart, selectionEnd);\n }\n\n /** @hidden */\n private _calculateCanIncrement(): void {\n const step = this._getStepValueForIncrease();\n this.canIncrement = (this._value || 0) + step <= this._max;\n }\n\n /** @hidden */\n private _calculateCanDecrement(): void {\n const step = this._getStepValueForDecrease();\n this.canDecrement = (this._value || 0) - step >= this._min;\n }\n\n /** @hidden */\n private _calculateCanDecrementIncrement(): void {\n this._calculateCanDecrement();\n this._calculateCanIncrement();\n }\n\n /** @hidden */\n private _validateValueByLimits(value: number): number {\n return Math.min(Math.max(value, this._min), this._max);\n }\n\n /** @hidden */\n private _checkAndThrowErrorIfStepDoesntMatchPrecision(precision: number, step: number): void {\n // Check if \"precision\" is valid comparing to \"step\"\n const stepDecimalLength = getNumberDecimalLength(step);\n const precisionDecimalLength = getNumberDecimalLength(precision);\n if (stepDecimalLength > precisionDecimalLength) {\n throw Error(\n `Step input: The value of step property can not contain more digits after the decimal point than what is set to the precision property`\n );\n }\n }\n\n /** @hidden */\n private _setPendingEnteredValue(value: number | Error): void {\n this._pendingEnteredValue = value;\n }\n\n /** @hidden */\n private _resetPendingEnteredValue(): void {\n this._pendingEnteredValue = null;\n }\n}\n","import { DOWN_ARROW, PAGE_DOWN, PAGE_UP, UP_ARROW } from '@angular/cdk/keycodes';\nimport { Directive, HostListener, SkipSelf } from '@angular/core';\n\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { StepInputComponent } from './base.step-input';\n\n/**\n * This directive is intendant to be a bridge between input control and BaseStepInput Component.\n */\n@Directive({\n selector: '[fdpStepInputControl]',\n standalone: true\n})\nexport class StepInputControlDirective {\n /** @hidden */\n constructor(@SkipSelf() private stepInput: StepInputComponent) {}\n\n /**\n * @hidden\n * Handle \"input\" event to keep track of what user is entering\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.stepInput.canChangeValue) {\n return;\n }\n\n const value: string = ((event.target as HTMLInputElement).value || '').trim();\n this.stepInput.onEnterValue(value);\n }\n\n /**\n * @hidden\n * Handle \"change\" event to commit entered value\n */\n @HostListener('change')\n onChange(): void {\n if (!this.stepInput.canChangeValue) {\n return;\n }\n this.stepInput.commitEnteredValue();\n }\n\n /**\n * @hidden\n * Handle \"focus\" event\n */\n @HostListener('focus')\n onFocus(): void {\n this.stepInput.onFocus();\n }\n\n /**\n * @hidden\n * Handle \"blur\" event\n */\n @HostListener('blur')\n onBlur(): void {\n this.stepInput.onBlur();\n }\n\n /**\n * @hidden\n * Handle \"keydown\" event\n */\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (!this.stepInput.canChangeValue) {\n return;\n }\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this.stepInput.increase();\n this._muteEvent(event);\n }\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n this.stepInput.decrease();\n this._muteEvent(event);\n }\n if (KeyUtil.isKeyCode(event, PAGE_UP)) {\n this.stepInput.largeStepIncrease();\n this._muteEvent(event);\n }\n if (KeyUtil.isKeyCode(event, PAGE_DOWN)) {\n this.stepInput.largeStepDecrease();\n this._muteEvent(event);\n }\n }\n\n /**\n * @hidden\n * Handle mouse wheel\n */\n @HostListener('wheel', ['$event'])\n onMouseWheel(event: WheelEvent): void {\n if (!this.stepInput.canChangeValue || !this.stepInput.focused) {\n return;\n }\n event.preventDefault();\n if (event.deltaY > 0) {\n this.stepInput.decrease();\n } else {\n this.stepInput.increase();\n }\n }\n\n /**\n * @hidden\n * Mute event\n */\n private _muteEvent(e: Event): void {\n e.stopPropagation();\n e.preventDefault();\n }\n}\n","import { DestroyRef, Directive, HostListener, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, interval, timer } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\n\n/**\n * This is a base step input directive to be used for increase/decrease buttons.\n */\n@Directive()\nexport abstract class StepInputActionButton {\n /**\n * @hidden\n * Indicates if action can be handled\n */\n abstract canHandleAction(): boolean;\n\n /**\n * @hidden\n * Step input button action handler\n */\n abstract runAction(): void;\n /** @hidden */\n protected _destroyed = inject(DestroyRef);\n\n /** @hidden */\n @HostListener('mousedown')\n click(): void {\n if (!this.canHandleAction()) {\n return;\n }\n\n // Run action while button is pressed\n timer(500)\n .pipe(\n switchMap(() => interval(40)),\n takeUntil(fromEvent(window, 'mouseup', { capture: true, once: true }))\n )\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => this.runAction());\n\n this.runAction();\n }\n}\n","import { Directive, inject } from '@angular/core';\n\nimport { StepInputComponent } from './base.step-input';\nimport { StepInputActionButton } from './step-input-action-button';\n\n/**\n * This Directive is used to be assigned to decrement button.\n */\n@Directive({\n selector: '[fdpStepInputDecrement]',\n standalone: true\n})\nexport class StepInputDecrementDirective extends StepInputActionButton {\n private readonly stepInput = inject(StepInputComponent, { skipSelf: true });\n\n /** @hidden */\n canHandleAction(): boolean {\n return !!this.stepInput.canChangeValue;\n }\n\n /** @hidden */\n runAction(): void {\n this.stepInput.decrease();\n }\n}\n","import { Directive, inject } from '@angular/core';\n\nimport { StepInputComponent } from './base.step-input';\nimport { StepInputActionButton } from './step-input-action-button';\n\n/**\n * This Directive is used to be assigned to increment button.\n */\n@Directive({\n selector: '[fdpStepInputIncrement]',\n standalone: true\n})\nexport class StepInputIncrementDirective extends StepInputActionButton {\n private readonly stepInput = inject(StepInputComponent, { skipSelf: true });\n\n /** @hidden */\n canHandleAction(): boolean {\n return !!this.stepInput.canChangeValue;\n }\n\n /** @hidden */\n runAction(): void {\n this.stepInput.increase();\n }\n}\n","import { formatNumber } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, ViewEncapsulation } from '@angular/core';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { OnlyDigitsDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { StepInputChangeEvent, StepInputComponent } from '../base.step-input';\nimport { StepInputControlDirective } from '../step-input-control.directive';\nimport { StepInputDecrementDirective } from '../step-input-decrement.directive';\nimport { StepInputIncrementDirective } from '../step-input-increment.directive';\n\n/**\n * Fundamental number-step-input component\n *\n * Example of usage\n * ```html\n * <fdp-number-step-input\n * name=\"number\"\n * [value]=\"value\"\n * (valueChange)=\"onValueChange($event)\"\n * ></fdp-number-step-input>\n * ```\n *\n * */\n@Component({\n selector: 'fdp-number-step-input',\n templateUrl: 'number-step-input.component.html',\n styleUrl: 'number-step-input.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: FD_FORM_FIELD_CONTROL, useExisting: NumberStepInputComponent, multi: true },\n { provide: StepInputComponent, useExisting: NumberStepInputComponent },\n contentDensityObserverProviders()\n ],\n imports: [\n FormInputMessageGroupComponent,\n ButtonComponent,\n StepInputDecrementDirective,\n StepInputControlDirective,\n OnlyDigitsDirective,\n StepInputIncrementDirective,\n FormMessageComponent,\n ContentDensityModule\n ]\n})\nexport class NumberStepInputComponent extends StepInputComponent {\n /** Set description */\n @Input() description: string;\n\n /** @hidden */\n constructor(\n @Inject(LOCALE_ID) readonly localeId: string,\n readonly contentDensityObserver: ContentDensityObserver\n ) {\n super();\n }\n\n /** @hidden\n * Create change event instance\n */\n createChangeEvent(value: number): StepInputChangeEvent {\n return new StepInputChangeEvent(this, value);\n }\n\n /** @hidden\n * Format value taking into account LOCALE_ID\n */\n formatValue(value: number | null): string {\n const precision = this.precision;\n const digitsInfo = !isNaN(precision) ? `1.${precision}-${precision}` : undefined;\n return formatNumber(value || 0, this.localeId, digitsInfo);\n }\n\n /** @hidden\n * In order to avoid issues trying to parse formatted number\n * (potentially specific for each local)\n * we have to simplify number format once it's in focus mode.\n * In this case we deal with a regular float number\n */\n formatValueInFocusMode(value: number | null): string {\n const precision = this.precision;\n value = value || 0;\n if (!isNaN(precision)) {\n return value.toFixed(precision);\n }\n return value.toString(10);\n }\n\n /** @hidden\n * Used to parse entered value\n */\n parseValueInFocusMode(value: string | null): number | null {\n // if user leaves input empty we should consider it as '0' by default\n value = value || '0';\n const parsedValue = Number.parseFloat(value);\n return isNaN(parsedValue) ? null : parsedValue;\n }\n}\n","<fd-form-input-message-group>\n <div\n class=\"fd-step-input\"\n [class.is-focus]=\"focused\"\n [class.is-readonly]=\"!editable\"\n [class.is-disabled]=\"disabled\"\n [class.fd-step-input--without-buttons]=\"showLabels\"\n [class]=\"state ? 'is-' + state : ''\"\n >\n <button\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n fd-button\n fdType=\"transparent\"\n [glyph]=\"showLabels ? null : 'less'\"\n fdpStepInputDecrement\n [attr.aria-disabled]=\"disabled || !canDecrement\"\n [attr.title]=\"decrementLabel\"\n [attr.aria-label]=\"decrementLabel\"\n [attr.aria-controls]=\"id\"\n >\n {{ showLabels ? decrementLabel : '' }}\n </button>\n <input\n #inputElementRef\n class=\"fd-input fd-input--no-number-spinner fd-step-input__input\"\n [id]=\"id\"\n [name]=\"name\"\n [disabled]=\"disabled\"\n [readonly]=\"!editable\"\n [attr.placeholder]=\"placeholder || ''\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"description ? id + '__description' : ''\"\n [attr.aria-required]=\"required\"\n [style.textAlign]=\"_textAlign$()\"\n fdpStepInputControl\n type=\"text\"\n inputmode=\"numeric\"\n fdkOnlyDigits\n [decimal]=\"true\"\n />\n <button\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n fd-button\n fdType=\"transparent\"\n [glyph]=\"showLabels ? null : 'add'\"\n fdpStepInputIncrement\n [attr.aria-disabled]=\"disabled || !canIncrement\"\n [attr.title]=\"incrementLabel\"\n [attr.aria-label]=\"incrementLabel\"\n [attr.aria-controls]=\"id\"\n >\n {{ showLabels ? incrementLabel : '' }}\n </button>\n </div>\n @if (stateMessage) {\n <fd-form-message [type]=\"state\" [innerHTML]=\"stateMessage\"></fd-form-message>\n }\n</fd-form-input-message-group>\n@if (description) {\n <span [id]=\"id + '__description'\" class=\"fd-form-label fd-form-label--unit-description\">\n {{ description }}\n </span>\n}\n","import { NgModule } from '@angular/core';\nimport { NumberStepInputComponent } from './number/number-step-input.component';\nimport { StepInputControlDirective } from './step-input-control.directive';\nimport { StepInputDecrementDirective } from './step-input-decrement.directive';\nimport { StepInputIncrementDirective } from './step-input-increment.directive';\n\n@NgModule({\n imports: [\n StepInputDecrementDirective,\n StepInputIncrementDirective,\n StepInputControlDirective,\n NumberStepInputComponent\n ],\n exports: [\n StepInputDecrementDirective,\n StepInputIncrementDirective,\n StepInputControlDirective,\n NumberStepInputComponent\n ]\n})\nexport class PlatformStepInputModule {}\n","import { NgModule } from '@angular/core';\nimport { SwitchComponent } from './switch/switch.component';\n\n@NgModule({\n imports: [SwitchComponent],\n exports: [SwitchComponent]\n})\nexport class PlatformSwitchModule {}\n","import { NgModule } from '@angular/core';\nimport { TextAreaComponent } from './text-area.component';\n\n@NgModule({\n imports: [TextAreaComponent],\n exports: [TextAreaComponent]\n})\nexport class PlatformTextAreaModule {}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\n\nimport { warnOnce } from '@fundamental-ngx/cdk/utils';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { TimePickerComponent } from '@fundamental-ngx/core/time-picker';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\n@Component({\n selector: 'fdp-time-picker',\n templateUrl: './time-picker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformTimePickerComponent, multi: true }],\n imports: [TimePickerComponent, FormsModule]\n})\nexport class PlatformTimePickerComponent<D> extends BaseInput implements OnInit, AfterViewInit, OnDestroy {\n /**\n * @Input date time object representation\n */\n @Input()\n set value(value: D | null) {\n super.setValue(value);\n }\n get value(): D | null {\n return super.getValue();\n }\n\n /**\n * @Input date time object representation\n */\n @Input()\n time: D;\n\n /** @Input Whether to show spinner buttons */\n @Input()\n spinnerButtons = true;\n\n /** @deprecated\n * Meridian is deprecated. Use displayFormat and parseFormat inputs or\n * DateTimeFormats.display.timeInput and DateTimeFormats.parse.timeInput instead.\n * @Input When set to false, uses the 24 hour clock (hours ranging from 0 to 23).\n * Default value based on the current locale format option\n */\n @Input()\n set meridian(value: boolean) {\n warnOnce(\n 'Property meridian is deprecated.' +\n ' Use Meridian is deprecated.' +\n ' Use displayFormat and parseFormat inputs or DateTimeFormats.display.timeInput and DateTimeFormats.parse.timeInput instead. instead.'\n );\n this._meridian = value;\n }\n\n get meridian(): boolean {\n return this._meridian;\n }\n\n /**\n * @Input When set to false, hides the input for seconds.\n * Default value based on the current locale format option\n * */\n @Input()\n displaySeconds: boolean;\n\n /**\n * @Input When set to false, hides the input for minutes.\n * Default value based on the current locale format option\n * */\n @Input()\n displayMinutes: boolean;\n\n /**\n * @Input When set to false, hides the input for hours.\n * Default value based on the current locale format option\n * */\n @Input()\n displayHours: boolean;\n\n /** @Input Default time picker placeholder which is set dependant on the hours, minutes and seconds.\n * Otherwise, It can be set to a default value\n */\n @Input()\n declare placeholder: string;\n\n /** Aria label for the time picker input. */\n @Input()\n timePickerInputLabel: string;\n\n /** Whether a null input is considered valid(success). */\n @Input()\n allowNull = true;\n\n /** Defines if time component should be used with tablet mode */\n @Input()\n tablet = false;\n\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n @Input()\n placement: Placement = 'bottom-start';\n\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n set state(state: FormStates | undefined) {\n super.state = state;\n }\n\n get state(): FormStates {\n if (this.timePickerComponent && this.timePickerComponent._isInvalidTimeInput) {\n // if any other error from core timePicker\n return 'error';\n }\n return super.state;\n }\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = true;\n\n /** Whether to validate the time picker input. */\n @Input()\n useValidation = true;\n\n /**\n * @Input when set to true, time inputs won't allow to have 1 digit\n * for example 9 will become 09\n * but 12 will be kept as 12.\n */\n @Input()\n keepTwoDigitsTime = false;\n\n /**\n * Display format option to customize time format in input control.\n * Must be a format option that is understandable by DatetimeAdapter.\n */\n @Input()\n displayFormat: unknown;\n\n /**\n * Parse format option to customize time format in input control.\n * Must be a format option that is understandable by DatetimeAdapter.\n */\n @Input()\n parseFormat: unknown;\n\n /** Event emitted when the state of the isOpen property changes. */\n @Output()\n readonly isOpenChange = new EventEmitter<boolean>();\n\n /** @hidden */\n @ViewChild(TimePickerComponent)\n timePickerComponent: TimePickerComponent<D>;\n\n /** @hidden */\n private _meridian: boolean;\n\n /** @hidden */\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Method that handles changes when popover is opened or closed.\n */\n handleOpenChange(open: boolean): void {\n this.isOpenChange.emit(open);\n }\n\n /**\n * logic to handle validation from both platform forms and core datetiimepicker\n * @param value inputted\n */\n handleTimeChange(value: D): void {\n if (this.timePickerComponent) {\n if (this.timePickerComponent._isInvalidTimeInput) {\n this.state = 'error';\n } else {\n this.state = !this.timePickerComponent.time && !this.allowNull ? 'error' : undefined;\n }\n this.value = value;\n this.stateChanges.next('time picker: handleTimeInputChange');\n }\n this.onTouched();\n }\n}\n","<fd-time-picker\n [attr.aria-label]=\"ariaLabel\"\n [attr.ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n [inputId]=\"id\"\n [required]=\"required\"\n [time]=\"time\"\n [meridian]=\"meridian\"\n [disabled]=\"disabled\"\n [displayFormat]=\"displayFormat\"\n [spinnerButtons]=\"spinnerButtons\"\n [displaySeconds]=\"displaySeconds\"\n [displayMinutes]=\"displayMinutes\"\n [displayHours]=\"displayHours\"\n [placeholder]=\"placeholder\"\n [timePickerInputLabel]=\"timePickerInputLabel\"\n [allowNull]=\"allowNull\"\n [tablet]=\"tablet\"\n [placement]=\"placement\"\n [parseFormat]=\"parseFormat\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [useValidation]=\"useValidation\"\n [keepTwoDigitsTime]=\"keepTwoDigitsTime\"\n (isOpenChange)=\"handleOpenChange($event)\"\n (ngModelChange)=\"handleTimeChange($event)\"\n [(ngModel)]=\"value\"\n>\n <ng-content></ng-content>\n</fd-time-picker>\n","import { NgModule } from '@angular/core';\nimport { PlatformTimePickerComponent } from './time-picker.component';\n\n@NgModule({\n imports: [PlatformTimePickerComponent],\n exports: [PlatformTimePickerComponent]\n})\nexport class PlatformTimePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["maxColumnsPerRow","formFieldProvider","formGroupChildProvider","i2.FormFieldLayoutService","nextUniqueId","FdCheckboxComponent","CoreCheckboxComponent","i1","FormGroupComponent","i2.CheckboxGroupComponent","createMissingDateImplementationError","FdDatePickerComponent","i1.TextAreaConfig","i3","i2","i4","CoreRadioButtonComponent","i2.RadioGroupComponent","ListComponent","CoreSelect","i1.SwitchConfig","CoreSwitchComponent","merge","isFunction","i2.FormGeneratorComponentsAccessorService","i1.FormGeneratorService","i2.FormFieldComponent","i3.FormFieldErrorDirective","i4.FormFieldErrorHeadingDirective","i5.FormFieldErrorDescriptionDirective","i6","i2.ComboboxConfig","i3.ComboboxConfig","i5","tap","filter","i3.FormGroupComponent","i4.FormFieldComponent","i5.FormFieldGroupComponent","i6.FormFieldErrorDirective","i7.FormFieldErrorHeadingDirective","i8.FormFieldErrorDescriptionDirective","i9","i2.InputGroupConfig","ButtonComponent","CheckboxComponent","i1.StepInputComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-platform-form.mjs","sources":["../../../../libs/platform/form/form-group/constants.ts","../../../../libs/platform/form/helpers.ts","../../../../libs/platform/form/input-message-group-with-template/input-message-group-with-template.component.ts","../../../../libs/platform/form/input-message-group-with-template/input-message-group-with-template.component.html","../../../../libs/platform/form/form-group/config/default-form-field-hint-options.ts","../../../../libs/platform/form/form-group/fdp-form.tokens.ts","../../../../libs/platform/form/form-group/form-field-error/tokens.ts","../../../../libs/platform/form/form-group/form-field-error/form-field-error.directive.ts","../../../../libs/platform/form/form-group/form-field-extras/form-field-extras.component.ts","../../../../libs/platform/form/form-group/helpers.ts","../../../../libs/platform/form/form-group/services/form-field-layout.service.ts","../../../../libs/platform/form/form-group/form-field/form-field.component.ts","../../../../libs/platform/form/form-group/form-field/form-field.component.html","../../../../libs/platform/form/form-generator/dynamic-form-control.ts","../../../../libs/platform/form/form-generator/config/default-validation-errors.ts","../../../../libs/platform/form/checkbox/checkbox.component.ts","../../../../libs/platform/form/checkbox/checkbox.component.html","../../../../libs/platform/form/checkbox-group/checkbox-group.component.ts","../../../../libs/platform/form/checkbox-group/checkbox-group.component.html","../../../../libs/platform/form/checkbox-group/checkbox-group.module.ts","../../../../libs/platform/form/form-generator/providers/providers.ts","../../../../libs/platform/form/form-generator/base-dynamic-form-generator-control.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.html","../../../../libs/platform/form/date-picker/date-picker.component.ts","../../../../libs/platform/form/date-picker/date-picker.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.html","../../../../libs/platform/form/text-area/text-area.config.ts","../../../../libs/platform/form/text-area/text-area.component.ts","../../../../libs/platform/form/text-area/text-area.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.html","../../../../libs/platform/form/input/input.component.ts","../../../../libs/platform/form/input/input.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.html","../../../../libs/platform/form/multi-input/multi-input.config.ts","../../../../libs/platform/form/multi-input/base-multi-input.ts","../../../../libs/platform/form/multi-input/multi-input.interface.ts","../../../../libs/platform/form/multi-input/multi-input-mobile/multi-input-mobile.component.ts","../../../../libs/platform/form/multi-input/multi-input-mobile/multi-input-mobile.component.html","../../../../libs/platform/form/multi-input/multi-input-mobile/multi-input-mobile.module.ts","../../../../libs/platform/form/auto-complete/auto-complete.directive.ts","../../../../libs/platform/form/multi-input/multi-input.component.ts","../../../../libs/platform/form/multi-input/multi-input.component.html","../../../../libs/platform/form/multi-input/multi-input.module.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.html","../../../../libs/platform/form/radio-group/radio/radio.component.ts","../../../../libs/platform/form/radio-group/radio/radio.component.html","../../../../libs/platform/form/radio-group/radio-group.component.ts","../../../../libs/platform/form/radio-group/radio-group.component.html","../../../../libs/platform/form/radio-group/radio-group.module.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.html","../../../../libs/platform/form/select/select.config.ts","../../../../libs/platform/form/select/commons/base-select.ts","../../../../libs/platform/form/select/select/select.component.ts","../../../../libs/platform/form/select/select/select.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.html","../../../../libs/platform/form/switch/switch/switch.config.ts","../../../../libs/platform/form/switch/switch/switch.component.ts","../../../../libs/platform/form/switch/switch/switch.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.html","../../../../libs/platform/form/form-generator/config/default-components-list.ts","../../../../libs/platform/form/form-generator/form-generator-components-accessor.service.ts","../../../../libs/platform/form/form-generator/helpers.ts","../../../../libs/platform/form/form-generator/form-generator.service.ts","../../../../libs/platform/form/form-generator/dynamic-form-control.directive.ts","../../../../libs/platform/form/form-group/form-field-error/form-field-error-description.directive.ts","../../../../libs/platform/form/form-group/form-field-error/form-field-error-heading.directive.ts","../../../../libs/platform/form/form-group/form-field-group/form-field-group.component.ts","../../../../libs/platform/form/form-group/form-group-header/form-group-header.component.ts","../../../../libs/platform/form/form-group/form-group-header/form-group-header.component.html","../../../../libs/platform/form/models/field.model.ts","../../../../libs/platform/form/form-group/pipes/field-group-row-value.pipe.ts","../../../../libs/platform/form/form-group/form-group.component.ts","../../../../libs/platform/form/form-group/form-group.component.html","../../../../libs/platform/form/form-group/fdp-form.module.ts","../../../../libs/platform/form/form-generator/form-generator-field/form-generator-field.component.ts","../../../../libs/platform/form/form-generator/form-generator-field/form-generator-field.component.html","../../../../libs/platform/form/form-helpers.ts","../../../../libs/platform/form/auto-complete/auto-complete.module.ts","../../../../libs/platform/form/checkbox/checkbox.module.ts","../../../../libs/platform/form/combobox/combobox.interface.ts","../../../../libs/platform/form/combobox/combobox-mobile/combobox/combobox-mobile.component.ts","../../../../libs/platform/form/combobox/combobox-mobile/combobox/combobox-mobile.component.html","../../../../libs/platform/form/combobox/combobox-mobile/combobox-mobile.module.ts","../../../../libs/platform/form/combobox/combobox.config.ts","../../../../libs/platform/form/combobox/directives/combobox-item.directive.ts","../../../../libs/platform/form/combobox/commons/base-combobox.ts","../../../../libs/platform/form/combobox/combobox/combobox.component.ts","../../../../libs/platform/form/combobox/combobox/combobox.component.html","../../../../libs/platform/form/combobox/combobox.module.ts","../../../../libs/platform/form/date-picker/date-picker.module.ts","../../../../libs/platform/form/datetime-picker/errors.ts","../../../../libs/platform/form/datetime-picker/datetime-picker.component.ts","../../../../libs/platform/form/datetime-picker/datetime-picker.component.html","../../../../libs/platform/form/datetime-picker/datetime-picker.module.ts","../../../../libs/platform/form/form-generator/config/default-form-generator-hint-options.ts","../../../../libs/platform/form/form-generator/dynamic-form-control-field.directive.ts","../../../../libs/platform/form/form-generator/form-generator.tokens.ts","../../../../libs/platform/form/form-generator/pipes/get-hint-options.pipe.ts","../../../../libs/platform/form/form-generator/pipes/get-ordered-form-controls.pipe.ts","../../../../libs/platform/form/form-generator/form-generator/form-generator.component.ts","../../../../libs/platform/form/form-generator/form-generator/form-generator.component.html","../../../../libs/platform/form/form-generator/fdp-form-generator.module.ts","../../../../libs/platform/form/input/fdp-input.module.ts","../../../../libs/platform/form/input-group/constants.ts","../../../../libs/platform/form/input-group/addon-body.component.ts","../../../../libs/platform/form/input-group/addon.component.ts","../../../../libs/platform/form/input-group/input-group.config.ts","../../../../libs/platform/form/input-group/input.component.ts","../../../../libs/platform/form/input-group/input-group.component.ts","../../../../libs/platform/form/input-group/input-group.component.html","../../../../libs/platform/form/input-group/input-group.module.ts","../../../../libs/platform/form/multi-combobox/multi-combobox.config.ts","../../../../libs/platform/form/multi-combobox/commons/base-multi-combobox.ts","../../../../libs/platform/form/multi-combobox/multi-combobox.interface.ts","../../../../libs/platform/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.ts","../../../../libs/platform/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.html","../../../../libs/platform/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.ts","../../../../libs/platform/form/multi-combobox/multi-combobox/multi-combobox.component.ts","../../../../libs/platform/form/multi-combobox/multi-combobox/multi-combobox.component.html","../../../../libs/platform/form/multi-combobox/multi-combobox.module.ts","../../../../libs/platform/form/select/select.module.ts","../../../../libs/platform/form/step-input/step-input.config.ts","../../../../libs/platform/form/step-input/step-input.util.ts","../../../../libs/platform/form/step-input/base.step-input.ts","../../../../libs/platform/form/step-input/step-input-control.directive.ts","../../../../libs/platform/form/step-input/step-input-action-button.ts","../../../../libs/platform/form/step-input/step-input-decrement.directive.ts","../../../../libs/platform/form/step-input/step-input-increment.directive.ts","../../../../libs/platform/form/step-input/number/number-step-input.component.ts","../../../../libs/platform/form/step-input/number/number-step-input.component.html","../../../../libs/platform/form/step-input/step-input.module.ts","../../../../libs/platform/form/switch/switch.module.ts","../../../../libs/platform/form/text-area/text-area.module.ts","../../../../libs/platform/form/time-picker/time-picker.component.ts","../../../../libs/platform/form/time-picker/time-picker.component.html","../../../../libs/platform/form/time-picker/time-picker.module.ts","../../../../libs/platform/form/fundamental-ngx-platform-form.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ColumnLayout } from '@fundamental-ngx/platform/shared';\n\nexport const FORM_GROUP_CHILD_FIELD_TOKEN = new InjectionToken<string>('FORM_GROUP_CHILD_FIELD_TOKEN');\n\nexport const DefaultHorizontalLabelLayout: ColumnLayout = {\n XL: 4,\n L: 4,\n M: 4,\n S: 12\n};\n\nexport const DefaultVerticalLabelLayout: ColumnLayout = {\n S: 12\n};\n\nexport const DefaultHorizontalFieldLayout: ColumnLayout = {\n XL: 8,\n L: 8,\n M: 8,\n S: 12\n};\n\nexport const DefaultVerticalFieldLayout: ColumnLayout = {\n S: 12\n};\n\nexport const DefaultGapLayout: ColumnLayout = {\n S: 0\n};\n","import { FormStates } from '@fundamental-ngx/cdk/forms';\n\n/**\n * Returns form state based on priority.\n * @param states Error states of the form fields.\n * @param priorityStates Array of prioritized states.\n * @returns first found form state of `priorityStates`.\n */\nexport function getFormState(\n states: FormStates[],\n priorityStates: FormStates[] = ['error', 'warning', 'information', 'success', 'default']\n): FormStates {\n let priorityState: FormStates = 'default';\n\n priorityStates.some((state) => {\n const firstErrorState = states.find((formState) => formState === state);\n\n if (!firstErrorState) {\n return false;\n }\n\n priorityState = firstErrorState;\n return true;\n });\n\n return priorityState;\n}\n","import { ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormInputMessageGroupComponent } from '@fundamental-ngx/core/form';\nimport {\n PopoverBodyComponent,\n PopoverComponent,\n PopoverControlComponent,\n TriggerConfig\n} from '@fundamental-ngx/core/popover';\n\n/**\n * This extends core implementation to support richer extensibility and instead of relying\n * only on ng-content selector this will allow you to put any content as trigger.\n *\n * Let's think of u\n */\n@Component({\n selector: 'fdp-input-message-group',\n templateUrl: './input-message-group-with-template.component.html',\n styleUrl: './input-message-group-with-template.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [PopoverComponent, PopoverControlComponent, NgTemplateOutlet, PopoverBodyComponent]\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class InputMessageGroupWithTemplate extends FormInputMessageGroupComponent {\n /**\n * To allow user to determine what event he wants to trigger the messages to show\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: (string | TriggerConfig)[] = [\n {\n trigger: 'focusin',\n openAction: true,\n closeAction: false\n },\n {\n trigger: 'focusout',\n openAction: false,\n closeAction: true\n }\n ];\n /**\n * Custom trigger element.\n */\n @ContentChild('triggerItem', { static: false })\n triggerItemTemplate: TemplateRef<any>;\n}\n","<fd-popover\n #popover\n (isOpenChange)=\"openChanged($event)\"\n additionalBodyClass=\"fd-popover__body--input-message-group\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [fillControlMode]=\"fillControlMode\"\n [isOpen]=\"isOpen\"\n [placement]=\"placement\"\n [triggers]=\"triggers\"\n [disableScrollbar]=\"true\"\n class=\"fd-form-input-message-group fd-popover--input-message-group\"\n>\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"triggerItemTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content></ng-content>\n </fd-popover-body>\n</fd-popover>\n","import { FieldHintOptions } from '@fundamental-ngx/platform/shared';\n\nexport const defaultFormFieldHintOptions: Omit<FieldHintOptions, 'content'> = {\n placement: 'right',\n position: 'after',\n trigger: [\n { trigger: 'mouseenter', openAction: true, closeAction: false },\n { trigger: 'mouseleave', openAction: false, closeAction: true },\n { trigger: 'focusin', openAction: true, closeAction: false },\n { trigger: 'focusout', openAction: false, closeAction: true }\n ],\n glyph: 'hint',\n target: 'auto'\n};\n","import { InjectionToken } from '@angular/core';\nimport { Column, ColumnLayout, FieldHintOptions } from '@fundamental-ngx/platform/shared';\nimport { defaultFormFieldHintOptions } from './config/default-form-field-hint-options';\n\nexport const FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT = new InjectionToken<Omit<FieldHintOptions, 'content'>>(\n 'Form field default hint options',\n {\n factory: () => defaultFormFieldHintOptions\n }\n);\n\nexport interface HintLayoutConfig {\n hintOnInputBreakpoints: Array<keyof ColumnLayout>;\n hintPlaceMinSize: Column;\n}\n\nexport const FDP_FORM_FIELD_HINT_LAYOUT_CONFIG = new InjectionToken<HintLayoutConfig>(\n 'Configuration for setting default values for configuring how places for inline help are coming',\n {\n factory: () => ({\n hintOnInputBreakpoints: ['M', 'L', 'XL'],\n hintPlaceMinSize: 1\n })\n }\n);\n","import { InjectionToken } from '@angular/core';\n\nexport const FDP_FORM_ERROR_DIRECTIVE = new InjectionToken('FdpFormErrorDirective');\n","import { ChangeDetectorRef, Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport {\n FormError,\n FormErrorDescription,\n FormErrorHeading,\n FormFieldErrorContext\n} from '@fundamental-ngx/platform/shared';\nimport { Subject } from 'rxjs';\nimport { FDP_FORM_ERROR_DIRECTIVE } from './tokens';\n\n@Directive({\n selector: '[fdpFormFieldError]',\n providers: [\n {\n provide: FDP_FORM_ERROR_DIRECTIVE,\n useExisting: FormFieldErrorDirective\n }\n ],\n standalone: true\n})\nexport class FormFieldErrorDirective<T = any> implements FormError<T>, OnInit {\n /** Used to connect data with model for typings support. */\n @Input()\n fdpFormFieldErrorAs: T;\n\n /** Error name */\n @Input('fdpFormFieldError')\n error: string;\n\n /** Error type */\n @Input()\n fdpFormFieldErrorType: FormStates = 'error';\n\n /** @hidden */\n detectChanges$ = new Subject<void>();\n\n /** Error type. Defines which type to return. Either self, or from heading directive. */\n get type(): FormStates {\n return this._headingDirective?.fdpFormFieldErrorHeadingType ?? this.fdpFormFieldErrorType;\n }\n\n /** @hidden */\n private _headingDirective: FormErrorHeading | undefined;\n\n /** @hidden */\n private _descriptionDirective: FormErrorDescription | undefined;\n\n /** @hidden */\n private _detectTimeout: ReturnType<typeof setTimeout>;\n\n /** @hidden */\n get _headingTemplateRef(): TemplateRef<FormFieldErrorContext<T>> {\n return this._headingDirective?.templateRef ?? this.templateRef;\n }\n\n /** @hidden */\n get _descriptionTemplateRef(): TemplateRef<FormFieldErrorContext<T>> | null {\n return this._descriptionDirective?.templateRef ?? null;\n }\n\n /** @hidden */\n constructor(\n public templateRef: TemplateRef<FormFieldErrorContext<T>>,\n private _viewContainer: ViewContainerRef,\n private _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: FormFieldErrorDirective,\n ctx: FormFieldErrorContext<any>\n ): ctx is FormFieldErrorContext<any> {\n return true;\n }\n\n /** @hidden */\n ngOnInit(): void {\n // We need to create view in order to initialize child directives immediately.\n this._createView();\n }\n\n /** Registers child heading directive. */\n registerHeading(directive: FormErrorHeading): void {\n this._headingDirective = directive;\n this._detectChanges();\n }\n\n /** Registers child description directive. */\n registerDescription(directive: FormErrorDescription): void {\n this._descriptionDirective = directive;\n this._detectChanges();\n }\n\n /** @hidden */\n private _createView(): void {\n this._viewContainer.createEmbeddedView(this.templateRef);\n this._viewContainer.detach();\n }\n\n /** @hidden */\n private _detectChanges(): void {\n // Since child directives can register itself almost instantly, we need to trigger detect changes only one time,\n // in order to bypass error with expected/actual directives count.\n clearTimeout(this._detectTimeout);\n this._detectTimeout = setTimeout(() => {\n this._cdr.detectChanges();\n this.detectChanges$.next();\n }, 5);\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'fdp-form-field-extras',\n template: '<ng-content></ng-content>',\n // \"display: flex\" is used in order to have margin included in control's dimensions\n styles: [':host { display: flex; white-space: normal; }'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class FormFieldControlExtrasComponent {}\n","import { ColumnLayout, ColumnLayoutGridClass } from '@fundamental-ngx/platform/shared';\n\n/** @hidden */\nexport function normalizeColumnLayout(layout: ColumnLayout, defaultColumn = 12): Required<ColumnLayout> {\n layout['S'] = layout['S'] !== undefined ? layout['S'] : defaultColumn;\n layout['M'] = layout['M'] || layout['S'];\n layout['L'] = layout['L'] || layout['M'];\n layout['XL'] = layout['XL'] || layout['L'];\n\n return layout as Required<ColumnLayout>;\n}\n\n/** @hidden */\nexport function generateColumnClass(layout: ColumnLayout): string {\n return Object.entries(layout)\n .reduce((overall, value) => {\n overall.push(`fd-col-${ColumnLayoutGridClass[value[0]]}--${value[1]}`);\n return overall;\n }, [] as string[])\n .join(' ');\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { GRID_COLUMNS_NUMBER as maxColumnsPerRow } from '@fundamental-ngx/core/layout-grid';\nimport { ColumnLayout } from '@fundamental-ngx/platform/shared';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { FDP_FORM_FIELD_HINT_LAYOUT_CONFIG, HintLayoutConfig } from '../fdp-form.tokens';\nimport { normalizeColumnLayout } from '../helpers';\n\ntype Layouts = {\n labelColumnLayout: ColumnLayout;\n fieldColumnLayout: ColumnLayout;\n gapColumnLayout: ColumnLayout;\n};\n\n/**\n * Should be used in component level. Ideally placed on container component,\n * so that every it's child FormField can have shared information about peers'\n * need about inline help place.\n */\n@Injectable()\nexport class FormFieldLayoutService {\n /**\n * Will notify if inline help place is needed. If any of the FormFields in group have\n * hintOptions config set the way that it might end up on 'input', then it will emit true\n */\n readonly needsInlineHelpPlace: Observable<boolean>;\n /** @hidden */\n private _needsInlineHelpPlace$ = new BehaviorSubject<boolean>(false);\n /** @hidden */\n private _elementsMap: Map<Record<string, any>, boolean> = new Map();\n\n /** @hidden */\n constructor(@Inject(FDP_FORM_FIELD_HINT_LAYOUT_CONFIG) private _hintLayoutConfig: HintLayoutConfig) {\n this.needsInlineHelpPlace = this._needsInlineHelpPlace$.pipe(distinctUntilChanged());\n }\n\n /**\n * Notify service about target component's requirement for the place for inline help\n */\n setNeedsInlineHelp(target: Record<string, any>, isNeeded: boolean): void {\n this._elementsMap.set(target, isNeeded);\n this._updateCombinedValue();\n }\n\n /**\n * Function will give place for hint in case it does not have it yet,\n * if combined needsInlineHelpPlace value is true\n */\n getFixedLayouts(layouts: Layouts): Layouts {\n const fieldColumnLayout = normalizeColumnLayout({ ...layouts.fieldColumnLayout });\n const labelColumnLayout = normalizeColumnLayout({ ...layouts.labelColumnLayout });\n const gapColumnLayout = normalizeColumnLayout({\n ...(layouts.gapColumnLayout ? layouts.gapColumnLayout : { S: 0 })\n });\n if (this._needsInlineHelpPlace$.value) {\n this._hintLayoutConfig.hintOnInputBreakpoints.forEach((sizeName) => {\n const shouldFitInOneLine =\n labelColumnLayout[sizeName] + fieldColumnLayout[sizeName] + gapColumnLayout[sizeName] <=\n maxColumnsPerRow;\n if (gapColumnLayout[sizeName] < this._hintLayoutConfig.hintPlaceMinSize) {\n gapColumnLayout[sizeName] = this._hintLayoutConfig.hintPlaceMinSize;\n }\n if (gapColumnLayout[sizeName] + fieldColumnLayout[sizeName] > maxColumnsPerRow) {\n const diff = gapColumnLayout[sizeName] + fieldColumnLayout[sizeName] - maxColumnsPerRow;\n fieldColumnLayout[sizeName] -= diff;\n }\n if (shouldFitInOneLine) {\n const maxAllocatedPlaceForFieldAndLabel = maxColumnsPerRow - gapColumnLayout[sizeName];\n while (\n labelColumnLayout[sizeName] + fieldColumnLayout[sizeName] >\n maxAllocatedPlaceForFieldAndLabel\n ) {\n fieldColumnLayout[sizeName] -= 1;\n }\n }\n });\n }\n return { fieldColumnLayout, labelColumnLayout, gapColumnLayout };\n }\n\n /**\n * Remove component from the combined value calculations\n */\n removeEntry(target: Record<string, any>): void {\n this._elementsMap.delete(target);\n this._updateCombinedValue();\n }\n\n /**\n * Will loop through all registered components and if any of them has need for\n * inline help place, then it will notify listeners about it and also will set\n * local variable\n * @hidden\n */\n private _updateCombinedValue(): void {\n for (const [, needed] of this._elementsMap) {\n if (needed) {\n return this._needsInlineHelpPlace$.next(true);\n }\n }\n this._needsInlineHelpPlace$.next(false);\n }\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Provider,\n QueryList,\n Self,\n Signal,\n SimpleChanges,\n SkipSelf,\n TemplateRef,\n ViewChild,\n ViewChildren,\n booleanAttribute,\n forwardRef,\n inject\n} from '@angular/core';\nimport { AbstractControl, FormControl, ValidatorFn, Validators } from '@angular/forms';\nimport { FD_FORM_FIELD, FormFieldControl, FormStates } from '@fundamental-ngx/cdk/forms';\nimport { uniqBy } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject, Subscription, combineLatest, filter, tap } from 'rxjs';\nimport { map, startWith, switchMap } from 'rxjs/operators';\n\nimport { CommonModule, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { FormItemComponent, FormLabelComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { InlineHelpDirective } from '@fundamental-ngx/core/inline-help';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport {\n Column,\n ColumnLayout,\n FieldHintInput,\n FieldHintOptions,\n FormError,\n FormFieldErrorDirectiveContext,\n FormFieldGroup,\n FormGroupContainer,\n HintContent,\n PlatformFormField,\n PlatformFormFieldControl,\n RESPONSIVE_BREAKPOINTS_CONFIG,\n ResponsiveBreakPointConfig,\n ResponsiveBreakpointsService\n} from '@fundamental-ngx/platform/shared';\nimport { getFormState } from '../../helpers';\nimport { InputMessageGroupWithTemplate } from '../../input-message-group-with-template/input-message-group-with-template.component';\nimport { defaultFormFieldHintOptions } from '../config/default-form-field-hint-options';\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../constants';\nimport {\n FDP_FORM_FIELD_HINT_LAYOUT_CONFIG,\n FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT,\n HintLayoutConfig\n} from '../fdp-form.tokens';\nimport { FormFieldErrorDirective } from '../form-field-error/form-field-error.directive';\nimport { FormFieldControlExtrasComponent } from '../form-field-extras/form-field-extras.component';\nimport { generateColumnClass, normalizeColumnLayout } from '../helpers';\nimport { FormFieldLayoutService } from '../services/form-field-layout.service';\n\nlet defaultId = 0;\n\nconst formFieldProvider: Provider = {\n provide: FD_FORM_FIELD,\n useExisting: forwardRef(() => FormFieldComponent)\n};\n\nconst formGroupChildProvider: Provider = {\n provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n useExisting: forwardRef(() => FormFieldComponent)\n};\n\nfunction columnTransformer(v: Column | `${Column}`): Column {\n return parseInt(v + '', 10) as Column;\n}\n\nfunction rankTransformer(v: string | number): number {\n return parseInt(v + '', 10);\n}\n\n/**\n * Form Field represent actual row and aggregates common behavior for the input field such as\n * error, label or hint.\n * Hint is also responsible for listening for FieldControl changes and trigger necessary\n * change detection\n *\n */\n@Component({\n selector: 'fdp-form-field',\n templateUrl: 'form-field.component.html',\n styleUrl: './form-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [formFieldProvider, formGroupChildProvider, FormFieldLayoutService],\n imports: [\n CommonModule,\n FormItemComponent,\n NgTemplateOutlet,\n InputMessageGroupWithTemplate,\n FormMessageComponent,\n FormLabelComponent,\n LinkComponent,\n IconComponent,\n InlineHelpDirective\n ]\n})\nexport class FormFieldComponent\n implements PlatformFormField, AfterContentInit, AfterViewInit, OnDestroy, OnInit, OnChanges\n{\n /** Form field label */\n @Input()\n label: string;\n\n /**\n * Suffix for ids of control elements inside this form field\n */\n @Input()\n id: string = (++defaultId).toString();\n\n /** Hint to be placed next to label */\n @Input()\n hint: Nullable<FieldHintInput>;\n\n /**\n * Indicates when form field label should not be displayed\n */\n @Input()\n noLabelLayout = false;\n\n /**\n * The list of validators applied to the form field.\n */\n @Input()\n validators: Array<ValidatorFn> = [Validators.nullValidator];\n\n /**\n * Rank is used for ordering.\n * First lower number, then - higher\n */\n @Input({ transform: rankTransformer })\n rank: number;\n\n /**\n * Placeholder for the field\n */\n @Input()\n placeholder: string;\n\n /** Form Container column it belongs to */\n @Input()\n column: number;\n\n /** object for placing field in column in each screen layout */\n @Input()\n set columnLayout(layout: ColumnLayout | undefined) {\n if (!layout) {\n return;\n }\n this._columnLayout = layout;\n this._isColumnLayoutEnabled = true;\n this._setLayout();\n }\n\n get columnLayout(): ColumnLayout {\n return this._columnLayout;\n }\n\n /**\n * Defines label's column layout.\n */\n @Input()\n set labelColumnLayout(value: ColumnLayout | undefined) {\n if (!value) {\n return;\n }\n this._labelColumnLayout = normalizeColumnLayout(value);\n this._labelColumnLayoutClass = generateColumnClass(this._labelColumnLayout);\n this._labelColumnLayout$.next(this._labelColumnLayout);\n }\n\n get labelColumnLayout(): ColumnLayout {\n return this._labelColumnLayout;\n }\n\n /**\n * Defines field's column layout.\n */\n @Input()\n set fieldColumnLayout(value: ColumnLayout | undefined) {\n if (!value) {\n return;\n }\n\n this._fieldColumnLayout = normalizeColumnLayout(value);\n this._fieldColumnLayoutClass = generateColumnClass(this._fieldColumnLayout);\n this._fieldColumnLayout$.next(this._fieldColumnLayout);\n }\n\n get fieldColumnLayout(): ColumnLayout {\n return this._fieldColumnLayout;\n }\n\n /**\n * Defines gap column layout.\n */\n @Input()\n set gapColumnLayout(value: ColumnLayout | undefined) {\n if (!value) {\n return;\n }\n\n this._gapColumnLayout = normalizeColumnLayout(value);\n this._gapColumnLayoutClass = generateColumnClass(this._gapColumnLayout);\n this._gapColumnLayout$.next(this._gapColumnLayout);\n }\n\n get gapColumnLayout(): ColumnLayout {\n return this._gapColumnLayout;\n }\n\n /**\n * Translations template reference.\n * This is in most of the cases set from parent container (form-group)\n */\n @Input()\n i18Strings: TemplateRef<any>;\n\n /** Set when form field is a mandatory one. */\n @Input({ transform: booleanAttribute })\n required = false;\n\n /**\n * Indicates if field is editable\n */\n @Input({ transform: booleanAttribute })\n set editable(value: boolean) {\n if (this._editable === value) {\n return;\n }\n this._editable = value;\n this._updateControlProperties();\n }\n\n get editable(): boolean {\n return this._editable;\n }\n\n /**\n * Form field custom width in columns must be between 1 - 12\n */\n @Input({ transform: columnTransformer })\n columns: Column = 6;\n\n /**\n * marks field as disabled. used in reactive form approach.\n */\n @Input()\n disabled = false;\n\n /** Whether label text should be appended with colon. */\n @Input()\n colon = false;\n\n /**\n * Form Group Container to bind the Form-Field to.\n * This will override default value injected by constructor\n */\n @Input()\n formGroupContainer: FormGroupContainer;\n\n /** Emits whenever formFieldControl's state changes */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onChange: EventEmitter<string> = new EventEmitter<string>();\n\n /** Emits whenever column layout is changed */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onColumnChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * @hidden\n * Form field template reference\n */\n @ViewChild('renderer', { static: true })\n renderer: TemplateRef<any>;\n\n /** @hidden */\n @ContentChild(FormFieldControlExtrasComponent, { read: ElementRef })\n formFieldExtras?: ElementRef<HTMLElement>;\n\n /** @hidden */\n @ViewChild('labelCol') labelCol?: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n @ViewChild(InputMessageGroupWithTemplate, { read: ElementRef })\n inputMessageGroup: ElementRef<HTMLElement>;\n\n /** @hidden */\n @ViewChild('innerErrorRenderers')\n innerErrorRenderers: TemplateRef<any>;\n\n /** @hidden */\n @ContentChildren(FormFieldErrorDirective)\n private _errorDirectiveQuery: QueryList<FormError>;\n\n /** @hidden */\n @ViewChildren(InputMessageGroupWithTemplate)\n private readonly _inputMessageGroupCmp: QueryList<InputMessageGroupWithTemplate>;\n\n /** Combined Error directives from field itself and parent form container. */\n get errorDirectives(): FormError[] {\n return uniqBy([...this._errorDirectives, ...this._formGroupErrorDirectives], 'error');\n }\n\n /** @hidden */\n isHorizontal$: Signal<boolean | undefined>;\n\n /**\n * Child FormFieldControl\n */\n control: PlatformFormFieldControl | null;\n\n /** @hidden */\n _labelColumnLayoutClass: string;\n\n /** @hidden */\n _fieldColumnLayoutClass: string;\n\n /** @hidden */\n _gapColumnLayoutClass: string;\n\n /**\n * hint and hint placement coerced to the FieldHintOptions\n */\n hintOptions: FieldHintOptions = defaultFormFieldHintOptions as unknown as FieldHintOptions;\n\n /** @hidden */\n _errorDirectives: FormError[] = [];\n\n /** Grouped errors. */\n groupedErrors: FormFieldErrorDirectiveContext[] = [];\n\n /** Event emited when errors object being changed. */\n errorsChange$ = new Subject<void>();\n\n /**\n * @hidden\n * Optional FormControl\n */\n formControl: FormControl;\n\n /** @hidden */\n get _groupHost(): FormGroupContainer | FormFieldGroup {\n return this.formFieldGroup ? this.formFieldGroup : this.formGroupContainer;\n }\n\n /**\n * Will be updated during onChanges and resize, resulting correct placement of the\n * hint respecting passed configs and given breakpoint of screen.\n */\n hintTarget?: string;\n\n /** @hidden */\n protected _editable = true;\n\n /** @hidden */\n private _isColumnLayoutEnabled = false;\n\n /** @hidden column number for different screen sizes */\n private _xlColumnNumber: number;\n\n /** @hidden */\n private _lgColumnNumber: number;\n\n /** @hidden */\n private _mdColumnNumber: number;\n\n /** @hidden */\n private _sColumnNumber = 1;\n\n /** @hidden */\n private _columnLayout: ColumnLayout;\n\n /** @hidden */\n private readonly _responsiveBreakPointConfig: ResponsiveBreakPointConfig;\n\n /** @hidden */\n private _labelColumnLayout: ColumnLayout;\n\n /** @hidden */\n private _fieldColumnLayout: ColumnLayout;\n /** @hidden */\n private _gapColumnLayout: ColumnLayout;\n\n /** @hidden */\n private _formGroupErrorDirectives: FormError[] = [];\n\n /** @hidden */\n private _formGroupErrorDirectivesSubscription: Subscription;\n\n /** @hidden */\n private _errorDirectivesCdr: Subscription;\n\n /** @hidden whether label and control are vertically aligned */\n private get _isHorizontalAlignment(): boolean {\n if (!this.inputMessageGroup || !this.labelCol) {\n return false;\n }\n const inputMessageGroupY = this.inputMessageGroup.nativeElement.getBoundingClientRect().y;\n const labelColRect = this.labelCol.nativeElement.getBoundingClientRect();\n const labelColBottomY = labelColRect.y + labelColRect.height;\n return labelColBottomY > inputMessageGroupY;\n }\n\n /**\n * @hidden\n * Sum of extra heights inside form control and formFieldExtras.\n * Label will be shifted by this number in order to be properly aligned with the control\n */\n get _controlExtrasHeightPx(): number | null {\n if (this.noLabelLayout || !this._isHorizontalAlignment) {\n // proceed only if 1. there's a label; 2. control has vertical alignment\n return null;\n }\n return (\n (this.formFieldExtras?.nativeElement.offsetHeight ?? 0) + (this.control?.extraContentHeightPx ?? 0) || null\n );\n }\n\n /** @hidden */\n private _labelColumnLayout$: BehaviorSubject<ColumnLayout>;\n /** @hidden */\n private _fieldColumnLayout$: BehaviorSubject<ColumnLayout>;\n /** @hidden */\n private _gapColumnLayout$: BehaviorSubject<ColumnLayout>;\n /** @hidden */\n private _needsInlineHelpPlaceSubscription?: Subscription;\n\n /** @hidden */\n private _breakPointObserver: Observable<any>;\n\n /** @hidden */\n private _formFieldLayoutService: FormFieldLayoutService;\n /** @hidden */\n private readonly _defaultHintOptions: FieldHintOptions;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(\n private _cd: ChangeDetectorRef,\n @Optional() formGroupContainer: FormGroupContainer,\n @Optional() readonly formFieldGroup: FormFieldGroup,\n @Optional()\n @Inject(RESPONSIVE_BREAKPOINTS_CONFIG)\n readonly _defaultResponsiveBreakPointConfig: ResponsiveBreakPointConfig,\n readonly _responsiveBreakpointsService: ResponsiveBreakpointsService,\n @Inject(FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT) _providedHintOptions: FieldHintOptions,\n @Inject(FDP_FORM_FIELD_HINT_LAYOUT_CONFIG) private _hintLayoutConfig: HintLayoutConfig,\n @Self() _selfFormFieldLayoutService: FormFieldLayoutService,\n @Optional() @SkipSelf() _parentFormFieldLayoutService: FormFieldLayoutService\n ) {\n this._defaultHintOptions = {\n ...defaultFormFieldHintOptions,\n ..._providedHintOptions\n };\n this._formFieldLayoutService = _parentFormFieldLayoutService || _selfFormFieldLayoutService;\n this._labelColumnLayout$ = new BehaviorSubject(this._labelColumnLayout);\n this._fieldColumnLayout$ = new BehaviorSubject(this._fieldColumnLayout);\n this._gapColumnLayout$ = new BehaviorSubject(this._gapColumnLayout);\n // formGroupContainer can be injected only if current form-field is located\n // insight formGroupContainer content.\n // If this is not the case the formGroupContainer\n // will be undefined (known angular issue),\n // in such case formGroupContainer can be pointed explicitly using\n // component input annotation\n this.formGroupContainer = formGroupContainer;\n this._responsiveBreakPointConfig = _defaultResponsiveBreakPointConfig || new ResponsiveBreakPointConfig();\n this._breakPointObserver = this._responsiveBreakpointsService.observeBreakpointByConfig(\n this._responsiveBreakPointConfig\n );\n\n this.isHorizontal$ = toSignal(\n combineLatest([\n this._labelColumnLayout$.pipe(filter(Boolean), map(normalizeColumnLayout)),\n this._fieldColumnLayout$.pipe(filter(Boolean), map(normalizeColumnLayout)),\n this._gapColumnLayout$.pipe(map((g) => normalizeColumnLayout(g || { S: 0 })))\n ]).pipe(\n switchMap(([label, field, gap]) =>\n this._breakPointObserver.pipe(\n map(\n (breakpointName) =>\n label[breakpointName] + field[breakpointName] + gap[breakpointName] <= 12\n )\n )\n )\n )\n );\n }\n\n /**\n * Sets initial values for label, field and gap columns\n */\n setDefaultColumnLayout(): void {\n // If layout already defined, no need to set default one.\n if (this.labelColumnLayout) {\n return;\n }\n this.listenToInlineHelpPlaceRequirementChanges(() => (this.labelColumnLayout ? this : this._groupHost));\n }\n\n /** @hidden */\n listenToInlineHelpPlaceRequirementChanges(getSource: () => any): void {\n if (this._needsInlineHelpPlaceSubscription) {\n this._needsInlineHelpPlaceSubscription.unsubscribe();\n this._needsInlineHelpPlaceSubscription = void 0;\n }\n const setLayouts = (source: any): void => {\n this.labelColumnLayout = source.labelColumnLayout;\n this.fieldColumnLayout = source.fieldColumnLayout;\n this.gapColumnLayout = source.gapColumnLayout;\n };\n this._needsInlineHelpPlaceSubscription = this._formFieldLayoutService.needsInlineHelpPlace\n .pipe(\n map(() => this._formFieldLayoutService.getFixedLayouts(getSource())),\n tap(setLayouts),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe();\n }\n\n /** @hidden */\n ngOnInit(): void {\n // provides capability to make a field disabled. useful in reactive form approach.\n this.formControl =\n (this.formGroupContainer?.formGroup?.get(this.id) as FormControl) ??\n new FormControl({ value: null, disabled: this.disabled });\n\n if (this.columns && (this.columns < 1 || this.columns > 12)) {\n throw new Error('[columns] accepts numbers between 1 - 12');\n }\n\n if (this._isColumnLayoutEnabled) {\n this._breakPointObserver\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((breakPointName) => this._updateLayout(breakPointName));\n }\n\n this._addToFormGroup();\n\n this.listenToInlineHelpPlaceRequirementChanges(() => this);\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hint) {\n this._updateHintOptions();\n this._formFieldLayoutService.setNeedsInlineHelp(\n this,\n (this.hintOptions.target === 'input' || this.hintOptions.target === 'auto') && !!this.hint\n );\n }\n if (changes.hint && changes.hint.firstChange) {\n this._breakPointObserver\n .pipe(\n tap((sizeName) => {\n if (this.hintOptions.target === 'auto') {\n this.hintTarget = this._hintLayoutConfig.hintOnInputBreakpoints.includes(sizeName)\n ? 'input'\n : 'label';\n } else {\n this.hintTarget = this.hintOptions.target;\n }\n }),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe();\n }\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._cd.markForCheck();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._assignErrorDirectives();\n\n this._errorDirectiveQuery.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._assignErrorDirectives();\n });\n this._updateControlProperties();\n this._validateErrorHandler();\n this._listenToFormMessage();\n this._cd.detectChanges();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._formFieldLayoutService.removeEntry(this);\n this._removeFromFormGroup();\n this._errorDirectivesCdr?.unsubscribe();\n this._formGroupErrorDirectivesSubscription?.unsubscribe();\n }\n\n /** @hidden */\n hasErrors(): boolean {\n return this._editable && !!this.control?.controlInvalid;\n }\n\n /**\n * Register underlying form control\n * @param formFieldControl\n */\n registerFormFieldControl(formFieldControl: FormFieldControl): void {\n if (this.control) {\n throw Error('Form field can contain only one FormFieldControl');\n }\n\n this.control = formFieldControl as PlatformFormFieldControl;\n\n formFieldControl.stateChanges.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._updateControlProperties();\n // need to call explicitly detectChanges() instead of markForCheck before the\n // modified validation state of the control passes over checked phase\n this.onChange.emit('stateChanges');\n this.groupErrors();\n this._cd.detectChanges();\n });\n\n // Refresh UI when value changes\n if (formFieldControl?.ngControl?.valueChanges) {\n formFieldControl.ngControl.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.onChange.emit('valueChanges');\n this.groupErrors();\n this._cd.markForCheck();\n });\n }\n\n if (formFieldControl?.ngControl?.control) {\n const control = formFieldControl.ngControl.control;\n\n const hasRequiredValidator =\n this.validators.includes(Validators.required) || this.validators.includes(Validators.requiredTrue);\n\n if (this.required && !hasRequiredValidator) {\n this.validators.push(Validators.required);\n }\n\n if (hasRequiredValidator) {\n this.required = true;\n }\n\n // if form control is disabled, in reactive form approach\n if (this.disabled) {\n control.disable();\n }\n\n /**\n * There is a case when a \"form-group\" initial state is VALID,\n * and on the next loop a child form-filed extends it and make\n * the form-group INVALID.\n * In such case we get the error\n * \"ExpressionChangedAfterItHasBeenCheckedError. Previous value is ng-valid, current value is ng-invalid\".\n * To fix it we have to postpone adding form-field validators\n *\n */\n Promise.resolve().then(() => {\n control.setValidators(Validators.compose(this.validators));\n control.updateValueAndValidity({ emitEvent: false });\n });\n\n this._addControlToFormGroup(formFieldControl?.ngControl?.control);\n }\n\n this._cd.markForCheck();\n }\n\n /**\n * Unregister underlying form control\n * @param formFieldControl\n */\n unregisterFormFieldControl(formFieldControl: FormFieldControl): void {\n if (formFieldControl !== this.control) {\n return;\n }\n\n this.control = null;\n\n this._removeControlFromFormGroup();\n }\n\n /**\n * Groups\n */\n groupErrors(): void {\n // Queue task because firing it right away may cause error with showing empty message.\n setTimeout(() => {\n this.groupedErrors = [];\n const errors = this.control?.ngControl?.errors;\n if (!errors) {\n return [];\n }\n\n this.errorDirectives.forEach((directive) => {\n if (!errors[directive.error]) {\n return;\n }\n\n this.groupedErrors.push({\n directive,\n error: errors[directive.error]\n });\n });\n this.errorsChange$.next();\n this._cd.markForCheck();\n });\n }\n\n /**\n * Gets prioritized control state based on the error types it has.\n */\n getPriorityState(): FormStates {\n if (this.groupedErrors.length === 0) {\n return this.hasErrors() ? 'error' : 'default';\n }\n\n return getFormState(this.groupedErrors.map((error) => error.directive.type));\n }\n\n /**\n * Sets error directives.\n */\n setErrorDirectives(directives: QueryList<FormError>): void {\n this._formGroupErrorDirectivesSubscription?.unsubscribe();\n\n if (!directives) {\n return;\n }\n\n this._formGroupErrorDirectives = directives.toArray();\n\n this._formGroupErrorDirectivesSubscription = directives.changes\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._formGroupErrorDirectives = directives.toArray();\n });\n }\n\n /**\n * Returns whether content of the provided hint is a string.\n * @hidden\n */\n isStringHint(hintOptions: HintContent): hintOptions is string {\n return typeof hintOptions === 'string';\n }\n\n /**\n * @hidden\n * Listens to form message component changes and passes its instance to the form control component.\n */\n private _listenToFormMessage(): void {\n this._inputMessageGroupCmp.changes\n .pipe(\n startWith(null),\n map(() => this._inputMessageGroupCmp.first),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((component) => {\n if (!this.control) {\n return;\n }\n this.control!.formMessage = component;\n });\n }\n\n /** @hidden */\n private _validateErrorHandler(): void {\n if (\n this._editable &&\n this.control &&\n this._hasValidators() &&\n !this.i18Strings &&\n this.errorDirectives.length === 0\n ) {\n throw new Error('Validation strings are required for the any provided validations.');\n }\n }\n\n /** @hidden */\n private _hasValidators(): boolean {\n return this.validators && this.validators.length > 1;\n }\n\n /**\n * @hidden\n * Add FormField to FormGroup\n */\n private _addToFormGroup(): void {\n if (!this.formGroupContainer || this.formFieldGroup) {\n return;\n }\n\n this.formGroupContainer.addFormField(this);\n }\n\n /**\n * @hidden\n * Remove FormField from FormGroup\n */\n private _removeFromFormGroup(): void {\n if (!this.formGroupContainer) {\n return;\n }\n this.formGroupContainer.removeFormField(this);\n }\n\n /**\n * @hidden\n * Add FormControl from FormGroup\n */\n private _addControlToFormGroup(control: AbstractControl): void {\n if (!this.formGroupContainer || !!this.formFieldGroup?.formName) {\n return;\n }\n this.formGroupContainer.addFormControl(this.id, control);\n }\n\n /**\n * @hidden\n * Remove FormControl from FormGroup\n */\n private _removeControlFromFormGroup(): void {\n if (!this.formGroupContainer) {\n return;\n }\n this.formGroupContainer.removeFormControl(this.id);\n }\n\n /**\n * @hidden\n * Need to be able to set these properties on every level.\n * - Global FormGroup Level as well each field\n *\n * Todo: use more elegant way to set these properties.\n */\n private _updateControlProperties(): void {\n if (this.control && this._editable) {\n this.control.id = this.id;\n this.control.required = this.required;\n\n if (this.placeholder) {\n this.control.placeholder = this.placeholder;\n }\n }\n }\n\n /** @hidden */\n private _setLayout(): void {\n try {\n const normalized = normalizeColumnLayout(this.columnLayout, 1);\n this.columnLayout = normalized;\n this._sColumnNumber = normalized['S'];\n this._mdColumnNumber = normalized['M'];\n this._lgColumnNumber = normalized['L'];\n this._xlColumnNumber = normalized['XL'];\n } catch {\n this._isColumnLayoutEnabled = false;\n }\n }\n\n /** @hidden */\n private _updateLayout(currentBreakingPointName: string): void {\n if (this._isColumnLayoutEnabled) {\n switch (currentBreakingPointName) {\n case 'S':\n this.column = this._sColumnNumber;\n break;\n case 'M':\n this.column = this._mdColumnNumber;\n break;\n case 'L':\n this.column = this._lgColumnNumber;\n break;\n case 'XL':\n this.column = this._xlColumnNumber;\n break;\n default:\n this.column = this._xlColumnNumber;\n }\n }\n\n // emit column change, so form-group knows it and re-arranges the fields\n this.onColumnChange.emit(true);\n }\n\n /** @hidden */\n private _updateHintOptions(): void {\n // placement is here set up because hintPlacement is deprecated\n if (typeof this.hint === 'string' || this.hint instanceof TemplateRef) {\n this.hintOptions = {\n ...this._defaultHintOptions,\n content: this.hint\n };\n } else if (typeof this.hint === 'object') {\n this.hintOptions = {\n ...this._defaultHintOptions,\n ...this.hint\n };\n }\n }\n\n /** @hidden */\n private _assignErrorDirectives(): void {\n this._errorDirectivesCdr?.unsubscribe();\n this._errorDirectives = this._errorDirectiveQuery.toArray();\n this._errorDirectivesCdr = new Subscription();\n\n this._errorDirectives.forEach((directive) => {\n this._errorDirectivesCdr.add(\n directive.detectChanges$.subscribe(() => {\n this.groupErrors();\n this._cd.detectChanges();\n })\n );\n });\n }\n}\n","<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n @if (!noLabelLayout) {\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n }\n <ng-template [ngTemplateOutlet]=\"withFormMessage\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"gapTemplate\"></ng-template>\n </div>\n <span aria-hidden=\"true\" [style.display]=\"'none'\" [id]=\"'fdp-form-hint-' + id\">\n @if (isStringHint(hintOptions.content)) {\n {{ hintOptions.content }}\n } @else {\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n }\n </span>\n</ng-template>\n<ng-template #withFormMessage>\n <fdp-input-message-group\n class=\"fd-col\"\n [class]=\"_fieldColumnLayoutClass\"\n [attr.aria-labelledby]=\"'fdp-form-label-' + id\"\n >\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n <fd-form-message [type]=\"error.directive.type\">\n <div>\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n </div>\n </fd-form-message>\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <fd-form-message type=\"error\">\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n </fd-form-message>\n }\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #innerErrorRenderers>\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n <div>\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n </div>\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n }\n</ng-template>\n\n<ng-template #labelTemplate>\n @if (hintTarget === 'label') {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n } @else {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n }\n</ng-template>\n\n<ng-template #gapTemplate>\n @if (hintTarget === 'input' && hintOptions.content) {\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n } @else {\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n }\n</ng-template>\n","import { AbstractControlOptions, AsyncValidatorFn, FormControl, FormGroup, ValidatorFn } from '@angular/forms';\n\nimport { DynamicAbstractControlOptions } from './interfaces/dynamic-abstract-control';\nimport { DynamicFormFieldGroupMap, PreparedDynamicFormFieldItem } from './interfaces/dynamic-form-item';\n\nexport type DynamicFormGroupControl = DynamicFormControl | DynamicFormControlGroup;\n\nexport interface DynamicFormGroupControls {\n [key: string]: DynamicFormGroupControl;\n}\n\nexport class DynamicFormControlGroup extends FormGroup {\n /** @hidden */\n public formItem: DynamicFormFieldGroupMap;\n /** @hidden */\n public type = 'group';\n /** @hidden */\n declare public controls: DynamicFormGroupControls;\n\n /** @hidden */\n constructor(\n formItem: DynamicFormFieldGroupMap,\n controls: DynamicFormGroupControls,\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(controls, validatorOrOpts, asyncValidator);\n this.formItem = formItem;\n }\n}\n\nexport class DynamicFormControl extends FormControl {\n /** @hidden */\n public formItem: PreparedDynamicFormFieldItem;\n /** @hidden */\n public type = 'field';\n\n /**\n * @description Creates a new `DynamicFormControl` instance.\n *\n * @param formState Initializes the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n * @param formItem `DynamicFormItem` object\n *\n */\n constructor(formState: any, validatorOrOpts: DynamicAbstractControlOptions) {\n super(formState, validatorOrOpts);\n this.formItem = validatorOrOpts.dynamicFormItem;\n }\n}\n","export const DEFAULT_VALIDATION_ERRORS = {\n required: 'This field is required',\n validator: 'This field is invalid'\n};\n","import {\n AfterViewInit,\n Attribute,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport {\n CheckboxComponent as CoreCheckboxComponent,\n CheckboxComponent as FdCheckboxComponent,\n FdCheckboxValues\n} from '@fundamental-ngx/core/checkbox';\nimport { FormItemComponent } from '@fundamental-ngx/core/form';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\n/** Change event object emitted by Platform Checkbox. */\nexport class PlatformCheckboxChange {\n /** The source Checkbox of the event. */\n source: CheckboxComponent;\n /**\n * The new `checked` value of the checkbox.\n * possible value: true/false and array of checkbox values.\n */\n checked: any;\n}\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'fdp-checkbox',\n templateUrl: './checkbox.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => CheckboxComponent), multi: true }],\n imports: [FormItemComponent, CoreCheckboxComponent, FormsModule]\n})\nexport class CheckboxComponent extends BaseInput implements AfterViewInit {\n /**\n * Checkbox tooltip\n */\n @Input()\n title: string;\n\n /** Sets label for checkbox. */\n @Input()\n label: string;\n\n /** true when checkbox has indeterminate state */\n @Input()\n tristate = false;\n\n // this is undesired to have \"checked\" input instead of \"value\"\n // but it was done this way initially and we have to keep this in order to not break anything\n /**\n * Checked state of the checkbox control.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('checked')\n set value(selectValue: any) {\n this.setValue(selectValue);\n }\n get value(): any {\n return this.getValue();\n }\n\n /** when true indeterminate state can be selected */\n @Input()\n tristateSelectable = false;\n\n /** Values returned by control. */\n @Input()\n values: FdCheckboxValues;\n\n /** Whether checkbox should be rendered standalone (without any text). */\n @Input()\n standalone = false;\n\n /** Whether the checkbox should be rendered in display-only mode. */\n @Input()\n displayOnly = false;\n\n /**\n * Emitting checked event for non-form checkbox\n */\n @Output()\n readonly checkedChange = new EventEmitter<any>();\n\n /**\n * @hidden\n * is needed for the checkbox group to access component values\n */\n @ViewChild(FdCheckboxComponent)\n coreCheckbox: FdCheckboxComponent;\n\n /** @hidden */\n constructor(@Attribute('tabIndexValue') public tabIndexValue: number = 0) {\n super();\n // necessary to fulfill baseInput check.\n // case: fdp-checkbox passed in declarative fdp-checkbox-group without id and name.\n this.name = `fdp-checkbox-${nextUniqueId++}`;\n this.tabIndexValue = tabIndexValue;\n }\n /** update controller on checkbox state change */\n public onModelChange(value: any): void {\n this.value = value;\n this._emitChangeEvent();\n this.stateChanges.next('checkbox: onModelChange');\n }\n\n /**\n * Method to emit change event\n */\n private _emitChangeEvent(): void {\n this.checkedChange.emit(this.value);\n\n const event = new PlatformCheckboxChange();\n event.source = this;\n event.checked = this.value;\n }\n}\n","<div fd-form-item>\n <fd-checkbox\n [inputId]=\"id\"\n [name]=\"name\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [label]=\"label\"\n [tristate]=\"tristate\"\n [values]=\"values\"\n [tristateSelectable]=\"tristateSelectable\"\n [state]=\"state\"\n [title]=\"title\"\n [required]=\"required\"\n [ariaLabel]=\"ariaLabel || null\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [ngModel]=\"value\"\n [standalone]=\"standalone\"\n [displayOnly]=\"displayOnly\"\n (ngModelChange)=\"onModelChange($event)\"\n (focusChange)=\"_onFocusChanged($event)\"\n >\n <ng-content></ng-content>\n </fd-checkbox>\n</div>\n","import { SelectionModel } from '@angular/cdk/collections';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n QueryList,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { RangeSelector } from '@fundamental-ngx/cdk/utils';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormGroupComponent } from '@fundamental-ngx/core/form';\nimport { coerceArraySafe, InLineLayoutCollectionBaseInput, SelectItem } from '@fundamental-ngx/platform/shared';\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\n\n/**\n * Checkbox group implementation based on the\n * https://github.com/SAP/fundamental-ngx/wiki/Platform:-CheckboxGroup-Technical-Design\n * documents.\n */\n@Component({\n selector: 'fdp-checkbox-group',\n templateUrl: './checkbox-group.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => CheckboxGroupComponent), multi: true }],\n imports: [FormGroupComponent, NgTemplateOutlet, CheckboxComponent, FormsModule]\n})\nexport class CheckboxGroupComponent extends InLineLayoutCollectionBaseInput {\n /**\n * value for selected checkboxes.\n */\n @Input()\n set value(selectedValue: any[]) {\n this.setValue(selectedValue);\n this._updateSelectionModelByValue();\n }\n get value(): any[] {\n return this.getValue();\n }\n\n /**\n * To Display multiple checkboxes in a line\n */\n @Input()\n set isInline(inline: boolean) {\n this._inlineCurrentValue$.next(inline);\n }\n get isInline(): boolean {\n return this._inlineCurrentValue$.value;\n }\n\n /** Children checkboxes passed as content */\n @ContentChildren(CheckboxComponent)\n contentCheckboxes: QueryList<CheckboxComponent>;\n\n /** Children checkboxes created from passed list values. */\n @ViewChildren(CheckboxComponent)\n viewCheckboxes: QueryList<CheckboxComponent>;\n\n /** Emits checked change event */\n @Output()\n readonly valueChange: EventEmitter<string[]> = new EventEmitter<string[]>();\n\n /** @hidden */\n readonly _selectionModel = new SelectionModel(true);\n\n /** @hidden */\n private readonly _rangeSelector = new RangeSelector();\n\n /**\n * @hidden\n * @param selectionState actual value of the checkbox\n * @param checkboxTrueValue thuthy value to compare the \"selectionState\" with\n */\n onModelChanged(selectionState: any, checkboxTrueValue: any): void {\n const isSelected = selectionState === checkboxTrueValue;\n if (isSelected) {\n this._selectionModel.select(checkboxTrueValue);\n } else {\n this._selectionModel.deselect(checkboxTrueValue);\n }\n this._setValueBySelectionModel();\n this.onTouched();\n this.valueChange.emit(this.value);\n }\n\n /** @hidden */\n onCheckboxClick(index: number, source: 'contentChildren' | 'list', event?: MouseEvent): void {\n // this handler will be invoked after \"valueChange\"\n const queryList = source === 'list' ? this.viewCheckboxes : this.contentCheckboxes;\n const target = queryList.get(index);\n\n const isChecked = this._selectionModel.isSelected(target?.values.trueValue);\n this._rangeSelector.onRangeElementToggled(index, event);\n\n if (!this._rangeSelector.lastRangeSelectionState?.isRangeSelection) {\n // no need to proceed, if it's not a range selection - current checkbox is already updated\n return;\n }\n\n this._rangeSelector.applyValueToEachInRange((idx) => {\n const checkbox = queryList.get(idx);\n if (checkbox?.disabled) {\n return;\n }\n const checkboxValue = checkbox?.values.trueValue;\n if (isChecked) {\n this._selectionModel.select(checkboxValue);\n } else {\n this._selectionModel.deselect(checkboxValue);\n }\n });\n this._setValueBySelectionModel();\n this.valueChange.emit(this.value);\n }\n\n /** @hidden */\n writeValue(selectedValue: any): void {\n super.writeValue(coerceArraySafe(selectedValue));\n this._updateSelectionModelByValue();\n }\n\n /**\n * access display value for objects, acts as checkbox label.\n */\n getDisplayValue(item: any): string {\n return this.displayValue(item);\n }\n\n /**\n * access lookup value for objects, acts as checkbox value.\n */\n getLookupValue(item: any): string {\n return this.lookupValue(item);\n }\n\n /** @hidden */\n getListItemDisabledValue(item: CheckboxGroupComponent['list'][number]): boolean {\n return this.disabled || !!(<SelectItem>item)?.disabled;\n }\n\n /** @inheritdoc */\n protected setValue(value: any, emitOnChange = true): void {\n super.setValue(coerceArraySafe(value), emitOnChange);\n }\n\n /** @hidden */\n private _setValueBySelectionModel(): void {\n super.setValue(this._selectionModel.selected);\n this.markForCheck();\n }\n\n /** @hidden */\n private _updateSelectionModelByValue(): void {\n this._selectionModel.clear();\n this.value.forEach((v) => this._selectionModel.select(v));\n this.markForCheck();\n }\n}\n","<fd-form-group\n [isInline]=\"isInline\"\n role=\"group\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-required]=\"required\"\n>\n @if (!list) {\n @for (checkbox of contentCheckboxes; track checkbox; let i = $index) {\n <ng-template\n [ngTemplateOutlet]=\"checkboxtmpt\"\n [ngTemplateOutletContext]=\"{\n id: id + i,\n idx: i,\n source: 'contentChildren',\n name: name,\n checkboxValue: checkbox.coreCheckbox?.values?.trueValue,\n labeltext: checkbox.label,\n disabled: disabled || checkbox.disabled,\n ariaLabel: checkbox.ariaLabel,\n ariaLabelledBy: checkbox.ariaLabelledBy,\n ariaDescribedBy: checkbox.ariaDescribedBy,\n title: checkbox.title\n }\"\n >\n </ng-template>\n }\n } @else {\n <ng-template [ngTemplateOutlet]=\"listvalues\"></ng-template>\n }\n</fd-form-group>\n<ng-template #listvalues>\n @for (item of list; track item; let i = $index) {\n <ng-template\n [ngTemplateOutlet]=\"checkboxtmpt\"\n [ngTemplateOutletContext]=\"{\n id: id + i,\n idx: i,\n source: 'list',\n name: name,\n checkboxValue: getLookupValue(item),\n labeltext: getDisplayValue(item),\n disabled: getListItemDisabledValue(item)\n }\"\n >\n </ng-template>\n }\n</ng-template>\n<ng-template\n #checkboxtmpt\n let-id=\"id\"\n let-idx=\"idx\"\n let-source=\"source\"\n let-name=\"name\"\n let-checkboxValue=\"checkboxValue\"\n let-labeltext=\"labeltext\"\n let-checkboxDisabled=\"disabled\"\n let-ariaLabel=\"ariaLabel\"\n let-ariaLabelledBy=\"ariaLabelledBy\"\n let-ariaDescribedBy=\"ariaDescribedBy\"\n let-title=\"title\"\n>\n <fdp-checkbox\n [id]=\"id\"\n [name]=\"name\"\n [values]=\"{ trueValue: checkboxValue }\"\n [label]=\"labeltext\"\n [ariaLabel]=\"ariaLabel\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [title]=\"title\"\n [disabled]=\"checkboxDisabled\"\n [state]=\"state\"\n [ngModel]=\"_selectionModel.isSelected(checkboxValue) ? checkboxValue : false\"\n (ngModelChange)=\"onModelChanged($event, checkboxValue)\"\n (click)=\"onCheckboxClick(idx, source, $event)\"\n >\n </fdp-checkbox>\n</ng-template>\n","import { NgModule } from '@angular/core';\n\nimport { CheckboxGroupComponent } from './checkbox-group.component';\n\n@NgModule({\n imports: [CheckboxGroupComponent],\n exports: [CheckboxGroupComponent]\n})\nexport class PlatformCheckboxGroupModule {}\n","import { forwardRef, InjectionToken, Provider, StaticProvider } from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport { FD_FORM_FIELD } from '@fundamental-ngx/cdk/forms';\n\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../../form-group/constants';\nimport { FormFieldComponent } from '../../form-group/form-field/form-field.component';\nimport { DynamicFormFieldItem } from '../interfaces/dynamic-form-item';\nimport { FormGeneratorConfig } from '../interfaces/form-generator-module-config';\n\nexport const dynamicFormFieldProvider: StaticProvider = {\n provide: FD_FORM_FIELD,\n useExisting: forwardRef(() => FormFieldComponent)\n};\n\nexport const dynamicFormGroupChildProvider: StaticProvider = {\n provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n useExisting: forwardRef(() => FormFieldComponent)\n};\n\nexport const FORM_GENERATOR_ITEM_CONFIG = new InjectionToken<DynamicFormFieldItem>('FormGeneratorItemConfig');\n\nexport const FORM_GENERATOR_CONFIG = new InjectionToken<FormGeneratorConfig>('FormGeneratorConfig');\n\nexport const defaultFormGeneratorConfig: FormGeneratorConfig = {\n controlNameSeparator: '|',\n ungroupedControlsName: 'ungrouped'\n};\n\nexport const defaultFormGeneratorConfigProvider: Provider = {\n provide: FORM_GENERATOR_CONFIG,\n useValue: defaultFormGeneratorConfig\n};\n\nexport const defaultFormGeneratorItemConfig: Partial<DynamicFormFieldItem> = {\n useMessageAsPlaceholder: true,\n required: false,\n validators: [Validators.nullValidator]\n};\n\nexport const defaultFormGeneratorItemConfigProvider: Provider = {\n provide: FORM_GENERATOR_ITEM_CONFIG,\n useValue: defaultFormGeneratorItemConfig\n};\n","import { Directive, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport { PlatformFormField, SelectItem } from '@fundamental-ngx/platform/shared';\nimport { BaseDynamicFormFieldItem, PreparedDynamicFormFieldItem } from './interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from './providers/providers';\n\nexport interface BaseDynamicFormGeneratorControlInterface {\n formItem: PreparedDynamicFormFieldItem;\n name: string;\n id: string;\n form: FormGroup;\n formField: PlatformFormField;\n}\n\n/**\n * Abstract class that used as a base for the Dynamic Form Generator components.\n */\n@Directive({\n providers: [dynamicFormFieldProvider, dynamicFormGroupChildProvider]\n})\nexport abstract class BaseDynamicFormGeneratorControl<T extends BaseDynamicFormFieldItem = BaseDynamicFormFieldItem>\n implements BaseDynamicFormGeneratorControlInterface\n{\n /**\n * @description @see DynamicFormItem.\n */\n @Input() formItem: PreparedDynamicFormFieldItem<T>;\n\n /**\n * @description Id of the control.\n */\n @Input() id: string;\n\n /**\n * @description Represents form control name.\n */\n @Input() name: string;\n\n /**\n * @description Reference to the @see FormGroup class.\n */\n @Input() form: FormGroup;\n\n /**\n * @description Reference to the @see FormFieldComponent.\n */\n @Input() formField: PlatformFormField;\n\n /** @description Inner form group name */\n @Input() formGroupName: string;\n\n /** @description Returns form item choices. */\n get choices(): SelectItem[] {\n return this.formItem.choices ?? [];\n }\n\n /** @description Returns form item placeholder. */\n get placeholder(): string {\n if (!this.formItem) {\n return '';\n }\n if (this.formItem?.placeholder) {\n return this.formItem?.placeholder;\n }\n return (this.formItem?.useMessageAsPlaceholder && this.formItem?.message) || '';\n }\n\n /** @hidden */\n get readonly(): boolean {\n return this.formItem?.readonly ?? false;\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformCheckboxGroupModule } from '../../../checkbox-group/checkbox-group.module';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-checkbox',\n templateUrl: './dynamic-form-generator-checkbox.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, PlatformCheckboxGroupModule]\n})\nexport class DynamicFormGeneratorCheckboxComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-checkbox-group\n [id]=\"id\"\n [isInline]=\"formItem.guiOptions?.inline || false\"\n [inlineLayout]=\"formItem.guiOptions?.inlineLayout\"\n [name]=\"name\"\n [list]=\"choices\"\n [formControlName]=\"name\"\n ></fdp-checkbox-group>\n </ng-container>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n CalendarType,\n CalendarYearGrid,\n DateRange,\n DaysOfWeek,\n FdCalendarView,\n FdCalendarViewEnum\n} from '@fundamental-ngx/core/calendar';\nimport { DatePickerComponent, DatePickerComponent as FdDatePickerComponent } from '@fundamental-ngx/core/date-picker';\nimport { DATE_TIME_FORMATS, DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { Placement, SpecialDayRule } from '@fundamental-ngx/core/shared';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\n/**\n * The Platform date picker component is a wrapper around fd-date-picker using platform form.\n * It is able to provide form field functionalities as well along with fd-date-picker functions.\n *\n * <fdp-form-group #ffg [formGroup]=\"datePickerForm\">\n * <fdp-form-field #ffl1 id=\"birthday\">\n * <fdp-date-picker name=\"birthday\" type=\"single\" [formControl]=\"ffl1.formControl\"></fdp-date-picker>\n * </fdp-form-field>\n * </fdp-form-group>\n *\n */\n\n@Component({\n selector: 'fdp-date-picker',\n templateUrl: './date-picker.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformDatePickerComponent, multi: true }],\n host: {\n '(blur)': 'onTouched()'\n },\n imports: [DatePickerComponent, FormsModule]\n})\nexport class PlatformDatePickerComponent<D> extends BaseInput {\n /**\n * date-picker value set as controller value\n */\n @Input()\n set value(value: D | Array<D> | DateRange<D> | Array<DateRange<D>>) {\n super.setValue(value);\n }\n get value(): DateRange<D> | D {\n return super.getValue();\n }\n\n /** below code taken from core/date-picker */\n /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */\n @Input()\n type: CalendarType = 'single';\n\n /** The currently selected date model in single mode. */\n @Input()\n selectedDate: Nullable<D>;\n\n /** The currently selected date model in multiple mode. */\n @Input()\n selectedMultipleDates: Array<D> = [];\n\n /** The currently selected date model with start and end in range mode. */\n @Input()\n selectedRangeDate: DateRange<D>;\n\n /** The currently selected date model with multiple ranges. */\n @Input()\n selectedMultipleDateRanges: Array<DateRange<D>> = [];\n\n /** The day of the week the calendar should start on. 1 represents Sunday, 2 is Monday, 3 is Tuesday, and so on. */\n @Input()\n startingDayOfWeek: DaysOfWeek;\n\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected on Day View.\n */\n @Input()\n rangeHoverEffect = false;\n\n /** Whether to validate the date picker input. */\n @Input()\n useValidation = true;\n\n /** Enables Today-Selection-Button if true */\n @Input()\n showTodayButton = false;\n\n /** Label for Today-Selection-Button */\n @Input()\n todayButtonLabel = 'Today';\n\n /** Whether a null input is considered valid. */\n @Input()\n allowNull = true;\n\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n @Input()\n activeView: FdCalendarView = FdCalendarViewEnum.Day;\n\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n @Input()\n placement: Placement = 'bottom-start';\n\n /** The element to which the popover should be appended. */\n @Input()\n appendTo: ElementRef;\n\n /** Defines if date picker should be closed after date choose */\n @Input()\n closeOnDateChoose = true;\n\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n set state(state: FormStates) {\n super.state = state;\n }\n get state(): FormStates {\n if (this.fdDatePickerComponent?._isInvalidDateInput || !this._datePickerValid) {\n return 'error';\n }\n\n return super.state;\n }\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = true;\n\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n @Input()\n specialDaysRules: SpecialDayRule<D>[] = [];\n\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n yearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 5,\n yearMapping: (num: number) => num.toString()\n };\n\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n aggregatedYearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 3,\n yearMapping: (num: number) => num.toString()\n };\n\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n @Input()\n markWeekends = true;\n\n /**\n * Whether user wants to show week numbers next to days\n */\n @Input()\n showWeekNumbers = true;\n\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n @Input()\n allowMultipleSelection = false;\n\n /** Whether the date picker is open. Can be used through two-way binding. */\n @Input()\n isOpen = false;\n\n /** Should date picker be inlined. */\n @Input()\n inline = true;\n\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n @Input()\n processInputOnBlur = false;\n\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n @Input()\n preventScrollOnFocus = false;\n\n /** Whether date picker should rendered in mobile mode. */\n @Input()\n mobile = false;\n\n /** Mobile mode configuration. */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n @Input()\n mobileLandscape = false;\n\n /** Whether calendar is used inside mobile in portrait mode */\n @Input()\n mobilePortrait = false;\n\n /** Event emitted when the state of the isOpen property changes. */\n @Output()\n readonly isOpenChange = new EventEmitter<boolean>();\n\n /** Event thrown every time selected date in single mode is changed */\n @Output()\n readonly selectedDateChange: EventEmitter<Nullable<D>> = new EventEmitter<Nullable<D>>();\n\n /** Event thrown every time the selected dates in multiple mode are changed. */\n @Output()\n readonly selectedMultipleDatesChange: EventEmitter<Array<D>> = new EventEmitter<Array<D>>();\n\n /** Event thrown every time selected first or last date in range mode is changed */\n @Output()\n readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n @Output()\n readonly selectedMultipleDateRangesChange: EventEmitter<Array<DateRange<D>>> = new EventEmitter<\n Array<DateRange<D>>\n >();\n\n /** Event thrown every time calendar active view is changed */\n @Output()\n readonly activeViewChange = new EventEmitter<FdCalendarView>();\n\n /**\n * @hidden core date-picker as child\n */\n @ViewChild(FdDatePickerComponent)\n fdDatePickerComponent: FdDatePickerComponent<D>;\n\n /** @hidden */\n private _datePickerValid = true;\n\n /** @hidden */\n private readonly _dateTimeAdapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, {\n optional: true\n });\n\n /** @hidden */\n private readonly _dateTimeFormats = inject<DateTimeFormats>(DATE_TIME_FORMATS, {\n optional: true\n });\n\n /** @hidden */\n constructor() {\n super();\n\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n }\n\n /**\n * Function used to disable certain dates in the calendar.\n */\n @Input()\n disableFunction: (value: D) => boolean = () => false;\n\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n */\n @Input()\n disableRangeStartFunction: (value: D) => boolean = () => false;\n\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n */\n @Input()\n disableRangeEndFunction: (value: D) => boolean = () => false;\n\n /** @hidden */\n writeValue(value: D | Array<D> | DateRange<D> | Array<DateRange<D>> | null): void {\n super.writeValue(value);\n this.detectChanges();\n }\n\n /**\n * validates date on date change.\n * @param value D | DateRange<D>\n */\n handleDateChange(value: D | Array<D> | DateRange<D> | Array<DateRange<D>>): void {\n this.value = value;\n\n if (this.allowMultipleSelection) {\n if (this.type === 'single' && !this.value && !this.allowNull) {\n this._datePickerValid = false;\n } else if (this.type === 'range' && !this.allowNull) {\n const dateRanges = this.value as Array<DateRange<D>>;\n this._datePickerValid = dateRanges.every((range) => !!range.start);\n } else {\n this._datePickerValid = true;\n }\n\n this.stateChanges.next('date picker: handleDateInputChange');\n\n if (this.type === 'single') {\n this.handleSelectedMultipleDatesChange(this.selectedMultipleDates);\n } else if (this.type === 'range') {\n this.handleSelectedMultipleDateRangesChange(this.selectedMultipleDateRanges);\n }\n } else {\n if (this.type === 'single' && !this.value && !this.allowNull) {\n this._datePickerValid = false;\n } else if (this.type === 'range' && !this.allowNull) {\n const dateRange = this.value as DateRange<D>;\n this._datePickerValid = !!dateRange.start;\n } else {\n this._datePickerValid = true;\n }\n\n this.stateChanges.next('date picker: handleDateInputChange');\n\n if (this.type === 'single') {\n this.handleSelectedDateChange(this.selectedDate);\n } else if (this.type === 'range') {\n this.handleSelectedRangeDateChange(this.selectedRangeDate);\n }\n }\n this.markForCheck();\n }\n\n /**\n * Method that handles changes when popover is opened or closed.\n */\n handleOpenChange = (open: boolean): void => {\n this.isOpenChange.emit(open);\n };\n\n /** @hidden */\n handleSelectedDateChange = (fdDate: Nullable<D>): void => {\n this.selectedDateChange.emit(fdDate);\n };\n\n /** @hidden */\n handleSelectedMultipleDatesChange = (fdDate: Array<D>): void => {\n this.selectedMultipleDatesChange.emit(fdDate);\n };\n\n /** @hidden */\n handleSelectedRangeDateChange = (fdRangeDate: DateRange<D>): void => {\n this.selectedRangeDateChange.emit(fdRangeDate);\n };\n\n /** @hidden */\n handleSelectedMultipleDateRangesChange = (fdRangeDate: Array<DateRange<D>>): void => {\n this.selectedMultipleDateRangesChange.emit(fdRangeDate);\n };\n\n /** @hidden */\n handleActiveViewChange = (fdCalendarView: FdCalendarView): void => {\n this.activeViewChange.emit(fdCalendarView);\n };\n}\n\n/** @hidden */\nexport function createMissingDateImplementationError(provider: string): Error {\n return Error(\n `FdpDatePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDateModule, or provide a ` +\n `custom implementation.`\n );\n}\n","<fd-date-picker\n [inputId]=\"id\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n [type]=\"type\"\n [state]=\"state\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [selectedDate]=\"selectedDate\"\n [selectedMultipleDates]=\"selectedMultipleDates\"\n [selectedRangeDate]=\"selectedRangeDate\"\n [selectedMultipleDateRanges]=\"selectedMultipleDateRanges\"\n [showTodayButton]=\"showTodayButton\"\n [todayButtonLabel]=\"todayButtonLabel\"\n [startingDayOfWeek]=\"startingDayOfWeek\"\n [rangeHoverEffect]=\"rangeHoverEffect\"\n [useValidation]=\"useValidation\"\n [allowNull]=\"allowNull\"\n [activeView]=\"activeView\"\n [placement]=\"placement\"\n [appendTo]=\"appendTo\"\n [disabled]=\"disabled\"\n [closeOnDateChoose]=\"closeOnDateChoose\"\n [buttonFocusable]=\"buttonFocusable\"\n [specialDaysRules]=\"specialDaysRules\"\n [yearGrid]=\"yearGrid\"\n [aggregatedYearGrid]=\"aggregatedYearGrid\"\n [markWeekends]=\"markWeekends\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [allowMultipleSelection]=\"allowMultipleSelection\"\n [isOpen]=\"isOpen\"\n [disableFunction]=\"disableFunction\"\n [disableRangeStartFunction]=\"disableRangeStartFunction\"\n [disableRangeEndFunction]=\"disableRangeEndFunction\"\n [inline]=\"inline\"\n [processInputOnBlur]=\"processInputOnBlur\"\n [preventScrollOnFocus]=\"preventScrollOnFocus\"\n [mobile]=\"mobile\"\n [mobileConfig]=\"mobileConfig\"\n [mobileLandscape]=\"mobileLandscape\"\n [mobilePortrait]=\"mobilePortrait\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"handleDateChange($event)\"\n (isOpenChange)=\"handleOpenChange($event)\"\n (activeViewChange)=\"handleActiveViewChange($event)\"\n (selectedDateChange)=\"handleSelectedDateChange($event)\"\n (selectedMultipleDatesChange)=\"handleSelectedMultipleDatesChange($event)\"\n (selectedRangeDateChange)=\"handleSelectedRangeDateChange($event)\"\n (selectedMultipleDateRangesChange)=\"handleSelectedMultipleDateRangesChange($event)\"\n>\n <ng-content></ng-content>\n</fd-date-picker>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformDatePickerComponent } from '../../../date-picker/date-picker.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-datepicker',\n templateUrl: './dynamic-form-generator-datepicker.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, PlatformDatePickerComponent]\n})\nexport class DynamicFormGeneratorDatepickerComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-date-picker\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [formControlName]=\"name\"\n [inline]=\"formItem.guiOptions?.inline !== false\"\n [allowNull]=\"false\"\n ></fdp-date-picker>\n </ng-container>\n</ng-container>\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\n\n/**\n * Default options for platform Text Area\n */\n@Injectable({ providedIn: 'root' })\nexport class TextAreaConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<TextAreaConfig>): () => TextAreaConfig {\n const useFactory = (): TextAreaConfig => Object.assign(new TextAreaConfig(), obj);\n return useFactory;\n }\n}\n","import { BACKSPACE, DELETE } from '@angular/cdk/keycodes';\nimport {\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Input,\n OnInit,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\nimport { KeyUtil, Nullable } from '@fundamental-ngx/cdk/utils';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { TextAreaConfig } from './text-area.config';\n\nconst VALID_WRAP_TYPES = ['hard', 'soft', 'off'];\n\nexport type WrapType = 'hard' | 'soft' | 'off';\n\n/**\n * Textarea field implementation that is compliant with Platform's FormGroup/FormField design\n *\n */\n@Component({\n selector: 'fdp-textarea',\n templateUrl: 'text-area.component.html',\n styleUrl: 'text-area.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: FD_FORM_FIELD_CONTROL,\n useExisting: TextAreaComponent,\n multi: true\n }\n ],\n imports: [FormControlComponent, FormsModule, FdTranslatePipe]\n})\nexport class TextAreaComponent extends BaseInput implements AfterViewChecked, OnInit, AfterViewInit {\n /**\n * The height to which the textarea will grow when `growing` is set.\n */\n @Input()\n height: Nullable<string>;\n\n /**\n * The number of rows that will be visible when `growing` is set.\n * If both `growingMaxLines` and `height` are provided, `height` value takes precedence.\n */\n @Input()\n growingMaxLines: Nullable<number>;\n\n /**\n * The textarea `cols` attribute wrapped- the number of letters visible per line.\n * If width is set to auto, this attribute has no effect.\n */\n @Input()\n cols: number;\n\n /**\n * The textarea `wrap` attribute - can be one of three: 'off', 'hard' or 'soft'.\n */\n @Input()\n wrapType: WrapType = 'soft';\n\n /** The maximum number of characters allowed to enter.\n * If `showExceededText` is false, `maxLength` has native textarea's behavior of disallowing typing beyond `maxLength`.\n * If `showExceededText` is true, user is allowed to type beyond `maxLength`, but error states and counter messages showing\n * the exceeded count is displayed.\n */\n @Input()\n maxLength: number;\n\n /**\n * Whether counter message should be shown.\n * If `showExceededText` is false, no state changes or error messages are shown. User is simply not allowed to type\n * beyond the `maxLength` characters.\n */\n @Input()\n showExceededText = false;\n\n /**\n * Whether this textarea can grow.\n */\n @Input()\n growing = false;\n\n /**\n * The textarea's value\n */\n @Input()\n set value(value: any) {\n if (value) {\n super.setValue(value);\n } else {\n // when custom value not set, we should set/reset counter to maxlength value when it becomes undefined\n this.exceededCharCount = this.maxLength ? this.maxLength : 0;\n // reset state by resetting value\n super.setValue('');\n }\n }\n get value(): any {\n return super.getValue();\n }\n\n /** @hidden */\n @ViewChild('counter')\n _textareaCounter?: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n hasTextExceeded = false;\n\n /** @hidden excess character count */\n exceededCharCount = 0;\n\n /** @hidden a string placeholder that toggles between 'remaining' and 'excess' for the select ICU expression */\n counterExcessOrRemaining = 'remaining';\n\n /** @hidden flag to check if there is an initial value set */\n isValueCustomSet = false;\n\n /** @hidden */\n /** to keep track of number of characters in the textarea */\n private _textAreaCharCount = 0;\n\n /** @hidden */\n private _isPasted = false;\n\n /** for i18n counter message translation */\n private readonly remainingText = 'remaining';\n /** for i18n counter message translation */\n private readonly excessText = 'excess';\n\n /**\n * @hidden\n * @see PlatformFormFieldControl.extraContentHeightPx\n */\n get extraContentHeightPx(): number | undefined {\n return this._textareaCounter?.nativeElement.offsetHeight;\n }\n\n /** @hidden */\n private get _shouldTrackTextLimit(): boolean {\n return this.maxLength > 0 && !this.showExceededText;\n }\n\n /** @hidden */\n constructor(protected _textAreaConfig: TextAreaConfig) {\n super();\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /** when backpress or delete key is pressed when showExceededText field is not set, simply remove excess characters,\n /* else handle autogrow case\n */\n @HostListener('keyup', ['$event'])\n handleBackPress(event: KeyboardEvent): void {\n // if not showing exceeded text message/interactions or growing, and custom value set\n if (this.growing) {\n this.autoGrowTextArea();\n this.isValueCustomSet = false; // set it to false first time it comes here\n }\n if (this._shouldTrackTextLimit && KeyUtil.isKeyCode(event, [DELETE, BACKSPACE])) {\n // for the custom value set and showExceededText=false case, on any key press, remove excess characters\n if (this.value) {\n this._textAreaCharCount = this.value.length;\n if (this._textAreaCharCount > this.maxLength) {\n // remove excess characters\n this.value = this.value.substring(0, this.maxLength);\n this.isValueCustomSet = false; // since value is now changed, it is no longer custom set\n }\n }\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (!this.wrapType || VALID_WRAP_TYPES.indexOf(this.wrapType) === -1) {\n throw new Error(`Textarea wrap type ${this.wrapType} is not supported`);\n }\n // if not custom set, set counter to max length value, else it calculates remaining/exceeded characters.\n if (!this.value) {\n this.exceededCharCount = this.maxLength || 0;\n } else {\n this.isValueCustomSet = true;\n }\n super.ngOnInit();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n // set max height\n this._setMaxHeight();\n\n // don't set any error state if we are not showing counter message\n if (!this._shouldTrackTextLimit) {\n this.state = undefined;\n }\n\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n ngAfterViewChecked(): void {\n // when value is custom set(initial value is present), the heights don't get\n // set to show the full text in the ngAfterViewInit immediately. therefore, we call autoGrowTextArea in\n // ngAfterViewChecked and detect changes again.\n if (this.value && this.isValueCustomSet) {\n this.autoGrowTextArea(); // if applicable, grow the textarea when value is custom set\n this.stateChanges.next('textarea: ngAfterViewChecked');\n }\n }\n\n /** write value for ControlValueAccessor */\n writeValue(value: any): void {\n super.writeValue(value ?? '');\n this.updateCounterInteractions();\n this.stateChanges.next('textarea: writeValue');\n }\n\n /** update the counter message and related interactions */\n updateCounterInteractions(): void {\n this._textAreaCharCount = this.value?.length ?? 0;\n\n if (this.maxLength) {\n // newly added to avoid unnecessary iteration, remove if issue found\n this.validateLengthOnCustomSet();\n }\n }\n\n /** if exceeded maxlength when set as a value in code, highlight the exceeded text. */\n validateLengthOnCustomSet(): void {\n if (this._textAreaCharCount > this.maxLength) {\n if (this._isPasted) {\n this._targetElement.focus();\n this._targetElement.setSelectionRange(this.maxLength, this._textAreaCharCount);\n }\n\n this.counterExcessOrRemaining = this.excessText;\n this.exceededCharCount = this._textAreaCharCount - this.maxLength;\n } else {\n this.counterExcessOrRemaining = this.remainingText;\n this.exceededCharCount = this.maxLength - this._textAreaCharCount;\n }\n\n this._isPasted = false;\n }\n\n /** handle exceeded maxlength case when text is pasted */\n handlePasteInteraction(): void {\n this._isPasted = true;\n\n // Wrapped in timeout to make selecting range working\n setTimeout(() => this.updateCounterInteractions());\n }\n\n /** handle auto growing of textarea */\n autoGrowTextArea(): void {\n if (this.growing) {\n this._targetElement.style.height = 'inherit';\n const textareaTotalHeight = this._getTextareaTotalHeight();\n const maxHeight = parseInt(this._targetElement.style.maxHeight as string, 10);\n if (maxHeight) {\n if (textareaTotalHeight <= maxHeight) {\n this._targetElement.style.height = textareaTotalHeight + 'px';\n } else {\n if (this.height) {\n this._targetElement.style.height = this.height;\n } else {\n this._targetElement.style.height = maxHeight + 'px';\n }\n }\n } else {\n // no bound max height, keep growing\n this._targetElement.style.height = textareaTotalHeight + 'px';\n }\n }\n }\n\n /**\n * get line height of textarea\n */\n getTextareaLineHeight(): number {\n // Get the computed styles for the element\n if (this._targetElement) {\n const computed = window.getComputedStyle(this._targetElement);\n\n // Calculate the height\n return parseInt(computed.getPropertyValue('line-height'), 10);\n }\n return 20; // default line height if nothing is defined\n }\n\n /**\n * get the updated state when character count breaches `maxLength`\n */\n getUpdatedState(): FormStates {\n if (this._getContentLength() > this.maxLength) {\n this.hasTextExceeded = true; // set flag for error message to also change accordingly\n this.counterExcessOrRemaining = this.excessText;\n\n return this.state;\n }\n this.hasTextExceeded = false;\n this.counterExcessOrRemaining = this.remainingText;\n\n return this.state; // return any other errors found by parent form field\n }\n\n /** @hidden Native element */\n get _targetElement(): HTMLTextAreaElement {\n return this._elementRef?.nativeElement;\n }\n\n /** @hidden get the length of the textarea content */\n private _getContentLength(): number {\n let contentLength;\n if (this._targetElement) {\n contentLength = this._targetElement.value.length;\n }\n if (this.value) {\n contentLength = this.value.length;\n }\n return contentLength;\n }\n\n /** @hidden get the total height including borders and scroll height */\n private _getTextareaTotalHeight(): number {\n // Get the computed styles for the element\n const computed = window.getComputedStyle(this._targetElement);\n // Calculate the height\n return (\n parseInt(computed.getPropertyValue('border-top-width'), 10) +\n this._targetElement.scrollHeight +\n parseInt(computed.getPropertyValue('border-bottom-width'), 10)\n );\n }\n\n /** @hidden set initial max height **/\n private _setMaxHeight(): void {\n if (this.growing && this._targetElement) {\n if (this.growingMaxLines) {\n this._targetElement.style.maxHeight = this.growingMaxLines * this.getTextareaLineHeight() + 'px';\n }\n if (this.height) {\n this._targetElement.style.maxHeight = this.height;\n }\n } else {\n if (this.growingMaxLines) {\n // nothing to do here. rows attribute takes care.\n }\n if (this.height) {\n this._targetElement.style.height = this.height;\n }\n }\n }\n}\n","<textarea\n #inputElementRef\n fd-form-control\n [disabled]=\"disabled\"\n [attr.id]=\"id\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"id + '-counter'\"\n [attr.aria-required]=\"required\"\n [attr.placeholder]=\"placeholder\"\n [attr.rows]=\"growing ? 2 : height ? 2 : growingMaxLines\"\n [attr.cols]=\"cols\"\n [attr.wrap]=\"wrapType\"\n [attr.maxlength]=\"!showExceededText ? maxLength : null\"\n [attr.readonly]=\"readonly ? true : null\"\n [(ngModel)]=\"value\"\n [state]=\"getUpdatedState()\"\n (paste)=\"handlePasteInteraction()\"\n (blur)=\"_onFocusChanged(false)\"\n (focus)=\"_onFocusChanged(true)\"\n></textarea>\n<!-- ICU recommends full text in format -->\n@if (showExceededText) {\n <div class=\"fd-textarea-counter\" aria-live=\"polite\" aria-atomic=\"true\" [attr.id]=\"id + '-counter'\" #counter>\n <!-- render spaces instead of the actual value while translation string is loading in order to avoid content jumps -->\n @if (counterExcessOrRemaining === 'excess') {\n <span\n [innerHtml]=\"\n (exceededCharCount === 1\n ? 'platformTextarea.counterMessageCharactersOverTheLimitSingular'\n : 'platformTextarea.counterMessageCharactersOverTheLimitPlural'\n ) | fdTranslate: { count: exceededCharCount } : ' '\n \"\n ></span>\n } @else {\n <span\n [innerHtml]=\"\n (exceededCharCount === 1\n ? 'platformTextarea.counterMessageCharactersRemainingSingular'\n : 'platformTextarea.counterMessageCharactersRemainingPlural'\n ) | fdTranslate: { count: exceededCharCount } : ' '\n \"\n ></span>\n }\n </div>\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TextAreaComponent } from '../../../text-area/text-area.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-editor',\n templateUrl: './dynamic-form-generator-editor.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, TextAreaComponent]\n})\nexport class DynamicFormGeneratorEditorComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-textarea [id]=\"id\" [placeholder]=\"placeholder\" [name]=\"name\" [formControlName]=\"name\"></fdp-textarea>\n </ng-container>\n</ng-container>\n","/**\n * @license\n * F. Kolar\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n *\n */\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\nconst VALID_INPUT_TYPES = ['text', 'number', 'email', 'password'];\n\nexport type InputType = 'text' | 'number' | 'email' | 'password';\n\n/**\n * Input field implementation to be compliant with our FormGroup/FormField design and also to\n * achieve certain this in Angular this component is re-using several ideas from MatDesign\n *\n */\n@Component({\n selector: 'fdp-input',\n templateUrl: 'input.component.html',\n styleUrl: './input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: InputComponent, multi: true }],\n imports: [FormControlComponent, FormsModule]\n})\nexport class InputComponent extends BaseInput implements OnInit, AfterViewInit {\n /** Input type */\n @Input()\n type: InputType = 'text';\n\n /**\n * @hidden\n * This `required` field is used internally by other components such as Input Group.\n * Input group will not be able to set required value to input, until `required` is input through the`@Input` property.\n */\n @Input()\n declare required: boolean;\n\n /** return the value in the text box */\n @Input()\n set value(value: any) {\n super.setValue(value);\n }\n get value(): any {\n return super.getValue();\n }\n\n /** Emits event on focus change */\n @Output() focusChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** @hidden */\n get inputElementRef(): ElementRef {\n return this._elementRef;\n }\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n if (!this.type || VALID_INPUT_TYPES.indexOf(this.type) === -1) {\n throw new Error(` Input type ${this.type} is not supported`);\n }\n }\n\n /** @hidden */\n _onFocus(): void {\n this._onFocusChanged(true);\n // propagate event\n this.focusChange.emit(true);\n }\n\n /** @hidden */\n _onBlur(): void {\n this._onFocusChanged(false);\n // propagate event\n this.focusChange.emit(false);\n }\n}\n","<!--\n Does it make sense to have some other state than error?\n-->\n<input\n #inputElementRef\n fd-form-control\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{ standalone: true }\"\n [attr.id]=\"id\"\n [attr.name]=\"name\"\n [type]=\"type\"\n [attr.placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [state]=\"state\"\n [readOnly]=\"readonly\"\n (blur)=\"_onBlur()\"\n (focus)=\"_onFocus()\"\n [ariaLabel]=\"ariaLabel\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.aria-required]=\"required\"\n/>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { InputComponent } from '../../../input/input.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { InputDynamicFormFieldItem } from '../../interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-input',\n templateUrl: './dynamic-form-generator-input.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, InputComponent]\n})\nexport class DynamicFormGeneratorInputComponent extends BaseDynamicFormGeneratorControl<InputDynamicFormFieldItem> {}\n","@if (formField) {\n <ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-input\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [type]=\"formItem.controlType || 'text'\"\n [formControlName]=\"name\"\n [readonly]=\"readonly\"\n ></fdp-input>\n </ng-container>\n </ng-container>\n}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { DataProvider, MatchingStrategy, PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Multi-Input\n */\n@Injectable({ providedIn: 'root' })\nexport class MultiInputConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /**\n * String matching strategy for typeahead list. Default: 'starts with per term'\n */\n matchingStrategy: MatchingStrategy = MatchingStrategy.STARTS_WITH;\n\n /**\n * Maps data providers\n */\n providers: Map<string, DataProvider<any>> | null = new Map();\n\n /** @hidden */\n constructor(platformConfig: PlatformConfig) {\n this.contentDensity = platformConfig.contentDensity;\n }\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<MultiInputConfig>): (platformConfig: PlatformConfig) => MultiInputConfig {\n const useFactory = (platformConfig: PlatformConfig): MultiInputConfig =>\n Object.assign(new MultiInputConfig(platformConfig), obj);\n return useFactory;\n }\n}\n","import {\n ALT,\n BACKSPACE,\n CONTROL,\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n LEFT_ARROW,\n RIGHT_ARROW,\n SHIFT,\n TAB,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport { combineLatest, fromEvent, isObservable, Observable, Subject, Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FocusEscapeDirection, KeyUtil, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { FdpListComponent, ListComponent } from '@fundamental-ngx/platform/list';\nimport {\n ArrayMultiInputDataSource,\n CollectionBaseInput,\n isDataSource,\n isFunction,\n isJsObject,\n isOptionItem,\n isString,\n MatchingBy,\n MatchingStrategy,\n MultiInputDataSource,\n MultiInputOption,\n ObservableMultiInputDataSource\n} from '@fundamental-ngx/platform/shared';\nimport { TextAlignment } from '../combobox';\nimport { MultiInputConfig } from './multi-input.config';\n\nexport type FdpMultiInputDataSource<T> = MultiInputDataSource<T> | Observable<T[]> | T[];\n\n@Directive()\nexport abstract class BaseMultiInput extends CollectionBaseInput implements AfterViewInit, OnChanges, OnDestroy {\n /** @hidden */\n abstract controlTemplate: TemplateRef<any>;\n\n /** @hidden */\n abstract listTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * Define is this item selected\n */\n abstract isSelectedOptionItem(selectedItem: MultiInputOption): boolean;\n\n /**\n * @hidden\n * Emit select OptionItem\n * */\n abstract selectOptionItem(item: MultiInputOption): void;\n\n /**\n * @hidden\n * Define value as selected\n * */\n abstract setAsSelected(item: MultiInputOption[]): void;\n\n /**\n * @hidden\n * Mathod for marking list option as selected.\n */\n abstract _markListItemsAsSelected(): void;\n\n /** Provides maximum height for the optionPanel */\n @Input()\n maxHeight = '250px';\n\n /** Datasource for suggestion list */\n @Input()\n set dataSource(value: FdpMultiInputDataSource<any>) {\n if (value) {\n this._initializeDataSource(value);\n }\n }\n\n get dataSource(): FdpMultiInputDataSource<any> {\n return this._dataSource;\n }\n\n /** Whether the autocomplete should be enabled; Enabled by default */\n @Input()\n autoComplete = true;\n\n /**\n * Todo: Name of the entity for which DataProvider will be loaded. You can either pass list of\n * items or use this entityClass and internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input()\n entityClass: string;\n\n /** Whether the Multi Input should be built on mobile mode */\n @Input()\n mobile = false;\n\n /** Multi Input Mobile Configuration, it's applied only, when mobile is enabled */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /**\n * Whether AddOn Button should be focusable\n * @default false\n */\n @Input()\n buttonFocusable = false;\n\n /** Tells the multi input if we need to group items */\n @Input()\n group = false;\n\n /** A field name to use to group data by (support dotted notation) */\n @Input()\n groupKey?: string;\n\n /** The field to show data in secondary column */\n @Input()\n description?: string;\n\n /** The field to show avatar image data in secondary column */\n @Input()\n avatarsrc?: string;\n\n /** Show the second column (Applicable for two columns layout) */\n @Input()\n showSecondaryText = false;\n\n /** Horizontally align text inside the second column (Applicable for two columns layout) */\n @Input()\n secondaryTextAlignment: TextAlignment = 'right';\n\n /** Turns on/off Adjustable Width feature */\n @Input()\n autoResize = false;\n /** Whether to open the dropdown when the addon button is clicked. */\n @Input()\n openDropdownOnAddOnClicked = true;\n\n /** Value of the multi input */\n @Input()\n set value(value: any) {\n const selectedItems = Array.isArray(value) ? value : [value];\n this.setAsSelected(this._convertToOptionItems(selectedItems));\n super.setValue(value);\n }\n\n get value(): any {\n return super.getValue();\n }\n\n /** @hidden Emits event when the menu is opened/closed */\n @Output()\n readonly isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when data loading is started. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDataRequested = new EventEmitter<void>();\n\n /** Event emitted when data loading is finished. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDataReceived = new EventEmitter<void>();\n\n /** Event emitted when the search term changes. Use *$event* to access the new term. */\n @Output()\n readonly searchTermChange: EventEmitter<string> = new EventEmitter<string>();\n\n /** Emits event when the addon button is clicked. */\n @Output()\n readonly addOnButtonClicked: EventEmitter<Event> = new EventEmitter<Event>();\n\n /** @hidden */\n @ViewChild(FdpListComponent)\n listComponent: ListComponent<MultiInputOption>;\n\n /** @hidden */\n @ContentChildren(TemplateDirective)\n customTemplates: QueryList<TemplateDirective>;\n\n /** @hidden */\n @ViewChild('searchInputElement', { read: ElementRef })\n searchInputElement: ElementRef;\n\n /** @hidden\n * Custom Option item Template\n * */\n optionItemTemplate: TemplateRef<any>;\n\n /** @hidden\n * Custom Group Header item Template\n * */\n groupItemTemplate: TemplateRef<any>;\n\n /** @hidden\n * Custom Secondary item Template\n * */\n secondaryItemTemplate: TemplateRef<any>;\n\n /** @hidden\n * Custom Selected option item Template\n * */\n selectedItemTemplate: TemplateRef<any>;\n\n /** input text of the input. */\n inputText: string;\n\n /** Whether the Multi Input is opened. */\n isOpen = false;\n\n /** @hidden */\n get canClose(): boolean {\n return !(this.mobile && this.mobileConfig.approveButtonText);\n }\n\n /**\n * @hidden\n * List of matched suggestions\n * */\n _suggestions: MultiInputOption[];\n\n /** @hidden\n * List of matched suggestions\n * */\n _newSuggestions: MultiInputOption[];\n\n /** @hidden\n * Max width of list container\n * */\n maxWidth?: number;\n\n /** @hidden\n * Min width of list container\n * */\n minWidth?: number;\n\n /**\n * Need for opening mobile version\n *\n * @hidden\n */\n openChange = new Subject<boolean>();\n\n /** @hidden */\n protected readonly multiInputConfig = inject(MultiInputConfig);\n\n /** @hidden */\n protected _dataSource: FdpMultiInputDataSource<any>;\n\n /** @hidden */\n protected readonly dialogConfig = inject(DialogConfig, { optional: true });\n /** @hidden emits whenever there're changes to the inputs, that affect the data creation from data source */\n private readonly _updateDataSourceValues$ = new Subject<void>();\n /** @hidden */\n private _matchingStrategy: MatchingStrategy = this.multiInputConfig.matchingStrategy;\n /** @hidden */\n private _dsSubscription?: Subscription;\n\n /** @hidden */\n private _element: HTMLElement = this.elementRef.nativeElement;\n\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n private readonly _nonOpeningKeys: number[] = [\n ESCAPE,\n ENTER,\n CONTROL,\n TAB,\n SHIFT,\n UP_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n LEFT_ARROW,\n ALT,\n BACKSPACE\n ];\n\n /** @hidden */\n private _originalSuggestions: any[] = [];\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._initWindowResize();\n this._assignCustomTemplates();\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if ('group' in changes || 'groupKey' in changes) {\n this._updateDataSourceValues$.next();\n }\n if ('avatarSrc' in changes || 'description' in changes || 'title' in changes || 'value' in changes) {\n this._suggestions = this._convertToOptionItems(this._originalSuggestions);\n }\n }\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as MultiInputDataSource<any>).close();\n }\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n }\n }\n\n /** write value for ControlValueAccessor */\n writeValue(value: any): void {\n const selectedItems = Array.isArray(value) ? value : [value];\n this.setAsSelected(this._convertToOptionItems(selectedItems));\n super.writeValue(value);\n }\n\n /** @hidden */\n _popoverOpenChangeHandle(isOpen: boolean): void {\n if (!isOpen) {\n this.close();\n }\n }\n\n /** Opens the select popover body. */\n open(): void {\n this.isOpen = true;\n this.isOpenChange.emit(this.isOpen);\n this.openChange.next(this.isOpen);\n this.markForCheck();\n setTimeout(() => {\n this._markListItemsAsSelected();\n if (this.inputText) {\n return;\n }\n });\n }\n /** Closes the select popover body. */\n close(): void {\n this.isOpen = false;\n this.inputText = '';\n this.searchTermChanged();\n this.isOpenChange.emit(false);\n this.openChange.next(false);\n this.searchInputElement.nativeElement.focus();\n this.markForCheck();\n }\n\n /** @hidden */\n convertObjectToMultiInputOption(items: any[]): MultiInputOption[] {\n return this._convertObjectsToOptionItems(items);\n }\n\n /** @hidden */\n searchTermChanged(text: string = this.inputText): void {\n if (text) {\n this.open();\n }\n const map = new Map();\n map.set('query', text);\n map.set('limit', 12);\n this.ds?.match(map);\n\n this.searchTermChange.emit(text);\n\n this.detectChanges();\n }\n\n /** @hidden */\n showList(isOpen: boolean): void {\n if (this.isOpen !== isOpen) {\n if (isOpen) {\n this.open();\n } else {\n this.searchTermChanged('');\n this.close();\n }\n }\n }\n\n /** @hidden */\n handleOptionItem(value: MultiInputOption): void {\n if (value) {\n this.selectOptionItem(value);\n }\n }\n\n /** @hidden */\n handlePressEnter(event: KeyboardEvent, value: MultiInputOption): void {\n if (!KeyUtil.isKeyCode(event, ENTER)) {\n return;\n }\n\n this.handleOptionItem(value);\n }\n\n /**\n * Handle Keydown on Input\n * @hidden\n */\n onInputKeydownHandler(event: KeyboardEvent): void {\n if (this.readonly) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, TAB) && this.isOpen) {\n this.close();\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n event.preventDefault();\n\n if (event.altKey) {\n this.showList(true);\n }\n\n if (this.isOpen) {\n this.listComponent?._setCurrentActiveItemIndex(0);\n this.listComponent?.listItems.first.focus();\n } else {\n this._chooseOtherItem(1);\n }\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n event.preventDefault();\n\n this._chooseOtherItem(-1);\n } else if (!event.ctrlKey && !KeyUtil.isKeyCode(event, this._nonOpeningKeys)) {\n this.showList(true);\n }\n }\n\n /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n\n /** @hidden */\n private _displayFn = (value: any): string => this.displayValue(value);\n\n /** @hidden */\n private _secondaryFn = (value: any): string => {\n if (isOptionItem(value)) {\n return value.secondaryText ?? '';\n } else if (isJsObject(value) && this.description) {\n const currentItem = this.objectGet(value, this.description);\n\n return isFunction(currentItem) ? currentItem() : currentItem;\n } else {\n return value;\n }\n };\n\n /** @hidden */\n protected get ds(): MultiInputDataSource<any> {\n return this.dataSource as MultiInputDataSource<any>;\n }\n\n /** @hidden\n * Method that picks other value moved from current one by offset, called only when Multi Input is closed */\n private _chooseOtherItem(offset: number): void {\n const index: number = this._suggestions.findIndex((value) => value.label === this.inputText);\n\n if (this._suggestions[index + offset]) {\n this.handleOptionItem(this._suggestions[index + offset]);\n }\n }\n\n /** @hidden */\n private _initializeDataSource(ds: FdpMultiInputDataSource<any>): void {\n this._suggestions = [];\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as MultiInputDataSource<any>).close();\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n this._dsSubscription = undefined;\n }\n }\n // Convert whatever comes in as DataSource so we can work with it identically\n this._dataSource = this._openDataStream(ds);\n }\n\n /** @hidden */\n private _openDataStream(ds: FdpMultiInputDataSource<any>): MultiInputDataSource<any> {\n const initDataSource = this._toDataStream(ds);\n\n if (initDataSource === undefined) {\n throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n }\n /**\n * This is single point of data entry to the component. We dont want to set data on different\n * places. If any new data comes in either you do a search and you want to pass initial data\n * its here.\n */\n this._dsSubscription = new Subscription();\n const dsSub = combineLatest([initDataSource.open(), this._updateDataSourceValues$.pipe(startWith(null))])\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(([data]) => {\n this._originalSuggestions = data;\n this._suggestions = this._convertToOptionItems(data);\n this.stateChanges.next('initDataSource.open().');\n\n this.detectChanges();\n });\n this._dsSubscription.add(dsSub);\n\n this._dsSubscription.add(initDataSource.onDataRequested().subscribe(this.onDataRequested));\n this._dsSubscription.add(initDataSource.onDataReceived().subscribe(this.onDataReceived));\n\n initDataSource.dataProvider.setLookupKey(this.lookupKey);\n const matchingBy: MatchingBy = {\n firstBy: this._displayFn\n };\n\n if (this.description) {\n matchingBy.secondaryBy = this._secondaryFn;\n }\n\n initDataSource.dataProvider.setMatchingBy(matchingBy);\n initDataSource.dataProvider.setMatchingStrategy(this._matchingStrategy);\n\n // initial data fetch\n const map = new Map();\n map.set('query', '*');\n map.set('limit', 12);\n initDataSource.match(map);\n\n return initDataSource;\n }\n\n /** @hidden */\n private _toDataStream(source: FdpMultiInputDataSource<any>): MultiInputDataSource<any> | undefined {\n if (isDataSource(source)) {\n return source as MultiInputDataSource<any>;\n }\n\n if (Array.isArray(source)) {\n // default implementation to work on top of arrays\n return new ArrayMultiInputDataSource<any>(source);\n }\n\n if (isObservable(source)) {\n return new ObservableMultiInputDataSource<any>(source);\n }\n\n return undefined;\n }\n\n /** @hidden */\n private _initWindowResize(): void {\n this._getOptionsListWidth();\n\n if (!this.autoResize) {\n return;\n }\n\n fromEvent(window, 'resize')\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => this._getOptionsListWidth());\n }\n\n /** @hidden */\n private _getOptionsListWidth(): void {\n const body = document.body;\n const rect = (this._element.querySelector('fd-input-group') as HTMLElement).getBoundingClientRect();\n const scrollBarWidth = body.offsetWidth - body.clientWidth;\n this.maxWidth = window.innerWidth - scrollBarWidth - rect.left;\n this.minWidth = rect.width - 2;\n }\n\n /**\n * Convert original data to OptionItems Interface\n * @hidden\n */\n private _convertToOptionItems(items: any[]): MultiInputOption[] {\n const item = items[0];\n\n const elementTypeIsOptionItem = isOptionItem(item);\n if (elementTypeIsOptionItem) {\n return items as MultiInputOption[];\n }\n\n const elementTypeIsObject = isJsObject(item);\n if (elementTypeIsObject) {\n return this._convertObjectsToOptionItems(items);\n }\n\n const elementTypeIsString = isString(item);\n if (elementTypeIsString) {\n return this._convertPrimitiveToOptionItems(items);\n }\n\n return [];\n }\n\n /**\n * Convert data to OptionItems Interface\n * @hidden\n */\n private _convertObjectsToOptionItems(items: any[]): MultiInputOption[] {\n if (this.group && this.groupKey) {\n return this._convertObjectsToGroupOptionItems(items);\n } else if (this.showSecondaryText && this.description) {\n return this._convertObjectsToSecondaryOptionItems(items);\n } else {\n return this._convertObjectsToDefaultOptionItems(items);\n }\n }\n\n /**\n * Convert object[] data to Group OptionItems Interface\n * @hidden\n */\n private _convertObjectsToGroupOptionItems<K>(items: K[]): MultiInputOption[] {\n const group: { [key: string]: K[] } = {};\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const keyValue = this.groupKey && item[this.groupKey];\n if (!keyValue) {\n continue;\n }\n\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n\n group[keyValue].push(item);\n }\n\n return Object.keys(group).map((key) => {\n const selectItem: MultiInputOption = {\n label: key,\n value: null,\n isGroup: true\n };\n\n const currentGroup = group[key];\n\n if (this.showSecondaryText && this.description) {\n selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n } else {\n selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n }\n return selectItem;\n });\n }\n\n /**\n * Convert object[] data to Secondary OptionItems Interface\n * @hidden\n */\n private _convertObjectsToSecondaryOptionItems<K>(items: K[]): MultiInputOption[] {\n const selectItems: MultiInputOption[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n avatarSrc: this.avatarsrc ? this.objectGet(value, this.avatarsrc) : null,\n description: this.description ? this.objectGet(value, this.description) : null,\n value\n });\n }\n\n return selectItems;\n }\n\n /**\n * Convert Primitive data(Boolean, String, Number) to OptionItems Interface\n * @hidden\n */\n private _convertPrimitiveToOptionItems(items: any[]): MultiInputOption[] {\n const selectItems: MultiInputOption[] = [];\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({ label: value, value });\n }\n\n return selectItems;\n }\n\n /**\n * Convert object[] to OptionItems Interface (Default)\n * @hidden\n */\n private _convertObjectsToDefaultOptionItems(items: any[]): MultiInputOption[] {\n const selectItems: MultiInputOption[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n value\n });\n }\n\n return selectItems;\n }\n\n /** @hidden\n * Assign custom templates\n * */\n private _assignCustomTemplates(): void {\n this.customTemplates.forEach((template) => {\n switch (template.name) {\n case 'optionItemTemplate':\n this.optionItemTemplate = template.templateRef;\n break;\n case 'groupItemTemplate':\n this.groupItemTemplate = template.templateRef;\n break;\n case 'secondaryItemTemplate':\n this.secondaryItemTemplate = template.templateRef;\n break;\n case 'selectedItemTemplate':\n this.selectedItemTemplate = template.templateRef;\n break;\n }\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\n\nexport const MULTIINPUT_COMPONENT = new InjectionToken<string[]>('PlatformMultiInputInterface');\n\nexport interface PlatformMultiInputInterface extends MobileMode {\n _selected: any[];\n openChange: Subject<boolean>;\n\n _dialogApprove(): void;\n _dialogDismiss(selectedBackup: any[]): void;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { MULTIINPUT_COMPONENT, PlatformMultiInputInterface } from '../multi-input.interface';\n\n@Component({\n selector: 'fdp-multi-input-mobile',\n templateUrl: './multi-input-mobile.component.html',\n styleUrl: './multi-input-mobile.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [DialogModule, TemplateDirective, BarModule, NgTemplateOutlet, CdkScrollable, ScrollbarDirective]\n})\nexport class PlatformMultiInputMobileComponent extends MobileModeBase<PlatformMultiInputInterface> implements OnInit {\n /** @hidden */\n @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n /** @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n childContent: Nullable<{\n listTemplate: TemplateRef<any>;\n controlTemplate: TemplateRef<any>;\n }> = null;\n\n /** @hidden */\n private _selectedBackup: any[];\n\n /** @hidden */\n constructor(@Inject(MULTIINPUT_COMPONENT) multiInputComponent: PlatformMultiInputInterface) {\n super(multiInputComponent, MobileModeControl.MULTI_INPUT);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenOnMultiInputOpenChange();\n }\n\n /** @hidden */\n _handleApprove(): void {\n this.dialogRef.close();\n this._component._dialogApprove();\n }\n\n /** @hidden */\n _handleDismiss(): void {\n this.dialogRef.dismiss();\n this._component._dialogDismiss(this._selectedBackup);\n }\n\n /** @hidden */\n private _listenOnMultiInputOpenChange(): void {\n this._component.openChange\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n\n /** @hidden */\n private _toggleDialog(open: boolean): void {\n if (!open) {\n this._handleApprove();\n return;\n }\n\n this._selectedBackup = [...this._component._selected];\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n\n /** @hidden */\n private _open(): void {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n disablePaddings: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n escKeyCloseable: false,\n container: this._elementRef.nativeElement\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-dialog-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"_handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\" class=\"fdp-multi-dialog-input\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"_handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"_handleDismiss()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { PlatformMultiInputMobileComponent } from './multi-input-mobile.component';\n\n@NgModule({\n imports: [PlatformMultiInputMobileComponent],\n exports: [PlatformMultiInputMobileComponent]\n})\nexport class PlatformMultiInputMobileModule {}\n","import { BACKSPACE, CONTROL, DELETE, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { Directive, ElementRef, EventEmitter, HostListener, Input, NgZone, Output, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { OptionItem } from '@fundamental-ngx/platform/shared';\nimport { fromEvent } from 'rxjs';\n\nexport interface AutoCompleteEvent {\n term: string;\n forceClose: boolean;\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fdp-auto-complete]',\n standalone: true\n})\nexport class AutoCompleteDirective {\n /** Values that will fill missing text in the input. */\n @Input()\n options: OptionItem[];\n\n /**\n * Input text, that is taken from ngModel of formControl,\n * there has to be difference between native input value and model value\n */\n @Input()\n inputText: string;\n\n /** Check is directive use in mobile view to prevent additional blur events */\n @Input()\n mobile: boolean;\n\n /** Event thrown, when the auto ahead text is accepted */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onComplete: EventEmitter<AutoCompleteEvent> = new EventEmitter<AutoCompleteEvent>();\n\n /** @hidden */\n private readonly _completeKeys: number[] = [ENTER];\n\n /** @hidden */\n private readonly _fillKeys: number[] = [LEFT_ARROW, RIGHT_ARROW];\n\n /** @hidden */\n private readonly _stopKeys: number[] = [BACKSPACE, DELETE, ESCAPE];\n\n /** @hidden */\n private _oldValue: string;\n\n /** @hidden */\n private _lastKeyUpEvent: KeyboardEvent;\n\n /** @hidden */\n private get _element(): HTMLInputElement {\n return this._elementRef.nativeElement;\n }\n\n /** @hidden */\n private _isComposing = false;\n\n /** @hidden */\n private readonly _zone = inject(NgZone);\n\n /** @hidden */\n constructor(private readonly _elementRef: ElementRef<HTMLInputElement>) {\n /**\n * Fixes #10710 / #12983\n * With chinese characters inputText property update was triggered after the keyup event trigger.\n * By ensuring that we set all properties we can proceed with stable data.\n */\n this._zone.runOutsideAngular(() => {\n const keyupEvent = fromEvent<KeyboardEvent>(this._elementRef.nativeElement, 'keyup');\n const compositionStartEvent = fromEvent<CompositionEvent>(\n this._elementRef.nativeElement,\n 'compositionstart'\n );\n const compositionEndEvent = fromEvent<CompositionEvent>(this._elementRef.nativeElement, 'compositionend');\n\n keyupEvent.pipe(takeUntilDestroyed()).subscribe((evt) => this.handleKeyboardEvent(evt));\n\n compositionStartEvent.pipe(takeUntilDestroyed()).subscribe(() => {\n this._isComposing = true;\n });\n\n compositionEndEvent.pipe(takeUntilDestroyed()).subscribe(() => {\n this._isComposing = false;\n this.inputText = this._elementRef.nativeElement.value;\n });\n });\n }\n\n /** @hidden */\n @HostListener('blur')\n handleBlur(): void {\n if (Boolean(this.inputText) && !this.mobile) {\n this._element.value = this.inputText;\n }\n }\n\n /** @hidden */\n handleKeyboardEvent(event: KeyboardEvent): void {\n if (!this._isComposing) {\n if (KeyUtil.isKeyCode(event, this._stopKeys)) {\n this._element.value = this.inputText;\n } else if (KeyUtil.isKeyCode(event, this._completeKeys)) {\n this._sendCompleteEvent(true);\n } else if (KeyUtil.isKeyCode(event, this._fillKeys)) {\n this._sendCompleteEvent(false);\n } else if (!this._isControlKey(event) && this.inputText) {\n /** Prevention from triggering typeahead, when having crtl/cmd + keys */\n if (!this._triggerTypeAhead()) {\n return;\n }\n\n // Check if this is a new typing session after programmatic input modification\n const currentNativeValue = this._element.value;\n\n if (this.inputText.length > currentNativeValue.length + 1) {\n // Reset inputText to current value and don't do typeahead\n this.inputText = currentNativeValue;\n return;\n }\n\n this._oldValue = this.inputText;\n const item = this._searchByStrategy();\n\n if (item) {\n this._typeahead(item.label);\n }\n }\n }\n\n this._lastKeyUpEvent = event;\n }\n\n /** @hidden */\n private _typeahead(displayedValue: string): void {\n const selectionStartIndex = this.inputText.length;\n this._element.value = displayedValue;\n\n this._setSelectionRange(selectionStartIndex, displayedValue.length);\n }\n\n /** @hidden */\n private _setSelectionRange(selectionStart: number, selectionEnd: number): void {\n const direction = this._element.selectionDirection;\n\n this._element.setSelectionRange(selectionStart, selectionEnd, direction ?? undefined);\n }\n\n /** @hidden */\n private _isControlKey(event: KeyboardEvent): boolean {\n return KeyUtil.isKeyCode(event, CONTROL) || event.ctrlKey;\n }\n\n /** @hidden */\n private _triggerTypeAhead(): boolean {\n return !(\n this._lastKeyUpEvent &&\n KeyUtil.isKeyCode(this._lastKeyUpEvent, CONTROL) &&\n this.inputText === this._oldValue\n );\n }\n\n /** @hidden */\n private _sendCompleteEvent(forceClose: boolean): void {\n this.onComplete.emit({\n term: this._element.value,\n forceClose\n });\n\n if (this.inputText !== this._oldValue) {\n const inputTextLength = this.inputText.length;\n this._element.setSelectionRange(inputTextLength, inputTextLength);\n }\n }\n\n /** @hidden */\n private _searchByStrategy(): OptionItem | undefined {\n const [firstItem] = this.options;\n if (!firstItem) {\n return;\n }\n\n if (firstItem.isGroup) {\n let matchedSelectItem: OptionItem | undefined;\n\n for (const option of this.options) {\n if (!option.children) {\n continue;\n }\n matchedSelectItem = this._findByStrategyStartsWith(option.children, this.inputText);\n\n if (matchedSelectItem) {\n break;\n }\n }\n\n if (matchedSelectItem) {\n return matchedSelectItem;\n }\n }\n\n return this._findByStrategyStartsWith(this.options, this.inputText);\n }\n\n /** @hidden */\n private _findByStrategyStartsWith(options: OptionItem[], inputText: string): OptionItem | undefined {\n return options.find((option) => option.label.toLocaleLowerCase().startsWith(inputText.toLocaleLowerCase()));\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n Injector,\n Input,\n OnInit,\n Optional,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n ViewEncapsulation,\n forwardRef\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { DisplayFnPipe, DynamicComponentService, InitialFocusDirective, KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { TokenComponent, TokenizerComponent } from '@fundamental-ngx/core/token';\nimport {\n BaseListItem,\n ListComponent,\n ModifyItemEvent,\n PlatformListModule,\n SelectionType,\n StandardListItemComponent\n} from '@fundamental-ngx/platform/list';\nimport {\n DATA_PROVIDERS,\n DataProvider,\n MultiInputDataSource,\n MultiInputOption,\n isFunction\n} from '@fundamental-ngx/platform/shared';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { MultiAnnouncerDirective } from '@fundamental-ngx/core/multi-combobox';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport equal from 'fast-deep-equal';\nimport { AutoCompleteDirective, AutoCompleteEvent } from '../auto-complete/auto-complete.directive';\nimport { InputType } from '../input/input.component';\nimport { BaseMultiInput } from './base-multi-input';\nimport { PlatformMultiInputMobileComponent } from './multi-input-mobile/multi-input-mobile.component';\nimport { MULTIINPUT_COMPONENT } from './multi-input.interface';\n\nlet uniqueHiddenLabel = 0;\n\nexport class MultiInputSelectionChangeEvent {\n /**\n * Multi Input selection change event\n * @param source Multi Input component\n * @param payload Selected value\n */\n constructor(\n public source: PlatformMultiInputComponent,\n public payload: any // Contains selected item\n ) {}\n}\n\n@Component({\n selector: 'fdp-multi-input',\n templateUrl: './multi-input.component.html',\n styleUrl: './multi-input.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FD_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => PlatformMultiInputComponent),\n multi: true\n },\n contentDensityObserverProviders()\n ],\n imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n InputGroupModule,\n TokenComponent,\n TokenizerComponent,\n FormControlComponent,\n FormsModule,\n AutoCompleteDirective,\n InitialFocusDirective,\n PlatformListModule,\n StandardListItemComponent,\n DisplayFnPipe,\n ContentDensityModule,\n FdTranslatePipe,\n MultiAnnouncerDirective\n ]\n})\nexport class PlatformMultiInputComponent extends BaseMultiInput implements OnInit, AfterViewInit {\n /** @hidden TODO: remove when permanently deleting the deprecated tokenHiddenId input */\n protected tokenCountHiddenLabel = `fdp-multi-input-token-count-id-${uniqueHiddenLabel++}`;\n\n /** @deprecated Now handled internally by tokenizer. */\n @Input()\n tokenHiddenId: string = this.tokenCountHiddenLabel;\n\n /** type Represent the type of input used for the multi Input */\n @Input()\n type: InputType;\n\n /** boolean type represents the focus set for the respective multi input */\n @Input()\n autofocus = false;\n\n /** */\n @Input()\n glyphAriaLabel: string;\n\n /** Title text for the add-on icon button. */\n @Input()\n addonIconTitle: string;\n\n /** @hidden */\n @ViewChild(ListComponent)\n listTemplateDD: ListComponent<MultiInputOption>;\n\n /** Selected values from the list items. */\n _selected: any[] = [];\n\n /** Selected items of the multi input. */\n @Input()\n set selected(selectedValue: any[]) {\n this.value = selectedValue;\n }\n get selected(): any[] {\n return this._selected;\n }\n\n /**\n *\n */\n @Input()\n selectionMode: SelectionType = 'none';\n\n /** Whether the list in byline mode. */\n @Input()\n hasByLine = false;\n\n /** @hidden */\n selectedValue?: MultiInputOption;\n\n /** @hidden */\n get isGroup(): boolean {\n return !!(this.group && this.groupKey);\n }\n\n /** @hidden Whether the input is disabled. */\n protected _disabled = false;\n\n /** Whether the multi input is disabled. */\n @Input()\n set disabled(value) {\n this._disabled = value;\n }\n get disabled(): boolean {\n return this._disabled;\n }\n\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * `equal` will apply a width to the body equivalent to the width of the control.\n * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: string[] = [];\n\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n @Input()\n closeOnOutsideClick = true;\n\n /** Callback function when add-on button clicked. */\n @Input()\n addOnButtonClickFn: () => void;\n\n /** Event emitted when item is selected. */\n @Output()\n readonly selectionChange = new EventEmitter<MultiInputSelectionChangeEvent>();\n\n /** @hidden */\n @ViewChild(TokenizerComponent)\n tokenizer: TokenizerComponent;\n\n /** @hidden */\n @ViewChild('controlTemplate')\n controlTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('listTemplate')\n listTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChildren(BaseListItem)\n private readonly _listItems: QueryList<BaseListItem>;\n\n /** @hidden */\n constructor(\n /** @hidden */\n readonly _dynamicComponentService: DynamicComponentService,\n /** @hidden */\n private readonly _viewContainerRef: ViewContainerRef,\n /** @hidden */\n private readonly _injector: Injector,\n /** @hidden */\n @Optional() @Inject(DATA_PROVIDERS) private _providers: Map<string, DataProvider<any>>,\n readonly contentDensityObserver: ContentDensityObserver\n ) {\n super();\n }\n\n /** Display function. Accepts an object of the same type as the\n * items passed to dropdownValues as argument, and outputs a string.\n * An arrow function can be used to access the *this* keyword in the calling component.\n * See multi input examples for details. */\n @Input()\n displayFn = (str: string): string => str;\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n\n const providers = this._providers?.size === 0 ? this.multiInputConfig.providers : this._providers;\n // if we have both prefer dataSource\n if (!this.dataSource && this.entityClass && providers?.has(this.entityClass)) {\n this.dataSource = new MultiInputDataSource(providers.get(this.entityClass)!);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n\n if (this.mobile) {\n this._setUpMobileMode();\n }\n }\n\n /** @hidden Method to emit change event */\n emitChangeEvent<T>(modelValue: T): void {\n const event = new MultiInputSelectionChangeEvent(this, modelValue);\n\n this.selectionChange.emit(event);\n }\n\n /** @hidden */\n _checkboxSelected(value: any, event: ModifyItemEvent): void {\n const isSelected = event.source._selected;\n const index = this.selected.findIndex((selectvalue) => equal(selectvalue, value));\n\n if (isSelected && index > -1) {\n return;\n }\n\n this.addToArray(value, false);\n }\n\n /** @hidden */\n addToArray(value: any, focusOnInput = true): void {\n const index = this.selected.findIndex((selectvalue) => equal(selectvalue, value));\n if (index === -1) {\n this.selected.push(value);\n } else {\n this.selected.splice(index, 1);\n }\n if (!this.mobile && focusOnInput) {\n this.close();\n }\n this._updateModel(this.selected);\n if (focusOnInput) {\n this.searchInputElement.nativeElement.focus();\n }\n this.emitChangeEvent(value ? this.selected : null);\n this.detectChanges();\n }\n\n /** @hidden */\n addOnButtonClick(event: Event): void {\n if (isFunction(this.addOnButtonClickFn)) {\n this.addOnButtonClickFn();\n return;\n }\n if (!this.openDropdownOnAddOnClicked && this.isOpen) {\n this.showList(false);\n } else if (this.openDropdownOnAddOnClicked) {\n this.showList(!this.isOpen);\n this.searchInputElement?.nativeElement.focus();\n }\n\n this.addOnButtonClicked.emit(event);\n }\n\n /** @hidden */\n onInputGroupClicked(): void {\n if (this.mobile && !this.isOpen) {\n this.open();\n }\n }\n\n /** @hidden */\n moreClicked(): void {\n this.open();\n this._suggestions = this.selected;\n this.markForCheck();\n }\n\n /** @hidden */\n deleteToken(selectedValue: MultiInputOption): void {\n if (this.tokenizer.tokenList.length > 0) {\n this.tokenizer.tokenList.forEach((token) => {\n if (token.tokenWrapperElement.nativeElement.textContent === selectedValue.label) {\n this.selected.splice(this.selected.indexOf(selectedValue), 1);\n }\n });\n }\n this._updateModel(this.selected);\n this.searchInputElement.nativeElement.focus();\n this.close();\n this.markForCheck();\n }\n\n /** @hidden */\n removeToken(token: any): void {\n this.selected.splice(this.selected.indexOf(token), 1);\n this.emitChangeEvent(token ? this.selected : null);\n this.searchInputElement.nativeElement.focus();\n if (this.selected.length === 0) {\n this._selected = [];\n }\n this._updateModel(this.selected);\n this.markForCheck();\n }\n\n /** @hidden */\n removeSelectedTokens(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n if (this.isOpen) {\n this.listComponent._setCurrentActiveItemIndex(0);\n this.listTemplateDD.listItems.first.focus();\n } else {\n this.showList(!this.isOpen);\n this.searchInputElement.nativeElement.focus();\n }\n }\n this.markForCheck();\n }\n\n /** @hidden Define is selected item selected */\n isSelectedOptionItem(selectedItem: any): boolean {\n return (\n (this.lookupKey && this.lookupValue(this.selected) === this.lookupValue(selectedItem)) ||\n this.displayValue(this.selected) === this.displayValue(selectedItem)\n );\n }\n\n /** @hidden Method to set selected item */\n selectOptionItem(item: MultiInputOption): void {\n if (this.mobile) {\n this.selectedValue = item;\n this.inputText = item.label;\n this.detectChanges();\n\n return;\n }\n\n this.inputText = item.label;\n this._checkAndUpdate(item);\n this.showList(false);\n }\n\n /** @hidden Method to set as selected */\n setAsSelected(item: MultiInputOption[]): void {\n this._selected = item;\n this.inputText = '';\n this._markListItemsAsSelected();\n }\n\n /**\n * @hidden\n * Mathod for marking items in dropdown as selected.\n */\n _markListItemsAsSelected(): void {\n this._listItems?.forEach((listItem) => {\n const isSelected = !!this._selected.find((value) => equal(value.value, listItem.value));\n listItem.setSelected(isSelected);\n });\n }\n\n /** @hidden */\n _onAutoComplete(event: AutoCompleteEvent): void {\n if (!event.forceClose || !this._suggestions) {\n return;\n }\n\n const [item] = this.isGroup ? this._suggestions[0]?.children || [] : this._suggestions;\n if (item && item.label === event.term) {\n this.addToArray(item);\n }\n }\n\n /** @hidden */\n _onKeydownEnter(event: Event): void {\n if (this.inputText) {\n event.preventDefault();\n }\n }\n\n /** @hidden Handle dialog dismissing, closes popover and sets backup data. */\n _dialogDismiss(selected: any[]): void {\n this._selected = selected;\n this.showList(false);\n }\n\n /** @hidden Handle dialog approval, closes popover and propagates data changes. */\n _dialogApprove(): void {\n this.onChange(this.selected);\n this._updateModel(this.selected);\n this.showList(false);\n }\n\n /** @hidden if not selected update model */\n private _checkAndUpdate(modelValue: MultiInputOption): void {\n if (this.isSelectedOptionItem(modelValue)) {\n return;\n }\n\n const optionItem = this._getSelectedOptionItem(this.inputText);\n\n this._updateModel(optionItem ? optionItem.value : this.inputText);\n }\n\n /** @hidden */\n private _getSelectedOptionItem(text: string): MultiInputOption | undefined {\n if (!this.isGroup) {\n return this._suggestions.find((item) => item.label === text);\n }\n\n return this._suggestions\n .reduce((result: MultiInputOption[], item: MultiInputOption) => {\n item.children && result.push(...item.children);\n\n return result;\n }, [])\n .find((item) => item.label === text);\n }\n\n /** @hidden Update model */\n private _updateModel(value: any): void {\n // setting value, it will call setValue()\n this.value = value;\n }\n\n /** @hidden */\n private async _setUpMobileMode(): Promise<void> {\n const injector = Injector.create({\n providers: [{ provide: MULTIINPUT_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._dynamicComponentService.createDynamicComponent(\n { listTemplate: this.listTemplate, controlTemplate: this.controlTemplate },\n PlatformMultiInputMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n { injector }\n );\n }\n}\n","<div class=\"fd-multi-input\">\n <ng-template [ngTemplateOutlet]=\"mobile ? controlTemplate : desktopTemplate\"></ng-template>\n</div>\n<ng-template #desktopTemplate>\n <fd-popover\n additionalBodyClass=\"fdp-multi-input__list-container\"\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"(!autoResize && minWidth) || 0\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body>\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-input-group\n [button]=\"true\"\n [buttonFocusable]=\"buttonFocusable\"\n [isControl]=\"true\"\n glyph=\"value-help\"\n [state]=\"state\"\n [disabled]=\"disabled\"\n (keydown)=\"removeSelectedTokens($event)\"\n (addOnButtonClicked)=\"addOnButtonClick($event)\"\n (click)=\"onInputGroupClicked()\"\n [glyphAriaLabel]=\"glyphAriaLabel\"\n [iconTitle]=\"addonIconTitle\"\n >\n <fd-tokenizer\n [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n [showOverflowPopover]=\"false\"\n #tokenizer\n class=\"fd-multi-input-tokenizer-custom\"\n (moreClickedEvent)=\"moreClicked()\"\n tabindex=\"-1\"\n role=\"listbox\"\n fdMultiAnnouncer\n [multiAnnouncerOptions]=\"isOpen ? _suggestions : []\"\n >\n @for (token of selected; track token; let i = $index) {\n <fd-token\n [readOnly]=\"disabled\"\n (onCloseClick)=\"removeToken(token)\"\n [attr.aria-posinset]=\"i\"\n [attr.aria-setsize]=\"selected.length\"\n >\n <span>{{ token.label | displayFnPipe: displayFn }}</span>\n </fd-token>\n }\n <input\n #searchInputElement\n type=\"text\"\n class=\"fd-input fd-multi-input-tokenizer-input fd-tokenizer__input fd-input-group__input\"\n fdp-auto-complete\n autocomplete=\"off\"\n (onComplete)=\"_onAutoComplete($event)\"\n (keydown.enter)=\"_onKeydownEnter($event)\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [inputText]=\"inputText\"\n [options]=\"_suggestions\"\n fd-input-group-input\n fd-form-control\n [attr.id]=\"id\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"searchTermChanged()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [attr.placeholder]=\"selected.length ? null : placeholder\"\n (focus)=\"onTouched(); tokenizer._showAllTokens()\"\n (blur)=\"tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n aria-haspopup=\"listbox\"\n [attr.aria-readonly]=\"readonly\"\n [ariaLabel]=\"ariaLabel || ('coreMultiInput.multiInputAriaLabel' | fdTranslate)\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.aria-required]=\"required\"\n aria-roledescription=\"Multi Value Input\"\n fdkInitialFocus\n [enabled]=\"autofocus\"\n />\n </fd-tokenizer>\n </fd-input-group>\n</ng-template>\n<ng-template #listTemplate>\n @if (_suggestions && _suggestions.length) {\n <fdp-list\n [noBorder]=\"true\"\n #listTemplateDD\n [hasByLine]=\"hasByLine\"\n [selectionMode]=\"selectionMode\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [interceptTabKey]=\"false\"\n (keydown.tab)=\"close()\"\n (keydown.escape)=\"close()\"\n >\n @if (!isGroup) {\n @for (listItem of _suggestions; track listItem) {\n <fdp-standard-list-item\n [title]=\"listItem.label\"\n [description]=\"listItem.description || ''\"\n [avatar]=\"listItem.avatarSrc\"\n [value]=\"listItem.value\"\n (itemSelected)=\"selectionMode !== 'multi' && addToArray(listItem, true)\"\n (itemCheckboxSelected)=\"_checkboxSelected(listItem, $event)\"\n (buttonClicked)=\"deleteToken(listItem)\"\n role=\"option\"\n >\n </fdp-standard-list-item>\n }\n }\n @if (isGroup) {\n @for (group of _suggestions; track group) {\n @if (!groupItemTemplate) {\n <fdp-list-group-header [groupHeaderTitle]=\"group.label\"></fdp-list-group-header>\n }\n @if (groupItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem; let i = $index) {\n <fdp-standard-list-item\n [title]=\"optionItem.label\"\n [value]=\"optionItem.value\"\n (itemSelected)=\"addToArray(optionItem, true)\"\n (itemCheckboxSelected)=\"addToArray(optionItem, false)\"\n (buttonClicked)=\"deleteToken(optionItem)\"\n role=\"option\"\n >\n </fdp-standard-list-item>\n }\n }\n }\n </fdp-list>\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { PlatformMultiInputComponent } from './multi-input.component';\n\n@NgModule({\n imports: [PlatformMultiInputComponent],\n exports: [PlatformMultiInputComponent]\n})\nexport class PlatformMultiInputModule {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformMultiInputComponent } from '../../../multi-input';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-multi-input',\n templateUrl: './dynamic-form-generator-multi-input.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, PlatformMultiInputComponent]\n})\nexport class DynamicFormGeneratorMultiInputComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-multi-input\n [id]=\"id\"\n [formControlName]=\"name\"\n [placeholder]=\"placeholder\"\n type=\"text\"\n [name]=\"name\"\n [dataSource]=\"choices\"\n displayKey=\"label\"\n lookupKey=\"label\"\n [autofocus]=\"true\"\n >\n </fdp-multi-input>\n </ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ObjectStatusComponent } from '@fundamental-ngx/platform/object-status';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { ObjectStatusDynamicFormFieldItem } from '../../interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-object-status',\n templateUrl: './dynamic-form-generator-object-status.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, ObjectStatusComponent]\n})\nexport class DynamicFormGeneratorObjectStatusComponent extends BaseDynamicFormGeneratorControl<ObjectStatusDynamicFormFieldItem> {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-object-status\n [label]=\"formItem.default\"\n [status]=\"formItem.guiOptions?.status\"\n [glyph]=\"formItem.guiOptions?.icon\"\n ></fdp-object-status>\n </ng-container>\n</ng-container>\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RadioButtonComponent as CoreRadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\nlet uniqueId = 0;\n\n@Component({\n selector: 'fdp-radio-button',\n templateUrl: './radio.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CoreRadioButtonComponent, FormsModule, NgTemplateOutlet]\n})\nexport class RadioButtonComponent extends BaseInput implements AfterViewInit, FocusableOption {\n /** sets radio button tooltip */\n @Input()\n title: string;\n\n /**\n * Includes the Radio in the page tab sequence.\n */\n @Input()\n tabIndex = -1;\n\n /** value for Radio button */\n @Input()\n set value(newValue: any) {\n this._value = newValue;\n }\n get value(): any {\n return super.getValue();\n }\n\n /** used for radio button creation if list value present */\n @Input()\n forceRender = false;\n\n /** reference of template */\n @ViewChild('renderer')\n renderer: TemplateRef<any>;\n\n /** click event to emit */\n @Output()\n readonly checked: EventEmitter<RadioButtonComponent> = new EventEmitter();\n\n /** Access radio button child element passed as content of radio button group */\n @ViewChild(CoreRadioButtonComponent, { static: false })\n private coreRadioButton: CoreRadioButtonComponent;\n\n /** @hidden */\n _currentValue: any;\n\n /** @hidden Radio checked status */\n _isChecked = false;\n\n /** @hidden */\n constructor() {\n super();\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n // @hidden have to set default initial values as base class has check and throws error\n this.id = `fdp-radio-id-${uniqueId}`;\n this.name = `fdp-radio-name-${uniqueId}`;\n uniqueId++;\n }\n\n /** @hidden Controlvalue accessor */\n writeValue(value: any): void {\n this._valueChange(value);\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n _valueChange(value: any, emitEvent = false): void {\n if (this.disabled) {\n emitEvent = false;\n }\n\n this._currentValue = value;\n this._isChecked = this._currentValue === super.getValue();\n if (this._isChecked && emitEvent) {\n this.checked.emit(this);\n }\n this.tabIndex = this._isChecked ? 0 : -1;\n this.detectChanges();\n if (emitEvent) {\n this.onChange(value);\n this.onTouched();\n }\n }\n\n /** method for cdk FocusKeymanager */\n focus(): void {\n this.coreRadioButton?.inputElement.nativeElement.focus();\n }\n\n /** method to select radio button */\n select(): void {\n this._valueChange(super.getValue());\n }\n\n /** method to uncheck radio button */\n unselect(): void {\n this._valueChange(undefined);\n }\n\n /** Setting tabIndex for radio accessibility */\n setTabIndex(index: 0 | -1): void {\n this.tabIndex = index;\n this.markForCheck();\n }\n}\n","<ng-template #renderer>\n <fd-radio-button\n [id]=\"id\"\n [name]=\"name\"\n [value]=\"value\"\n [state]=\"state\"\n [disabled]=\"disabled\"\n [tabIndex]=\"_isChecked ? 0 : tabIndex\"\n [title]=\"title\"\n [ariaLabel]=\"ariaLabel\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [ngModel]=\"_currentValue\"\n (ngModelChange)=\"_valueChange($event, true)\"\n >\n <ng-content></ng-content>\n </fd-radio-button>\n</ng-template>\n@if (forceRender) {\n <ng-template [ngTemplateOutlet]=\"renderer\"></ng-template>\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChildren,\n ViewEncapsulation,\n forwardRef,\n inject\n} from '@angular/core';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { merge } from 'rxjs';\nimport { startWith, switchMap } from 'rxjs/operators';\n\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { InLineLayoutCollectionBaseInput, SelectItem } from '@fundamental-ngx/platform/shared';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormGroupComponent, FormItemComponent } from '@fundamental-ngx/core/form';\nimport { RadioButtonComponent } from './radio/radio.component';\n\n/**\n * Radio group implementation based on the\n * https://github.com/SAP/fundamental-ngx/wiki/Platform:-RadioGroup-Technical-Design\n * documents.\n */\n\n// Increasing integer for generating unique ids for radio components.\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'fdp-radio-group',\n templateUrl: './radio-group.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => RadioGroupComponent), multi: true }],\n imports: [FormGroupComponent, FormItemComponent, NgTemplateOutlet, RadioButtonComponent]\n})\nexport class RadioGroupComponent\n extends InLineLayoutCollectionBaseInput\n implements AfterViewInit, AfterContentChecked, OnDestroy\n{\n /** Value of selected radio button */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('selected')\n set value(newValue: any) {\n super.setValue(newValue);\n }\n get value(): any {\n return super.getValue();\n }\n\n /** To Display Radio buttons in a line */\n @Input()\n set isInline(inline: boolean) {\n this._inlineCurrentValue$.next(inline);\n }\n get isInline(): boolean {\n return this._inlineCurrentValue$.value;\n }\n\n /** None value radio button created */\n @Input()\n hasNoValue = false;\n\n /** Label for None value radio button */\n @Input()\n noValueLabel = 'None';\n\n /** Children radio buttons part of Group radio button, passed as content */\n @ContentChildren(RadioButtonComponent)\n contentRadioButtons: QueryList<RadioButtonComponent>;\n\n /** Children radio buttons part of Group radio button, created from list of values */\n @ViewChildren(RadioButtonComponent)\n viewRadioButtons: QueryList<RadioButtonComponent>;\n\n /** Selected radio button change event raised */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-native\n change: EventEmitter<RadioButtonComponent> = new EventEmitter<RadioButtonComponent>();\n\n /** @hidden */\n private _activeItemSet = false;\n\n /** @hidden The currently selected radio button. Should match value. */\n private _selected: RadioButtonComponent | null = null;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden FocusKeyManager instance */\n private _keyboardEventsManager: FocusKeyManager<RadioButtonComponent>;\n\n /** @hidden */\n constructor() {\n super();\n this.id = `radio-group-${nextUniqueId++}`;\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n _handleKeydown(event: KeyboardEvent): void {\n event.stopImmediatePropagation();\n if (this._keyboardEventsManager) {\n // sets Active item. so arrow key starts after the active item.\n // Need to do only once, when one radio is already selected\n if (this._selected && !this._activeItemSet) {\n this._keyboardEventsManager.setActiveItem(this._selected);\n this._activeItemSet = true;\n }\n\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW])) {\n // passing the event to key manager so we get a change fired\n this._keyboardEventsManager.onKeydown(event);\n }\n }\n }\n\n /** Control Value Accessor */\n writeValue(value: any): void {\n super.writeValue(value);\n this.contentRadioButtons?.forEach((b) => this._selectUnselect(b));\n this.viewRadioButtons?.forEach((b) => this._selectUnselect(b));\n }\n\n /** Access display value for objects, acts as checkbox label. */\n getDisplayValue(item: any): string {\n return this.displayValue(item);\n }\n\n /**\n * Called on button click for view radio button, created from list of values\n * @param event\n */\n selected(event: RadioButtonComponent): void {\n this._selectedValueChanged(event);\n }\n\n /** @hidden Selecting default button as provided as input */\n ngAfterContentChecked(): void {\n if (!this._validateRadioButtons()) {\n throw new Error('fdp-radio-button-group must contain a fdp-radio-button');\n }\n this.contentRadioButtons.forEach((button) => (button.state = this.state));\n this.markForCheck();\n }\n\n /**\n * @hidden\n * Initialize properties once fd-radio-buttons are available.\n * This allows us to propagate relevant attributes to associated buttons.\n */\n ngAfterViewInit(): void {\n setTimeout(() => {\n this._initialSetup(this.contentRadioButtons);\n this._initialSetup(this.viewRadioButtons);\n });\n super.ngAfterViewInit();\n }\n\n /** @hidden Destroys event subscription. */\n ngOnDestroy(): void {\n this._keyboardEventsManager?.destroy();\n }\n\n /** @hidden */\n _getListItemDisabledValue(item: RadioGroupComponent['list'][number]): boolean {\n return this.disabled || (typeof item === 'object' && !!(<SelectItem>item).disabled);\n }\n\n /** @hidden */\n private _initialSetup(radioButtons: QueryList<RadioButtonComponent>): void {\n if (!radioButtons || radioButtons?.length === 0) {\n return;\n }\n\n this._keyboardEventsManager?.destroy();\n this._keyboardEventsManager = new FocusKeyManager(radioButtons).withWrap().withHorizontalOrientation('ltr');\n\n radioButtons.changes\n .pipe(\n startWith(radioButtons),\n switchMap(() => {\n let firstEnabledButtonIndex = -1;\n const checkedEvents = radioButtons.map((button, i) => {\n if (this.list) {\n button.state = this.state;\n } else {\n this._setProperties(button);\n }\n\n this._selectUnselect(button);\n\n // finding first enabled button to set tabIndex=0\n if (!button.disabled && !this._disabled && firstEnabledButtonIndex < 0) {\n firstEnabledButtonIndex = i;\n }\n\n return button.checked.asObservable();\n });\n\n // accessibility requirement\n if (!this._selected && radioButtons && firstEnabledButtonIndex > -1) {\n radioButtons.toArray()[firstEnabledButtonIndex].setTabIndex(0);\n }\n return merge(...checkedEvents);\n }),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((ev) => this._selectedValueChanged(ev));\n }\n\n /**\n * @hidden\n * Selects given button, if value matches\n * @param button\n */\n private _selectUnselect(button: RadioButtonComponent): void {\n if (button.value !== this.value) {\n button.unselect();\n\n return;\n }\n\n // selected button\n if (this._selected !== button) {\n this._selected = button;\n }\n\n if (!button._isChecked) {\n button.select();\n }\n }\n\n /** @hidden Called every time a radio button is clicked, In content child as well as viewchild */\n private _selectedValueChanged(button: RadioButtonComponent): void {\n if (this._selected !== button) {\n this._resetTabIndex(button);\n\n if (this._selected) {\n this._selected.unselect();\n }\n\n this._selected = button;\n button.select();\n }\n\n this.value = button.value;\n this.change.emit(button);\n this.onTouched();\n }\n\n /** @hidden resets tabIndex for first radio in radio group. for accessibility tabIndex was set */\n private _resetTabIndex(selectedRadio: RadioButtonComponent): void {\n if (this.viewRadioButtons || this.contentRadioButtons) {\n const radios = this.viewRadioButtons.length > 0 ? this.viewRadioButtons : this.contentRadioButtons;\n radios.forEach((radio) => {\n if (radio !== selectedRadio && radio.tabIndex === 0) {\n radio.tabIndex = -1;\n }\n });\n }\n }\n\n /**\n * @hidden\n * @param button Set initial values, used while content children creation\n */\n private _setProperties(button: RadioButtonComponent): void {\n if (button) {\n button.name = this.name;\n button.state = this.state;\n button.disabled = button.disabled ? button.disabled : this._disabled;\n }\n }\n\n /** @hidden Make sure we have expected child. */\n private _validateRadioButtons(): boolean {\n return (\n this.contentRadioButtons.filter((item) => !(item instanceof RadioButtonComponent || item['renderer']))\n .length === 0\n );\n }\n}\n","<fd-form-group\n [isInline]=\"isInline\"\n role=\"radiogroup\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-orientation]=\"isInline ? 'horizontal' : 'vertical'\"\n [attr.aria-required]=\"required\"\n>\n @if (!list) {\n @for (radio of contentRadioButtons; track radio) {\n <div fd-form-item>\n <ng-template\n [ngTemplateOutlet]=\"radio?.renderer || null\"\n [ngTemplateOutletContext]=\"{\n name: name,\n value: radio.value,\n state: state,\n disabled: disabled || radio.disabled,\n ariaLabel: radio.ariaLabel,\n ariaLabelledBy: radio.ariaLabelledBy,\n ariaDescribedBy: radio.ariaDescribedBy,\n title: radio.title\n }\"\n ></ng-template>\n </div>\n }\n } @else {\n <ng-template [ngTemplateOutlet]=\"listvalues\"></ng-template>\n }\n</fd-form-group>\n<ng-template #listvalues>\n @if (hasNoValue) {\n <div fd-form-item>\n <fdp-radio-button [name]=\"name\" value=\"None\" [state]=\"state\" [disabled]=\"disabled\" [forceRender]=\"true\">\n {{ noValueLabel }}\n </fdp-radio-button>\n </div>\n }\n @for (item of list; track item) {\n <div fd-form-item>\n <fdp-radio-button\n [name]=\"name\"\n [value]=\"lookupValue(item)\"\n [state]=\"state\"\n [disabled]=\"_getListItemDisabledValue(item)\"\n [forceRender]=\"true\"\n >\n {{ getDisplayValue(item) }}\n </fdp-radio-button>\n </div>\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { RadioGroupComponent } from './radio-group.component';\nimport { RadioButtonComponent } from './radio/radio.component';\n\n@NgModule({\n imports: [RadioGroupComponent, RadioButtonComponent],\n exports: [RadioGroupComponent, RadioButtonComponent]\n})\nexport class PlatformRadioGroupModule {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformRadioGroupModule } from '../../../radio-group/radio-group.module';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-radio',\n templateUrl: './dynamic-form-generator-radio.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, PlatformRadioGroupModule]\n})\nexport class DynamicFormGeneratorRadioComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-radio-group\n [id]=\"id\"\n [isInline]=\"formItem.guiOptions?.inline || false\"\n [inlineLayout]=\"formItem.guiOptions?.inlineLayout\"\n [name]=\"name\"\n [list]=\"choices\"\n [formControlName]=\"name\"\n ></fdp-radio-group>\n </ng-container>\n</ng-container>\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Combobox\n */\n@Injectable({ providedIn: 'root' })\nexport class SelectConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /** @hidden */\n constructor(platformConfig: PlatformConfig) {\n this.contentDensity = platformConfig.contentDensity;\n }\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<SelectConfig>): (platformConfig: PlatformConfig) => SelectConfig {\n const useFactory = (platformConfig: PlatformConfig): SelectConfig =>\n Object.assign(new SelectConfig(platformConfig), obj);\n return useFactory;\n }\n}\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ENTER } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n QueryList,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport { fromEvent, Observable, Subject, Subscription } from 'rxjs';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SingleDropdownValueControl } from '@fundamental-ngx/cdk/forms';\nimport {\n ContentDensityService,\n FocusEscapeDirection,\n KeyUtil,\n TemplateDirective,\n warnOnce\n} from '@fundamental-ngx/cdk/utils';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconFont } from '@fundamental-ngx/core/icon';\nimport { ListComponent } from '@fundamental-ngx/core/list';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { CollectionBaseInput, isJsObject, isOptionItem, isString } from '@fundamental-ngx/platform/shared';\nimport { TextAlignment } from '../../combobox';\nimport { SelectOptionItem } from '../models/select.models';\nimport { SelectConfig } from '../select.config';\n\nexport type FdpSelectData<T> = SelectOptionItem[] | Observable<T[]> | T[];\n\n/**\n * @deprecated\n * `FdpSelectionChangeEvent` will be removed in future versions in favour of plain value emission\n */\nexport class FdpSelectionChangeEvent {\n /**\n * Select selection change event\n * @param payload selected value\n */\n constructor(\n public payload: any // Contains selected item\n ) {\n warnOnce('FdpSelectionChangeEvent will be removed in future versions in favour of plain value emission');\n }\n}\n\n@Directive()\nexport abstract class BaseSelect\n extends CollectionBaseInput\n implements SingleDropdownValueControl, AfterViewInit, OnDestroy\n{\n /** Provides maximum default height for the optionPanel */\n @Input()\n maxHeight = '250px';\n\n /** Whether the select should be built on mobile mode */\n @Input()\n mobile = false;\n\n /** Tells the select if we need to group items */\n @Input()\n group = false;\n\n /** A field name to use to group data by (support dotted notation) */\n @Input()\n groupKey?: string;\n\n /** The field to show data in secondary column */\n @Input()\n secondaryKey?: string;\n\n /** Show the second column (Applicable for two columns layout) */\n @Input()\n showSecondaryText = false;\n\n /** Glyph to add icon in the select component. */\n @Input()\n glyph = 'slim-arrow-down';\n\n /** Glyph font family */\n @Input()\n glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /** The element to which the popover should be appended. */\n @Input()\n appendTo: ElementRef;\n\n /** Trigger value */\n @Input()\n triggerValue: string;\n\n /**\n * Preset options for the select body width.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control.\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * Leave blank for no effect.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /** Horizontally align text inside the second column (Applicable for two columns layout) */\n @Input()\n secondaryTextAlignment: TextAlignment = 'right';\n\n /**\n * Max width of list container\n * */\n @Input()\n declare width: string;\n\n /** Whether the select component is readonly. */\n @Input()\n readonly = false;\n\n /** Placeholder for the select. Appears in the\n * triggerbox if no option is selected. */\n @Input()\n declare placeholder: string;\n\n /** Whether close the popover on outside click. */\n @Input()\n closeOnOutsideClick = true;\n\n /** Custom template used to build control body. */\n @Input()\n controlTemplate: TemplateRef<any> | undefined;\n\n /** Select Input Mobile Configuration */\n @Input()\n mobileConfig: MobileModeConfig = { hasCloseButton: true };\n\n /**\n * String rendered as first value in the popup which let the user to make 'no selection' from\n * available list of values. When this option is active and use make this selection we save a\n * NULL value\n */\n @Input()\n noValueLabel: string;\n\n /** Whether not to wrap text */\n @Input()\n noWrapText = false;\n\n /** Turns on/off Adjustable Width feature */\n @Input()\n autoResize = false;\n\n /** First Column ratio */\n @Input()\n set firstColumnRatio(value: number) {\n this._firstColumnRatio = coerceNumberProperty(value);\n }\n\n get firstColumnRatio(): number {\n return this._firstColumnRatio;\n }\n\n /** Secoond Column ratio */\n @Input()\n set secondColumnRatio(value: number) {\n this._secondColumnRatio = coerceNumberProperty(value);\n }\n\n get secondColumnRatio(): number {\n return this._secondColumnRatio;\n }\n\n /**\n * Min width of list container\n *\n * */\n @Input()\n minWidth?: number;\n\n /**\n * Max width of list container\n * */\n @Input()\n maxWidth?: number;\n\n /**\n * Action to perform when user shifts focus from the dropdown.\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n @Input()\n tabOutStrategy: 'close' | 'closeAndSelect' = 'close';\n\n /** Data for suggestion list */\n @Input()\n set list(value: any) {\n if (value) {\n this._optionItems = this._convertToOptionItems(value);\n }\n }\n get list(): any {\n return this._optionItems;\n }\n\n /** @hidden */\n get canClose(): boolean {\n return !(this.mobile && this.mobileConfig.approveButtonText);\n }\n\n /** Event emitted when item is selected. */\n @Output()\n selectionChange = new EventEmitter<FdpSelectionChangeEvent>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n listComponent: ListComponent;\n\n /** @hidden */\n @ContentChildren(TemplateDirective)\n customTemplates: QueryList<TemplateDirective>;\n\n /** Custom Option item Template\n * * @hidden\n * */\n _optionItemTemplate: TemplateRef<any>;\n\n /**\n * Custom Secondary item Template\n * @hidden\n * */\n _secondaryItemTemplate: TemplateRef<any>;\n\n /**\n * Custom Selected option item Template\n * @hidden\n * */\n _selectedItemTemplate: TemplateRef<any>;\n\n /** @hidden */\n _contentDensityService: ContentDensityService;\n\n /**\n * List of option items\n * @hidden\n * */\n _optionItems: SelectOptionItem[];\n\n /** @hidden */\n _subscriptions = new Subscription();\n\n /** @hidden */\n protected readonly selectConfig = inject(SelectConfig);\n\n /** @hidden */\n private _searchInputElement: ElementRef;\n\n /** Whether the select is opened. */\n private _isOpen = false;\n\n /**\n * Need for opening mobile version\n *\n * @hidden\n */\n private _openChange = new Subject<boolean>();\n\n /** @hidden */\n private _dsSubscription?: Subscription;\n\n /** @hidden */\n private _element: HTMLElement = this.elementRef.nativeElement;\n\n /** @hidden */\n private _firstColumnRatio: number;\n\n /** @hidden */\n private _secondColumnRatio: number;\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._initWindowResize();\n this._assignCustomTemplates();\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n\n this._subscriptions.unsubscribe();\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n }\n }\n\n /** Is empty search field */\n get isEmptyValue(): boolean {\n return this.value.trim().length === 0;\n }\n\n /** @hidden\n * Close list * */\n close(event: MouseEvent | null = null, forceClose: boolean = false): void {\n if (event) {\n const target = event.target as HTMLInputElement;\n if (target && target.id === this.id) {\n return;\n }\n }\n\n if (this._isOpen && (forceClose || this.canClose)) {\n this._isOpen = false;\n this._openChange.next(this._isOpen);\n this.markForCheck();\n this.onTouched();\n }\n }\n\n /** @hidden */\n showList(isOpen: boolean): void {\n if (this._isOpen !== isOpen) {\n this._isOpen = isOpen;\n this.onTouched();\n this._openChange.next(isOpen);\n }\n\n this.detectChanges();\n }\n\n /** @hidden */\n handlePressEnter(event: KeyboardEvent, value: SelectOptionItem): void {\n if (!KeyUtil.isKeyCode(event, ENTER)) {\n return;\n }\n\n this.setValue(value);\n }\n\n /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this._searchInputElement.nativeElement.focus();\n }\n }\n\n /** @hidden */\n protected setValue(newValue: any, emitOnChange = true): void {\n if (newValue !== this._value) {\n this.writeValue(newValue);\n if (emitOnChange) {\n this.onChange(this.value);\n this.onTouched();\n this.selectionChange.emit({ payload: this.value });\n }\n this.markForCheck();\n }\n }\n\n /** @hidden */\n private _initWindowResize(): void {\n this._getOptionsListWidth();\n\n if (!this.autoResize) {\n return;\n }\n\n fromEvent(window, 'resize')\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => this._getOptionsListWidth());\n }\n\n /** @hidden */\n private _getOptionsListWidth(): void {\n const body = document.body;\n const rect = this._element.getBoundingClientRect();\n const scrollBarWidth = body.offsetWidth - body.clientWidth;\n this.maxWidth = window.innerWidth - scrollBarWidth - rect.left;\n this.minWidth = rect.width - 2;\n }\n\n /**\n * Convert original data to OptionItems Interface\n * @hidden\n */\n private _convertToOptionItems(items: any[]): SelectOptionItem[] {\n const item = items[0];\n\n const elementTypeIsOptionItem = isOptionItem(item);\n if (elementTypeIsOptionItem) {\n return items as SelectOptionItem[];\n }\n\n const elementTypeIsObject = isJsObject(item);\n if (elementTypeIsObject) {\n return this._convertObjectsToOptionItems(items);\n }\n\n const elementTypeIsString = isString(item);\n if (elementTypeIsString) {\n return this._convertPrimitiveToOptionItems(items);\n }\n\n return [];\n }\n\n /**\n * Convert data to OptionItems Interface\n * @hidden\n */\n private _convertObjectsToOptionItems(items: any[]): SelectOptionItem[] {\n if (this.showSecondaryText && this.secondaryKey) {\n return this._convertObjectsToSecondaryOptionItems(items);\n } else {\n return this._convertObjectsToDefaultOptionItems(items);\n }\n }\n\n /**\n * Convert object[] data to Secondary OptionItems Interface\n * @hidden\n */\n private _convertObjectsToSecondaryOptionItems<K>(items: K[]): SelectOptionItem[] {\n const selectItems: SelectOptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n secondaryText: this.objectGet(value, this.secondaryKey),\n value: this.lookupValue(value)\n });\n }\n\n return selectItems;\n }\n\n /**\n * Convert Primitive data(Boolean, String, Number) to OptionItems Interface\n * @hidden\n */\n private _convertPrimitiveToOptionItems(items: string[]): SelectOptionItem[] {\n const selectItems: SelectOptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({ label: value, value });\n }\n\n return selectItems;\n }\n\n /**\n * Convert object[] to OptionItems Interface (Default)\n * @hidden\n */\n private _convertObjectsToDefaultOptionItems(items: any[]): SelectOptionItem[] {\n const selectItems: SelectOptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n value\n });\n }\n\n return selectItems;\n }\n\n /** @hidden\n * Assign custom templates\n * */\n private _assignCustomTemplates(): void {\n this.customTemplates.forEach((template) => {\n switch (template.name) {\n case '_optionItemTemplate':\n this._optionItemTemplate = template.templateRef;\n break;\n case '_secondaryItemTemplate':\n this._secondaryItemTemplate = template.templateRef;\n break;\n case '_selectedItemTemplate':\n this._selectedItemTemplate = template.templateRef;\n break;\n }\n });\n }\n}\n","import {\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Input,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { DynamicComponentService } from '@fundamental-ngx/cdk/utils';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { ListSecondaryDirective } from '@fundamental-ngx/core/list';\nimport { SelectComponent as CoreSelect, SelectModule } from '@fundamental-ngx/core/select';\nimport { BaseSelect } from '../commons/base-select';\n\n@Component({\n selector: 'fdp-select',\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [DynamicComponentService, { provide: FD_FORM_FIELD_CONTROL, useExisting: SelectComponent, multi: true }],\n imports: [SelectModule, FormsModule, IconComponent, NgTemplateOutlet, NgClass, ListSecondaryDirective]\n})\nexport class SelectComponent extends BaseSelect implements AfterViewInit, AfterViewChecked {\n /**\n * Directly sets value to the component that at the ends up at writeValue as well fires\n * change detections\n */\n @Input()\n set value(newValue: any) {\n this.setValue(newValue);\n }\n get value(): any {\n return this._value;\n }\n\n /** Should select be inlined. */\n @Input()\n inline = true;\n\n /** @hidden */\n @ViewChild(CoreSelect, { static: true })\n select: CoreSelect;\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n\n // set columns ratio for 2\n if (this.firstColumnRatio && this.secondColumnRatio) {\n this._setColumnsRatio(this.firstColumnRatio, this.secondColumnRatio);\n }\n\n // set width to avoid resize\n if (this.width) {\n const controlItem = this.elementRef.nativeElement.querySelector('.fd-select__text-content') as HTMLElement;\n controlItem.style.width = this.width;\n }\n\n // setting option items\n this.select._options.forEach((option) => {\n const optionItem = option._getHtmlElement();\n\n // set maxWidth default is 40rem\n if (this.maxWidth) {\n optionItem.setAttribute('style', 'max-width: ' + this.maxWidth + 'px');\n }\n // by default text will be overlapped, below it will help to truncate\n if (this.noWrapText) {\n const listTitle = optionItem.querySelector('.fd-list__title');\n if (listTitle) {\n const listTitleInnerHTML = listTitle.innerHTML;\n listTitle.setAttribute('title', listTitleInnerHTML);\n listTitle.setAttribute('aria-label', listTitleInnerHTML);\n listTitle.classList.add('fd-list__title--no-wrap');\n }\n }\n });\n }\n\n /** @hidden */\n ngAfterViewChecked(): void {\n this.detectChanges();\n }\n\n /**\n * Define is selected item selected\n * @hidden\n */\n _isSelectedOptionItem(selectedItem: any): boolean {\n return this.value === this.lookupValue(selectedItem);\n }\n\n /** @hidden */\n _onSelection(value: any): void {\n this.setValue(value);\n }\n\n /** @hidden */\n _onOpenChange(isOpen: boolean): void {\n if (isOpen) {\n this.formMessage?._popover?.close();\n }\n this.formMessage?._popover?.setIgnoreTriggers(isOpen);\n }\n\n /** @hidden */\n private _setColumnsRatio(firstColumnRatio: number, secondColumnRatio: number): void {\n const totalProportions = firstColumnRatio + secondColumnRatio;\n const firstColumnProportion = Math.round((firstColumnRatio / totalProportions) * 100);\n const secondColumnProportion = 100 - firstColumnProportion;\n\n // setting option items\n this.select._options.forEach((option) => {\n const optionItem = option._getHtmlElement();\n const titleElement = <HTMLElement>optionItem.querySelector('[fd-list-title]');\n this._setOptionAttribute(titleElement, firstColumnProportion);\n\n const secondaryElement = <HTMLElement>optionItem.querySelector('[fd-list-secondary]');\n this._setOptionAttribute(secondaryElement, secondColumnProportion);\n });\n }\n\n /** @hidden */\n private _setOptionAttribute(element: HTMLElement, proportion: number): void {\n element.setAttribute('style', 'width: ' + proportion + '%; max-width: ' + proportion + '%');\n }\n}\n","<fd-select\n [placeholder]=\"placeholder\"\n [glyph]=\"glyph\"\n [glyphFont]=\"glyphFont\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [controlTemplate]=\"controlTemplate\"\n [appendTo]=\"appendTo\"\n [fillControlMode]=\"fillControlMode\"\n [maxHeight]=\"maxHeight\"\n [attr.aria-disabled]=\"disabled || readonly\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.tooltip]=\"value\"\n [attr.aria-readonly]=\"readonly\"\n [attr.role]=\"'listbox'\"\n [value]=\"value\"\n [state]=\"state\"\n [stateMessage]=\"stateMessage\"\n [advancedStateMessage]=\"advancedStateMessage\"\n [mobile]=\"mobile\"\n [mobileConfig]=\"mobileConfig\"\n [inline]=\"inline\"\n [(ngModel)]=\"value\"\n [tabOutStrategy]=\"tabOutStrategy\"\n (valueChange)=\"_onSelection($event)\"\n (isOpenChange)=\"_onOpenChange($event)\"\n>\n <ng-content></ng-content>\n @if (noValueLabel) {\n <li fd-option [disabled]=\"false\" [value]=\"null\">\n {{ noValueLabel }}\n </li>\n }\n @for (item of _optionItems; track item; let index = $index) {\n <li\n fd-option\n [disabled]=\"!!item.disabled\"\n [value]=\"item.value\"\n [attr.aria-labelledby]=\"ariaLabel\"\n [attr.aria-disabled]=\"disabled\"\n >\n @if (item.icon) {\n <fd-icon [glyph]=\"item.icon\" class=\"fd-template-icon icon-margin\"></fd-icon>\n }\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: item, index: index }\"\n ></ng-template>\n <ng-template\n secondary\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: item }\"\n ></ng-template>\n </li>\n }\n</fd-select>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (_isSelectedOptionItem(optionItem) && !!_selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"_selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(_isSelectedOptionItem(optionItem) && _selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!_optionItemTemplate) {\n <span [innerHTML]=\"optionItem.label\"></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"_optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText) {\n @if (!_secondaryItemTemplate) {\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [innerHTML]=\"optionItem.secondaryText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"_secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SelectComponent } from '../../../select/select/select.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { SelectDynamicFormFieldItem } from '../../interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-select',\n templateUrl: './dynamic-form-generator-select.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, SelectComponent]\n})\nexport class DynamicFormGeneratorSelectComponent extends BaseDynamicFormGeneratorControl<SelectDynamicFormFieldItem> {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-select\n [width]=\"formItem.guiOptions?.additionalData?.width\"\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [inline]=\"formItem.guiOptions?.inline !== false\"\n [name]=\"name\"\n [list]=\"formItem.choices\"\n [formControlName]=\"name\"\n [secondaryKey]=\"formItem.secondaryKey\"\n [showSecondaryText]=\"formItem.showSecondaryText ? formItem.showSecondaryText : false\"\n [secondaryTextAlignment]=\"formItem.secondaryTextAlignment ? formItem.secondaryTextAlignment : 'right'\"\n [controlTemplate]=\"formItem.controlTemplate\"\n ></fdp-select>\n </ng-container>\n</ng-container>\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\n\n/**\n * Default options for platform Switch\n */\n@Injectable({ providedIn: 'root' })\nexport class SwitchConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<SwitchConfig>): () => SwitchConfig {\n const useFactory = (): SwitchConfig => Object.assign(new SwitchConfig(), obj);\n return useFactory;\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { SwitchComponent as CoreSwitchComponent } from '@fundamental-ngx/core/switch';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { SwitchConfig } from './switch.config';\n\n/** Switch change event instance */\nexport class SwitchChangeEvent {\n /** The source Switch of the event. */\n source: SwitchComponent;\n /** The new `payload` value of the switch. */\n payload: boolean;\n}\n\n@Component({\n selector: 'fdp-switch',\n templateUrl: './switch.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: SwitchComponent, multi: true }],\n imports: [CoreSwitchComponent, FdTranslatePipe]\n})\nexport class SwitchComponent extends BaseInput {\n /** Whether the switch is semantic */\n @Input()\n semantic = false;\n\n /**\n * Event fired when the state of the switch changes.\n * *$event* can be used to retrieve the new state of the switch.\n */\n @Output()\n readonly switchChange: EventEmitter<SwitchChangeEvent> = new EventEmitter<SwitchChangeEvent>();\n\n /** value for switch control */\n set value(selectValue: any) {\n this.setValue(selectValue);\n }\n get value(): any {\n return this.getValue();\n }\n\n /** @hidden\n * tracking switch current value\n */\n switchCurrentValue = false;\n\n /** @hidden */\n constructor(protected _switchConfig: SwitchConfig) {\n super();\n }\n\n /** update controller on switch state change */\n onValueChange(modelValue: boolean): void {\n this._updateModel(modelValue);\n this.onTouched();\n this.stateChanges.next('switch: onValueChange');\n }\n\n /** write value for ControlValueAccessor */\n writeValue(value: any): void {\n this.switchCurrentValue = value;\n super.writeValue(value);\n }\n\n /** @hidden\n * update model\n */\n private _updateModel(modelValue: boolean): void {\n this._emitChangeEvent(modelValue);\n }\n\n /** @hidden\n * Method to emit change event\n */\n private _emitChangeEvent(modelValue: boolean): void {\n const event = new SwitchChangeEvent();\n event.source = this;\n event.payload = modelValue;\n\n // setting value, it will call setValue()\n this.value = modelValue;\n this.switchChange.emit(event);\n }\n}\n","<fd-switch\n [id]=\"id\"\n [required]=\"required\"\n [name]=\"name\"\n [disabled]=\"disabled\"\n [semantic]=\"semantic\"\n [ariaLabel]=\"ariaLabel || ('platformSwitch.ariaLabel' | fdTranslate)\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [checked]=\"switchCurrentValue\"\n (checkedChange)=\"onValueChange($event)\"\n></fd-switch>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SwitchComponent } from '../../../switch/switch';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n selector: 'fdp-dynamic-form-generator-switch',\n templateUrl: './dynamic-form-generator-switch.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n imports: [FormsModule, ReactiveFormsModule, SwitchComponent]\n})\nexport class DynamicFormGeneratorSwitchComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-switch\n [id]=\"id\"\n [name]=\"name\"\n [semantic]=\"formItem.guiOptions?.additionalData?.semantic\"\n [formControlName]=\"name\"\n ></fdp-switch>\n </ng-container>\n</ng-container>\n","import { DynamicFormGeneratorCheckboxComponent } from '../controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component';\nimport { DynamicFormGeneratorDatepickerComponent } from '../controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component';\nimport { DynamicFormGeneratorEditorComponent } from '../controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component';\nimport { DynamicFormGeneratorInputComponent } from '../controls/dynamic-form-generator-input/dynamic-form-generator-input.component';\nimport { DynamicFormGeneratorMultiInputComponent } from '../controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component';\nimport { DynamicFormGeneratorObjectStatusComponent } from '../controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component';\nimport { DynamicFormGeneratorRadioComponent } from '../controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component';\nimport { DynamicFormGeneratorSelectComponent } from '../controls/dynamic-form-generator-select/dynamic-form-generator-select.component';\nimport { DynamicFormGeneratorSwitchComponent } from '../controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component';\nimport { FormComponentDefinition } from '../interfaces/form-component-definition';\n\nexport const DEFAULT_COMPONENTS_LIST: FormComponentDefinition[] = [\n {\n types: ['input', 'email', 'number', 'password'],\n component: DynamicFormGeneratorInputComponent\n },\n {\n types: ['checkbox'],\n component: DynamicFormGeneratorCheckboxComponent\n },\n {\n types: ['radio', 'confirm'],\n component: DynamicFormGeneratorRadioComponent\n },\n {\n types: ['editor', 'textarea'],\n component: DynamicFormGeneratorEditorComponent\n },\n {\n types: ['select', 'list'],\n component: DynamicFormGeneratorSelectComponent\n },\n {\n types: ['datepicker'],\n component: DynamicFormGeneratorDatepickerComponent\n },\n {\n types: ['switch'],\n component: DynamicFormGeneratorSwitchComponent\n },\n {\n types: ['multi-input'],\n component: DynamicFormGeneratorMultiInputComponent\n },\n {\n types: ['object-status'],\n component: DynamicFormGeneratorObjectStatusComponent\n }\n];\n","import { Injectable, Type } from '@angular/core';\nimport { BaseDynamicFormGeneratorControl } from './base-dynamic-form-generator-control';\nimport { DEFAULT_COMPONENTS_LIST } from './config/default-components-list';\nimport { FormComponentDefinition } from './interfaces/form-component-definition';\n\n/**\n * Since form generator service most probably will be provided by parent component,\n * so that forms map does not interfere with other form generators,\n * Components Accessor is a separate service with a global scope, which can be also provided per component.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class FormGeneratorComponentsAccessorService {\n /**\n * @hidden\n */\n private _formComponentDefinitions: FormComponentDefinition[] = DEFAULT_COMPONENTS_LIST;\n\n /**\n * @description Adds custom component to the list of available components for the form generator items.\n * @param component Angular component.\n * @param types types of the form item.\n */\n addComponent(component: Type<BaseDynamicFormGeneratorControl>, types: string[]): boolean {\n const bestMatchComponentIndex = this._formComponentDefinitions.findIndex((c) =>\n c.types?.every((t) => types.includes(t))\n );\n\n if (bestMatchComponentIndex > -1) {\n this._formComponentDefinitions[bestMatchComponentIndex].component = component;\n return true;\n }\n\n // Try to find component in types key. There might be some unique cases when new component might replace multiple.\n const existingComponents = this._formComponentDefinitions.filter((c) =>\n c.types?.filter((t) => types.includes(t))\n );\n\n existingComponents.forEach((existingComponent, index) => {\n existingComponent.types = existingComponent.types?.filter((t) => !types.includes(t));\n this._formComponentDefinitions[index] = existingComponent;\n });\n\n this._formComponentDefinitions.push({\n types,\n component\n });\n\n return true;\n }\n\n /**\n * @description Returns best-matched component based on provided `type` argument\n * @param type form item type\n * @returns @see FormComponentDefinition Component definition for the form item\n */\n getComponentDefinitionByType(type: string): FormComponentDefinition | undefined {\n return this._formComponentDefinitions.find((c) => c.types?.includes(type));\n }\n}\n","import { HintOptions } from '@fundamental-ngx/platform/shared';\nimport {\n DynamicFormFieldGroup,\n DynamicFormFieldGroupMap,\n DynamicFormFieldItem,\n DynamicFormItem,\n DynamicFormItemMap\n} from './interfaces/dynamic-form-item';\n\n/** @hidden */\nexport function isHintOptions(opts: string | HintOptions): opts is HintOptions {\n return !!opts && typeof opts !== 'string';\n}\n\n/** @hidden */\nexport function mapFormItems(formItems?: DynamicFormItem[]): Map<string, DynamicFormItemMap> {\n const mappedItems: Map<string, DynamicFormItemMap> = new Map();\n\n if (!formItems) {\n return mappedItems;\n }\n\n formItems.forEach((item, index) => {\n const mappedItem = transformFormItem(item, index);\n\n mappedItems.set(mappedItem.name, mappedItem);\n });\n\n return mappedItems;\n}\n\n/** @hidden */\nexport function transformFormItem(\n item: DynamicFormItem,\n index: number\n): DynamicFormFieldGroupMap | DynamicFormFieldItem {\n if (isFormGroupItem(item)) {\n const mappedItem = Object.assign({}, item, { items: mapFormItems(item.items) });\n mappedItem.rank = mappedItem.rank || index;\n return mappedItem;\n } else {\n item.rank = item.rank || index;\n }\n return item;\n}\n\n/**\n * Is current form item is a field item.\n * @param item form item.\n * @returns is current form item is a field.\n */\nexport function isFormFieldItem(item: any): item is DynamicFormFieldItem {\n return !!(item as DynamicFormFieldItem).type;\n}\n\n/**\n * Is current form item is a group item.\n * @param item form item.\n * @returns is current form item is a group.\n */\n/** @hidden */\nexport function isFormGroupItem(item: any): item is DynamicFormFieldGroup {\n return !!(item as DynamicFormFieldGroup).items;\n}\n\n/** @hidden */\nexport function getParentItem(path: string[], rootItems: Map<string, DynamicFormItemMap>): DynamicFormItemMap | null {\n return path.reduce((acc: DynamicFormItemMap | null, chunk) => {\n const parent = acc === null ? rootItems : acc.items;\n return parent.get(chunk) || null;\n }, null);\n}\n","import { DestroyRef, Inject, Injectable, Optional, SkipSelf, Type, inject } from '@angular/core';\nimport { AsyncValidatorFn, FormBuilder, Validators } from '@angular/forms';\nimport { isFunction, selectStrategy } from '@fundamental-ngx/cdk/utils';\nimport { cloneDeep, merge } from 'lodash-es';\n\nimport { debounceTime } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SelectItem } from '@fundamental-ngx/platform/shared';\nimport { BaseDynamicFormGeneratorControl } from './base-dynamic-form-generator-control';\nimport { DEFAULT_VALIDATION_ERRORS } from './config/default-validation-errors';\nimport { DynamicFormControl, DynamicFormControlGroup, DynamicFormGroupControl } from './dynamic-form-control';\nimport { FormGeneratorComponentsAccessorService } from './form-generator-components-accessor.service';\nimport { isFormFieldItem } from './helpers';\nimport { DynamicFormGroup } from './interfaces/dynamic-form-group';\nimport {\n DynamicFormFieldItem,\n DynamicFormItem,\n DynamicFormItemChoiceTypes,\n DynamicFormItemMap,\n DynamicFormValue,\n PreparedDynamicFormFieldItem\n} from './interfaces/dynamic-form-item';\nimport { FormComponentDefinition } from './interfaces/form-component-definition';\nimport { FormGeneratorConfig } from './interfaces/form-generator-module-config';\nimport { FORM_GENERATOR_CONFIG, FORM_GENERATOR_ITEM_CONFIG, defaultFormGeneratorConfig } from './providers/providers';\n\n/**\n * @description Form generator service\n */\n@Injectable()\nexport class FormGeneratorService {\n /**\n * Map of generated forms to access later.\n */\n readonly forms: Map<string, DynamicFormGroup> = new Map<string, DynamicFormGroup>();\n\n /**\n * Predefined validation error messages.\n */\n validationErrorHints = DEFAULT_VALIDATION_ERRORS;\n\n /** @hidden */\n private readonly _config: FormGeneratorConfig = defaultFormGeneratorConfig;\n\n /**\n * @hidden\n * An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing)\n */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(\n private _fb: FormBuilder,\n private _componentsAccessor: FormGeneratorComponentsAccessorService,\n @Optional()\n @SkipSelf()\n @Inject(FORM_GENERATOR_ITEM_CONFIG)\n private _defaultItemConfig: Partial<DynamicFormFieldItem>,\n @Optional()\n @SkipSelf()\n @Inject(FORM_GENERATOR_CONFIG)\n private _providedConfig: Partial<FormGeneratorConfig>\n ) {\n this._config = merge(cloneDeep(this._config), cloneDeep(this._providedConfig));\n }\n\n /**\n * @description Generates `FormGroup` class with the list of `DynamicFormControl` control classes\n * defined in `formItems` argument.\n * @param formName Form name.\n * @param formItems the list of form items which used for form control generation.\n * @returns `FormGroup` class with the list of `DynamicFormControl` control classes.\n */\n async generateForm(formName: string, formItems: Map<string, DynamicFormItemMap>): Promise<DynamicFormGroup> {\n const existingForm = this.forms.get(formName);\n const form = this._fb.group({}) as DynamicFormGroup;\n\n const defaultFormGroup = new DynamicFormControlGroup(\n {\n name: this._config.ungroupedControlsName\n },\n {}\n );\n\n defaultFormGroup.formItem.items = new Map();\n\n formItems = this._transformFormItems(formItems);\n\n formItems.forEach((formItem) => {\n if (!isFormFieldItem(formItem)) {\n if (!formItem.items || formItem.items.size === 0) {\n return;\n }\n\n const group = new DynamicFormControlGroup(formItem, {});\n\n formItem.items.forEach((groupFormItem) => {\n const groupFormControl = this._generateDynamicFormItem(\n groupFormItem as PreparedDynamicFormFieldItem,\n form\n );\n\n if (!groupFormControl) {\n return;\n }\n\n group.addControl(groupFormItem.name, groupFormControl);\n\n groupFormControl.updateValueAndValidity({ emitEvent: false });\n });\n\n form.addControl(formItem.name, group);\n return;\n }\n\n const formControl = this._generateDynamicFormItem(formItem as PreparedDynamicFormFieldItem, form);\n\n if (!formControl) {\n return;\n }\n\n defaultFormGroup.addControl(formItem.name, formControl);\n\n defaultFormGroup.formItem.items?.set(formItem.name, formItem);\n\n formControl.updateValueAndValidity({ emitEvent: false });\n });\n\n const formControlNames = Object.keys(defaultFormGroup.controls);\n\n form.addControl(this._config.ungroupedControlsName, defaultFormGroup);\n\n // After we created initial form, we need to get dynamic labels, choices and value\n for (const key of formControlNames) {\n const formItem = formItems.get(key);\n\n if (!isFormFieldItem(formItem)) {\n continue;\n }\n\n const [[message, placeholder, defaultValue], choices] = await Promise.all([\n this._getFormItemProperties<[string, string, any]>(formItem, defaultFormGroup, [\n 'message',\n 'placeholder',\n 'default'\n ]),\n this._getFormItemChoices(formItem, defaultFormGroup)\n ]);\n\n formItem.message = message;\n formItem.placeholder = placeholder;\n formItem.default = defaultValue;\n formItem.choices = choices;\n\n // Update form value since it might be changed\n defaultFormGroup.controls[formItem.name].setValue(formItem.default);\n\n defaultFormGroup.controls[key].formItem = formItem as PreparedDynamicFormFieldItem;\n }\n\n Object.keys(form.controls).forEach((controlName) => {\n const newControl = form.get(controlName) as DynamicFormControlGroup;\n const oldControl = existingForm?.get(controlName) as DynamicFormControlGroup;\n this._cloneOldFormGroup(newControl, oldControl);\n });\n\n this.forms.set(formName, form);\n\n return form;\n }\n\n /**\n * Adds new control to a form.\n * @param control Control to add\n * @param form Form of the control to be added.\n * @param path Group path.\n */\n async addControl(control: DynamicFormItem, form: DynamicFormGroup, path: string[] = []): Promise<void> {\n const formGroup = this.getFormControl(form, ...path);\n\n if (formGroup instanceof DynamicFormControlGroup) {\n const formControl = this._generateDynamicFormItem(control as PreparedDynamicFormFieldItem, form);\n formGroup.addControl(control.name, formControl);\n return;\n }\n }\n\n /**\n * Removes the control with given name from the form.\n * @param controlName\n * @param path\n */\n removeControl(controlName: string, form: DynamicFormGroup, path: string[] = []): void {\n const formGroup = this.getFormControl(form, ...path);\n\n if (formGroup instanceof DynamicFormControlGroup) {\n formGroup.removeControl(controlName);\n }\n }\n\n /**\n * @description Returns form value with applied filters and transformers.\n * @param form Form generator form\n * @param renderValue Whether or not form value will be used for rendering purposes.\n * @returns form value object.\n */\n async getFormValue(\n form: DynamicFormGroup | DynamicFormControlGroup,\n renderValue = false\n ): Promise<DynamicFormValue> {\n await this._triggerFieldsOnchange(form);\n\n const formValue = cloneDeep(form.value);\n\n for (const [i, control] of Object.entries(form.controls)) {\n const formItem = control.formItem;\n\n if (!isFormFieldItem(formItem)) {\n formValue[i] = await this.getFormValue(control as DynamicFormControlGroup, renderValue);\n continue;\n }\n\n if (formItem.shouldShow === false) {\n delete formValue[i];\n continue;\n }\n\n if (formItem.transformer) {\n const obj = formItem.transformer(formValue[i], formValue, formItem);\n formValue[i] = await this._getFunctionValue(obj);\n }\n\n if (renderValue && formItem.valueRenderer) {\n const obj = formItem.valueRenderer(formValue[i], formValue, formItem);\n formValue[i] = await this._getFunctionValue(obj);\n }\n\n if (renderValue && formItem['controlType'] === 'password') {\n formValue[i] = this._formatPasswordValue(formValue[i]);\n }\n }\n\n return this._getFormValueWithoutUngrouped(formValue);\n }\n\n /**\n * @description Adds custom component to the list of available components for the form generator items.\n * @param component Angular component.\n * @param types types of the form item.\n */\n addComponent(component: Type<BaseDynamicFormGeneratorControl>, types: string[]): boolean {\n return this._componentsAccessor.addComponent(component, types);\n }\n\n /**\n * @description Returns best-matched component based on provided `type` argument\n * @param type form item type\n * @returns @see FormComponentDefinition Component definition for the form item\n */\n getComponentDefinitionByType(type: string): FormComponentDefinition | undefined {\n return this._componentsAccessor.getComponentDefinitionByType(type);\n }\n\n /**\n * @returns Object of available errors, where key is an error type,\n * and it's value is a display text.\n */\n getValidationErrorHints(key: string): string {\n return this.validationErrorHints[key];\n }\n\n /**\n * @description Adds custom error hint defined by user.\n * @param type error type from validator.\n * @param value display text.\n */\n addValidationErrorHint(type: string, value: string): void {\n this.validationErrorHints[type] = value;\n }\n\n /**\n * @description Checks if some items of the form should be hidden,\n * or visible based on `when` method result.\n * @param form\n * @returns `Set` where key is item name, and boolean value if field needs to be shown.\n */\n async checkVisibleFormItems(form: DynamicFormGroup): Promise<{ [key: string]: boolean }> {\n const formValue = this._getFormValueWithoutUngrouped(cloneDeep(form.value));\n return await this._checkFormControlsVisibility(form, formValue);\n }\n\n /**\n * Method for searching a form control inside form group. Can also search inside ungrouped form group.\n * @param form Form group.\n * @param controlNames Name of the form control.\n * @returns Found form control.\n */\n getFormControl(form: DynamicFormGroup, ...controlNames: string[]): DynamicFormGroupControl {\n controlNames = controlNames.reduce((names: string[], name) => {\n names = [...names, ...name.split(this._config.controlNameSeparator)];\n\n return names;\n }, []);\n\n let control = form?.get(controlNames);\n\n // If no control found, try to find it in ungrouped group\n if (!control) {\n control = form?.get([this._config.ungroupedControlsName, ...controlNames]);\n }\n\n return control as DynamicFormGroupControl;\n }\n\n /** Resets the form to it's initial state. */\n resetForm(form: DynamicFormGroup): void {\n for (const control of Object.values(form.controls)) {\n if (control instanceof DynamicFormControlGroup) {\n this.resetForm(control);\n return;\n }\n // Get default value\n control.setValue(control.formItem.default);\n }\n }\n\n /** @hidden */\n _getFormValueWithoutUngrouped(value: any): any {\n if (value[this._config.ungroupedControlsName]) {\n const ungroupedGroupValue: Record<string, any> = value[this._config.ungroupedControlsName];\n for (const [fieldName, fieldValue] of Object.entries(ungroupedGroupValue)) {\n value[fieldName] = fieldValue;\n }\n }\n delete value[this._config.ungroupedControlsName];\n\n return value;\n }\n\n /** @hidden */\n private _assignFormItemValidators(\n formItem: PreparedDynamicFormFieldItem,\n form: DynamicFormGroup\n ): PreparedDynamicFormFieldItem {\n let validator: AsyncValidatorFn | null = null;\n\n if (isFunction(formItem.validate)) {\n validator = async (control) => {\n const obj = formItem.validate!(control.value, this._getFormValueWithoutUngrouped(form));\n\n const result = await this._getFunctionValue(obj);\n\n const returnObj = {};\n\n returnObj[`${(<DynamicFormControl>control).formItem.name}Validator`] =\n typeof result === 'boolean' ? true : result;\n\n return result === null ? result : returnObj;\n };\n\n formItem.asyncValidators = formItem.asyncValidators || [];\n formItem.asyncValidators =\n typeof formItem.asyncValidators === 'function' ? [formItem.asyncValidators] : formItem.asyncValidators;\n\n formItem.asyncValidators.push(validator);\n }\n\n formItem.validators = formItem.validators || [Validators.nullValidator];\n\n formItem.required = formItem.required || formItem.validators.includes(Validators.required);\n\n return formItem;\n }\n\n /** @hidden */\n private _generateDynamicFormItem(\n formItem: PreparedDynamicFormFieldItem,\n form: DynamicFormGroup\n ): DynamicFormControl | undefined {\n const formItemComponentType = this.getComponentDefinitionByType(formItem.type);\n\n if (!formItemComponentType) {\n console.warn(`Form item '${formItem.name}' with type '${formItem.type}' has no defined component.\n Please use 'addComponent' method in ${FormGeneratorService.name} to define appropriate relations.`);\n\n return;\n }\n\n formItem = this._assignFormItemValidators(formItem, form);\n\n const formControl = new DynamicFormControl(formItem.default, {\n validators: formItem.validators,\n asyncValidators: formItem.asyncValidators,\n dynamicFormItem: formItem,\n updateOn: 'change'\n });\n\n if (isFunction(formItem.onchange)) {\n formControl.valueChanges\n .pipe(debounceTime(50), takeUntilDestroyed(this._destroyRef))\n .subscribe(async (value) => {\n const obj = formItem.onchange!(value, this.forms, formControl);\n\n await this._getFunctionValue(obj);\n });\n }\n\n formControl.updateValueAndValidity({ emitEvent: false });\n\n return formControl;\n }\n\n /** @hidden */\n private async _checkFormControlsVisibility(\n form: DynamicFormGroup | DynamicFormControlGroup,\n formValue: any\n ): Promise<{ [key: string]: boolean }> {\n let shouldShowFields: { [key: string]: boolean } = {};\n form = form instanceof DynamicFormControlGroup ? form : form;\n\n for (const [key, control] of Object.entries(form.controls)) {\n const formItem = control.formItem;\n\n if (!isFormFieldItem(formItem)) {\n const groupVisibleItems = await this._checkFormControlsVisibility(\n control as DynamicFormControlGroup,\n formValue\n );\n\n shouldShowFields = Object.assign(shouldShowFields, groupVisibleItems);\n continue;\n }\n\n if (!formItem.when) {\n shouldShowFields[key] = true;\n continue;\n }\n\n const obj = formItem.when(formValue, this.forms, control);\n shouldShowFields[key] = await this._getFunctionValue(obj);\n }\n\n return shouldShowFields;\n }\n\n /**\n * @hidden\n * @param formItem\n * @param form\n * @param key\n * @returns\n */\n private async _getFormItemPropertyValue<T = string>(\n formItem: DynamicFormFieldItem,\n form: DynamicFormGroup,\n key: keyof DynamicFormFieldItem\n ): Promise<T> {\n let value = formItem[key];\n\n if (typeof value === 'function') {\n const obj = value(this._getFormValueWithoutUngrouped(form));\n\n value = await this._getFunctionValue(obj);\n }\n\n return (await this._getFunctionValue(value)) as T;\n }\n\n /** @hidden */\n private async _getFormItemProperties<TTypes extends any[] = any[]>(\n formItem: DynamicFormFieldItem,\n form: DynamicFormGroup,\n keys: string[]\n ): Promise<TTypes> {\n const promises: Promise<any>[] = [];\n keys.forEach((key) => {\n promises.push(this._getFormItemPropertyValue(formItem, form, key));\n });\n return (await Promise.all(promises)) as TTypes;\n }\n\n /**\n * @hidden\n * @param formItem\n * @param form\n * @returns\n */\n private async _getFormItemChoices(formItem: DynamicFormFieldItem, form: DynamicFormGroup): Promise<SelectItem[]> {\n const defaultChoices = await this._getFormItemPropertyValue<DynamicFormItemChoiceTypes[]>(\n formItem,\n form,\n 'choices'\n );\n\n if (!defaultChoices) {\n return [];\n }\n\n return defaultChoices.map((c: string | number | SelectItem) =>\n typeof c === 'object' ? c : ({ label: c, value: c } as SelectItem)\n ) as SelectItem[];\n }\n\n /**\n * @hidden\n * @description Returns value from Promise-like, Observable-like, simple function or just some object.\n * @param obj\n * @returns\n */\n private async _getFunctionValue(obj: any): Promise<any> {\n const strategy = selectStrategy(obj);\n\n let result: any;\n\n await strategy.createSubscription(obj, (value: any) => {\n result = value;\n });\n\n if (isFunction(result)) {\n await this._getFunctionValue(result);\n }\n\n return result;\n }\n\n /** @hidden */\n private _formatPasswordValue(password: string): string {\n return '*'.repeat(password?.length);\n }\n\n /** @hidden */\n private _getMergedFormFieldItemConfig(formItem: DynamicFormItemMap): DynamicFormItemMap {\n return merge(cloneDeep(this._defaultItemConfig), formItem);\n }\n\n /** @hidden */\n private _transformFormItems(formItems: Map<string, DynamicFormItemMap>): Map<string, DynamicFormItemMap> {\n formItems.forEach((item, index) => {\n if (!isFormFieldItem(item)) {\n return;\n }\n\n formItems.set(index, this._getMergedFormFieldItemConfig(item));\n });\n\n return formItems;\n }\n\n /** @hidden */\n private async _triggerFieldsOnchange(form: DynamicFormGroup | DynamicFormControlGroup): Promise<void> {\n for (const control of Object.values(form.controls)) {\n const formItem = control.formItem;\n\n if (!isFormFieldItem(formItem)) {\n await this._triggerFieldsOnchange(control as DynamicFormControlGroup);\n continue;\n }\n\n if (formItem.onchange) {\n const obj = formItem.onchange(control.value as any, this.forms, control as DynamicFormControl);\n await this._getFunctionValue(obj);\n }\n }\n }\n\n /** @hidden */\n private _cloneOldFormGroup(newGroup: DynamicFormControlGroup, oldGroup?: DynamicFormControlGroup): void {\n Object.keys(newGroup.controls).forEach((controlName) => {\n const control = newGroup.get(controlName);\n const oldControl = oldGroup?.get(controlName) as DynamicFormControlGroup;\n if (!oldControl) {\n return;\n }\n if (control instanceof DynamicFormControlGroup) {\n this._cloneOldFormGroup(control, oldControl);\n return;\n }\n\n control?.setValue(oldControl.value, { emitEvent: false });\n\n if (oldControl.touched) {\n control?.markAsTouched();\n }\n });\n }\n}\n","import { Directive, Inject, Injector, Input, OnInit, Optional, ViewContainerRef } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport {\n CONTENT_DENSITY_DIRECTIVE,\n ContentDensityGlobalKeyword,\n ContentDensityMode\n} from '@fundamental-ngx/core/content-density';\nimport { PlatformFormField, PlatformFormFieldControl } from '@fundamental-ngx/platform/shared';\nimport { Observable, of } from 'rxjs';\nimport { BaseDynamicFormGeneratorControl } from './base-dynamic-form-generator-control';\nimport { FormGeneratorService } from './form-generator.service';\nimport { PreparedDynamicFormFieldItem } from './interfaces/dynamic-form-item';\n\n/**\n * Dynamic form control directive represents a renderer of the dynamic components\n * based on the information provided in `formItem` input\n */\n@Directive({\n selector: '[fdpDynamicFormControl]',\n standalone: true\n})\nexport class DynamicFormControlDirective implements OnInit {\n /**\n * @description @see DynamicFormItem\n */\n @Input() formItem: PreparedDynamicFormFieldItem;\n\n /**\n * @description Represents form control id.\n */\n @Input()\n id: string;\n\n /**\n * @description Represents form control name.\n */\n @Input() name: string;\n\n /**\n * @description Reference to the @see FormGroup class.\n */\n @Input() form: FormGroup;\n\n /** Form group name path */\n @Input() formGroupNamePath: string;\n\n /**\n * @description Reference to the @see FormFieldComponent\n */\n @Input() formField: PlatformFormField;\n\n /**\n * Control field instance.\n */\n formFieldControl: PlatformFormFieldControl;\n\n /** @hidden */\n constructor(\n private readonly _formGeneratorService: FormGeneratorService,\n private readonly _vcRef: ViewContainerRef,\n private readonly _injector: Injector,\n @Optional() @Inject(CONTENT_DENSITY_DIRECTIVE) private contentDensityDirective: Observable<ContentDensityMode>\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n const foundComponent = this._formGeneratorService.getComponentDefinitionByType(this.formItem.type);\n\n if (!foundComponent) {\n return;\n }\n\n this._vcRef.clear();\n\n const componentRef = this._vcRef.createComponent<BaseDynamicFormGeneratorControl>(foundComponent.component, {\n injector: Injector.create({\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useFactory: () => {\n if (this.formItem?.guiOptions?.contentDensity) {\n return of(this.formItem.guiOptions.contentDensity);\n }\n if (this.contentDensityDirective) {\n return this.contentDensityDirective;\n }\n return of(ContentDensityGlobalKeyword);\n }\n }\n ],\n parent: this._injector\n })\n });\n\n componentRef.instance.formItem = this.formItem;\n componentRef.instance.id = this.id; // This is also done from fdp-form-field\n componentRef.instance.name = this.name;\n componentRef.instance.form = this.form;\n componentRef.instance.formField = this.formField;\n componentRef.instance.formGroupName = this.formGroupNamePath;\n\n this.formFieldControl = componentRef.instance as unknown as PlatformFormFieldControl;\n }\n}\n","import { Directive, Inject, Input, Optional, TemplateRef } from '@angular/core';\nimport { FormError, FormErrorDescription, FormFieldErrorContext } from '@fundamental-ngx/platform/shared';\nimport { FDP_FORM_ERROR_DIRECTIVE } from './tokens';\n\n@Directive({\n selector: '[fdpFormFieldErrorDescription]',\n standalone: true\n})\nexport class FormFieldErrorDescriptionDirective<T = any> implements FormErrorDescription {\n /** Used to connect data with model for typings support. */\n @Input()\n fdpFormFieldErrorDescriptionAs: T;\n\n /** @hidden */\n constructor(\n public templateRef: TemplateRef<FormFieldErrorContext<T>>,\n @Optional() @Inject(FDP_FORM_ERROR_DIRECTIVE) private _formFieldErrorDirective: FormError\n ) {\n this._formFieldErrorDirective?.registerDescription(this);\n }\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: FormFieldErrorDescriptionDirective,\n ctx: FormFieldErrorContext<any>\n ): ctx is FormFieldErrorContext<any> {\n return true;\n }\n}\n","import { Directive, Inject, Input, Optional, TemplateRef } from '@angular/core';\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport { FormError, FormErrorHeading, FormFieldErrorContext } from '@fundamental-ngx/platform/shared';\nimport { FDP_FORM_ERROR_DIRECTIVE } from './tokens';\n\n@Directive({\n selector: '[fdpFormFieldErrorHeading]',\n standalone: true\n})\nexport class FormFieldErrorHeadingDirective<T = any> implements FormErrorHeading {\n /** Used to connect data with model for typings support. */\n @Input()\n fdpFormFieldErrorHeadingAs: T;\n\n /** Error type. */\n @Input()\n fdpFormFieldErrorHeadingType: FormStates | undefined;\n\n /** @hidden */\n constructor(\n public templateRef: TemplateRef<FormFieldErrorContext<T>>,\n @Optional() @Inject(FDP_FORM_ERROR_DIRECTIVE) private _formFieldErrorDirective: FormError\n ) {\n this._formFieldErrorDirective?.registerHeading(this);\n }\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: FormFieldErrorHeadingDirective,\n ctx: FormFieldErrorContext<any>\n ): ctx is FormFieldErrorContext<any> {\n return true;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n forwardRef,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Provider,\n QueryList,\n ViewEncapsulation\n} from '@angular/core';\nimport { FD_FORM_FIELD } from '@fundamental-ngx/cdk/forms';\n\nimport {\n ColumnLayout,\n FormFieldGroup,\n FormGroupContainer,\n HintOptions,\n PlatformFormField\n} from '@fundamental-ngx/platform/shared';\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../constants';\n\nconst formFieldGroupProvider: Provider = {\n provide: FormFieldGroup,\n useExisting: forwardRef(() => FormFieldGroupComponent)\n};\n\nconst formGroupChildProvider: Provider = {\n provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n useExisting: forwardRef(() => FormFieldGroupComponent)\n};\n\n@Component({\n selector: 'fdp-form-field-group',\n template: ` <ng-content></ng-content>`,\n styleUrl: './form-field-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [formFieldGroupProvider, formGroupChildProvider],\n standalone: true\n})\nexport class FormFieldGroupComponent implements FormFieldGroup, OnInit, OnDestroy {\n /**\n * Group header title\n */\n @Input()\n label: string;\n\n /** Group's form name */\n @Input()\n formName: string;\n\n /**\n * Form Group Container to bind the Form-Field-Group to.\n * This will override default value injected by constructor\n */\n @Input()\n formGroupContainer: FormGroupContainer | null = inject(FormGroupContainer, { optional: true });\n\n /**\n * Defines label's column layout.\n */\n @Input()\n set labelColumnLayout(value: ColumnLayout | undefined) {\n if (value) {\n this._labelColumnLayout = value;\n }\n }\n get labelColumnLayout(): ColumnLayout {\n return this._labelColumnLayout;\n }\n /**\n * Defines field's column layout.\n */\n @Input()\n set fieldColumnLayout(value: ColumnLayout | undefined) {\n if (value) {\n this._fieldColumnLayout = value;\n }\n }\n\n get fieldColumnLayout(): ColumnLayout {\n return this._fieldColumnLayout;\n }\n /**\n * Defines gap column layout.\n */\n @Input()\n set gapColumnLayout(value: ColumnLayout | undefined) {\n if (value) {\n this._gapColumnLayout = value;\n }\n }\n get gapColumnLayout(): ColumnLayout {\n return this._gapColumnLayout;\n }\n /**\n * Describes hint options for group header\n */\n @Input()\n hintOptions?: HintOptions;\n /**\n * Get form fields wrapped into form field group\n */\n @ContentChildren(FD_FORM_FIELD, { descendants: true })\n fields: QueryList<PlatformFormField>;\n\n /** @hidden */\n private _labelColumnLayout: ColumnLayout;\n\n /** @hidden */\n private _fieldColumnLayout: ColumnLayout;\n\n /** @hidden */\n private _gapColumnLayout: ColumnLayout;\n\n /** @hidden */\n ngOnInit(): void {\n this._addToFormGroup();\n this._setDefaultLayout();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._removeFromFormGroup();\n }\n\n /** @hidden */\n private _setDefaultLayout(): void {\n // If layout already defined, no need to set default one.\n if (this.labelColumnLayout) {\n return;\n }\n\n this.labelColumnLayout = this.formGroupContainer?.labelColumnLayout;\n this.fieldColumnLayout = this.formGroupContainer?.fieldColumnLayout;\n this.gapColumnLayout = this.formGroupContainer?.gapColumnLayout;\n }\n\n /** @hidden */\n private _addToFormGroup(): void {\n if (!this.formGroupContainer) {\n return;\n }\n this.formGroupContainer.addFormFieldGroup(this);\n }\n\n /** @hidden */\n private _removeFromFormGroup(): void {\n if (!this.formGroupContainer) {\n return;\n }\n this.formGroupContainer.removeFormFieldGroup(this);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { InlineHelpDirective } from '@fundamental-ngx/core/inline-help';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport { HintOptions } from '@fundamental-ngx/platform/shared';\nimport { FieldGroup } from '../../models/field.model';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdp-form-group-header]',\n templateUrl: './form-group-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class.fd-form-group__header]': 'true'\n },\n imports: [NgTemplateOutlet, LinkComponent, IconComponent, InlineHelpDirective]\n})\nexport class FormGroupHeaderComponent {\n /** Fields Group */\n @Input()\n fieldGroup: Nullable<FieldGroup>;\n\n /** Hint options */\n get hintOptions(): HintOptions | undefined {\n if (this.fieldGroup?.hintOptions) {\n return this.fieldGroup.hintOptions;\n }\n\n return;\n }\n}\n","@if (fieldGroup && hintOptions?.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<h6 class=\"fd-form-group__header-text\">\n {{ fieldGroup?.label }}\n</h6>\n@if (fieldGroup && hintOptions?.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<ng-template #inlineHelpRef>\n @if (hintOptions) {\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [style.vertical-align]=\"'middle'\"\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n }\n</ng-template>\n","import { TemplateRef } from '@angular/core';\nimport { HintOptions } from '@fundamental-ngx/platform/shared';\n\nexport interface FieldColumn {\n [key: number]: Array<Field>;\n}\n\nexport class Field {\n /** @hidden */\n constructor(\n public name?: string,\n public rank?: number,\n public renderer?: TemplateRef<any>,\n public column?: number\n ) {}\n}\n\nexport class FieldGroup {\n /** @hidden */\n constructor(\n public label: string,\n public fields: FieldColumn,\n public hintOptions?: HintOptions\n ) {}\n}\n","import { KeyValue } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { FieldColumn, FieldGroup } from '../../models/field.model';\n\n@Pipe({\n name: 'fieldGroupRowValue',\n standalone: true\n})\nexport class FieldGroupRowValuePipe implements PipeTransform {\n /** @hidden */\n transform(row: KeyValue<any, FieldColumn | FieldGroup>): FieldColumn {\n return row.value instanceof FieldGroup ? row.value.fields : row.value;\n }\n}\n","/**\n * @license\n * F. Kolar\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n *\n */\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Provider,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n forwardRef,\n inject\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, FormGroup, FormsModule, NgForm } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormField } from '@fundamental-ngx/cdk/forms';\nimport { Nullable, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { InlineHelpDirective } from '@fundamental-ngx/core/inline-help';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport {\n ColumnLayout,\n FieldHintOptions,\n FormFieldGroup,\n FormGroupContainer,\n HintInput,\n HintOptions,\n PlatformFormField\n} from '@fundamental-ngx/platform/shared';\nimport { getField, getFormField, isFieldChild, isFieldGroupChild, isFieldGroupWrapperChild } from '../form-helpers';\nimport { Field, FieldColumn, FieldGroup } from '../models/field.model';\nimport {\n DefaultGapLayout,\n DefaultHorizontalFieldLayout,\n DefaultHorizontalLabelLayout,\n DefaultVerticalFieldLayout,\n FORM_GROUP_CHILD_FIELD_TOKEN\n} from './constants';\nimport { FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT } from './fdp-form.tokens';\nimport { FormFieldErrorDirective } from './form-field-error/form-field-error.directive';\nimport { FormFieldComponent } from './form-field/form-field.component';\nimport { FormGroupHeaderComponent } from './form-group-header/form-group-header.component';\nimport { generateColumnClass, normalizeColumnLayout } from './helpers';\nimport { FieldGroupRowValuePipe } from './pipes/field-group-row-value.pipe';\nimport { FormFieldLayoutService } from './services/form-field-layout.service';\n\nexport const formGroupProvider: Provider = {\n provide: FormGroupContainer,\n useExisting: forwardRef(() => FormGroupComponent)\n};\n\ntype FormGroupField = (FormField | FormFieldGroup) & { hintOptions?: HintOptions };\n\nlet formGroupUniqueId = 0;\n\n/**\n *\n * FormGroup represent high order container aggregating FormFields and ability to distribute these\n * fields into columns. It mainly hides implementation details that we need to deal with every\n * time we are building a form. We have input fields , error managements, different states,\n * hints and many more.\n *\n * Well behaved form that has information side by side in multiple\n * columns needs to also know how to merge properly.\n *\n * Just to get the idea about the structure without actual input components inside\n *\n * ```html\n * <fdp-form-group [hintPlacement]=\"'inline'\" columnLayout=\"XL2-L2-M1-S1\">\n * <fdp-form-field [id]=\"'Field A'\" [rank]=\"10\" column=\"1\">\n * </fdp-form-field>\n *\n * <fdp-form-field [id]=\"'Field B'\" [rank]=\"30\" column=\"1\">\n * </fdp-form-field>\n *\n * <fdp-form-field [id]=\"'Field C'\" [rank]=\"20\" column=\"1\">\n * </fdp-form-field>\n *\n * <fdp-form-field [id]=\"Field D\" [rank]=\"20\" column=\"2\">\n * </fdp-form-field>\n *\n *\n * <fdp-form-field [id]=\"'Field E'\" [rank]=\"30\" column=\"2\">\n * </fdp-form-field>\n * </fdp-form-group>\n\n *\n * ````\n *\n *\n * Which can be translated like this\n * [Field A] - First column, rank 10\n * [Field B] - First column, rank 30\n * [Field C] - First column, rank 20\n * [Field D] - Second column, rank 20\n * [Field E] - Second column, rank 30\n *\n * What we expect that it creates following form with two column layout:\n * [Field A] [Field D]\n * [Field C] [Field E]\n * [Field B]\n *\n * You can see all is sorted accordingly by rank (C goes before B).\n *\n * When you move into smaller device and all is merged into one columns the naive solution would be:\n *\n * [Field A]\n * [Field C]\n * [Field B]\n * [Field D]\n * [Field E]\n *\n * The fields needs to restructure according to their original positioning. When Field D was on the\n * top why we should move it to the bottom? The more correct solution should be following.\n *\n * [Field A]\n * [Field D]\n * [Field C]\n * [Field E]\n * [Field B]\n *\n * Fields nicely merge together. they don't wrap.\n *\n *\n * Besides this layout support it also wraps form functionality and it can work with FormGroup.\n * You can also decide if you want your form with <form> element or without it.\n *\n *\n */\n@Component({\n selector: 'fdp-form-group',\n templateUrl: 'form-group.component.html',\n styleUrl: './form-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [formGroupProvider, FormFieldLayoutService, contentDensityObserverProviders()],\n imports: [\n FormsModule,\n NgTemplateOutlet,\n FormGroupHeaderComponent,\n LinkComponent,\n IconComponent,\n InlineHelpDirective,\n KeyValuePipe,\n FieldGroupRowValuePipe,\n ContentDensityModule\n ]\n})\nexport class FormGroupComponent\n implements FormGroupContainer, OnInit, AfterContentInit, AfterViewInit, OnDestroy, OnChanges\n{\n /** Id for the form group element */\n @Input()\n id = `fdp-form-group-${formGroupUniqueId++}`;\n\n /** Name property to be set on a form. Will be used if `useForm` is set to true */\n @Input()\n name: string;\n\n /** Indicates if group is editable */\n @Input()\n editable = true;\n\n /** Indicates when labels should not be displayed */\n @Input()\n noLabelLayout = false;\n\n /** User's custom classes */\n @Input()\n class: string;\n\n /**\n * Form group hint options\n */\n @Input()\n hint: HintInput;\n\n /**\n * Defines column layout for inline items.\n */\n @Input()\n set inlineColumnLayout(value: ColumnLayout) {\n this._inlineColumnLayout = normalizeColumnLayout(value);\n this._updateInlineColumnLayout();\n }\n\n get inlineColumnLayout(): ColumnLayout {\n return this._inlineColumnLayout;\n }\n\n /**\n * Defines label's column layout.\n */\n @Input()\n labelColumnLayout: ColumnLayout = DefaultHorizontalLabelLayout;\n\n /**\n * Defines field's column layout.\n */\n @Input()\n fieldColumnLayout: ColumnLayout = DefaultHorizontalFieldLayout;\n\n /**\n * Defines gap column layout.\n */\n @Input()\n gapColumnLayout: ColumnLayout = DefaultGapLayout;\n\n /** Angular FormGroup where all underlying controls will be attached to. */\n @Input()\n formGroup: FormGroup;\n\n /** This is rather simple for now just to have some Section Title if needed */\n @Input()\n topTitle: string;\n\n /** Form's main title. */\n @Input()\n mainTitle: Nullable<string>;\n\n /** Whether to hide form's main title. Default is false. */\n @Input()\n hideMainTItle = false;\n\n /**\n * Convenient way to initialize internal FormControls from object\n */\n @Input()\n object: any;\n\n /**\n * Translations template reference.\n *\n * This is just here to support several ways to pass translation.\n *\n * One way is to provide ng-template #i18n inside the form-group tag and the other one\n * some global one as binding\n */\n @Input()\n i18Strings: TemplateRef<any>;\n\n /** Whether to wrap all the provided content in a `<form>` */\n @Input({ transform: booleanAttribute })\n useForm = false;\n\n /**\n * Specify the column layout in the format `XLn-Ln-Mn-Sn` where n is the number of columns and can be different for each size.\n * eg: XL2-L2-M2-S1 would create 2-column layouts for XL, L, and M sizes and single-column layout for S size.\n */\n @Input()\n columnLayout: Nullable<string>;\n\n /** Whether all form items should have identical layout provided for form group */\n @Input()\n unifiedLayout = true;\n\n /**\n * onSubmit event\n */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onSubmit: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * Native form element. Available with `[useForm]=\"true\"` input property.\n */\n @ViewChild('nativeForm', { read: NgForm })\n nativeForm: NgForm;\n\n /** @hidden */\n @ContentChild('i18n', { static: true })\n i18Template: TemplateRef<any>;\n\n /**\n * @hidden\n *\n * Keep track of added form fields children in correct order.\n *\n * Since \"descendants: true\" includes fields of nested form group as well.\n *\n * We are forced to use \"ContentChildren\" so FormField children can be used\n * with optional rendering (ngIf) safely.\n *\n * Form fields within the formGroup is driven by multi-zone layout support. We need to be\n * able to add number of FormFields, and based on given configuration (zone, rank) render them\n * under correct zone (top, bottom, left, right).\n *\n * We want to make sure that we don't include content and then try to somehow position it as it\n * would lead to the UI where user can see elementing moving as you try to position it.\n *\n */\n @ContentChildren(FORM_GROUP_CHILD_FIELD_TOKEN as any, { descendants: true })\n protected formGroupChildren: QueryList<FormGroupField>;\n\n /** @hidden */\n @ContentChildren(FormFieldErrorDirective)\n private _errorDirectives: QueryList<FormFieldErrorDirective>;\n\n /** @hidden */\n xlColumnsNumber: number;\n /** @hidden */\n lgColumnsNumber: number;\n /** @hidden */\n mdColumnsNumber: number;\n\n /**\n * @hidden\n * User responsive layout\n */\n xlCol: string;\n\n /**\n * @hidden\n * Packed fields which should be rendered\n */\n formRows: { [key: number]: FieldColumn | FieldGroup } = {};\n\n /** @hidden */\n _hintOptions: Nullable<HintOptions>;\n\n /** @hidden */\n readonly contentDensityObserver = inject(ContentDensityObserver);\n\n /** @hidden */\n _inlineColumnLayoutClass: string;\n\n /** @hidden */\n protected _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _inlineColumnLayout = DefaultVerticalFieldLayout;\n\n /**\n * @hidden\n *\n * List of direct FdpFormGroup's children.\n *\n * Since \"formGroupChildren\" uses \"{ descendants: true }\" option that means\n * \"formGroupChildren\" will keep track of nested FdpFormGroup fields as well.\n * This list relies on the injection mechanism so nested FdpFormGroup's fields/fieldGroups\n * will be omitted\n */\n private _formGroupDirectChildren: Array<FormGroupField> = [];\n\n /** @hidden */\n private readonly _subscriptions = new Subscription();\n\n /** @hidden */\n private readonly _cd = inject(ChangeDetectorRef);\n /** @hidden */\n private readonly _elementRef = inject(ElementRef);\n /** @hidden */\n private readonly _formContainer = inject(ControlContainer, { optional: true });\n /** @hidden */\n private readonly _defaultHintOptions = inject<FieldHintOptions>(FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT);\n\n /** @hidden */\n constructor() {\n this.formGroup = <FormGroup>(this._formContainer ? this._formContainer.control : new FormGroup({}));\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n this.buildComponentCssClass();\n if (changes.hint) {\n if (typeof this.hint === 'string' || this.hint instanceof TemplateRef) {\n this._hintOptions = {\n ...this._defaultHintOptions,\n content: this.hint\n };\n } else {\n this._hintOptions = {\n ...this._defaultHintOptions,\n ...this.hint\n };\n }\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (!this.formGroup) {\n this.formGroup = new FormGroup({});\n }\n this.buildComponentCssClass();\n this._updateInlineColumnLayout();\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this.i18Strings = this.i18Strings ? this.i18Strings : this.i18Template;\n\n this._setUserLayout();\n this._updateFieldByColumn();\n this._updateFormFieldsProperties();\n this._listenToFormGroupChildren();\n this._listenFormFieldColumnChange();\n this._cd.markForCheck();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this.i18Strings = this.i18Strings ? this.i18Strings : this.i18Template;\n\n this._setUserLayout();\n this._updateFieldByColumn();\n this._updateFormFieldsProperties();\n this._listenToFormGroupChildren();\n this._listenFormFieldColumnChange();\n this._trackFormGroupResize();\n this._cd.markForCheck();\n\n this._cd.detectChanges();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n addFormField(formField: PlatformFormField): void {\n // It's needed to set default FormField properties\n // on early stage otherwise validation errors\n // will be thrown on FormField level (e.g. i18string are not defined)\n this._updateFormFieldProperties(formField);\n // keep track of directly registered children\n this._addDirectFormGroupChild(formField);\n }\n\n /** @hidden */\n removeFormField(formField: PlatformFormField): void {\n this._removeDirectFormGroupChild(formField);\n }\n\n /** @hidden */\n addFormFieldGroup(formFieldGroup: FormFieldGroup): void {\n this._addDirectFormGroupChild(formFieldGroup);\n }\n\n /** @hidden */\n removeFormFieldGroup(formFieldGroup: FormFieldGroup): void {\n this._removeDirectFormGroupChild(formFieldGroup);\n }\n\n /** @hidden */\n addFormControl(name: string, control: AbstractControl): void {\n this.formGroup.setControl(name, control);\n // letting control to set value. when provided value is 'false'.\n if (this.object) {\n control.patchValue(this.object[name]);\n }\n }\n\n /** @hidden */\n removeFormControl(name: string): void {\n this.formGroup.removeControl(name);\n }\n\n /** @hidden */\n trackByFn(index: number): number {\n return index;\n }\n\n /** @hidden */\n trackByFieldName(index: number, field: Field): string | undefined {\n return field ? field.name : undefined;\n }\n\n /** @hidden */\n buildComponentCssClass(): string[] {\n return ['fd-container', this.class];\n }\n\n /** @hidden used for template side Type correction */\n $fieldGroup = (f: any): FieldGroup => f;\n\n /** @hidden */\n private _listenToFormGroupChildren(): void {\n this.formGroupChildren.changes.subscribe(() => {\n this._updateFieldByColumn();\n this._cd.markForCheck();\n });\n }\n\n /** @hidden */\n private _listenFormFieldColumnChange(): void {\n this.formGroupChildren.forEach((field: FormGroupField) =>\n (<FormFieldComponent>field).onColumnChange?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._updateFieldByColumn();\n this._cd.markForCheck();\n })\n );\n }\n\n /**\n * @hidden\n * Assign a fields or field group to specified columns with rank.\n * if `columnLayoutType` is given a fields without column property will set on last column.\n * Otherwise the fields set 1 column.\n */\n private _updateFieldByColumn(): void {\n const formChildren = this._getFormGroupChildren();\n const rows: { [key: number]: FieldColumn | FieldGroup } = {};\n let rowNumber = 0;\n let columns: FieldColumn = {};\n\n for (const child of formChildren) {\n if (isFieldChild(child)) {\n const field = getField(child);\n const columnNumber = this._validateFieldColumn(child.column);\n\n if (!columns[columnNumber]) {\n columns[columnNumber] = [];\n }\n columns[columnNumber].push(field);\n }\n\n if (isFieldGroupChild(child)) {\n const fieldGroupColumns: FieldColumn = {};\n if (Object.keys(columns).length) {\n rows[rowNumber] = columns;\n columns = {};\n rowNumber++;\n }\n\n const groupFields = child.fields.map((field) => getField(field));\n groupFields.forEach((groupField) => {\n const columnNumber = this._validateFieldColumn(groupField.column);\n\n if (!fieldGroupColumns[columnNumber]) {\n fieldGroupColumns[columnNumber] = [];\n }\n fieldGroupColumns[columnNumber].push(groupField);\n });\n\n rows[rowNumber] = new FieldGroup(child.label, fieldGroupColumns, child.hintOptions);\n rowNumber++;\n }\n }\n rows[rowNumber] = columns;\n this.formRows = rows;\n }\n\n /** @hidden Validate column number */\n private _validateFieldColumn(columnNumber: number | undefined): number {\n if (this.columnLayout && columnNumber) {\n if (isNaN(columnNumber)) {\n throw new Error('Input a valid column number');\n }\n\n if (columnNumber > this.xlColumnsNumber) {\n throw new Error(`Columns cannot be more than ${this.xlColumnsNumber}`);\n }\n\n return columnNumber;\n }\n\n return this.xlColumnsNumber;\n }\n\n /** @hidden */\n private _updateFormFieldsProperties(): void {\n this._getFormGroupChildren().forEach((formField: FormGroupField) => {\n if (isFieldChild(formField)) {\n this._updateFormFieldProperties(formField);\n }\n\n if (isFieldGroupChild(formField)) {\n formField.fields.forEach((field) => this._updateFormFieldProperties(getFormField(field)));\n }\n });\n }\n\n /**\n * @hidden\n * Pass some global properties to each field. Even formGroup cna be inject directly inside form\n * field we are using here a setter method to initialize the\n *\n */\n private _updateFormFieldProperties(formField: PlatformFormField): void {\n if (this.unifiedLayout) {\n formField.editable = this.editable;\n formField.noLabelLayout = this.noLabelLayout;\n }\n formField.setDefaultColumnLayout();\n formField.i18Strings = formField.i18Strings ? formField.i18Strings : this.i18Strings;\n formField.setErrorDirectives(this._errorDirectives);\n }\n\n /**\n * @hidden\n * if `columnLayoutType` is given, set those column layouts appropriately. Otherwise, a layout will set on 1 column\n */\n private _setUserLayout(): void {\n if (this.columnLayout) {\n this._getColumnNumbers(this.columnLayout);\n if (isNaN(this.xlColumnsNumber) || isNaN(this.lgColumnsNumber) || isNaN(this.mdColumnsNumber)) {\n throw new Error('Input a valid number for columns');\n }\n if (this.xlColumnsNumber > 12 || this.lgColumnsNumber > 12 || this.mdColumnsNumber > 12) {\n throw new Error('Columns cannot be more than 12');\n }\n const lgColumns = 12 / this.lgColumnsNumber;\n const mdColumns = 12 / this.mdColumnsNumber;\n const xlColumns = 12 / this.xlColumnsNumber;\n\n // for `lg` single-column layout, Styles does not use any class, and providing `fd-col-lg--12` has unintended side-effects\n // therefore, we remove the lg class for single-column layout\n if (lgColumns === 12) {\n this.xlCol = `fd-col-xl--${xlColumns} fd-col-md--${mdColumns}`;\n } else {\n this.xlCol = `fd-col-xl--${xlColumns} fd-col-md--${mdColumns} fd-col-lg--${lgColumns}`;\n }\n } else {\n this.xlCol = `fd-col-xl--12 fd-col-md--12 fd-col-lg--12`;\n }\n }\n\n /** @hidden */\n private _getColumnNumbers(layout: string): void {\n const [xl, lg, md] = layout.split('-');\n this.xlColumnsNumber = parseInt(xl.slice(2, xl.length), 10);\n this.lgColumnsNumber = parseInt(lg.slice(1, lg.length), 10);\n this.mdColumnsNumber = parseInt(md.slice(1, md.length), 10);\n }\n\n /** @hidden */\n private _addDirectFormGroupChild(child: FormGroupField): void {\n if (this._formGroupDirectChildren.indexOf(child) > -1) {\n return;\n }\n this._formGroupDirectChildren.push(child);\n }\n\n /** @hidden */\n private _removeDirectFormGroupChild(child: PlatformFormField | FormFieldGroup): void {\n this._formGroupDirectChildren = this._formGroupDirectChildren.filter((_child) => _child !== child);\n }\n\n /**\n * @hidden\n * Get direct form group children in the original order\n */\n private _getFormGroupChildren(): FormGroupField[] {\n if (!this.formGroupChildren) {\n return [];\n }\n const children = this.formGroupChildren\n .toArray()\n .map((child) => (isFieldGroupWrapperChild(child) ? child.fieldRenderer : child));\n\n return children.filter((child) => this._formGroupDirectChildren.includes(child));\n }\n\n /** @hidden */\n private _updateInlineColumnLayout(): void {\n this._inlineColumnLayoutClass = generateColumnClass(this.inlineColumnLayout);\n }\n\n /**\n * @hidden\n * have to trigger change detection here in order to re-check contents\n * inside \"FormField.renderer\" template every time component's dimensions changed\n */\n private _trackFormGroupResize(): void {\n this._subscriptions.add(\n resizeObservable(this._elementRef.nativeElement)\n .pipe(debounceTime(20))\n .subscribe(() => this._cd.markForCheck())\n );\n }\n}\n","@if (useForm) {\n <form #nativeForm (ngSubmit)=\"onSubmit.emit($event)\" [id]=\"id\" [name]=\"name\">\n <ng-template [ngTemplateOutlet]=\"body\"></ng-template>\n </form>\n} @else {\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n}\n<ng-template #body>\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n</ng-template>\n<ng-template #fields>\n @if (mainTitle && !hideMainTItle) {\n <div class=\"fd-form-header\">\n <ng-template [ngTemplateOutlet]=\"mainTitleTemplate\"></ng-template>\n </div>\n }\n <div\n class=\"fd-container fd-form-layout-grid-container\"\n [class.is-compact]=\"contentDensityObserver.isCompactSignal()\"\n >\n @for (column of formRows | keyvalue; track $index) {\n <div class=\"fd-row\">\n @for (fields of column | fieldGroupRowValue | keyvalue; track $index) {\n <div class=\"fd-col fd-form-group\" [class]=\"xlCol\">\n @if ($fieldGroup(column.value); as value) {\n @if (value.label) {\n <div class=\"fd-row\">\n <div class=\"fd-col\">\n <div fdp-form-group-header [fieldGroup]=\"$index === 0 ? value : null\"></div>\n </div>\n </div>\n }\n }\n @for (field of fields.value; track trackByFieldName($index, field)) {\n <div class=\"fd-row fd-form-item\">\n <div class=\"fd-col\" [class]=\"_inlineColumnLayoutClass\" [style.order]=\"field.rank\">\n <ng-template [ngTemplateOutlet]=\"field?.renderer || null\"></ng-template>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n<!-- For nested form-group -->\n<ng-content select=\"fdp-form-group\"></ng-content>\n<ng-template #mainTitleTemplate>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <h5 class=\"fd-form-header__text\">\n {{ mainTitle }}\n </h5>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <ng-template #hintTemplate>\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"_hintOptions!.content\"\n [glyph]=\"_hintOptions!.glyph\"\n [placement]=\"_hintOptions!.placement || null\"\n [triggers]=\"_hintOptions!.trigger || []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n </ng-template>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { InputMessageGroupWithTemplate } from '../input-message-group-with-template/input-message-group-with-template.component';\nimport { FormFieldErrorDescriptionDirective } from './form-field-error/form-field-error-description.directive';\nimport { FormFieldErrorHeadingDirective } from './form-field-error/form-field-error-heading.directive';\nimport { FormFieldErrorDirective } from './form-field-error/form-field-error.directive';\nimport { FormFieldControlExtrasComponent } from './form-field-extras/form-field-extras.component';\nimport { FormFieldGroupComponent } from './form-field-group/form-field-group.component';\nimport { FormFieldComponent } from './form-field/form-field.component';\nimport { FormGroupHeaderComponent } from './form-group-header/form-group-header.component';\nimport { FormGroupComponent } from './form-group.component';\nimport { FieldGroupRowValuePipe } from './pipes/field-group-row-value.pipe';\n\nconst EXPORTABLE_DECLARATIONS = [\n FormGroupComponent,\n FormFieldComponent,\n InputMessageGroupWithTemplate,\n FormFieldGroupComponent,\n FormFieldControlExtrasComponent,\n FormGroupHeaderComponent,\n FieldGroupRowValuePipe,\n FormFieldErrorDirective,\n FormFieldErrorHeadingDirective,\n FormFieldErrorDescriptionDirective\n];\n\n@NgModule({\n imports: [...EXPORTABLE_DECLARATIONS],\n exports: [...EXPORTABLE_DECLARATIONS]\n})\nexport class FdpFormGroupModule {}\n","import {\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnInit,\n Provider,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FD_FORM_FIELD } from '@fundamental-ngx/cdk/forms';\nimport { FieldHintOptions, PlatformFormField } from '@fundamental-ngx/platform/shared';\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../../form-group/constants';\nimport { FormFieldComponent } from '../../form-group/form-field/form-field.component';\nimport { DynamicFormControl } from '../dynamic-form-control';\nimport { DynamicFormControlDirective } from '../dynamic-form-control.directive';\nimport { FormGeneratorService } from '../form-generator.service';\nimport { DynamicFormGroup } from '../interfaces/dynamic-form-group';\nimport { DynamicFormItemValidationObject } from '../interfaces/dynamic-form-item';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FdpFormGroupModule } from '../../form-group/fdp-form.module';\n\nconst formFieldProvider: Provider = {\n provide: FD_FORM_FIELD,\n useExisting: forwardRef(() => FormGeneratorFieldComponent)\n};\n\nconst formGroupChildProvider: Provider = {\n provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n useExisting: forwardRef(() => FormGeneratorFieldComponent)\n};\n\n@Component({\n selector: 'fdp-form-generator-field',\n templateUrl: './form-generator-field.component.html',\n providers: [formFieldProvider, formGroupChildProvider],\n encapsulation: ViewEncapsulation.None,\n imports: [FdpFormGroupModule, FormsModule, ReactiveFormsModule, DynamicFormControlDirective]\n})\nexport class FormGeneratorFieldComponent implements OnInit {\n /**\n * Form control.\n */\n @Input() field: DynamicFormControl;\n\n /**\n * Form generator's form.\n */\n @Input() form: DynamicFormGroup;\n\n /**\n * Translations template reference.\n */\n @Input() i18n: TemplateRef<any>;\n\n /**\n * Form control name\n */\n @Input() formFieldName: string;\n\n /**\n * Path of the form group.\n */\n @Input() formGroupNamePath: string;\n\n /**\n * Rank is used for ordering.\n * The lower number the higher priority.\n */\n @Input() rank: number;\n\n /**\n * Whether this field should be visible.\n */\n @Input() shouldShow: boolean;\n\n /**\n * Describes hint options for field label\n */\n @Input() hintOptions?: FieldHintOptions;\n\n /**\n * Form field component.\n */\n @ViewChild(forwardRef(() => FormFieldComponent)) fieldRenderer: PlatformFormField;\n\n /** @hidden */\n get _placeholder(): string {\n if (!this.field) {\n return '';\n }\n if (this.field.formItem?.placeholder) {\n return this.field.formItem?.placeholder as string;\n }\n if (this.field.formItem?.useMessageAsPlaceholder) {\n return this.field.formItem?.message as string;\n }\n return '';\n }\n\n /** @hidden */\n _errorModels: { type: string; value: any }[] = [];\n\n /** @hidden */\n constructor(\n private _fgService: FormGeneratorService,\n private _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._errorModels = this._getErrors();\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _errorsTrackBy(_: number, error: { type: string; value: any }): string {\n return error.type;\n }\n\n /** @hidden */\n _isAdvancedError(error: any): error is DynamicFormItemValidationObject {\n return error.heading && error.description && error.type;\n }\n\n /** @hidden */\n private _getErrors(): { type: string; value: any }[] {\n const registeredErrors = this._fgService.validationErrorHints;\n\n const returnErrors: { type: string; value: any }[] = [\n {\n type: `${this.field.formItem.name}Validator`,\n value: null\n }\n ];\n\n Object.entries(registeredErrors).forEach((type) => {\n const [errorType, errorValue] = type;\n\n returnErrors.push({\n type: errorType,\n value: errorValue\n });\n });\n\n return returnErrors;\n }\n}\n","<fdp-form-field\n [hint]=\"hintOptions\"\n [placeholder]=\"_placeholder\"\n [id]=\"field.formItem.id || formFieldName\"\n [column]=\"field.formItem.guiOptions?.column || 1\"\n [columnLayout]=\"field.formItem.guiOptions?.columnLayout\"\n [colon]=\"field.formItem.guiOptions?.appendColon === true\"\n [label]=\"field.formItem.message\"\n [validators]=\"field.formItem.validators || []\"\n [required]=\"field.formItem.required\"\n [rank]=\"rank\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [noLabelLayout]=\"field.formItem.guiOptions?.noLabelLayout || false\"\n [formGroup]=\"form\"\n #formField\n>\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n <ng-container\n [formField]=\"formField\"\n [form]=\"form\"\n [formGroupNamePath]=\"formGroupNamePath\"\n fdpDynamicFormControl\n [id]=\"field.formItem.id || formFieldName\"\n [name]=\"formFieldName\"\n [formItem]=\"field.formItem\"\n >\n </ng-container>\n</fdp-form-field>\n","import { PlatformFormField } from '@fundamental-ngx/platform/shared';\nimport { FormGeneratorFieldComponent } from './form-generator/form-generator-field/form-generator-field.component';\nimport { FormFieldGroupComponent } from './form-group/form-field-group/form-field-group.component';\nimport { FormFieldComponent } from './form-group/form-field/form-field.component';\nimport { Field } from './models/field.model';\n\n/** @hidden */\nexport function isFieldChild(child: unknown): child is PlatformFormField {\n return child instanceof FormFieldComponent;\n}\n\n/** @hidden */\nexport function isFieldGroupWrapperChild(child: unknown): child is FormGeneratorFieldComponent {\n return child instanceof FormGeneratorFieldComponent;\n}\n\n/** @hidden */\nexport function isFieldGroupChild(child: unknown): child is FormFieldGroupComponent {\n return child instanceof FormFieldGroupComponent;\n}\n\n/** @hidden */\nexport function getFormField(field: PlatformFormField | FormGeneratorFieldComponent): PlatformFormField {\n return isFieldGroupWrapperChild(field) ? field.fieldRenderer : field;\n}\n\n/** @hidden */\nexport function getField(field: PlatformFormField): Field {\n field = isFieldGroupWrapperChild(field) ? field.fieldRenderer : field;\n\n return new Field(field.id, field.rank, field.renderer, field.column);\n}\n","import { NgModule } from '@angular/core';\n\nimport { AutoCompleteDirective } from './auto-complete.directive';\n\n@NgModule({\n imports: [AutoCompleteDirective],\n exports: [AutoCompleteDirective]\n})\nexport class PlatformAutoCompleteModule {}\n","import { NgModule } from '@angular/core';\nimport { CheckboxComponent } from './checkbox.component';\n\n@NgModule({\n imports: [CheckboxComponent],\n exports: [CheckboxComponent]\n})\nexport class PlatformCheckboxModule {}\n","import { InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\n\nexport const COMBOBOX_COMPONENT = new InjectionToken<string[]>('ComboboxInterface');\n\n/**\n * Combobox Interface to have typing and avoid circular dependency between\n * ComboboxComponent <==> ComboboxMobileComponent\n */\nexport interface ComboboxInterface extends MobileMode {\n inputText: string;\n openChange: Subject<boolean>;\n\n dialogApprove(): void;\n dialogDismiss(backup: string): void;\n detectChanges(): void;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from '../../combobox.interface';\n\n@Component({\n selector: 'fdp-combobox-mobile',\n templateUrl: './combobox-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n DialogModule,\n TitleComponent,\n TemplateDirective,\n BarModule,\n NgTemplateOutlet,\n CdkScrollable,\n ScrollbarDirective\n ]\n})\nexport class ComboboxMobileComponent extends MobileModeBase<ComboboxInterface> implements OnInit {\n /** @hidden */\n @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n /** @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n childContent: Nullable<{\n listTemplate: TemplateRef<any>;\n controlTemplate: TemplateRef<any>;\n }> = null;\n\n /** @hidden */\n private _selectedBackup: string;\n\n /** @hidden */\n constructor(@Inject(COMBOBOX_COMPONENT) comboboxComponent: ComboboxInterface) {\n super(comboboxComponent, MobileModeControl.COMBOBOX);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenOnMultiInputOpenChange();\n }\n\n /** @hidden */\n handleDismiss(): void {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n\n /** @hidden */\n handleApprove(): void {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n\n /** @hidden */\n private _toggleDialog(open: boolean): void {\n if (!open) {\n return;\n }\n\n this._selectedBackup = this._component.inputText;\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n\n /** @hidden */\n private _listenOnMultiInputOpenChange(): void {\n this._component.openChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n\n /** @hidden */\n private _open(): void {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n disablePaddings: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement\n });\n\n // Have to fire \"detectChanges\" to fix \"ExpressionChangedAfterItHasBeenCheckedError\"\n this.dialogRef.afterLoaded.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._component.detectChanges();\n });\n\n const refSub = this.dialogRef.afterClosed.subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { ComboboxMobileComponent } from './combobox/combobox-mobile.component';\n\n@NgModule({\n imports: [ComboboxMobileComponent],\n exports: [ComboboxMobileComponent]\n})\nexport class PlatformComboboxMobileModule {}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { DataProvider, MatchingStrategy, PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Combobox\n */\n@Injectable({ providedIn: 'root' })\nexport class ComboboxConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /**\n * String matching strategy for typeahead list. Default: 'starts with per term'\n */\n matchingStrategy: MatchingStrategy = MatchingStrategy.STARTS_WITH_PER_TERM;\n\n /**\n * Maps data providers\n */\n providers: Map<string, DataProvider<any>> | null = new Map();\n\n /** @hidden */\n constructor(platformConfig: PlatformConfig) {\n this.contentDensity = platformConfig.contentDensity;\n }\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<ComboboxConfig>): (platformConfig: PlatformConfig) => ComboboxConfig {\n const useFactory = (platformConfig: PlatformConfig): ComboboxConfig =>\n Object.assign(new ComboboxConfig(platformConfig), obj);\n return useFactory;\n }\n}\n","import { Directive, InjectionToken, Input, TemplateRef, inject } from '@angular/core';\n\nexport const FDP_COMBOBOX_ITEM_DEF = new InjectionToken<FdpComboboxItemDef>('FdpComboboxItemDefinition');\n\nexport type FdoComboboxItemDefType =\n | 'optionItemTemplate'\n | 'groupItemTemplate'\n | 'secondaryItemTemplate'\n | 'selectedItemTemplate';\n\n@Directive()\nexport abstract class FdpComboboxItemDef<T = unknown> {\n /** @hidden */\n abstract name: FdoComboboxItemDefType;\n /** @hidden */\n templateRef = inject(TemplateRef<T>);\n}\n\n@Directive({\n selector: '[fdpComboboxItem]',\n standalone: true,\n providers: [\n {\n provide: FDP_COMBOBOX_ITEM_DEF,\n useExisting: ComboboxItemDirective\n }\n ]\n})\nexport class ComboboxItemDirective<T = unknown> extends FdpComboboxItemDef<{ $implicit: T; index: number }> {\n /** @hidden */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('fdpComboboxItemUse')\n useModel: T;\n /** @hidden */\n name: FdoComboboxItemDefType = 'optionItemTemplate';\n\n /** @hidden */\n static ngTemplateContextGuard<T>(\n dir: ComboboxItemDirective<T>,\n ctx: { $implicit: T; index: number }\n ): ctx is { $implicit: T; index: number } {\n return true;\n }\n}\n\n@Directive({\n selector: '[fdpComboboxSelectedItem]',\n standalone: true,\n providers: [\n {\n provide: FDP_COMBOBOX_ITEM_DEF,\n useExisting: ComboboxSelectedItemDirective\n }\n ]\n})\nexport class ComboboxSelectedItemDirective<T = unknown> extends FdpComboboxItemDef<{ $implicit: T; index: number }> {\n /** @hidden */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('fdpComboboxSelectedItemUse')\n useModel: T;\n /** @hidden */\n name: FdoComboboxItemDefType = 'selectedItemTemplate';\n\n /** @hidden */\n static ngTemplateContextGuard<T>(\n dir: ComboboxSelectedItemDirective<T>,\n ctx: { $implicit: T; index: number }\n ): ctx is { $implicit: T; index: number } {\n return true;\n }\n}\n\n@Directive({\n selector: '[fdpComboboxGroup]',\n standalone: true,\n providers: [\n {\n provide: FDP_COMBOBOX_ITEM_DEF,\n useExisting: ComboboxItemGroupDirective\n }\n ]\n})\nexport class ComboboxItemGroupDirective extends FdpComboboxItemDef<{ $implicit: { label: string } }> {\n /** @hidden */\n name: FdoComboboxItemDefType = 'groupItemTemplate';\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: ComboboxItemGroupDirective,\n ctx: { $implicit: { label: string } }\n ): ctx is { $implicit: { label: string } } {\n return true;\n }\n}\n\n@Directive({\n selector: '[fdpComboboxSecondaryItem]',\n standalone: true,\n providers: [\n {\n provide: FDP_COMBOBOX_ITEM_DEF,\n useExisting: ComboboxSecondaryItemDirective\n }\n ]\n})\nexport class ComboboxSecondaryItemDirective<T = unknown> extends FdpComboboxItemDef<{ $implicit: T }> {\n /** @hidden */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('fdpComboboxSecondaryItemUse')\n useModel: T;\n\n /** @hidden */\n name: FdoComboboxItemDefType = 'secondaryItemTemplate';\n\n /** @hidden */\n static ngTemplateContextGuard<T>(\n dir: ComboboxSelectedItemDirective<T>,\n ctx: { $implicit: T }\n ): ctx is { $implicit: T } {\n return true;\n }\n}\n","import {\n ALT,\n BACKSPACE,\n CONTROL,\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n LEFT_ARROW,\n NUMPAD_EIGHT,\n NUMPAD_FIVE,\n NUMPAD_FOUR,\n NUMPAD_NINE,\n NUMPAD_ONE,\n NUMPAD_SEVEN,\n NUMPAD_SIX,\n NUMPAD_THREE,\n NUMPAD_TWO,\n NUMPAD_ZERO,\n RIGHT_ARROW,\n SHIFT,\n SPACE,\n TAB,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { Observable, Subject, Subscription, combineLatest, fromEvent, isObservable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\nimport { FocusEscapeDirection, KeyUtil, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { ListComponent } from '@fundamental-ngx/core/list';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport {\n ArrayComboBoxDataSource,\n CollectionBaseInput,\n ComboBoxDataSource,\n MatchingBy,\n MatchingStrategy,\n ObservableComboBoxDataSource,\n OptionItem,\n coerceArraySafe,\n isDataSource,\n isFunction,\n isJsObject,\n isOptionItem,\n isString\n} from '@fundamental-ngx/platform/shared';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SingleDropdownValueControl } from '@fundamental-ngx/cdk/forms';\nimport { AutoCompleteEvent } from '../../auto-complete/auto-complete.directive';\nimport { ComboboxConfig } from '../combobox.config';\nimport { FDP_COMBOBOX_ITEM_DEF, FdpComboboxItemDef } from '../directives/combobox-item.directive';\n\nexport type TextAlignment = 'left' | 'right';\nexport type FdpComboBoxDataSource<T> = ComboBoxDataSource<T> | Observable<T[]> | T[];\n\n@Directive()\nexport abstract class BaseCombobox\n extends CollectionBaseInput\n implements SingleDropdownValueControl, AfterViewInit, OnDestroy\n{\n /** @hidden Method to emit change event */\n abstract emitChangeEvent<K>(value: K): void;\n\n /** @hidden Define is this item selected */\n abstract isSelectedOptionItem(selectedItem: OptionItem): boolean;\n\n /** @hidden Emit select OptionItem */\n abstract selectOptionItem(item: OptionItem): void;\n\n /** @hidden Define value as selected */\n abstract setAsSelected(item: OptionItem[]): void;\n /** Provides maximum height for the optionPanel */\n @Input()\n maxHeight = '250px';\n\n /** Whether the autocomplete should be enabled; Enabled by default */\n @Input()\n autoComplete = true;\n\n /**\n * Todo: Name of the entity for which DataProvider will be loaded. You can either pass list of\n * items or use this entityClass and internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input()\n entityClass: string;\n\n /** Whether the combobox should be built on mobile mode */\n @Input()\n mobile = false;\n\n /** Multi Input Mobile Configuration, it's applied only, when mobile is enabled */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Tells the combo if we need to group items */\n @Input()\n group = false;\n\n /** A field name to use to group data by (support dotted notation) */\n @Input()\n groupKey?: string;\n\n /** The field to show data in secondary column */\n @Input()\n secondaryKey?: string;\n\n /** Show the second column (Applicable for two columns layout) */\n @Input()\n showSecondaryText = false;\n\n /** Horizontally align text inside the second column (Applicable for two columns layout) */\n @Input()\n secondaryTextAlignment: TextAlignment;\n\n /** Turns on/off Adjustable Width feature */\n @Input()\n autoResize = false;\n\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * `equal` will apply a width to the body equivalent to the width of the control.\n * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = false;\n\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: string[] = [];\n\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n @Input()\n closeOnOutsideClick = true;\n\n /** Whether list item options should be rendered as byline. */\n @Input()\n byline = false;\n\n /** Datasource for suggestion list */\n @Input()\n set dataSource(value: FdpComboBoxDataSource<any>) {\n if (value) {\n this._initializeDataSource(value);\n }\n }\n\n get dataSource(): FdpComboBoxDataSource<any> {\n return this._dataSource;\n }\n\n /** Value of the combobox */\n @Input()\n set value(value: any) {\n const selectedItems = coerceArraySafe(value);\n this.setAsSelected(this._convertToOptionItems(selectedItems));\n super.setValue(value);\n }\n\n get value(): any {\n return super.getValue();\n }\n\n /**\n * Action to perform when user shifts focus from the dropdown.\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n @Input()\n tabOutStrategy: 'close' | 'closeAndSelect' = 'closeAndSelect';\n\n /** Event emitted when data loading is started. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataRequested = new EventEmitter<void>();\n\n /** Event emitted when data loading is finished. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataReceived = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n listComponent: ListComponent;\n\n /** @hidden */\n @ContentChildren(TemplateDirective)\n private readonly _customTemplates: QueryList<TemplateDirective>;\n\n /** @hidden */\n @ContentChildren(FDP_COMBOBOX_ITEM_DEF)\n private readonly _customItemDef: QueryList<FdpComboboxItemDef>;\n\n /** @hidden Custom Option item Template */\n optionItemTemplate: TemplateRef<any>;\n\n /** @hidden Custom Group Header item Template */\n groupItemTemplate: TemplateRef<any>;\n\n /** @hidden Custom Secondary item Template */\n secondaryItemTemplate: TemplateRef<any>;\n\n /** @hidden Custom Selected option item Template */\n selectedItemTemplate: TemplateRef<any>;\n\n /** @hidden */\n searchInputElement: ElementRef<HTMLInputElement>;\n\n /** Input text of the input. */\n set inputText(value: string) {\n this._inputTextValue = value;\n\n this.onTouched();\n }\n\n get inputText(): string {\n return this._inputTextValue || '';\n }\n\n /** Whether the combobox is opened. */\n isOpen = false;\n\n /** Whether a combobox can be closed */\n get canClose(): boolean {\n return !(this.mobile && this.mobileConfig.approveButtonText);\n }\n\n /** @hidden List of matched suggestions */\n _suggestions: OptionItem[] = [];\n\n /** @hidden Max width of list container */\n maxWidth?: number;\n\n /** @hidden Min width of list container */\n minWidth?: number;\n\n /** @hidden Need for opening mobile version */\n openChange = new Subject<boolean>();\n\n /** @hidden */\n get isGroup(): boolean {\n return !!(this.group && this.groupKey);\n }\n\n /** Is suggestions list empty */\n get isSuggestionsListEmpty(): boolean {\n return this._suggestions.length === 0;\n }\n\n /** @hidden */\n _flatSuggestions: OptionItem[] = [];\n\n /** @hidden */\n protected _dataSource: FdpComboBoxDataSource<any>;\n\n /** @hidden */\n private _inputTextValue: string;\n\n /** @hidden */\n private readonly _matchingStrategy: MatchingStrategy;\n\n /** @hidden */\n private _dsSubscription?: Subscription;\n\n /** @hidden */\n private _element: HTMLElement = this.elementRef.nativeElement;\n\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n private readonly _nonOpeningKeys: number[] = [\n ESCAPE,\n ENTER,\n CONTROL,\n TAB,\n SHIFT,\n UP_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n LEFT_ARROW,\n ALT\n ];\n\n /** Keys, that are numbers from number keypad */\n private readonly _numberPadNumberKeys: number[] = [\n NUMPAD_ZERO,\n NUMPAD_ONE,\n NUMPAD_TWO,\n NUMPAD_THREE,\n NUMPAD_FOUR,\n NUMPAD_FIVE,\n NUMPAD_SIX,\n NUMPAD_SEVEN,\n NUMPAD_SEVEN,\n NUMPAD_EIGHT,\n NUMPAD_NINE\n ];\n\n /** @hidden */\n protected constructor(\n @Optional() readonly dialogConfig: DialogConfig,\n protected comboboxConfig: ComboboxConfig\n ) {\n super();\n this._matchingStrategy = this.comboboxConfig.matchingStrategy;\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._initWindowResize();\n this._assignCustomTemplates();\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as ComboBoxDataSource<any>).close();\n }\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n }\n }\n\n /** Is empty search field */\n get isEmptyValue(): boolean {\n return this.inputText.trim().length === 0;\n }\n\n /** write value for ControlValueAccessor */\n writeValue(value: any): void {\n const selectedItems = coerceArraySafe(value);\n this.setAsSelected(this._convertToOptionItems(selectedItems));\n super.writeValue(value);\n }\n\n /** @hidden */\n searchTermChanged(text: string): void {\n if (this.inputText === text) {\n return;\n }\n this.inputText = text;\n\n const queryMap = new Map();\n queryMap.set('query', text);\n queryMap.set('limit', 12);\n\n this.ds.match(queryMap);\n }\n\n /** @hidden */\n isOpenChangeHandle(isOpen: boolean): void {\n if (this.isOpen === isOpen) {\n return;\n }\n\n this.isOpen = isOpen;\n this.onTouched();\n this.openChange.next(isOpen);\n this._onOpenChange(this.isOpen);\n\n if (!this.isOpen && !this.mobile) {\n this.searchInputElement.nativeElement.focus({ preventScroll: true });\n }\n\n this.detectChanges();\n }\n\n /** @hidden */\n _onOpenChange(isOpen: boolean): void {\n if (isOpen) {\n this.formMessage._popover.close();\n }\n this.formMessage._popover.setIgnoreTriggers(isOpen);\n }\n\n /** @hidden */\n handleOptionItem(value: OptionItem): void {\n if (value) {\n this.selectOptionItem(value);\n }\n\n this.searchInputElement.nativeElement.focus();\n }\n\n /** @hidden */\n handlePressEnter(event: KeyboardEvent, value: OptionItem): void {\n if (!KeyUtil.isKeyCode(event, ENTER)) {\n return;\n }\n\n this.handleOptionItem(value);\n }\n\n /**\n * Handle Click on Button\n * @hidden\n */\n onPrimaryButtonClick(): void {\n // if it's mobile mode ignore this click\n if (this.mobile) {\n return;\n }\n\n this.isOpenChangeHandle(!this.isOpen);\n\n if (this.isOpen) {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n\n /**\n * Handle click on input group in mobile mode\n * @hidden\n */\n openInMobileMode(): void {\n // if it's already opened just ignore this click\n // if it's not mobile mode just ignore this click\n if (this.isOpen || !this.mobile) {\n return;\n }\n\n // otherwise show options\n this.isOpenChangeHandle(true);\n }\n\n /**\n * Handle Keydown on Input\n * @hidden\n */\n onInputKeydownHandler(event: KeyboardEvent): void {\n if (this.readonly) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, TAB)) {\n this._close();\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n event.preventDefault();\n\n if (event.altKey) {\n this.isOpenChangeHandle(true);\n }\n\n if (this.isOpen && this.listComponent) {\n this.listComponent.setItemActive(0);\n } else if (!this.isOpen) {\n this._chooseOtherItem(1);\n }\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n event.preventDefault();\n\n this._chooseOtherItem(-1);\n } else if (!event.ctrlKey && !KeyUtil.isKeyCode(event, this._nonOpeningKeys)) {\n if (!KeyUtil.isKeyCode(event, this._numberPadNumberKeys)) {\n this.isOpenChangeHandle(true);\n }\n const acceptedKeys =\n !KeyUtil.isKeyCode(event, BACKSPACE) &&\n !KeyUtil.isKeyCode(event, SPACE) &&\n !KeyUtil.isKeyType(event, 'alphabetical') &&\n !KeyUtil.isKeyType(event, 'numeric') &&\n !KeyUtil.isKeyType(event, 'ime') &&\n !KeyUtil.isKeyCode(event, this._numberPadNumberKeys);\n\n if (this.isEmptyValue && acceptedKeys) {\n this.listComponent?.setItemActive(0);\n }\n }\n }\n\n /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n\n /** @hidden */\n _onCompleteTerm(event: AutoCompleteEvent): void {\n if (event.forceClose) {\n this.toggleSelectionByInputText(event.term);\n this.isOpenChangeHandle(false);\n }\n }\n\n /** @hidden */\n toggleSelectionByInputText(text = this.inputText): void {\n let optionItem = this._getSelectItemByInputValue(text);\n if (!optionItem) {\n optionItem = {\n label: text,\n value: text\n };\n }\n\n this.selectOptionItem(optionItem);\n }\n\n /** @hidden */\n _close(): void {\n if (this.tabOutStrategy === 'closeAndSelect') {\n const focusedItem = this.listComponent.getActiveItem();\n if (focusedItem) {\n this.handleOptionItem(focusedItem.value);\n return;\n }\n }\n this.inputText = this.value ? this.inputText : '';\n this.searchInputElement.nativeElement.focus();\n this.isOpenChangeHandle(false);\n this.markForCheck();\n }\n\n /** @hidden */\n protected _getSelectItemByInputValue(displayValue: string): OptionItem | undefined {\n return this._flatSuggestions.find((value) => value.label === displayValue);\n }\n\n /** @hidden */\n protected get ds(): ComboBoxDataSource<any> {\n return this.dataSource as ComboBoxDataSource<any>;\n }\n\n /** @hidden Map grouped values to array. */\n protected _flatGroups(items: OptionItem[]): OptionItem[] {\n return items.reduce((result: OptionItem[], item: OptionItem) => result.concat(item.children ?? []), []);\n }\n\n /** @hidden */\n private _displayFn = (value: any): string => this.displayValue(value);\n\n /** @hidden */\n private _secondaryFn = (value: any): string => {\n if (isOptionItem(value)) {\n return value.secondaryText ?? '';\n }\n\n if (isJsObject(value) && this.secondaryKey) {\n const currentItem = this.objectGet(value, this.secondaryKey);\n\n return isFunction(currentItem) ? currentItem() : currentItem;\n }\n\n return value;\n };\n\n /**\n * @hidden\n * Method that picks other value moved from current one by offset, called only when combobox is closed\n */\n private _chooseOtherItem(offset: number): void {\n const activeValue = this._getSelectItemByValue(this.inputText);\n const index: number = this._suggestions.findIndex((value) => value === activeValue);\n\n if (this._suggestions[index + offset]) {\n this.handleOptionItem(this._suggestions[index + offset]);\n }\n }\n\n /** @hidden */\n private _getSelectItemByValue(displayValue: string): OptionItem | undefined {\n return this._suggestions.find((value) => value.label === displayValue);\n }\n\n /** @hidden */\n private async _initializeDataSource(ds: FdpComboBoxDataSource<any>): Promise<void> {\n this._suggestions = [];\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as ComboBoxDataSource<any>).close();\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n this._dsSubscription = undefined;\n }\n }\n\n // initializing data source in the seperate microtask to let all config options to be set before it\n // for example, \"isGroup\" input is needed for initialization logic and it might not be set at this point\n await Promise.resolve();\n // Convert whatever comes in as DataSource so we can work with it identically\n this._dataSource = this._openDataStream(ds);\n }\n\n /** @hidden */\n private _openDataStream(ds: FdpComboBoxDataSource<any>): ComboBoxDataSource<any> {\n const initDataSource = this._toDataStream(ds);\n\n if (initDataSource === undefined) {\n throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n }\n this._dsSubscription = new Subscription();\n /**\n * This is single point of data entry to the component. We dont want to set data on different\n * places. If any new data comes in either you do a search and you want to pass initial data\n * its here.\n */\n const dsSub = initDataSource\n .open()\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe((data) => {\n this._suggestions = this._convertToOptionItems(data);\n this._flatSuggestions = this.isGroup ? this._flatGroups(this._suggestions) : this._suggestions;\n\n this.stateChanges.next('initDataSource.open().');\n\n this.markForCheck();\n });\n this._dsSubscription.add(dsSub);\n\n this._dsSubscription.add(initDataSource.onDataRequested().subscribe(this.onDataRequested));\n this._dsSubscription.add(initDataSource.onDataReceived().subscribe(this.onDataReceived));\n\n initDataSource.dataProvider.setLookupKey(this.lookupKey);\n const matchingBy: MatchingBy = {\n firstBy: this._displayFn\n };\n\n if (this.secondaryKey) {\n matchingBy.secondaryBy = this._secondaryFn;\n }\n\n initDataSource.dataProvider.setMatchingBy(matchingBy);\n initDataSource.dataProvider.setMatchingStrategy(this._matchingStrategy);\n\n // initial data fetch\n const queryMap = new Map();\n queryMap.set('query', '*');\n queryMap.set('limit', 12);\n initDataSource.match(queryMap);\n\n return initDataSource;\n }\n\n /** @hidden */\n private _toDataStream(source: FdpComboBoxDataSource<any>): ComboBoxDataSource<any> | undefined {\n if (isDataSource(source)) {\n return source as ComboBoxDataSource<any>;\n }\n\n if (Array.isArray(source)) {\n // default implementation to work on top of arrays\n return new ArrayComboBoxDataSource<any>(source);\n }\n\n if (isObservable(source)) {\n return new ObservableComboBoxDataSource<any>(source);\n }\n\n return undefined;\n }\n\n /** @hidden */\n private _initWindowResize(): void {\n this._getOptionsListWidth();\n\n fromEvent(window, 'resize')\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => this._getOptionsListWidth());\n }\n\n /** @hidden */\n private _getOptionsListWidth(): void {\n const gap = 5;\n const { offsetWidth, clientWidth } = document.body;\n const { width, left } = (this._element.querySelector('fd-input-group') as HTMLElement).getBoundingClientRect();\n const scrollBarWidth = offsetWidth - clientWidth;\n\n this.maxWidth = this.autoResize ? window.innerWidth - scrollBarWidth - left - gap : this.minWidth;\n this.minWidth = width - 2;\n\n this.detectChanges();\n }\n\n /**\n * Convert original data to OptionItems Interface\n * @hidden\n */\n private _convertToOptionItems(items: any[]): OptionItem[] {\n const item = items[0];\n\n const elementTypeIsOptionItem = isOptionItem(item);\n if (elementTypeIsOptionItem) {\n return items as OptionItem[];\n }\n\n const elementTypeIsObject = isJsObject(item);\n if (elementTypeIsObject) {\n return this._convertObjectsToOptionItems(items);\n }\n\n const elementTypeIsString = isString(item);\n if (elementTypeIsString) {\n return this._convertPrimitiveToOptionItems(items);\n }\n\n return [];\n }\n\n /**\n * Convert data to OptionItems Interface\n * @hidden\n */\n private _convertObjectsToOptionItems(items: any[]): OptionItem[] {\n if (this.group && this.groupKey) {\n return this._convertObjectsToGroupOptionItems(items);\n } else if (this.showSecondaryText && this.secondaryKey) {\n return this._convertObjectsToSecondaryOptionItems(items);\n } else {\n return this._convertObjectsToDefaultOptionItems(items);\n }\n }\n\n /**\n * Convert object[] data to Group OptionItems Interface\n * @hidden\n */\n private _convertObjectsToGroupOptionItems<K>(items: K[]): OptionItem[] {\n const group: { [key: string]: K[] } = {};\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const keyValue = this.groupKey && item[this.groupKey];\n if (!keyValue) {\n continue;\n }\n\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n\n group[keyValue].push(item);\n }\n\n return Object.keys(group).map((key) => {\n const selectItem: OptionItem = {\n label: key,\n value: null,\n isGroup: true\n };\n\n const currentGroup = group[key];\n\n if (this.showSecondaryText && this.secondaryKey) {\n selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n } else {\n selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n }\n\n return selectItem;\n });\n }\n\n /**\n * Convert object[] data to Secondary OptionItems Interface\n * @hidden\n */\n private _convertObjectsToSecondaryOptionItems<K>(items: K[]): OptionItem[] {\n const selectItems: OptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n secondaryText: this.objectGet(value, this.secondaryKey),\n value\n });\n }\n\n return selectItems;\n }\n\n /**\n * Convert Primitive data(Boolean, String, Number) to OptionItems Interface\n * @hidden\n */\n private _convertPrimitiveToOptionItems(items: any[]): OptionItem[] {\n const selectItems: OptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({ label: value, value });\n }\n\n return selectItems;\n }\n\n /**\n * Convert object[] to OptionItems Interface (Default)\n * @hidden\n */\n private _convertObjectsToDefaultOptionItems(items: any[]): OptionItem[] {\n const selectItems: OptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n value\n });\n }\n\n return selectItems;\n }\n\n /** @hidden Assign custom templates */\n private _assignCustomTemplates(): void {\n combineLatest([this._customTemplates.changes, this._customItemDef.changes])\n .pipe(\n startWith(null),\n map(() =>\n this._customItemDef.length > 0 ? this._customItemDef.toArray() : this._customTemplates.toArray()\n ),\n takeUntilDestroyed(this._destroyed)\n )\n .subscribe((data) => {\n data.forEach((template: FdpComboboxItemDef | TemplateDirective) => {\n switch (template.name) {\n case 'optionItemTemplate':\n this.optionItemTemplate = template.templateRef;\n break;\n case 'groupItemTemplate':\n this.groupItemTemplate = template.templateRef;\n break;\n case 'secondaryItemTemplate':\n this.secondaryItemTemplate = template.templateRef;\n break;\n case 'selectedItemTemplate':\n this.selectedItemTemplate = template.templateRef;\n break;\n }\n });\n });\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Injector,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { DynamicComponentService } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityModule, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { ComboBoxDataSource, DATA_PROVIDERS, DataProvider, OptionItem } from '@fundamental-ngx/platform/shared';\n\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SearchHighlightPipe } from '@fundamental-ngx/cdk/utils';\nimport { FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ListModule, ListSecondaryDirective } from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { AutoCompleteDirective } from '../../auto-complete/auto-complete.directive';\nimport { ComboboxMobileComponent } from '../combobox-mobile/combobox/combobox-mobile.component';\nimport { ComboboxConfig } from '../combobox.config';\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from '../combobox.interface';\nimport { BaseCombobox } from '../commons/base-combobox';\n\nexport class ComboboxSelectionChangeEvent {\n /**\n * Combobox selection event\n * @param source Combobox component\n * @param payload Selected option\n */\n constructor(\n public source: ComboboxComponent,\n public payload: any // Contains selected item\n ) {}\n}\n\n@Component({\n selector: 'fdp-combobox',\n templateUrl: './combobox.component.html',\n styleUrl: './combobox.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: FD_FORM_FIELD_CONTROL, useExisting: ComboboxComponent, multi: true },\n contentDensityObserverProviders()\n ],\n imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n FormInputMessageGroupComponent,\n InputGroupModule,\n FormsModule,\n AutoCompleteDirective,\n FormMessageComponent,\n ListModule,\n NgClass,\n ListSecondaryDirective,\n SearchHighlightPipe,\n FdTranslatePipe,\n ContentDensityModule\n ]\n})\nexport class ComboboxComponent extends BaseCombobox implements ComboboxInterface, OnInit, AfterViewInit {\n /** Event emitted when item is selected. */\n @Output()\n selectionChange = new EventEmitter<ComboboxSelectionChangeEvent>();\n /** @hidden */\n @ViewChild('searchInputElement')\n declare searchInputElement: ElementRef<HTMLInputElement>;\n\n /** @hidden */\n @ViewChild('controlTemplate')\n controlTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('listTemplate')\n listTemplate: TemplateRef<any>;\n\n /** @hidden */\n _selectedElement?: OptionItem;\n\n /** @hidden */\n constructor(\n @Optional() _dialogConfig: DialogConfig,\n readonly _dynamicComponentService: DynamicComponentService,\n private readonly _viewContainerRef: ViewContainerRef,\n private readonly _injector: Injector,\n @Optional() @Inject(DATA_PROVIDERS) private providers: Map<string, DataProvider<any>>,\n _comboboxConfig: ComboboxConfig\n ) {\n super(_dialogConfig, _comboboxConfig);\n }\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n const providers = this.providers?.size === 0 ? this.comboboxConfig.providers : this.providers;\n // if we have both prefer dataSource\n if (!this.dataSource && this.entityClass && providers?.has(this.entityClass)) {\n this.dataSource = new ComboBoxDataSource(providers.get(this.entityClass)!);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n\n if (this.mobile) {\n this._setUpMobileMode();\n }\n }\n\n /** @hidden */\n _onBlur(event: FocusEvent): void {\n if (this.mobile) {\n return;\n }\n\n const target = event.relatedTarget as HTMLElement;\n if (target) {\n const isList = !!target.closest('.fdp-combobox__list-container');\n const isListItem = !!target.closest('.fd-list__item');\n if (isList || isListItem) {\n return;\n }\n }\n\n if ((!this._selectedElement && !this.inputText) || this._selectedElement?.label === this.inputText) {\n return;\n }\n\n const optionItem = this._getSelectedOptionItem(this.inputText);\n\n this._updateModel(optionItem ? optionItem.value : this.inputText);\n }\n\n /** @hidden Method to emit change event */\n emitChangeEvent<T>(modelValue: T): void {\n const event = new ComboboxSelectionChangeEvent(this, modelValue);\n\n this.selectionChange.emit(event);\n }\n\n /** @hidden Method to set selected item */\n selectOptionItem(item: OptionItem): void {\n if (this.mobile) {\n this._selectedElement = item;\n this.inputText = item.label;\n this.detectChanges();\n\n return;\n }\n\n this.inputText = item.label;\n this._checkAndUpdate(item);\n this.isOpenChangeHandle(false);\n }\n\n /** @hidden Method to set as selected */\n setAsSelected(item: OptionItem[]): void {\n const selectedItem = item[0];\n\n if (this.isSelectedOptionItem(selectedItem)) {\n return;\n }\n\n this._selectedElement = (this.isGroup && selectedItem?.children?.[0]) || selectedItem;\n this.inputText = this.displayValue(this._selectedElement);\n }\n\n /** @hidden Define is selected item selected */\n isSelectedOptionItem(selectedItem: any): boolean {\n if (!!this._selectedElement && !!selectedItem) {\n if (this.lookupKey) {\n return this.lookupValue(this._selectedElement) === this.lookupValue(selectedItem);\n } else {\n return selectedItem.value === this._selectedElement.value;\n }\n } else {\n return false;\n }\n }\n\n /** @hidden Define is selected item selected by display value */\n isSelectedOptionItemByDisplayValue(selectedItem: any): boolean {\n return this._selectedElement?.label === selectedItem;\n }\n\n /** Handle dialog dismissing, closes popover and sets backup data. */\n dialogDismiss(term: string): void {\n if (this._selectedElement?.label !== term) {\n this._selectedElement = this._getSelectedOptionItem(term);\n }\n\n this.inputText = term;\n this.isOpenChangeHandle(false);\n }\n\n /** Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove(): void {\n if (this._selectedElement?.label === this.inputText) {\n this._updateModel(this._selectedElement.value);\n } else {\n const optionItem = this._getSelectedOptionItem(this.inputText);\n\n this._updateModel(optionItem ? optionItem.value : this.inputText);\n }\n\n this.isOpenChangeHandle(false);\n }\n\n /** @hidden if not selected update model */\n private _checkAndUpdate(modelValue: OptionItem): void {\n if (this.isSelectedOptionItem(modelValue)) {\n return;\n }\n\n this._updateModel(modelValue.value);\n }\n\n /** @hidden Update model */\n private _updateModel(value: any): void {\n // setting value, it will call setValue()\n this.value = value;\n\n this.emitChangeEvent(value ? value : null);\n }\n\n /** @hidden */\n private async _setUpMobileMode(): Promise<void> {\n const injector = Injector.create({\n providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._dynamicComponentService.createDynamicComponent(\n { listTemplate: this.listTemplate, controlTemplate: this.controlTemplate },\n ComboboxMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n { injector }\n );\n }\n\n /** @hidden */\n private _getSelectedOptionItem(text: string): OptionItem | undefined {\n if (!this.isGroup) {\n return this._suggestions.find((item) => item.label === text);\n }\n\n return this._suggestions\n .reduce((result: OptionItem[], item: OptionItem) => {\n result.push(...(item.children ?? []));\n\n return result;\n }, [])\n .find((item) => item.label === text);\n }\n}\n","<ng-template [ngTemplateOutlet]=\"mobile ? controlTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <fd-popover\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"autoResize ? null : minWidth\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n additionalBodyClass=\"fdp-combobox__popover\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"_suggestions.length === 0\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [state]=\"mobile && isOpen ? null : state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [isControl]=\"true\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled\"\n [glyphAriaLabel]=\"ariaLabel\"\n (click)=\"openInMobileMode()\"\n >\n <input\n #searchInputElement\n fdp-auto-complete\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n (onComplete)=\"_onCompleteTerm($event)\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-required]=\"required\"\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [ngModel]=\"inputText\"\n (ngModelChange)=\"searchTermChanged($event)\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"_onBlur($event)\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n @if (isOpen) {\n <div class=\"fdp-combobox__count-list-results\" role=\"status\">\n @if (_flatSuggestions.length || '0'; as count) {\n {{\n (count === 1\n ? 'platformCombobox.countListResultsSingular'\n : 'platformCombobox.countListResultsPlural'\n ) | fdTranslate: { count: count }\n }}\n }\n </div>\n }\n @if (mobile || isOpen ? null : !!stateMessage) {\n <fd-form-message [type]=\"state\" [innerHtml]=\"stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n [hasMessage]=\"!!stateMessage\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-combobox__list\"\n [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [byline]=\"byline\"\n [attr.aria-labelledby]=\"id + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [style.maxWidth]=\"autoResize && maxWidth + 'px'\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n >\n @if (stateMessage) {\n <li\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n ></li>\n }\n @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n <li fd-list-message tabindex=\"-1\" role=\"presentation\" [type]=\"state || 'default'\">\n <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n </li>\n }\n <ng-content></ng-content>\n @if (isGroup) {\n @for (group of _suggestions; track group) {\n @if (!groupItemTemplate) {\n <li fd-list-group-header role=\"option\">\n <span fd-list-title [attr.title]=\"group.label\">{{ group.label }}</span>\n </li>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (isSelectedOptionItem(optionItem) && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(isSelectedOptionItem(optionItem) && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span [attr.title]=\"optionItem.label\" [innerHTML]=\"optionItem.label | highlight: inputText\"></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText) {\n @if (!secondaryItemTemplate) {\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight: inputText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\n\nimport { ComboboxComponent } from './combobox/combobox.component';\nimport {\n ComboboxItemDirective,\n ComboboxItemGroupDirective,\n ComboboxSecondaryItemDirective,\n ComboboxSelectedItemDirective\n} from './directives/combobox-item.directive';\n\nconst EXPORTABLE_COMPONENTS = [\n ComboboxComponent,\n ComboboxItemDirective,\n ComboboxSelectedItemDirective,\n ComboboxItemGroupDirective,\n ComboboxSecondaryItemDirective\n];\n\n@NgModule({\n imports: [...EXPORTABLE_COMPONENTS],\n exports: [...EXPORTABLE_COMPONENTS]\n})\nexport class PlatformComboboxModule {}\n","import { NgModule } from '@angular/core';\nimport { PlatformDatePickerComponent } from './date-picker.component';\n\n@NgModule({\n imports: [PlatformDatePickerComponent],\n exports: [PlatformDatePickerComponent]\n})\nexport class PlatformDatePickerModule {}\n","/** @hidden */\nexport function createMissingDateImplementationError(provider: string): Error {\n return Error(\n `FdpDatetimePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`\n );\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n inject\n} from '@angular/core';\nimport { FormsModule, NgControl } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\n\nimport { CalendarYearGrid, DaysOfWeek, FdCalendarView, FdCalendarViewEnum } from '@fundamental-ngx/core/calendar';\nimport { DATE_TIME_FORMATS, DateTimeFormats, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { DatetimePickerComponent } from '@fundamental-ngx/core/datetime-picker';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { Placement, SpecialDayRule } from '@fundamental-ngx/core/shared';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { createMissingDateImplementationError } from './errors';\n\n@Component({\n selector: 'fdp-datetime-picker',\n templateUrl: './datetime-picker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformDatetimePickerComponent, multi: true }],\n imports: [DatetimePickerComponent, FormsModule]\n})\nexport class PlatformDatetimePickerComponent<D> extends BaseInput implements AfterViewInit {\n /**\n * value for datetime\n */\n @Input()\n set value(value: D) {\n super.setValue(value);\n }\n get value(): D {\n return super.getValue();\n }\n\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n @Input()\n placement: Placement = 'bottom-start';\n\n /** The element to which the popover should be appended. */\n @Input()\n appendTo: ElementRef;\n\n /**\n * Whether the time component should be meridian (am/pm).\n * Default value is based on the current locale format option\n * */\n @Input()\n meridian: boolean;\n\n /**\n * Whether the time component shows seconds.\n * Default value is based on the current locale format option\n * */\n @Input()\n displaySeconds: boolean;\n\n /**\n * Whether the time component shows minutes.\n * Default value is based on the current locale format option\n * */\n @Input()\n displayMinutes: boolean;\n\n /**\n * Whether the time component shows hours.\n * Default value is based on the current locale format option\n * */\n @Input()\n displayHours: boolean;\n\n /** Whether to perform visual validation on the picker input. */\n @Input()\n useValidation = true;\n\n /** Whether the popover is open. Two-way binding is supported. */\n @Input()\n isOpen = false;\n\n /** The starting day of week for the calendar. */\n @Input()\n startingDayOfWeek: DaysOfWeek;\n\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n @Input()\n activeView: FdCalendarView = FdCalendarViewEnum.Day;\n\n /** Whether a null input is considered valid. */\n @Input()\n allowNull = true;\n\n /**\n * @Input when set to true time component will use 2 digits for each number.\n * For example 9 will become 09\n * but 12 will be kept as 12.\n * Only uses by time component and does not change input format\n */\n @Input() keepTwoDigitsTime = false;\n\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n set state(state: FormStates | undefined) {\n super.state = state;\n }\n\n get state(): FormStates {\n if (this.dateTimePickerComponent?.isInvalidDateInput) {\n // if any other error from core dtp\n return 'error';\n }\n return super.state;\n }\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = true;\n\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n @Input()\n specialDaysRules: SpecialDayRule<D>[] = [];\n\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n yearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 5\n };\n\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n aggregatedYearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 3\n };\n\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n @Input()\n markWeekends = true;\n\n /** @Input Whether to show spinner buttons */\n @Input()\n spinnerButtons = true;\n\n /**\n * Whether user wants to show week numbers next to days\n */\n @Input()\n showWeekNumbers = true;\n\n /** Whether or not to show the datetime picker footer with submit/cancel buttons. */\n @Input()\n showFooter = true;\n\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n @Input()\n processInputOnBlur = false;\n\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n @Input()\n preventScrollOnFocus = false;\n\n /** Whether date picker should rendered in mobile mode. */\n @Input()\n mobile = false;\n\n /** Mobile mode configuration. */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n @Input()\n mobileLandscape = false;\n\n /** Whether calendar is used inside mobile in portrait mode */\n @Input()\n mobilePortrait = false;\n\n /** Event emitted when the state of the isOpen property changes. */\n @Output()\n readonly isOpenChange = new EventEmitter<boolean>();\n\n /** Event thrown every time calendar active view is changed */\n @Output()\n readonly activeViewChange: EventEmitter<FdCalendarView> = new EventEmitter<FdCalendarView>();\n\n /** Event emitted when the date changes. This can be a time or day change. */\n @Output()\n readonly datetimeChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Event emitted when popover closes. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onClose: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild(DatetimePickerComponent)\n dateTimePickerComponent: DatetimePickerComponent<D>;\n\n /** @hidden */\n @ViewChild(DatetimePickerComponent, { static: true, read: ElementRef })\n protected _elRef: ElementRef;\n\n /** @hidden */\n @ViewChild(DatetimePickerComponent, { static: true, read: NgControl })\n protected _control: NgControl;\n\n /** @hidden */\n get _isRequired(): boolean {\n return !!this.formField?.required;\n }\n\n /** @hidden */\n private readonly _dateTimeAdapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, {\n optional: true\n });\n\n /** @hidden */\n private readonly _dateTimeFormats = inject<DateTimeFormats>(DATE_TIME_FORMATS, {\n optional: true\n });\n\n /** @hidden */\n constructor() {\n super();\n\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n\n // default model value\n this.value = this._dateTimeAdapter.now();\n }\n\n /**\n * Function used to disable certain dates in the calendar.\n * @param fdDate FdDate\n */\n @Input()\n disableFunction: (value: D) => boolean = () => false;\n\n /**\n * @hidden\n */\n ngAfterViewInit(): void {\n // if used with platform forms, adjust width of datetimepicker to take 100% container space\n if (this.formField) {\n this._adjustPickerWidth();\n }\n }\n\n /** @hidden */\n writeValue(value: D): void {\n super.writeValue(value);\n this.markForCheck();\n }\n\n /**\n * @hidden\n * override base functionality to catch new disabled state\n */\n setDisabledState(disabled: boolean): void {\n super.setDisabledState(disabled);\n this.dateTimePickerComponent?.setDisabledState(disabled);\n }\n\n /**\n * @hidden\n * logic to handle validation from both platform forms and core datetiimepicker\n * @param datetime inputted\n */\n handleDatetimeInputChange(datetime: D): void {\n if (this.dateTimePickerComponent) {\n if (this.dateTimePickerComponent._isInvalidDateInput) {\n if (this.ngControl?.control && this._control.value) {\n this.ngControl.control.setErrors(this._control.errors);\n }\n this.state = 'error';\n } else {\n if (!this.dateTimePickerComponent._inputFieldDate && !this.allowNull) {\n this.state = 'error'; // null value in not allowNull should throw error\n } else {\n this.state = undefined; // resetting to default state\n }\n }\n // only set the value if it is a valid datetime object\n if (this.dateTimePickerComponent._inputFieldDate) {\n this.value = datetime;\n }\n\n this.stateChanges.next('datetime picker: handleDatetimeInputChange');\n }\n\n this.datetimeChange.emit(datetime);\n\n this.onTouched();\n }\n\n /**\n * Method that handles changes when popover is opened or closed.\n */\n handleOpenChange = (open: boolean): void => {\n this.isOpenChange.emit(open);\n };\n /**\n * Method that handle calendar active view change and throws event.\n */\n handleActiveViewChange = (fdCalendarView: FdCalendarView): void => {\n this.activeViewChange.emit(fdCalendarView);\n };\n\n /**\n * @hidden\n * method that adjusts width of datetimepicker to take 100% container space\n */\n private _adjustPickerWidth(): void {\n const customPopoverEl = this._elRef.nativeElement.querySelector('.fd-datetime .fd-popover-custom');\n if (!customPopoverEl) {\n return;\n }\n customPopoverEl.style.display = 'inline';\n }\n}\n","<fd-datetime-picker\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"_isRequired\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n [inputId]=\"id\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [placement]=\"placement\"\n [appendTo]=\"appendTo\"\n [meridian]=\"meridian\"\n [disabled]=\"disabled\"\n [displaySeconds]=\"displaySeconds\"\n [displayMinutes]=\"displayMinutes\"\n [displayHours]=\"displayHours\"\n [useValidation]=\"useValidation\"\n [isOpen]=\"isOpen\"\n [startingDayOfWeek]=\"startingDayOfWeek\"\n [activeView]=\"activeView\"\n [allowNull]=\"allowNull && !_isRequired\"\n [keepTwoDigitsTime]=\"keepTwoDigitsTime\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [specialDaysRules]=\"specialDaysRules\"\n [yearGrid]=\"yearGrid\"\n [aggregatedYearGrid]=\"aggregatedYearGrid\"\n [markWeekends]=\"markWeekends\"\n [spinnerButtons]=\"spinnerButtons\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [showFooter]=\"showFooter\"\n [disableFunction]=\"disableFunction\"\n [processInputOnBlur]=\"processInputOnBlur\"\n [preventScrollOnFocus]=\"preventScrollOnFocus\"\n [mobile]=\"mobile\"\n [mobileConfig]=\"mobileConfig\"\n [mobileLandscape]=\"mobileLandscape\"\n [mobilePortrait]=\"mobilePortrait\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"handleDatetimeInputChange($event)\"\n (activeViewChange)=\"handleActiveViewChange($event)\"\n (isOpenChange)=\"handleOpenChange($event)\"\n (touched)=\"onTouched()\"\n>\n <ng-content></ng-content>\n</fd-datetime-picker>\n","import { NgModule } from '@angular/core';\nimport { PlatformDatetimePickerComponent } from './datetime-picker.component';\n\n@NgModule({\n imports: [PlatformDatetimePickerComponent],\n exports: [PlatformDatetimePickerComponent]\n})\nexport class PlatformDatetimePickerModule {}\n","import { FieldHintOptions } from '@fundamental-ngx/platform/shared';\n\nexport const defaultFormGeneratorHintOptions: Omit<FieldHintOptions, 'content'> = {\n placement: 'right',\n position: 'after',\n trigger: [\n { trigger: 'mouseenter', openAction: true, closeAction: false },\n { trigger: 'mouseleave', openAction: false, closeAction: true },\n { trigger: 'focusin', openAction: true, closeAction: false },\n { trigger: 'focusout', openAction: false, closeAction: true }\n ],\n glyph: 'hint',\n target: 'auto'\n};\n","import { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { AsyncValidatorFn, ValidatorFn } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\n\nimport { DynamicFormControl } from './dynamic-form-control';\n\n/**\n * @description\n * Structural directive, which hides current form item and toggles validation rules for it.\n */\n@Directive({\n selector: '[fdpDynamicFormControlField]',\n standalone: true\n})\nexport class DynamicFormControlFieldDirective implements OnInit {\n /**\n * @description Form control instance.\n */\n @Input()\n set fdpDynamicFormControlField(value: DynamicFormControl) {\n this._control = value;\n\n this._originalValidators = this._control.formItem.validators;\n this._originalAsyncValidators = this._control.formItem.asyncValidators;\n\n this._updateView();\n }\n\n /**\n * @description boolean flag representing if current item should be shown.\n */\n @Input()\n set fdpDynamicFormControlFieldShow(value: boolean) {\n this.shouldShowFormItem = value;\n this._updateView();\n }\n\n /**\n * @hidden\n */\n private _control: DynamicFormControl;\n\n /**\n * @hidden\n */\n private _originalValidators?: Nullable<ValidatorFn | ValidatorFn[]>;\n\n /**\n * @hidden\n */\n private _originalAsyncValidators: Nullable<AsyncValidatorFn | AsyncValidatorFn[]>;\n\n /**\n * @hidden\n */\n private _componentRemoved = true;\n\n /**\n * @hidden\n */\n private _shouldShowFormItem: boolean;\n\n /** @hidden */\n constructor(\n private readonly _templateRef: TemplateRef<any>,\n private readonly _viewContainer: ViewContainerRef\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._updateView();\n }\n\n /**\n * @description If false, validation will be skipped from the form item control\n */\n set shouldShowFormItem(value: boolean) {\n if (value === this._shouldShowFormItem) {\n return;\n }\n\n this._shouldShowFormItem = value;\n\n if (!value) {\n this._control.clearValidators();\n this._control.clearAsyncValidators();\n } else {\n this._control.setValidators(this._originalValidators ?? []);\n this._control.setAsyncValidators(this._originalAsyncValidators ?? []);\n }\n\n this._control.updateValueAndValidity({ emitEvent: false });\n }\n\n /** @hidden */\n private _updateView(): void {\n if (this._shouldShowFormItem && this._componentRemoved) {\n this._viewContainer.createEmbeddedView(this._templateRef);\n this._componentRemoved = false;\n } else if (!this._shouldShowFormItem) {\n this._viewContainer.clear();\n this._componentRemoved = true;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { FieldHintOptions } from '@fundamental-ngx/platform/shared';\nimport { defaultFormGeneratorHintOptions } from './config/default-form-generator-hint-options';\n\nexport const FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS = new InjectionToken<Omit<FieldHintOptions, 'content'>>(\n 'Default options for form-generator hint',\n {\n factory: () => defaultFormGeneratorHintOptions\n }\n);\n","import { Inject, Pipe, PipeTransform, TemplateRef } from '@angular/core';\nimport { FieldHintOptions } from '@fundamental-ngx/platform/shared';\nimport { defaultFormGeneratorHintOptions } from '../config/default-form-generator-hint-options';\nimport { FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS } from '../form-generator.tokens';\nimport { BaseDynamicFormItemGuiOptions, DynamicFormItemGuiOptions } from '../interfaces/dynamic-form-item';\n\n@Pipe({\n name: 'getHintOptions',\n standalone: true\n})\nexport class GetHintOptionsPipe implements PipeTransform {\n /** @hidden */\n private readonly _defaultHintOptions: FieldHintOptions;\n\n /** @hidden */\n constructor(@Inject(FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS) _providedHintOptions: FieldHintOptions) {\n this._defaultHintOptions = {\n ...defaultFormGeneratorHintOptions,\n ..._providedHintOptions\n };\n }\n\n /**\n * Used for extracting hintOptions from GuiOptions. This will coerce string | HintOptions to FieldHintOptions,\n * will combine default value of hints for form generator with provided options.\n */\n transform(\n hintOptions: BaseDynamicFormItemGuiOptions | DynamicFormItemGuiOptions | undefined\n ): FieldHintOptions | undefined {\n if (!hintOptions?.hint) {\n return;\n }\n const formItemHintOptions = hintOptions.hint;\n if (typeof formItemHintOptions === 'string' || formItemHintOptions instanceof TemplateRef) {\n return {\n ...this._defaultHintOptions,\n content: formItemHintOptions\n };\n }\n return {\n ...this._defaultHintOptions,\n ...formItemHintOptions\n };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DynamicFormControl, DynamicFormControlGroup, DynamicFormGroupControl } from '../dynamic-form-control';\n\n@Pipe({\n name: 'getOrderedFieldControls',\n pure: false,\n standalone: true\n})\nexport class GetOrderedFieldControlsPipe implements PipeTransform {\n /** @hidden */\n transform(field: DynamicFormGroupControl): DynamicFormControl[] {\n // casting type explicity to the DynamicFormControl[] as this pipe will be used specifically with this data type\n return Object.values((field as DynamicFormControlGroup).controls).sort((a, b) =>\n (a.formItem.rank ?? -Infinity) > (b.formItem.rank ?? -Infinity) ? 1 : -1\n ) as DynamicFormControl[];\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport { FormControlStatus, FormGroupDirective, FormsModule, NgForm, ReactiveFormsModule } from '@angular/forms';\nimport { Nullable, destroyObservable } from '@fundamental-ngx/cdk/utils';\nimport {\n ColumnLayout,\n FDP_DO_CHECK,\n FDP_FORM_SUBMIT,\n FieldHintOptions,\n HintInput,\n HintOptions,\n PlatformFormFieldControl\n} from '@fundamental-ngx/platform/shared';\nimport { BehaviorSubject, Observable, Subject, Subscription, isObservable, merge, of } from 'rxjs';\nimport { debounceTime, filter, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { FormGeneratorFieldComponent } from '../form-generator-field/form-generator-field.component';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BusyIndicatorModule } from '@fundamental-ngx/core/busy-indicator';\nimport { SkeletonComponent } from '@fundamental-ngx/core/skeleton';\nimport { DefaultGapLayout, DefaultVerticalFieldLayout, DefaultVerticalLabelLayout } from '../../form-group/constants';\nimport { FdpFormGroupModule } from '../../form-group/fdp-form.module';\nimport { defaultFormGeneratorHintOptions } from '../config/default-form-generator-hint-options';\nimport {\n DynamicFormControl,\n DynamicFormControlGroup,\n DynamicFormGroupControl,\n DynamicFormGroupControls\n} from '../dynamic-form-control';\nimport { DynamicFormControlFieldDirective } from '../dynamic-form-control-field.directive';\nimport { FormGeneratorService } from '../form-generator.service';\nimport { FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS } from '../form-generator.tokens';\nimport { getParentItem, isFormFieldItem, mapFormItems, transformFormItem } from '../helpers';\nimport { DynamicFormGroup } from '../interfaces/dynamic-form-group';\nimport {\n DynamicFormItem,\n DynamicFormItemMap,\n DynamicFormItemValidationObject,\n DynamicFormValue\n} from '../interfaces/dynamic-form-item';\nimport { GetHintOptionsPipe } from '../pipes/get-hint-options.pipe';\nimport { GetOrderedFieldControlsPipe } from '../pipes/get-ordered-form-controls.pipe';\n\nlet formUniqueId = 0;\n\nexport type FormGeneratorAcceptableItems = DynamicFormItem[] | Observable<DynamicFormItem[]>;\n\nexport const FDP_FORM_IGNORED_STATUSES: FormControlStatus[] = ['INVALID', 'PENDING', 'DISABLED'];\n\nexport interface SubmitFormEventResult {\n /**\n * @description Indicator if validation has been passed.\n */\n success: boolean;\n /**\n * @description Formatted form value.\n */\n value: DynamicFormValue | null;\n}\n\n/**\n * @description Form Generator component represents a high-level component\n * which includes @see FormGroup inside.\n */\n@Component({\n selector: 'fdp-form-generator',\n templateUrl: './form-generator.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FDP_DO_CHECK,\n useFactory: (formGenerator: FormGeneratorComponent) => formGenerator.doCheck$,\n deps: [FormGeneratorComponent]\n },\n {\n provide: FDP_FORM_SUBMIT,\n useFactory: (formGenerator: FormGeneratorComponent) => formGenerator.ngSubmit$,\n deps: [FormGeneratorComponent]\n }\n ],\n imports: [\n BusyIndicatorModule,\n FdpFormGroupModule,\n FormsModule,\n ReactiveFormsModule,\n NgTemplateOutlet,\n DynamicFormControlFieldDirective,\n FormGeneratorFieldComponent,\n SkeletonComponent,\n GetOrderedFieldControlsPipe,\n GetHintOptionsPipe\n ]\n})\nexport class FormGeneratorComponent implements OnDestroy, OnChanges {\n /** @description Unique form name */\n @Input()\n formName = `fdp-form-generator-${formUniqueId++}`;\n\n /**\n * @description List of @see DynamicFormItem representing the list of items\n * to be rendered in the form.\n */\n @Input()\n set formItems(formItems: FormGeneratorAcceptableItems) {\n if (!formItems) {\n return;\n }\n\n formItems = isObservable(formItems) ? formItems : of(formItems);\n\n this._onFormItemsChange(formItems);\n }\n get formItems(): FormGeneratorAcceptableItems {\n return this._formItems;\n }\n\n /**\n * @description Form main title.\n */\n @Input()\n mainTitle: Nullable<string>;\n\n /**\n * Whether to hide main title. Default is false.\n */\n @Input()\n hideMainTItle = false;\n\n /**\n * @description\n * Hint for the main title\n */\n @Input()\n hint: HintInput;\n\n /**\n * @description Specify the column layout in the format `XLn-Ln-Mn-Sn`\n * where n is the number of columns and can be different for each size.\n * eg: XL2-L2-M2-S1 would create 2-column layouts for XL, L,\n * and M sizes and single-column layout for S size.\n */\n @Input()\n columnLayout: Nullable<string>;\n\n /**\n * Defines label's column layout.\n */\n @Input()\n labelColumnLayout: ColumnLayout = DefaultVerticalLabelLayout;\n\n /**\n * Defines field's column layout.\n */\n @Input()\n fieldColumnLayout: ColumnLayout = DefaultVerticalFieldLayout;\n\n /**\n * Defines gap column layout.\n */\n @Input()\n gapColumnLayout: ColumnLayout = DefaultGapLayout;\n\n /** Whether all form items should have identical layout provided for form group. */\n @Input()\n unifiedLayout = true;\n\n /** Inline column layout */\n @Input()\n inlineColumnLayout: ColumnLayout = DefaultVerticalFieldLayout;\n\n /**\n * @hidden\n * Removes extra empty row.\n * TODO: remove after #7533 has been fixed.\n */\n @Input()\n noAdditionalContent = false;\n\n /**\n * @description Event which notifies parent component that the form has been successfully created\n * and all controls are in place.\n */\n @Output()\n formCreated = new EventEmitter<DynamicFormGroup>();\n\n /**\n * @description Event which notifies parent component that the form has been successfully validated\n * and submitted. Contains form\n */\n @Output()\n formSubmitted = new EventEmitter<DynamicFormValue>();\n\n /**\n * @description Event which notifies parent component that the form was submitted.\n */\n @Output()\n formSubmittedStatus = new EventEmitter<SubmitFormEventResult>();\n\n /**\n * @description Represents the form instance. @see NgForm\n */\n @ViewChild(NgForm)\n ngForm: NgForm;\n\n /** Inner form group directive. */\n @ViewChild(FormGroupDirective)\n formGroup: FormGroupDirective;\n\n /** Inner form fields */\n @ViewChildren(FormGeneratorFieldComponent)\n fields: QueryList<FormGeneratorFieldComponent>;\n\n /** @hidden */\n doCheck$ = new Subject<void>();\n\n /** @hidden */\n ngSubmit$ = new Subject<void>();\n\n /** Array of form field controls. */\n get formFields(): PlatformFormFieldControl[] {\n return this.fields\n ?.toArray()\n .filter((field) => !!field.fieldRenderer?.control)\n .map((field) => field.fieldRenderer.control!);\n }\n\n /**\n * @description Dynamically generated form. @see FormGeneratorService\n */\n form: DynamicFormGroup;\n /**\n * @description List of the form controls.\n */\n formControlItems: DynamicFormGroupControl[];\n\n /**\n * Set of flags representing if particular form item should be visible to the user.\n */\n shouldShowFields: { [key: string]: boolean } = {};\n\n /**\n * Flag representing that form is loading\n */\n formLoading = true;\n\n /**\n * Stream of form loading state.\n */\n loading$ = new BehaviorSubject<boolean>(this.formLoading);\n\n /**\n * Stream of last form submission status.\n */\n formSubmittedStatus$ = new Subject<SubmitFormEventResult>();\n\n /**\n * Stream of last form submission value.\n */\n formValue$ = new BehaviorSubject<DynamicFormValue>({});\n\n /**\n * @hidden\n * To differentiate between first loading when skeletons be shown and subsequent loadings when busy indicator be shown\n */\n _firstLoadingDone = false;\n\n /**\n * @hidden\n */\n hintOptions: HintOptions;\n\n /** @hidden */\n _errorModels: { type: string; value: any }[] = [];\n\n /**\n * @hidden\n */\n private _formItems: FormGeneratorAcceptableItems;\n\n /**\n * @hidden\n */\n private _formValueSubscription: Subscription;\n\n /** @hidden */\n private _refresh$ = new Subject<void>();\n\n /**\n * @hidden\n * An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing)\n */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _defaultHintOptions: FieldHintOptions;\n\n /** @hidden */\n private _ngSubmitSubscription: Subscription | undefined;\n\n /** @hidden */\n private _mappedFormitems: Map<string, DynamicFormItemMap> = new Map();\n\n /** @hidden */\n constructor(\n private _fgService: FormGeneratorService,\n private _cd: ChangeDetectorRef,\n @Inject(FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS) _providedHintOptions: FieldHintOptions\n ) {\n this._defaultHintOptions = {\n ...defaultFormGeneratorHintOptions,\n ..._providedHintOptions\n };\n\n this._errorModels = this._getErrors();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hint) {\n if (typeof this.hint === 'string' || this.hint instanceof TemplateRef) {\n this.hintOptions = {\n ...this._defaultHintOptions,\n content: this.hint\n };\n } else {\n this.hintOptions = {\n ...this._defaultHintOptions,\n ...this.hint\n };\n }\n }\n }\n\n /**\n * @hidden\n */\n ngOnDestroy(): void {\n this._ngSubmitSubscription?.unsubscribe();\n }\n\n /**\n * Refreshes form items visibility with 'when' condition.\n */\n async refreshStepsVisibility(): Promise<void> {\n this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n this._cd.markForCheck();\n }\n\n /**\n * @hidden\n */\n async _onSubmit(): Promise<void> {\n this.form.markAllAsTouched();\n this._cd.detectChanges();\n this.doCheck$.next();\n\n const formValue = await this._fgService.getFormValue(this.form);\n\n this.formSubmittedStatus.emit({ success: !this.form.invalid, value: formValue });\n this.formSubmittedStatus$.next({ success: !this.form.invalid, value: formValue });\n\n if (this.form.invalid) {\n return;\n }\n this.formSubmitted.emit(formValue);\n this.formValue$.next(formValue);\n\n this.form.markAsPristine();\n }\n\n /**\n * Adds new control to an existing form.\n * @param control Control configuration to add.\n * @param path Path of the control.\n */\n async addControl(control: DynamicFormItem, path?: string[]): Promise<void> {\n this._addControlToFormItems(control, path);\n this._fgService.addControl(control, this.form, path);\n\n this.formControlItems = this._getOrderedControls(this.form.controls);\n\n this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n }\n\n /**\n * Removes the control with the given name by the given path.\n * @param name Name of the control.\n * @param path Path of the control.\n */\n async removeControl(name: string, path: string[]): Promise<void> {\n this._removeControlFromItems(name, path);\n this._fgService.removeControl(name, this.form, path);\n this.formControlItems = this._getOrderedControls(this.form.controls);\n\n this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n }\n\n /**\n *\n * @hidden\n */\n _trackFn(index: number, value: DynamicFormGroupControl): string {\n return `${index}_${value.formItem.name}`;\n }\n\n /** @hidden */\n _groupTrackFn(index: number, value: DynamicFormGroupControl): string {\n return (value as DynamicFormControlGroup).formItem.name;\n }\n\n /**\n *\n * @description Programmatically submit form.\n * This method also calls validation for the form items.\n */\n submit(): void {\n this.formGroup.onSubmit(new Event('submit'));\n }\n\n /** @hidden */\n _isAdvancedError(error: any): error is DynamicFormItemValidationObject {\n return error.heading && error.description && error.type;\n }\n\n /** @hidden */\n _errorsTrackBy(_: number, error: { type: string; value: any }): string {\n return error.type;\n }\n\n /**\n * @hidden\n */\n private async _generateForm(): Promise<void> {\n this.formLoading = true;\n this.loading$.next(this.formLoading);\n\n const form = await this._fgService.generateForm(this.formName, this._mappedFormitems);\n\n this._formValueSubscription?.unsubscribe();\n\n this.form = form;\n\n this.formControlItems = this._getOrderedControls(form.controls);\n\n this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n\n this._formValueSubscription = this.form.valueChanges\n .pipe(debounceTime(50), takeUntilDestroyed(this._destroyRef))\n .subscribe(async () => {\n this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n this._cd.markForCheck();\n });\n\n this.formLoading = false;\n this._firstLoadingDone = true;\n\n this._cd.detectChanges();\n\n this.formCreated.emit(this.form);\n this.loading$.next(this.formLoading);\n\n if (!this.formGroup) {\n return;\n }\n\n this._listenToSubmit();\n }\n\n /** @hidden */\n private _getOrderedControls(controls: DynamicFormGroupControls): (DynamicFormControl | DynamicFormControlGroup)[] {\n return Object.values(controls).sort(\n (a, b) => (a.formItem?.rank ?? -Infinity) - (b.formItem?.rank ?? -Infinity)\n );\n }\n\n /** @hidden */\n private _getErrors(): { type: string; value: any }[] {\n const returnErrors: { type: string; value: any }[] = [];\n const registeredErrors = this._fgService.validationErrorHints;\n Object.entries(registeredErrors).forEach((type) => {\n const [errorType, errorValue] = type;\n\n returnErrors.push({\n type: errorType,\n value: errorValue\n });\n });\n\n return returnErrors;\n }\n\n /** @hidden */\n private _listenToSubmit(): void {\n this._ngSubmitSubscription?.unsubscribe();\n this._ngSubmitSubscription = this.formGroup.ngSubmit\n .pipe(\n tap(() => {\n this.ngSubmit$.next();\n }),\n switchMap(() =>\n this.formGroup.statusChanges!.pipe(\n startWith(this.formGroup.status),\n filter((status: FormControlStatus) => status !== 'PENDING'),\n take(1),\n takeUntilDestroyed(this._destroyRef)\n )\n )\n )\n .subscribe(async () => {\n await this._onSubmit();\n this._listenToSubmit();\n });\n }\n\n /** @hidden */\n private _onFormItemsChange(items: Observable<DynamicFormItem[]>): void {\n this._refresh$.next();\n this._refresh$.complete();\n\n this._refresh$ = new Subject();\n\n items.pipe(takeUntil(merge(this._refresh$, destroyObservable(this._destroyRef)))).subscribe((formItems) => {\n this._mappedFormitems = mapFormItems(formItems);\n this._generateForm();\n });\n }\n\n /** @hidden */\n private _applyRank(items: DynamicFormItem[]): DynamicFormItem[] {\n items = items.map((item, index) => {\n item.rank = item.rank || index;\n if (item.items) {\n item.items = this._applyRank(item.items);\n }\n return item;\n });\n\n return items;\n }\n\n /** @hidden */\n private _addControlToFormItems(item: DynamicFormItem, path?: string[]): void {\n if (!path) {\n this._mappedFormitems.set(item.name, transformFormItem(item, this._mappedFormitems.size));\n return;\n }\n\n const parentItem = getParentItem(path, this._mappedFormitems);\n\n if (!parentItem || isFormFieldItem(parentItem)) {\n return;\n }\n\n parentItem.items = parentItem.items || new Map();\n parentItem.items.set(item.name, transformFormItem(item, parentItem.items.size));\n }\n\n /** @hidden */\n private _removeControlFromItems(name: string, path?: string[]): void {\n if (!path) {\n this._mappedFormitems.delete(name);\n return;\n }\n\n const parentItem = getParentItem(path, this._mappedFormitems);\n\n if (!parentItem || isFormFieldItem(parentItem)) {\n return;\n }\n\n parentItem.items?.delete(name);\n }\n}\n","@if (_firstLoadingDone) {\n <fd-busy-indicator [loading]=\"formLoading\" [block]=\"true\">\n @if (form) {\n <fdp-form-group\n [hint]=\"hint\"\n [mainTitle]=\"mainTitle\"\n [hideMainTItle]=\"hideMainTItle\"\n [formGroup]=\"form\"\n [columnLayout]=\"columnLayout\"\n [labelColumnLayout]=\"labelColumnLayout\"\n [fieldColumnLayout]=\"fieldColumnLayout\"\n [gapColumnLayout]=\"gapColumnLayout\"\n [unifiedLayout]=\"unifiedLayout\"\n [inlineColumnLayout]=\"inlineColumnLayout\"\n [useForm]=\"true\"\n >\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n @for (field of formControlItems; track _trackFn($index, field)) {\n <ng-template\n [ngTemplateOutlet]=\"field.type === 'field' ? fieldRenderer : groupRenderer\"\n [ngTemplateOutletContext]=\"{\n field: field,\n formFieldName: field.formItem.name,\n rank: field.formItem?.rank || 0\n }\"\n ></ng-template>\n <ng-template\n #fieldRenderer\n let-field=\"field\"\n let-formFieldName=\"formFieldName\"\n let-formGroupName=\"formGroupName\"\n let-rank=\"rank\"\n >\n <ng-container\n *fdpDynamicFormControlField=\"field; show: shouldShowFields[field.formItem.name] !== false\"\n >\n <fdp-form-generator-field\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [shouldShow]=\"shouldShowFields[field.formItem.name] !== false\"\n [field]=\"field\"\n [formFieldName]=\"formFieldName\"\n [formGroupNamePath]=\"formGroupName\"\n [rank]=\"rank\"\n ></fdp-form-generator-field>\n </ng-container>\n </ng-template>\n <ng-template #groupRenderer>\n <fdp-form-field-group\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [label]=\"field.formItem.message || ''\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [formName]=\"field.formItem.name\"\n >\n @for (\n groupField of field | getOrderedFieldControls;\n track _groupTrackFn($index, groupField)\n ) {\n <ng-container\n *fdpDynamicFormControlField=\"\n groupField;\n show: shouldShowFields[groupField.formItem.name!] !== false\n \"\n >\n <fdp-form-generator-field\n [hintOptions]=\"groupField.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [field]=\"groupField\"\n [shouldShow]=\"shouldShowFields[groupField.formItem.name!] !== false\"\n [formFieldName]=\"groupField.formItem.name\"\n [formGroupNamePath]=\"field.formItem.name\"\n [rank]=\"groupField.formItem.rank || 0\"\n ></fdp-form-generator-field>\n </ng-container>\n }\n </fdp-form-field-group>\n </ng-template>\n }\n @if (!noAdditionalContent) {\n <fdp-form-field [column]=\"1\" [rank]=\"formControlItems.length + 1\">\n <!-- For user-defined elements, like submit button -->\n <ng-content></ng-content>\n </fdp-form-field>\n }\n </fdp-form-group>\n }\n </fd-busy-indicator>\n} @else {\n <fd-skeleton width=\"100%\" height=\"100px\" [style.padding.rem]=\"1\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\nimport { DynamicFormGeneratorCheckboxComponent } from './controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component';\nimport { DynamicFormGeneratorDatepickerComponent } from './controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component';\nimport { DynamicFormGeneratorEditorComponent } from './controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component';\nimport { DynamicFormGeneratorInputComponent } from './controls/dynamic-form-generator-input/dynamic-form-generator-input.component';\nimport { DynamicFormGeneratorMultiInputComponent } from './controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component';\nimport { DynamicFormGeneratorObjectStatusComponent } from './controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component';\nimport { DynamicFormGeneratorRadioComponent } from './controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component';\nimport { DynamicFormGeneratorSelectComponent } from './controls/dynamic-form-generator-select/dynamic-form-generator-select.component';\nimport { DynamicFormGeneratorSwitchComponent } from './controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component';\nimport { DynamicFormControlFieldDirective } from './dynamic-form-control-field.directive';\nimport { DynamicFormControlDirective } from './dynamic-form-control.directive';\nimport { FormGeneratorComponentsAccessorService } from './form-generator-components-accessor.service';\nimport { FormGeneratorFieldComponent } from './form-generator-field/form-generator-field.component';\nimport { FormGeneratorService } from './form-generator.service';\nimport { FormGeneratorComponent } from './form-generator/form-generator.component';\nimport { FormGeneratorModuleConfig } from './interfaces/form-generator-module-config';\nimport { GetHintOptionsPipe } from './pipes/get-hint-options.pipe';\nimport { GetOrderedFieldControlsPipe } from './pipes/get-ordered-form-controls.pipe';\nimport {\n FORM_GENERATOR_CONFIG,\n FORM_GENERATOR_ITEM_CONFIG,\n defaultFormGeneratorConfigProvider,\n defaultFormGeneratorItemConfigProvider\n} from './providers/providers';\n\n/**\n * Adds Form Generator functionality to your application.\n *\n * Can be imported in two ways:\n * * Plain PlatformFormGeneratorModule with default configuration\n * * With `withConfig()` method which allows passing custom default configuration.\n */\n@NgModule({\n imports: [\n FormGeneratorComponent,\n DynamicFormControlFieldDirective,\n DynamicFormControlDirective,\n DynamicFormGeneratorCheckboxComponent,\n DynamicFormGeneratorInputComponent,\n DynamicFormGeneratorEditorComponent,\n DynamicFormGeneratorSelectComponent,\n DynamicFormGeneratorRadioComponent,\n DynamicFormGeneratorDatepickerComponent,\n DynamicFormGeneratorSwitchComponent,\n FormGeneratorFieldComponent,\n DynamicFormGeneratorMultiInputComponent,\n GetOrderedFieldControlsPipe,\n DynamicFormGeneratorObjectStatusComponent,\n GetHintOptionsPipe\n ],\n providers: [\n FormGeneratorService,\n FormGeneratorComponentsAccessorService,\n defaultFormGeneratorItemConfigProvider,\n defaultFormGeneratorConfigProvider\n ],\n exports: [\n FormGeneratorComponent,\n DynamicFormControlFieldDirective,\n DynamicFormControlDirective,\n DynamicFormGeneratorCheckboxComponent,\n DynamicFormGeneratorInputComponent,\n DynamicFormGeneratorEditorComponent,\n DynamicFormGeneratorSelectComponent,\n DynamicFormGeneratorRadioComponent,\n DynamicFormGeneratorDatepickerComponent,\n DynamicFormGeneratorSwitchComponent,\n FormGeneratorFieldComponent,\n ContentDensityModule,\n DynamicFormGeneratorObjectStatusComponent,\n GetHintOptionsPipe\n ]\n})\nexport class PlatformFormGeneratorModule {\n /**\n * Allows configuring module on a global level with custom configuration.\n * @param config User's custom configuration.\n */\n static withConfig(config: Partial<FormGeneratorModuleConfig>): ModuleWithProviders<PlatformFormGeneratorModule> {\n return {\n ngModule: PlatformFormGeneratorModule,\n providers: [\n {\n provide: FORM_GENERATOR_ITEM_CONFIG,\n useValue: config.itemConfig\n },\n {\n provide: FORM_GENERATOR_CONFIG,\n useValue: config.formConfig\n }\n ]\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { InputComponent } from './input.component';\n\n@NgModule({\n imports: [InputComponent],\n exports: [InputComponent]\n})\nexport class PlatformInputModule {}\n","import { InjectionToken } from '@angular/core';\n\nexport const CSS_CLASS_NAME = {\n host: 'fdp-input-group',\n input: 'fd-input-group__input',\n addon: 'fd-input-group__addon',\n addonButton: 'fd-input-group__addon--button',\n button: 'fd-input-group__button'\n} as const;\n\nexport const INPUT_GROUP_CHILD_TOKEN = new InjectionToken<string>('INPUT_GROUP_CHILD_TOKEN');\n","import { ChangeDetectionStrategy, Component, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { CSS_CLASS_NAME } from './constants';\n\n/**\n * Fundamental input group addon body component\n */\n@Component({\n selector: 'fdp-input-group-addon-body',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [contentDensityObserverProviders()],\n imports: [ContentDensityModule]\n})\nexport class InputGroupAddonBodyComponent implements OnInit {\n /**\n * indicates if addon contains a button\n */\n @Input()\n set hasButton(hasButton: boolean) {\n if (hasButton) {\n this._addClassNameToHostElement(CSS_CLASS_NAME.addonButton);\n } else {\n this._removeClassNameFromHostElement(CSS_CLASS_NAME.addonButton);\n }\n }\n\n /** @hidden */\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _renderer: Renderer2,\n contentDensityObserver: ContentDensityObserver\n ) {\n contentDensityObserver.subscribe();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._addClassNameToHostElement(CSS_CLASS_NAME.addon);\n }\n\n /** @hidden */\n private _addClassNameToHostElement(className: string): void {\n this._renderer.addClass(this._elementRef.nativeElement, className);\n }\n\n /** @hidden */\n private _removeClassNameFromHostElement(className: string): void {\n this._renderer.removeClass(this._elementRef.nativeElement, className);\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n Provider,\n Renderer2,\n TemplateRef,\n ViewChild,\n forwardRef\n} from '@angular/core';\n\nimport { ButtonComponent, ButtonModel, FDP_BUTTON } from '@fundamental-ngx/platform/button';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { BaseButton, FD_BUTTON_COMPONENT } from '@fundamental-ngx/core/button';\nimport { CSS_CLASS_NAME, INPUT_GROUP_CHILD_TOKEN } from './constants';\n\nexport const inputGroupAddonChildProvider: Provider = {\n provide: INPUT_GROUP_CHILD_TOKEN,\n useExisting: forwardRef(() => InputGroupAddonComponent)\n};\n\n/**\n * Fundamental input group addon component\n *\n * This component is intended to be used inside `<fdp-input-group>`\n *\n *\n * Input group addon can contain a plain text:\n * ```\n * <fdp-input-group-addon>$</fdp-input-group-addon>\n * ```\n * Icon:\n * ```\n * <fdp-input-group-addon><i class=\"sap-icon--employee\"></i></fdp-input-group-addon>\n * ```\n * Button component:\n * ```\n * <fdp-input-group-addon><fdp-button label=\"Action\"></fdp-button></fdp-input-group-addon>\n * ```\n *\n */\n@Component({\n selector: 'fdp-input-group-addon',\n template: '<ng-template><ng-content></ng-content></ng-template>',\n providers: [inputGroupAddonChildProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class InputGroupAddonComponent implements AfterContentInit {\n /** @hidden */\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n this._setButtonControlOptions();\n }\n get disabled(): boolean {\n return this._disabled;\n }\n\n /** @hidden */\n @ViewChild(TemplateRef)\n contentTemplateRef: TemplateRef<any>;\n\n /** @hidden */\n @ContentChild(FDP_BUTTON)\n platformButton: Nullable<ButtonModel>;\n\n /** @hidden */\n @ContentChild(FD_BUTTON_COMPONENT)\n coreButton: Nullable<BaseButton>;\n\n /** @hidden */\n @ContentChild(ButtonComponent, { read: ElementRef })\n set buttonElementRef(buttonComponentElementRef: ElementRef<HTMLElement>) {\n this._setButtonElementClass(buttonComponentElementRef?.nativeElement);\n }\n\n /** @hidden */\n get button(): Nullable<ButtonModel> {\n return this.platformButton || this.coreButton;\n }\n\n /** @hidden */\n private _disabled = false;\n\n /** @hidden */\n constructor(private _renderer: Renderer2) {}\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._setButtonControlOptions();\n }\n\n /** @hidden */\n private _setButtonControlOptions(): void {\n const button = this.platformButton || this.coreButton;\n\n if (!button) {\n return;\n }\n\n button.fdType = 'transparent';\n button.disabled = this._disabled;\n\n button.markForCheck();\n }\n\n /** @hidden */\n private _setButtonElementClass(buttonComponentElement: HTMLElement): void {\n if (!buttonComponentElement) {\n return;\n }\n const button = buttonComponentElement.querySelector('button');\n this._renderer.addClass(button, CSS_CLASS_NAME.button);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for platform input group\n */\n@Injectable({ providedIn: 'root' })\nexport class InputGroupConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /** @hidden */\n constructor(platformConfig: PlatformConfig) {\n this.contentDensity = platformConfig.contentDensity;\n }\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(obj: Partial<InputGroupConfig>): (platformConfig: PlatformConfig) => InputGroupConfig {\n const useFactory = (platformConfig: PlatformConfig): InputGroupConfig =>\n Object.assign(new InputGroupConfig(platformConfig), obj);\n return useFactory;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, Provider, forwardRef } from '@angular/core';\n\nimport { InputType } from '../input/input.component';\nimport { INPUT_GROUP_CHILD_TOKEN } from './constants';\n\n/**\n * fdp-input-group needs it's own input component to\n * register INPUT_GROUP_CHILD in order to render\n * input group content children in the order that they are placed\n *\n */\n\nexport const inputGroupInputChildProvider: Provider = {\n provide: INPUT_GROUP_CHILD_TOKEN,\n useExisting: forwardRef(() => InputGroupInputComponent)\n};\n\n/**\n * Fundamental input group input component\n *\n * This component is intended to be used inside `<fdp-input-group>`\n *\n * Example:\n * ```\n * <fdp-input-group name=\"group\">\n * <fdp-input-group-input type=\"email\"></fdp-input-group-input>\n * </fdp-input-group>\n * ```\n *\n */\n@Component({\n selector: 'fdp-input-group-input',\n template: '',\n providers: [inputGroupInputChildProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class InputGroupInputComponent {\n /** InputType 'text' | 'number' | 'email' | 'password' */\n @Input()\n type: InputType = 'text';\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n forwardRef,\n Input,\n OnInit,\n QueryList,\n Renderer2,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CvaControl, CvaDirective, FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { warnOnce } from '@fundamental-ngx/cdk/utils';\nimport { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { startWith } from 'rxjs/operators';\nimport { InputComponent } from '../input/input.component';\nimport { InputGroupAddonComponent } from './addon.component';\nimport { CSS_CLASS_NAME, INPUT_GROUP_CHILD_TOKEN } from './constants';\nimport { InputGroupConfig } from './input-group.config';\nimport { InputGroupInputComponent } from './input.component';\n\n/**\n * Fundamental input group component\n *\n * ```html\n * <fdp-input-group>\n * <fdp-input-group-addon>$</fdp-input-group-addon>\n * <fdp-input-group-input type=\"number\"></fdp-input-group-input>\n * <fdp-input-group-addon>0.00</fdp-input-group-addon>\n * </fdp-input-group>\n * ```\n *\n */\n@Component({\n selector: 'fdp-input-group',\n templateUrl: './input-group.component.html',\n styleUrl: './input-group.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: CvaDirective,\n inputs: ['placeholder', 'disabled', 'readonly', 'state', 'name', 'stateMessage']\n }\n ],\n providers: [\n CvaControl,\n { provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => InputGroupComponent), multi: true },\n contentDensityObserverProviders()\n ],\n imports: [NgTemplateOutlet, InputGroupModule, FormControlComponent, FormsModule]\n})\nexport class InputGroupComponent implements OnInit, AfterContentInit {\n /** Input value */\n @Input()\n set value(value: any) {\n this._cvaControl.cvaDirective?.setValue(value);\n }\n get value(): any {\n return this._cvaControl.cvaDirective?.value;\n }\n\n /** @hidden */\n @ContentChildren(INPUT_GROUP_CHILD_TOKEN)\n _children: QueryList<InputGroupInputComponent | InputGroupAddonComponent>;\n\n /** @hidden */\n @ContentChild(InputGroupInputComponent)\n _input: InputGroupInputComponent;\n\n /** @hidden */\n @ViewChild(InputComponent, { read: ElementRef })\n set _inputComponentElement(inputComponentElementRef: ElementRef<HTMLElement>) {\n this._setInputElementClass(inputComponentElementRef?.nativeElement);\n }\n\n /** @hidden */\n _beforeInputAddons: InputGroupAddonComponent[] = [];\n\n /** @hidden */\n _afterInputAddons: InputGroupAddonComponent[] = [];\n\n /** @hidden */\n constructor(\n readonly _cvaControl: CvaControl<string | number>,\n private _renderer: Renderer2,\n protected _hostElementRef: ElementRef<HTMLElement>,\n protected _inputGroupConfig: InputGroupConfig\n ) {\n warnOnce(\n `[Deprecated] Platform Input Group Component is deprecated and will be removed in the next major version.\n Please use Core implementation of Input Group Component instead.`\n );\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._cvaControl.listenToChanges();\n /**\n * Assign predefined className to host element\n * to make css selector stronger\n */\n this._addClassNameToHostElement(CSS_CLASS_NAME.host);\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._listenToChildrenQueryListChanges();\n }\n\n /**\n * @hidden\n * override base functionality to catch new disabled state\n */\n setDisabledState(disabled: boolean): void {\n this._cvaControl.cvaDirective?.setDisabledState(disabled);\n this._setAddonsOptions();\n }\n\n /** @hidden */\n _onChangeInputValue(value: string): void {\n this.value = value;\n }\n\n /** @hidden */\n _onKeyPress(event: KeyboardEvent): void {\n // prevent typing non-digit chars\n if (this._input.type === 'number') {\n if (!event.key.match(/([0-9]|[-]|[,]|[.])/)) {\n event.preventDefault();\n }\n }\n }\n\n /** @hidden */\n private _listenToChildrenQueryListChanges(): void {\n this._children.changes.pipe(startWith(this._children)).subscribe(() => {\n this._createAddonsGroups();\n this._setAddonsOptions();\n });\n }\n\n /** @hidden */\n private _setInputElementClass(inputComponentElement: HTMLElement): void {\n if (!inputComponentElement) {\n return;\n }\n\n const inputElement = inputComponentElement.querySelector('input');\n this._renderer.addClass(inputElement, CSS_CLASS_NAME.input);\n }\n\n /** @hidden */\n private _createAddonsGroups(): void {\n const childrenList = this._children.toArray();\n const inputChildIndex = childrenList.findIndex((child) => this._isInputChild(child));\n\n // reset group's containers\n this._beforeInputAddons = [];\n this._afterInputAddons = [];\n\n childrenList.forEach((child, index) => {\n if (!this._isAddonChild(child)) {\n return;\n }\n if (index < inputChildIndex) {\n this._beforeInputAddons.push(child);\n }\n if (index > inputChildIndex) {\n this._afterInputAddons.push(child);\n }\n });\n }\n\n /** @hidden */\n private _isInputChild(child: unknown): child is InputGroupInputComponent {\n return child instanceof InputGroupInputComponent;\n }\n\n /** @hidden */\n private _isAddonChild(child: unknown): child is InputGroupAddonComponent {\n return child instanceof InputGroupAddonComponent;\n }\n\n /** @hidden */\n private _setAddonsOptions(): void {\n const before = this._beforeInputAddons || [];\n const after = this._afterInputAddons || [];\n [...before, ...after].forEach((addon) => {\n addon.disabled = this._cvaControl.cvaDirective?.disabled === true;\n });\n }\n\n /** @hidden */\n private _addClassNameToHostElement(className: string): void {\n this._renderer.addClass(this._hostElementRef.nativeElement, className);\n }\n}\n","<fd-input-group\n [disabled]=\"!!_cvaControl.cvaDirective?.disabled\"\n [(ngModel)]=\"value\"\n [state]=\"_cvaControl?.cvaDirective?.normalizedState$() || 'default'\"\n [stateMessage]=\"_cvaControl.cvaDirective?.stateMessage\"\n>\n <!-- Before input addons area -->\n @for (addon of _beforeInputAddons; track addon) {\n <span fd-input-group-addon [button]=\"!!addon.button\">\n <ng-template [ngTemplateOutlet]=\"addon.contentTemplateRef\"></ng-template>\n </span>\n }\n @if (_input) {\n <input\n [attr.name]=\"_cvaControl.cvaDirective?.name\"\n [attr.id]=\"_cvaControl.cvaDirective?.id\"\n [attr.placeholder]=\"_cvaControl.cvaDirective?.placeholder\"\n [type]=\"_input.type\"\n [disabled]=\"!!_cvaControl.cvaDirective?.disabled\"\n [class.is-disabled]=\"!!_cvaControl.cvaDirective?.disabled\"\n [(ngModel)]=\"value\"\n [ariaLabel]=\"_cvaControl.cvaDirective?.ariaLabel\"\n [ariaLabelledBy]=\"_cvaControl.cvaDirective?.ariaLabelledBy\"\n [attr.required]=\"_cvaControl.cvaDirective?.required\"\n (input)=\"_onChangeInputValue($any($event.target)?.value)\"\n (focus)=\"_cvaControl.cvaDirective?._onFocusChanged(true)\"\n (blur)=\"_cvaControl.cvaDirective?._onFocusChanged(false)\"\n (keypress)=\"_onKeyPress($event)\"\n fd-input-group-input\n fd-form-control\n />\n }\n <!-- Before input addons area -->\n @for (addon of _afterInputAddons; track addon) {\n <span fd-input-group-addon [button]=\"!!addon.button\">\n <ng-template [ngTemplateOutlet]=\"addon.contentTemplateRef\"></ng-template>\n </span>\n }\n</fd-input-group>\n","import { NgModule } from '@angular/core';\n\nimport { InputGroupAddonBodyComponent } from './addon-body.component';\nimport { InputGroupAddonComponent } from './addon.component';\nimport { InputGroupComponent } from './input-group.component';\nimport { InputGroupInputComponent } from './input.component';\n\n@NgModule({\n imports: [InputGroupComponent, InputGroupAddonComponent, InputGroupAddonBodyComponent, InputGroupInputComponent],\n exports: [InputGroupComponent, InputGroupAddonComponent, InputGroupInputComponent]\n})\nexport class PlatformInputGroupModule {}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { DataProvider, MatchingStrategy, PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Multi-Combobox\n */\n@Injectable({ providedIn: 'root' })\nexport class MultiComboboxConfig {\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n\n /**\n * String matching strategy for typeahead list. Default: 'starts with per term'\n */\n matchingStrategy: MatchingStrategy = MatchingStrategy.STARTS_WITH_PER_TERM;\n\n /**\n * Maps data providers\n */\n providers: Map<string, DataProvider<any>> | null = new Map();\n\n /** @hidden */\n constructor(platformConfig: PlatformConfig) {\n this.contentDensity = platformConfig.contentDensity;\n }\n\n /**\n * Create Provider factory function\n */\n static createProviderFactory(\n obj: Partial<MultiComboboxConfig>\n ): (platformConfig: PlatformConfig) => MultiComboboxConfig {\n const useFactory = (platformConfig: PlatformConfig): MultiComboboxConfig =>\n Object.assign(new MultiComboboxConfig(platformConfig), obj);\n return useFactory;\n }\n}\n","import {\n ALT,\n BACKSPACE,\n CONTROL,\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n LEFT_ARROW,\n RIGHT_ARROW,\n SHIFT,\n TAB,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n InjectionToken,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n signal,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport equal from 'fast-deep-equal';\nimport { fromEvent, isObservable, Observable, Subject, Subscription, timer } from 'rxjs';\nimport { skip } from 'rxjs/operators';\n\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport {\n ContentDensity,\n FocusEscapeDirection,\n KeyUtil,\n Nullable,\n RangeSelector,\n TemplateDirective\n} from '@fundamental-ngx/cdk/utils';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { ListComponent } from '@fundamental-ngx/core/list';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport {\n ArrayMultiComboBoxDataSource,\n coerceArraySafe,\n CollectionBaseInput,\n isDataSource,\n isFunction,\n isJsObject,\n isOptionItem,\n isSelectableOptionItem,\n isString,\n MatchingBy,\n MatchingStrategy,\n MultiComboBoxDataSource,\n ObservableMultiComboBoxDataSource,\n SelectableOptionItem\n} from '@fundamental-ngx/platform/shared';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FD_LANGUAGE, FdLanguage, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { TextAlignment } from '../../combobox';\nimport { MultiComboboxConfig } from '../multi-combobox.config';\n\nexport const MAP_LIMIT = new InjectionToken<number>('Map limit≥', { factory: () => 12 });\n\nexport type FdpMultiComboboxDataSource<T> = MultiComboBoxDataSource<T> | Observable<T[]> | T[];\n\nexport class MultiComboboxSelectionChangeEvent {\n /**\n * Multi Combobox selection change event\n * @param source Multi Combobox component\n * @param selectedItems Selected items\n */\n constructor(\n public source: BaseMultiCombobox,\n public selectedItems: SelectableOptionItem['value'] // Contains selected items\n ) {}\n}\n\n@Directive()\nexport abstract class BaseMultiCombobox extends CollectionBaseInput implements OnChanges, AfterViewInit, OnDestroy {\n /**\n * @hidden\n * Method to set input text as item label.\n */\n abstract setInputTextFromOptionItem(item: SelectableOptionItem): void;\n\n /**\n * @hidden\n * Toggle item selection.\n */\n abstract toggleSelection(item: SelectableOptionItem): void;\n\n /**\n * @hidden\n * Toggle item selection by input text value.\n */\n abstract toggleSelectionByInputText(): void;\n\n /** Provides selected items. */\n @Input()\n selectedItems: any[] = [];\n\n /** Provides maximum height for the optionPanel. */\n @Input()\n maxHeight = '250px';\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = false;\n /** Datasource for suggestion list. */\n @Input()\n set dataSource(value: FdpMultiComboboxDataSource<any>) {}\n\n get dataSource(): FdpMultiComboboxDataSource<any> {\n return this._dataSource;\n }\n\n /** Whether the autocomplete should be enabled; Enabled by default. */\n @Input()\n autoComplete = true;\n\n /**\n * TODO: Name of the entity for which DataProvider will be loaded. You can either pass list of\n * items or use this entityClass and internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input()\n entityClass: string;\n\n /** Whether the multi-combobox should be built on mobile mode. */\n @Input()\n mobile = false;\n\n /** Multi Combobox Mobile Configuration, it's applied only, when mobile is enabled. */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Tells the multi-combobox if we need to group items. */\n @Input()\n group = false;\n\n /** A field name to use to group data by (support dotted notation). */\n @Input()\n groupKey: string;\n\n /** The field to show data in secondary column. */\n @Input()\n secondaryKey: string;\n\n /** Show the second column (applicable for two columns layout). */\n @Input()\n showSecondaryText = false;\n\n /** Horizontally align text inside the second column (applicable for two columns layout). */\n @Input()\n secondaryTextAlignment: TextAlignment = 'right';\n\n /** Turns on/off Adjustable Width feature. */\n @Input()\n autoResize = false;\n /** Value of the multi combobox */\n @Input()\n set value(value: any) {\n super.setValue(value, true);\n }\n\n get value(): any {\n return super.getValue();\n }\n\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /** Sets title attribute to addon button. */\n @Input()\n addonIconTitle: string;\n\n /**\n * @deprecated Use the i18n module to modify the translation for this string.\n * Sets invalid entry message.\n * */\n @Input()\n invalidEntryMessage: Nullable<string>;\n\n /** Turns limitless mode, ON or OFF */\n @Input()\n limitless: boolean;\n\n /** Whether to open the dropdown when the addon button is clicked. */\n @Input()\n openDropdownOnAddOnClicked = true;\n\n /** Event emitted when item is selected. */\n @Output()\n selectionChange = new EventEmitter<MultiComboboxSelectionChangeEvent>();\n\n /** @hidden Emits event when the menu is opened/closed. */\n @Output()\n isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when data loading is started. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataRequested = new EventEmitter<void>();\n\n /** Event emitted when data loading is finished. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataReceived = new EventEmitter<void>();\n\n /** Emits event when the addon button is clicked. */\n @Output()\n addOnButtonClicked: EventEmitter<Event> = new EventEmitter<Event>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n listComponent: ListComponent;\n\n /** @hidden */\n @ViewChild('searchInputElement', { read: ElementRef })\n searchInputElement: ElementRef;\n\n /** @hidden */\n @ContentChildren(TemplateDirective)\n customTemplates: QueryList<TemplateDirective>;\n\n /**\n * @hidden\n * Custom Option item Template.\n */\n optionItemTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * Custom Group Header item Template.\n */\n groupItemTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * Custom Secondary item Template.\n */\n secondaryItemTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * Custom Selected option item Template.\n */\n selectedItemTemplate: TemplateRef<any>;\n\n /** @hidden */\n _contentDensity: ContentDensity;\n\n /** @hidden */\n listTemplate: TemplateRef<any>;\n\n /** Set the input text of the input. */\n set inputText(value: string) {\n this._inputTextValue = value;\n\n this.onTouched();\n }\n\n /** Get the input text of the input. */\n get inputText(): string {\n return this._inputTextValue || '';\n }\n\n /** Is empty search field. */\n get isEmptyValue(): boolean {\n return this.inputText.trim().length === 0;\n }\n\n /** @hidden */\n get isGroup(): boolean {\n return !!(this.group && this.groupKey);\n }\n\n /** Whether the Multi Input is opened. */\n isOpen = false;\n\n /**\n * @hidden\n * List of matched suggestions\n */\n _suggestions: SelectableOptionItem[];\n\n /**\n * @hidden\n * Grouped suggestions mapped to array.\n */\n _flatSuggestions: SelectableOptionItem[] = [];\n\n /** @hidden */\n _fullFlatSuggestions: SelectableOptionItem[] = [];\n\n /**\n * @hidden\n * List of selected suggestions\n */\n _selectedSuggestions: SelectableOptionItem[];\n\n /**\n * @hidden\n * Max width of list container\n */\n maxWidth: number;\n\n /**\n * @hidden\n * Min width of list container\n */\n minWidth: number;\n\n /**\n * @hidden\n * Need for opening mobile version\n */\n openChange = new Subject<boolean>();\n\n /** @hidden */\n selectedShown$ = signal(false);\n\n /** @hidden */\n protected readonly multiComboboxConfig = inject(MultiComboboxConfig);\n\n /** @hidden */\n protected readonly _rangeSelector = new RangeSelector();\n\n /** @hidden */\n protected readonly dialogConfig = inject(DialogConfig, { optional: true });\n\n /** @hidden */\n protected _dataSource: FdpMultiComboboxDataSource<any>;\n\n /** @hidden */\n private _inputTextValue: string;\n\n /** @hidden */\n private _previousInputText: string;\n\n /** @hidden */\n private _matchingStrategy: MatchingStrategy = this.multiComboboxConfig.matchingStrategy;\n\n /** @hidden */\n private _dsSubscription: Subscription | null = null;\n\n /** @hidden */\n private _element: HTMLElement = this.elementRef.nativeElement;\n\n /**\n * @hidden\n * Keys, that won't trigger the popover's open state, when dispatched on search input.\n */\n private readonly _nonOpeningKeys: number[] = [\n BACKSPACE,\n ESCAPE,\n ENTER,\n CONTROL,\n TAB,\n SHIFT,\n UP_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n LEFT_ARROW,\n ALT\n ];\n\n /** @hidden */\n private _timerSub$: Subscription;\n\n /** @hidden */\n private _previousState?: FormStates;\n\n /** @hidden */\n private _previousStateMessage: Nullable<string>;\n\n /** @hidden */\n private readonly _mapLimit = inject(MAP_LIMIT);\n\n /** @hidden */\n private readonly _lang$ = inject(FD_LANGUAGE);\n\n /** @hidden */\n private _translationResolver = new TranslationResolver();\n\n /** @hidden */\n protected constructor() {\n super();\n this._contentDensity = this.multiComboboxConfig.contentDensity;\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n const dataSourceChange = changes['dataSource'];\n\n if (dataSourceChange) {\n this._initializeDataSource(dataSourceChange.currentValue);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._initWindowResize();\n this._assignCustomTemplates();\n this._previousInputText = this.inputText;\n this._subscriptions.add(\n this._lang$.subscribe((lang: FdLanguage) => {\n this.invalidEntryMessage = this._translationResolver.resolve(\n lang,\n 'platformMultiCombobox.invalidEntryError'\n );\n })\n );\n super.ngAfterViewInit();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as MultiComboBoxDataSource<any>).close();\n }\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n }\n }\n\n /** write value for ControlValueAccessor */\n writeValue(value: any): void {\n this.selectedItems = coerceArraySafe(value);\n super.writeValue(this.selectedItems);\n this._setSelectedSuggestions();\n this._emitChangeEvent();\n }\n\n /** @hidden */\n popoverOpenChangeHandle(isOpen: boolean): void {\n this.isOpen = isOpen;\n this._rangeSelector.reset();\n if (!isOpen) {\n this.onTouched();\n }\n this._onOpenChange(this.isOpen);\n }\n\n /** @hidden */\n _onOpenChange(isOpen: boolean): void {\n if (isOpen) {\n this.formMessage._popover.close();\n }\n this.formMessage._popover.setIgnoreTriggers(isOpen);\n }\n\n /** Opens the select popover body. */\n open(): void {\n this.isOpen = true;\n this.isOpenChange.emit(this.isOpen);\n this.markForCheck();\n }\n\n /** Closes the select popover body. */\n close(): void {\n this._rangeSelector.reset();\n this.selectedShown$.set(false);\n this.inputText = '';\n this._focusToSearchField();\n\n this.isOpen = false;\n this.isOpenChange.emit(this.isOpen);\n this.markForCheck();\n }\n\n /** @hidden */\n showList(isOpen: boolean): void {\n if (this.isOpen !== isOpen) {\n this.isOpen = isOpen;\n this.onTouched();\n this.openChange.next(isOpen);\n }\n\n if (!this.isOpen) {\n this.searchTermChanged('');\n }\n\n this.markForCheck();\n }\n\n /** @hidden */\n searchTermChanged(text: string = this.inputText): void {\n if (text) {\n this.open();\n }\n\n const map = new Map();\n map.set('query', text);\n\n if (!this.limitless) {\n map.set('limit', this._mapLimit);\n } else {\n map.set('limit', Number.MAX_SAFE_INTEGER);\n }\n\n this.ds.match(map);\n\n this.markForCheck();\n }\n\n /**\n * Handle Click on Button\n * @hidden\n */\n onPrimaryButtonClick(isOpen: boolean): void {\n if (!isOpen) {\n this.searchTermChanged('');\n }\n\n if (this.openDropdownOnAddOnClicked) {\n this.showList(!isOpen);\n } else if (this.isOpen) {\n this.showList(false);\n }\n\n this.searchInputElement?.nativeElement.focus();\n }\n\n /**\n * Handle Keydown on Input\n * @hidden\n */\n onInputKeydownHandler(event: KeyboardEvent): void {\n if (this.readonly) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n event.preventDefault();\n\n if (event.altKey) {\n this.showList(true);\n }\n\n if (this.isOpen && this.listComponent) {\n this.listComponent.setItemActive(0);\n } else if (!this.isOpen) {\n this._chooseOtherItem(1);\n }\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n event.preventDefault();\n\n this._chooseOtherItem(-1);\n } else if (KeyUtil.isKeyCode(event, ENTER)) {\n this.toggleSelectionByInputText();\n } else if (!KeyUtil.isKeyCode(event, [...this._nonOpeningKeys, CONTROL])) {\n this.showList(true);\n const acceptedKeys =\n !KeyUtil.isKeyType(event, 'alphabetical') &&\n !KeyUtil.isKeyType(event, 'numeric') &&\n !KeyUtil.isKeyType(event, 'ime');\n if (acceptedKeys) {\n // SetTimeout is needed for input to receive new value.\n setTimeout(() => {\n if (this.isEmptyValue) {\n this.listComponent?.setItemActive(0);\n }\n });\n }\n }\n }\n\n /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n\n /** @hidden */\n setLimitless(limitless: boolean): void {\n this.limitless = limitless;\n }\n\n /** @hidden */\n getMapLimit(): number {\n return this.limitless ? (this.dataSource as any[]).length : this._mapLimit;\n }\n\n /**\n * @hidden\n * Method to emit change event\n */\n _emitChangeEvent(): void {\n const event = new MultiComboboxSelectionChangeEvent(this, this.value);\n\n this.selectionChange.emit(event);\n }\n\n /**\n * Used to change the value of a control.\n * @param value the value to be applied\n * @param emitOnChange whether to emit \"onChange\" event.\n * Should be \"false\", if the change is made programmatically (internally) by the control, \"true\" otherwise\n */\n protected setValue(value: any, emitOnChange = true): void {\n this.selectedItems = coerceArraySafe(value);\n super.setValue(this.selectedItems, emitOnChange);\n this._setSelectedSuggestions();\n this._emitChangeEvent();\n }\n\n /** @hidden */\n protected _setSelectedSuggestions(): void {\n this._selectedSuggestions = [];\n\n if (!this.selectedItems?.length) {\n return;\n }\n\n for (let i = 0; i < this.selectedItems.length; i++) {\n const selectedItem = this.selectedItems[i];\n const finder = (item: SelectableOptionItem): boolean =>\n item.label === selectedItem || item.value === selectedItem;\n const idFromFullFlatSuggestions = this._fullFlatSuggestions.findIndex(finder);\n const idFromSuggestions = (this._suggestions || []).findIndex(finder);\n const itemIndex = Math.max(idFromFullFlatSuggestions, idFromSuggestions);\n const collection = idFromFullFlatSuggestions !== -1 ? this._fullFlatSuggestions : this._suggestions;\n if (idFromFullFlatSuggestions === -1 && idFromSuggestions === -1) {\n this._convertToOptionItems([selectedItem]).forEach((optionItem: SelectableOptionItem) => {\n optionItem.selected = true;\n this._selectedSuggestions.push(optionItem);\n });\n } else if (\n this._suggestions &&\n collection === this._suggestions &&\n !this._fullFlatSuggestions.includes(collection[itemIndex])\n ) {\n this._fullFlatSuggestions.push(collection[itemIndex]);\n }\n if (itemIndex > -1) {\n this._selectedSuggestions.push(collection[itemIndex]);\n collection[itemIndex].selected = true;\n }\n }\n\n this.detectChanges();\n }\n\n /** @hidden */\n protected get ds(): MultiComboBoxDataSource<any> {\n return this.dataSource as MultiComboBoxDataSource<any>;\n }\n\n /** @hidden */\n protected _focusToSearchField(): void {\n this.searchInputElement?.nativeElement.focus();\n }\n\n /** @hidden */\n protected _getSelectItemByInputValue(displayValue: string): SelectableOptionItem | undefined {\n return this._flatSuggestions.find((value) => value.label === displayValue);\n }\n\n /** @hidden\n * Map grouped values to array. */\n protected _flattenGroups(items: SelectableOptionItem[]): SelectableOptionItem[] {\n return items.reduce((result, item) => result.concat(item.children ?? []), <SelectableOptionItem[]>[]);\n }\n\n /**\n * Convert object[] data to Group OptionItems Interface\n * @hidden\n */\n protected _convertObjectsToGroupOptionItems<K>(items: K[]): SelectableOptionItem[] {\n const group: { [key: string]: K[] } = {};\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const keyValue = item[this.groupKey];\n if (!keyValue) {\n continue;\n }\n\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n\n group[keyValue].push(item);\n }\n\n return Object.keys(group).map((key) => {\n const selectItem: SelectableOptionItem = {\n label: key,\n value: null,\n isGroup: true\n };\n\n const currentGroup = group[key];\n\n if (this.showSecondaryText && this.secondaryKey) {\n selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n } else {\n selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n }\n\n return selectItem;\n });\n }\n\n /** @hidden */\n private _displayFn = (value: any): string => this.displayValue(value);\n\n /** @hidden */\n private _secondaryFn = (value: any): string => {\n if (isOptionItem(value)) {\n return value.secondaryText ?? '';\n } else if (isJsObject(value) && this.secondaryKey) {\n const currentItem = this.objectGet(value, this.secondaryKey);\n\n return isFunction(currentItem) ? currentItem() : currentItem;\n } else {\n return value;\n }\n };\n\n /** @hidden\n * Method that picks other value moved from current one by offset, called only when Multi Combobox is closed */\n private _chooseOtherItem(offset: number): void {\n if (this._selectedSuggestions?.length === this._flatSuggestions.length) {\n this.inputText = '';\n return;\n }\n\n const activeValue = this._getSelectItemByInputValue(this.inputText);\n const index = this._flatSuggestions.findIndex((value) => value === activeValue);\n const position = !this.inputText && offset === -1 ? this._flatSuggestions.length - 1 : index + offset;\n const item = this._flatSuggestions[position];\n\n if (item) {\n this.setInputTextFromOptionItem(item);\n }\n\n const selectedIndex = this._selectedSuggestions.findIndex((value) => value.label === item?.label);\n if (selectedIndex !== -1) {\n this._chooseOtherItem(offset);\n }\n }\n\n /** @hidden */\n private _initializeDataSource(ds: FdpMultiComboboxDataSource<any>): void {\n this._suggestions = [];\n this._flatSuggestions = [];\n\n if (isDataSource(this.dataSource)) {\n (this.dataSource as MultiComboBoxDataSource<any>).close();\n\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n this._dsSubscription = null;\n }\n }\n // Convert whatever comes in as DataSource so we can work with it identically\n this._dataSource = this._openDataStream(ds);\n }\n\n /** @hidden */\n private _openDataStream(ds: FdpMultiComboboxDataSource<any>): MultiComboBoxDataSource<any> {\n const initDataSource = this._toDataStream(ds);\n let isInitDataSource = true;\n\n if (initDataSource === undefined) {\n throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n }\n\n initDataSource.limitless = this.limitless;\n\n /**\n * This is single point of data entry to the component. We dont want to set data on different\n * places. If any new data comes in either you do a search and you want to pass initial data\n * its here.\n */\n this._dsSubscription = new Subscription();\n const dsSub = initDataSource\n .open()\n .pipe(skip(1), takeUntilDestroyed(this._destroyed))\n .subscribe((data) => {\n if (data.length === 0) {\n this._processingEmptyData();\n\n return;\n } else {\n this._previousInputText = this.inputText;\n }\n\n this._suggestions = this._convertToOptionItems(data).map((optionItem: SelectableOptionItem) => {\n const selectedElement = this._selectedSuggestions.find(\n (selectedItem: SelectableOptionItem) => selectedItem.id === optionItem.id\n );\n if (selectedElement) {\n optionItem.selected = selectedElement.selected;\n }\n return optionItem;\n });\n\n this._flatSuggestions = this.isGroup ? this._flattenGroups(this._suggestions) : this._suggestions;\n\n if (isInitDataSource) {\n this._fullFlatSuggestions = this._flatSuggestions;\n isInitDataSource = false;\n }\n\n const selectedSuggestionsLength = this._selectedSuggestions.length;\n if (selectedSuggestionsLength > 0) {\n for (let i = 0; i < selectedSuggestionsLength; i++) {\n const selectedSuggestion = this._selectedSuggestions[i];\n const idx = this._suggestions.findIndex((item) => equal(item.value, selectedSuggestion.value));\n\n if (idx !== -1) {\n this._suggestions[idx].selected = true;\n }\n }\n }\n\n this.stateChanges.next('initDataSource.open().');\n\n this.markForCheck();\n });\n this._dsSubscription.add(dsSub);\n\n this._dsSubscription.add(initDataSource.onDataRequested().subscribe(this.onDataRequested));\n this._dsSubscription.add(initDataSource.onDataReceived().subscribe(this.onDataReceived));\n\n initDataSource.dataProvider.setLookupKey(this.lookupKey);\n const matchingBy: MatchingBy = {\n firstBy: this._displayFn\n };\n\n if (this.secondaryKey) {\n matchingBy.secondaryBy = this._secondaryFn;\n }\n\n initDataSource.dataProvider.setMatchingBy(matchingBy);\n initDataSource.dataProvider.setMatchingStrategy(this._matchingStrategy);\n\n // initial data fetch\n const map = new Map();\n map.set('query', '*');\n\n if (!this.limitless) {\n map.set('limit', MAP_LIMIT);\n } else {\n map.set('limit', Number.MAX_SAFE_INTEGER);\n }\n\n initDataSource.match(map);\n\n return initDataSource;\n }\n\n /** @hidden */\n private _processingEmptyData(): void {\n this.detectChanges();\n\n this.inputText = this._previousInputText;\n\n this._setInvalidEntry();\n\n if (this._timerSub$) {\n this._timerSub$.unsubscribe();\n }\n\n this._timerSub$ = timer(3000).subscribe(() => this._unsetInvalidEntry());\n }\n\n /** @hidden */\n private _setInvalidEntry(): void {\n if (this._previousState || this._previousStateMessage) {\n return;\n }\n\n this._previousState = this.state;\n this.state = 'error';\n\n this._previousStateMessage = this.stateMessage;\n this.stateMessage = this.invalidEntryMessage;\n\n this.markForCheck();\n }\n\n /** @hidden */\n private _unsetInvalidEntry(): void {\n this.state = this._previousState;\n this._previousState = undefined;\n\n this.stateMessage = this._previousStateMessage;\n this._previousStateMessage = undefined;\n\n this.markForCheck();\n }\n\n /** @hidden */\n private _toDataStream(source: FdpMultiComboboxDataSource<any>): MultiComboBoxDataSource<any> | undefined {\n if (isDataSource(source)) {\n return source as MultiComboBoxDataSource<any>;\n }\n\n if (Array.isArray(source)) {\n return new ArrayMultiComboBoxDataSource<any>(source);\n }\n\n if (isObservable(source)) {\n return new ObservableMultiComboBoxDataSource<any>(source);\n }\n\n return undefined;\n }\n\n /** @hidden */\n private _initWindowResize(): void {\n this._getOptionsListWidth();\n\n if (!this.autoResize) {\n return;\n }\n\n fromEvent(window, 'resize')\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => this._getOptionsListWidth());\n }\n\n /** @hidden */\n private _getOptionsListWidth(): void {\n const body = document.body;\n const rect = (this._element.querySelector('fd-input-group') as HTMLElement).getBoundingClientRect();\n const scrollBarWidth = body.offsetWidth - body.clientWidth;\n this.maxWidth = this.autoResize ? window.innerWidth - scrollBarWidth - rect.left : this.minWidth;\n this.minWidth = rect.width - 2;\n this.markForCheck();\n }\n\n /**\n * Convert original data to SelectableOptionItems Interface\n * @hidden\n */\n private _convertToOptionItems(items: any[]): SelectableOptionItem[] {\n const item = items[0];\n\n const elementTypeIsOptionItem = isSelectableOptionItem(item);\n if (elementTypeIsOptionItem) {\n return items as SelectableOptionItem[];\n }\n\n const elementTypeIsObject = isJsObject(item);\n if (elementTypeIsObject) {\n return this._convertObjectsToOptionItems(items);\n }\n\n const elementTypeIsString = isString(item);\n if (elementTypeIsString) {\n return this._convertPrimitiveToOptionItems(items);\n }\n\n return [];\n }\n\n /**\n * Convert data to SelectableOptionItems Interface\n * @hidden\n */\n private _convertObjectsToOptionItems(items: any[]): SelectableOptionItem[] {\n if (this.isGroup) {\n return this._convertObjectsToGroupOptionItems(items);\n } else if (this.showSecondaryText && this.secondaryKey) {\n return this._convertObjectsToSecondaryOptionItems(items);\n } else {\n return this._convertObjectsToDefaultOptionItems(items);\n }\n }\n\n /**\n * Convert object[] data to Secondary SelectableOptionItems Interface\n * @hidden\n */\n private _convertObjectsToSecondaryOptionItems<K>(items: K[]): SelectableOptionItem[] {\n const selectItems: SelectableOptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n id: this.lookupValue(value),\n secondaryText: this.objectGet(value, this.secondaryKey),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n\n return selectItems;\n }\n\n /**\n * Convert Primitive data(Boolean, String, Number) to SelectableOptionItems Interface\n * @hidden\n */\n private _convertPrimitiveToOptionItems(items: any[]): SelectableOptionItem[] {\n const selectItems: SelectableOptionItem[] = [];\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: value,\n id: this.lookupValue(value),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n\n return selectItems;\n }\n\n /**\n * Convert object[] to SelectableOptionItems Interface (Default)\n * @hidden\n */\n private _convertObjectsToDefaultOptionItems(items: any[]): SelectableOptionItem[] {\n const selectItems: SelectableOptionItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: this.displayValue(value),\n id: this.lookupValue(value),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n\n return selectItems;\n }\n\n /**\n * @hidden\n * Assign custom templates\n */\n private _assignCustomTemplates(): void {\n this.customTemplates.forEach((template) => {\n switch (template.name) {\n case 'optionItemTemplate':\n this.optionItemTemplate = template.templateRef;\n break;\n case 'groupItemTemplate':\n this.groupItemTemplate = template.templateRef;\n break;\n case 'secondaryItemTemplate':\n this.secondaryItemTemplate = template.templateRef;\n break;\n case 'selectedItemTemplate':\n this.selectedItemTemplate = template.templateRef;\n break;\n }\n });\n }\n}\n","import { InjectionToken, WritableSignal } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\nimport { SelectableOptionItem } from '@fundamental-ngx/platform/shared';\n\nexport const MULTICOMBOBOX_COMPONENT = new InjectionToken<string[]>('MultiComboboxInterface');\n\n/**\n * Combobox Interface to have typing and avoid circular dependency between\n * MultiComboboxComponent <==> MultiComboboxMobileComponent\n */\nexport interface MultiComboboxInterface extends MobileMode {\n _suggestions: SelectableOptionItem[];\n _selectedSuggestions: SelectableOptionItem[];\n selectedShown$: WritableSignal<boolean>;\n openChange: Subject<boolean>;\n\n moreClicked(): void;\n dialogApprove(): void;\n dialogDismiss(backup: SelectableOptionItem[]): void;\n searchTermChanged(term?: string): void;\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnInit, TemplateRef, ViewChild } from '@angular/core';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SelectableOptionItem } from '@fundamental-ngx/platform/shared';\nimport { MULTICOMBOBOX_COMPONENT, MultiComboboxInterface } from '../../multi-combobox.interface';\n\n@Component({\n selector: 'fdp-multi-combobox-mobile',\n templateUrl: './multi-combobox-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogModule,\n TitleComponent,\n TemplateDirective,\n BarModule,\n NgTemplateOutlet,\n ButtonComponent,\n CdkScrollable,\n ScrollbarDirective,\n FdTranslatePipe\n ]\n})\nexport class MultiComboboxMobileComponent extends MobileModeBase<MultiComboboxInterface> implements OnInit {\n /** @hidden */\n @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n /** @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n childContent: Nullable<{\n listTemplate: TemplateRef<any>;\n controlTemplate: TemplateRef<any>;\n }> = null;\n\n /** @hidden */\n selectedShown$ = this._component.selectedShown$;\n\n /** @hidden */\n private _selectedBackup: SelectableOptionItem[];\n\n /** @hidden */\n constructor(@Inject(MULTICOMBOBOX_COMPONENT) multiComboboxComponent: MultiComboboxInterface) {\n super(multiComboboxComponent, MobileModeControl.MULTI_COMBOBOX);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenOnMultiComboboxOpenChange();\n }\n\n /** @hidden */\n showSelected(): void {\n const isSelectedShown = this.selectedShown$();\n\n if (isSelectedShown) {\n this._component.searchTermChanged();\n this.selectedShown$.set(false);\n return;\n }\n\n this._component.moreClicked();\n }\n\n /** @hidden */\n handleDismiss(): void {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n\n /** @hidden */\n handleApprove(): void {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n\n /** @hidden */\n private _toggleDialog(open: boolean): void {\n if (!open) {\n return;\n }\n\n this._selectedBackup = this._component._selectedSuggestions?.length\n ? [...this._component._selectedSuggestions]\n : [];\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n\n /** @hidden */\n private _listenOnMultiComboboxOpenChange(): void {\n this._component.openChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n\n /** @hidden */\n private _open(): void {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n disablePaddings: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n escKeyCloseable: false,\n container: this._elementRef.nativeElement\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title fd-dialog-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n @if (selectedShown$()) {\n <button\n fd-button\n glyph=\"multiselect-all\"\n fdType=\"emphasized\"\n [title]=\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\"\n [attr.aria-label]=\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\"\n class=\"fd-margin-begin--tiny\"\n (click)=\"showSelected()\"\n ></button>\n } @else {\n <button\n fd-button\n glyph=\"multiselect-all\"\n fdType=\"transparent\"\n [title]=\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\"\n [attr.aria-label]=\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\"\n class=\"fd-margin-begin--tiny\"\n (click)=\"showSelected()\"\n ></button>\n }\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { MultiComboboxMobileComponent } from './multi-combobox/multi-combobox-mobile.component';\n\n@NgModule({\n imports: [MultiComboboxMobileComponent],\n exports: [MultiComboboxMobileComponent]\n})\nexport class PlatformMultiComboboxMobileModule {}\n","import { A, DOWN_ARROW, ENTER, ESCAPE, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Inject,\n Injector,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n isDevMode\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { DynamicComponentService, KeyUtil, SearchHighlightPipe, warnOnce } from '@fundamental-ngx/cdk/utils';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent, FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ListModule, ListSecondaryDirective } from '@fundamental-ngx/core/list';\nimport { MultiAnnouncerDirective } from '@fundamental-ngx/core/multi-combobox';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { TokenComponent, TokenizerComponent } from '@fundamental-ngx/core/token';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n DATA_PROVIDERS,\n DataProvider,\n MultiComboBoxDataSource,\n OptionItem,\n SelectableOptionItem\n} from '@fundamental-ngx/platform/shared';\nimport equal from 'fast-deep-equal';\nimport { AutoCompleteDirective, AutoCompleteEvent } from '../../auto-complete/auto-complete.directive';\nimport { BaseMultiCombobox } from '../commons/base-multi-combobox';\nimport { MultiComboboxMobileComponent } from '../multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component';\nimport { MULTICOMBOBOX_COMPONENT } from '../multi-combobox.interface';\n\nlet deprecationWarningShown = false;\n\n/**\n * This component can work with both string primitives as well as with complex objects. In order\n * to use objects user must provide an unique ID to lookupkey, which will be used in comparing\n * each items of array. It is important to provide lookupkey value as there might be multiple\n * items with same name but different properties which is to be differently identified otherwise\n * it will be treated as same objects.\n */\n\n@Component({\n selector: 'fdp-multi-combobox',\n templateUrl: './multi-combobox.component.html',\n styleUrl: './multi-combobox.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: FD_FORM_FIELD_CONTROL,\n useExisting: MultiComboboxComponent,\n multi: true\n },\n contentDensityObserverProviders()\n ],\n imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n FormInputMessageGroupComponent,\n InputGroupModule,\n TokenComponent,\n TokenizerComponent,\n FormControlComponent,\n FormsModule,\n AutoCompleteDirective,\n FormMessageComponent,\n ListModule,\n CheckboxComponent,\n NgClass,\n ListSecondaryDirective,\n SearchHighlightPipe,\n FdTranslatePipe,\n MultiAnnouncerDirective\n ]\n})\nexport class MultiComboboxComponent extends BaseMultiCombobox implements OnInit, AfterViewInit {\n /** @hidden */\n @ViewChild('mobileControlTemplate')\n mobileControlTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('listTemplate')\n declare listTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild(TokenizerComponent)\n _tokenizer: TokenizerComponent;\n\n /**\n * @hidden\n * List of selected suggestions\n */\n _selectedSuggestions: SelectableOptionItem[] = [];\n\n /** @hidden */\n constructor(\n readonly _dynamicComponentService: DynamicComponentService,\n @Optional() @Inject(DATA_PROVIDERS) private _providers: Map<string, DataProvider<any>>,\n private readonly _viewContainerRef: ViewContainerRef,\n private readonly _injector: Injector,\n readonly contentDensityObserver: ContentDensityObserver\n ) {\n super();\n\n if (!deprecationWarningShown && isDevMode()) {\n warnOnce(\n `[DEPRECATION] Platform Multi Combobox component is deprecated since v0.39.0. Please migrate to Core's version.`\n );\n deprecationWarningShown = true;\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n\n const providers = this._providers?.size === 0 ? this.multiComboboxConfig.providers : this._providers;\n // if we have both prefer dataSource\n if (!this.dataSource && this.entityClass && providers?.has(this.entityClass)) {\n this.dataSource = new MultiComboBoxDataSource(providers.get(this.entityClass)!);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n\n if (this.mobile) {\n this._setUpMobileMode();\n }\n\n this._setSelectedSuggestions();\n }\n\n /** @hidden */\n toggleSelection(item: SelectableOptionItem): void {\n const idx = this._getTokenIndexByIdlOrValue(item);\n\n if (idx === -1) {\n this._selectedSuggestions.push(item);\n } else {\n this._selectedSuggestions.splice(idx, 1);\n }\n\n item.selected = !item.selected;\n\n this._propagateChange();\n\n if (!this._selectedSuggestions.length) {\n this._focusToSearchField();\n }\n\n this.detectChanges();\n }\n\n /** @hidden */\n onOptionCheckboxClicked(event: MouseEvent, index: number): void {\n event.stopPropagation();\n this._onListElementClicked(event, index);\n this.inputText = '';\n this.searchTermChanged('');\n }\n\n /** @hidden */\n onCompleteTerm(event: AutoCompleteEvent): void {\n if (event.forceClose) {\n this.toggleSelectionByInputText(event.term);\n this.close();\n }\n }\n\n /** @hidden */\n toggleSelectionByInputText(text = this.inputText): void {\n const item = this._getSelectItemByInputValue(text);\n if (item) {\n this.toggleSelection(item);\n this.inputText = '';\n }\n }\n\n /**\n * @hidden\n * Method that selects all possible options.\n * *select* attribute – if *true* select all, if *false* unselect all\n * */\n handleSelectAllItems(select: boolean): void {\n this._flatSuggestions.forEach((item) => (item.selected = select));\n this._selectedSuggestions = select ? [...this._flatSuggestions] : [];\n this._rangeSelector.reset();\n\n this._propagateChange();\n }\n\n /** @hidden */\n navigateByTokens(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW]) && this.isOpen) {\n this.listComponent.items?.first.focus();\n }\n }\n\n /** @hidden */\n removeToken(token: SelectableOptionItem, event?: MouseEvent): void {\n if (event) {\n event.preventDefault();\n }\n this.toggleSelection(token);\n this._rangeSelector.reset();\n }\n\n /** @hidden */\n moreClicked(): void {\n this._suggestions = this.isGroup\n ? this._convertObjectsToGroupOptionItems(this._selectedSuggestions.map(({ value }) => value))\n : this._suggestions.filter((value) =>\n this._selectedSuggestions.some((item) => equal(item.value, value.value))\n );\n\n this.showList(true);\n this.selectedShown$.set(true);\n this.markForCheck();\n }\n\n /** @hidden */\n onBlur(event: FocusEvent): void {\n const target = event.relatedTarget as HTMLElement;\n if (target) {\n const isList = !!target.closest('.fdp-multi-combobox__list-container');\n if (isList) {\n return;\n }\n if (\n this._suggestions?.length === 1 &&\n this._suggestions[0].label === this.inputText &&\n !this._suggestions[0].selected\n ) {\n this.toggleSelection(this._suggestions[0]);\n }\n this.showList(false);\n this.inputText = '';\n }\n }\n\n /**\n * @hidden\n * Method to set input text as item label.\n */\n setInputTextFromOptionItem(item: OptionItem): void {\n this.inputText = item.label;\n\n if (this.mobile) {\n return;\n }\n\n this.showList(false);\n }\n\n /** @hidden */\n onItemKeyDownHandler(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, ESCAPE)) {\n this._focusToSearchField();\n } else if ((event.ctrlKey || event.metaKey) && event.shiftKey && KeyUtil.isKeyCode(event, A)) {\n event.preventDefault();\n this.handleSelectAllItems(false);\n } else if ((event.ctrlKey || event.metaKey) && KeyUtil.isKeyCode(event, A)) {\n event.preventDefault();\n this.handleSelectAllItems(true);\n } else if (KeyUtil.isKeyCode(event, ENTER)) {\n if (!this.mobile) {\n this.close();\n }\n this._rangeSelector.reset();\n } else if (KeyUtil.isKeyCode(event, SPACE)) {\n this._rangeSelector.reset();\n }\n }\n\n /** @hidden */\n onOptionClicked(event: MouseEvent, index: number): void {\n this._onListElementClicked(event, index);\n this.close();\n }\n\n /** @hidden */\n _addOnClicked(event: Event): void {\n this.addOnButtonClicked.emit(event);\n if (!this.mobile) {\n this.onPrimaryButtonClick(this.isOpen);\n }\n }\n\n /** @hidden Handle dialog dismissing, closes popover and sets backup data. */\n dialogDismiss(backup: SelectableOptionItem[]): void {\n this._selectedSuggestions = [...backup];\n this.inputText = '';\n this.showList(false);\n this.selectedShown$.set(false);\n }\n\n /** @hidden Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove(): void {\n this.inputText = '';\n this.showList(false);\n this._propagateChange(true);\n }\n\n /**\n * @hidden\n * applying range selection. Note, that this function will be invoked after combobox item's value has been changed\n */\n private _onListElementClicked(event: MouseEvent, index: number): void {\n // value has been changed at this point, so it can be safely used\n const selectionState = this._suggestions[index].selected;\n this._rangeSelector.onRangeElementToggled(index, event);\n const toRemoveSet = new Set();\n this._rangeSelector.applyValueToEachInRange((idx) => {\n const current = this._suggestions[idx];\n if (current.selected !== selectionState) {\n if (current.selected) {\n // removing from \"_selectedSuggestions\" list\n toRemoveSet.add(current.value);\n } else {\n // adding current item to \"_selectedSuggestions\"\n this._selectedSuggestions.push(current);\n }\n current.selected = selectionState;\n }\n });\n this._selectedSuggestions = this._selectedSuggestions.filter((s) => !toRemoveSet.has(s.value));\n // selected items should be displayed in the same order as options\n const valueIndexes = new Map<any, number>(this._suggestions.map((s, i) => [s.value, i]));\n this._selectedSuggestions.sort((a, b) => valueIndexes.get(a.value)! - valueIndexes.get(b.value)!);\n this._tokenizer.onResize();\n\n this._tokenizer.tokenizerInnerEl.nativeElement.scrollLeft =\n this._tokenizer.tokenizerInnerEl.nativeElement.scrollWidth;\n }\n\n /** @hidden */\n private _getTokenIndexByIdlOrValue(item: SelectableOptionItem): number {\n return this._selectedSuggestions.findIndex((token) => token.id === item.id || equal(token.value, item.value));\n }\n\n /** @hidden */\n private _mapAndUpdateModel(): void {\n const selectedItems = this._selectedSuggestions.map(({ value }) => value);\n\n // setting value, it will call setValue()\n this.value = selectedItems;\n }\n\n /** @hidden */\n private _propagateChange(emitInMobile?: boolean): void {\n if (!this.mobile || emitInMobile) {\n this.onChange(this._selectedSuggestions);\n this._mapAndUpdateModel();\n }\n }\n\n /** @hidden */\n private async _setUpMobileMode(): Promise<void> {\n const injector = Injector.create({\n providers: [{ provide: MULTICOMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._dynamicComponentService.createDynamicComponent(\n { listTemplate: this.listTemplate, controlTemplate: this.mobileControlTemplate },\n MultiComboboxMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n { injector }\n );\n }\n}\n","<div class=\"fdp-multi-combobox\">\n @if (mobile) {\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n } @else {\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list fdp-multi-combobox__list-container\"\n (isOpenChange)=\"popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"disabled\"\n [fillControlMode]=\"fillControlMode\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize && 100\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n }\n</div>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n class=\"fdp-multi-combobox-input-group-custom\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"disabled || readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled || readonly\"\n [attr.aria-readonly]=\"readonly\"\n [glyphAriaLabel]=\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"_addOnClicked($event)\"\n (click)=\"mobile && !isOpen && onPrimaryButtonClick(false)\"\n (keydown)=\"navigateByTokens($event)\"\n >\n <fd-tokenizer\n #tokenizer\n [compactCollapse]=\"true\"\n [tokenizerFocusable]=\"false\"\n [showOverflowPopover]=\"false\"\n class=\"fdp-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"moreClicked()\"\n fdMultiAnnouncer\n [multiAnnouncerOptions]=\"_suggestions\"\n >\n @for (token of _selectedSuggestions; track token) {\n <fd-token [readOnly]=\"disabled\" (onCloseClick)=\"removeToken(token, $event)\">\n {{ token.label }}\n </fd-token>\n }\n <input\n #searchInputElement\n fdp-auto-complete\n (onComplete)=\"onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [ariaLabel]=\"ariaLabel || ('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"searchTermChanged()\"\n [attr.placeholder]=\"_selectedSuggestions.length ? null : placeholder\"\n (focus)=\"onTouched(); tokenizer._showAllTokens()\"\n (blur)=\"!mobile && onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n [attr.aria-required]=\"required\"\n class=\"fd-tokenizer__input fd-input-group__input\"\n />\n </fd-tokenizer>\n </fd-input-group>\n @if (mobile && isOpen ? false : !!stateMessage) {\n <fd-form-message [type]=\"state\" [innerHtml]=\"stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n class=\"fdp-multi-combobox-input-group-custom\"\n [state]=\"state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"disabled || readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled || readonly\"\n [attr.aria-readonly]=\"readonly\"\n [glyphAriaLabel]=\"ariaLabel\"\n >\n <input\n fdp-auto-complete\n (onComplete)=\"onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [ariaLabel]=\"ariaLabel || ('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"searchTermChanged()\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"!mobile && onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-multi-combobox__list fd-list--multi-input\"\n [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile && maxHeight\"\n [style.min-width]=\"!mobile && minWidth + 'px'\"\n [style.max-width]=\"autoResize && maxWidth + 'px'\"\n [attr.aria-labelledby]=\"id + '-search'\"\n aria-multiselectable=\"true\"\n (keydown.tab)=\"close()\"\n (keydown.escape)=\"close()\"\n >\n @if (stateMessage) {\n <li\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n ></li>\n }\n @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n <li fd-list-message tabindex=\"-1\" role=\"presentation\" [type]=\"state || 'default'\">\n <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n </li>\n }\n <ng-content></ng-content>\n @if (isGroup) {\n @for (group of _suggestions; track group) {\n @if (!groupItemTemplate) {\n <label fd-list-item fd-list-group-header role=\"group\">\n <span fd-list-title>{{ group.label }}</span>\n </label>\n }\n @if (groupItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem) {\n <li\n fd-list-item\n role=\"option\"\n (click)=\"!mobile && onOptionClicked($event, $index)\"\n (keyDown)=\"onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"onOptionCheckboxClicked($event, $index)\"\n (ngModelChange)=\"toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: $index }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions; track optionItem) {\n <li\n fd-list-item\n role=\"option\"\n (click)=\"!mobile && onOptionClicked($event, $index)\"\n (keydown)=\"onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"onOptionCheckboxClicked($event, $index)\"\n (ngModelChange)=\"toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: $index }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (optionItem.selected && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(optionItem.selected && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight: inputText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText) {\n @if (!secondaryItemTemplate) {\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight: inputText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { MultiComboboxComponent } from './multi-combobox/multi-combobox.component';\n\n@NgModule({\n imports: [MultiComboboxComponent],\n exports: [MultiComboboxComponent]\n})\nexport class PlatformMultiComboboxModule {}\n","import { NgModule } from '@angular/core';\n\nimport { SelectComponent } from './select/select.component';\n\n@NgModule({\n imports: [SelectComponent],\n exports: [SelectComponent]\n})\nexport class PlatformSelectModule {}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\n\n/**\n * Default options for platform step input\n */\n\n@Injectable({ providedIn: 'root' })\nexport class StepInputConfig {\n /**\n * ARIA label for increment button\n */\n incrementLabel = 'Increment';\n\n /**\n * ARIA label for decrement button\n */\n decrementLabel = 'Decrement';\n\n /**\n * Content Density of element. 'cozy' | 'compact'\n */\n contentDensity: ContentDensity;\n}\n","export const addAndCutFloatingNumberDistortion = (value: number | null, step: number): number => {\n value = value || 0;\n const stepDecimals = `${step}`.split('.')[1];\n const valueDecimals = `${value}`.split('.')[1];\n const stepDecimalsLength = stepDecimals ? stepDecimals.length : 0;\n const valueDecimalsLength = valueDecimals ? valueDecimals.length : 0;\n const longestDecimal = Math.max(valueDecimalsLength, stepDecimalsLength);\n\n return Number((value + step).toFixed(longestDecimal));\n};\n\nexport const getNumberDecimalLength = (value: number): number => {\n const numberStr = (value || 0).toString();\n return (numberStr.split('.')[0] || '').length;\n};\n","import { computed, Directive, EventEmitter, inject, Input, OnInit, Output, Renderer2, signal } from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { StepInputConfig } from './step-input.config';\nimport { addAndCutFloatingNumberDistortion, getNumberDecimalLength } from './step-input.util';\n\n/** Change event object emitted by Platform Step Input component */\nexport class StepInputChangeEvent<T extends StepInputComponent = StepInputComponent, K = number> {\n /**\n * Step input selection change event\n * @param source Step input component\n * @param payload Selected value\n */\n constructor(\n /** The source Step Input of the event. */\n public source: T,\n /** The new value of a control. */\n public payload: K\n ) {}\n}\n\nexport enum StepInputAlign {\n Left = 'left',\n Center = 'center',\n Right = 'right'\n}\n\nexport type StepInputStepFunctionAction = 'increase' | 'decrease';\nexport type StepInputStepFunction = (value: number, action: StepInputStepFunctionAction) => number;\n\nconst ALIGN_INPUT_OPTIONS_LIST = [StepInputAlign.Left, StepInputAlign.Center, StepInputAlign.Right];\n\n/**\n * StepInputComponent is a base abstract class that should be used\n * to create type specific StepInput components such as number, money, unitOfMeasure\n * This holds base Step Input functionality that can be abstracted\n */\n@Directive()\nexport abstract class StepInputComponent extends BaseInput implements OnInit {\n /** Create valueChange event */\n abstract createChangeEvent(value: number): StepInputChangeEvent;\n\n /** Format value for view presentation */\n abstract formatValue(value: number | null): string;\n\n /** Format value for \"in focus\" mode */\n abstract formatValueInFocusMode(value: number): string;\n\n /** Parse value entered \"in focus\" mode */\n abstract parseValueInFocusMode(value: string): number | null;\n /** Sets input value */\n @Input()\n set value(value: Nullable<number>) {\n if (value !== this._value) {\n super.setValue(value);\n this._calculateCanDecrementIncrement();\n }\n }\n get value(): Nullable<number> {\n return super.getValue();\n }\n\n /** Sets minimum value boundary */\n @Input()\n set min(min: number) {\n this._min = !isNaN(min) ? min : -Number.MAX_VALUE;\n this._calculateCanDecrement();\n }\n get min(): number {\n return this._min;\n }\n\n /** Sets maximum value boundary */\n @Input()\n set max(max: number) {\n this._max = !isNaN(max) ? max : Number.MAX_VALUE;\n this._calculateCanIncrement();\n }\n get max(): number {\n return this._max;\n }\n\n /** Sets input step value */\n @Input()\n set step(step: number) {\n this._checkAndThrowErrorIfStepDoesntMatchPrecision(this.precision, step);\n this._step = step;\n this._calculateCanDecrementIncrement();\n }\n get step(): number {\n return this._step;\n }\n\n /** Custom function to calculate step dynamically */\n @Input()\n set stepFn(stepFn: StepInputStepFunction) {\n this._stepFn = stepFn;\n this._calculateCanDecrementIncrement();\n }\n\n /** Number of digits after the decimal point */\n @Input()\n set precision(precision: number) {\n this._checkAndThrowErrorIfStepDoesntMatchPrecision(precision, this.step);\n this._precision = precision;\n }\n get precision(): number {\n return this._precision;\n }\n\n /** Sets largeStep multiplier */\n @Input()\n largerStep = 2;\n\n /** Hides -/+ icons and shows labels */\n @Input()\n showLabels = false;\n\n /** Horizontally aligns value inside input */\n @Input()\n set align(align: StepInputAlign | null) {\n this._align$.set(align);\n }\n get align(): StepInputAlign | null {\n return this._align$();\n }\n\n /**\n * ARIA label for increment button\n */\n @Input()\n incrementLabel: string = inject(StepInputConfig).incrementLabel;\n\n /**\n * ARIA label for decrement button\n */\n @Input()\n decrementLabel: string = inject(StepInputConfig).decrementLabel;\n\n /** Emits new value when control value has changed */\n @Output()\n valueChange = new EventEmitter<StepInputChangeEvent>();\n\n /** @hidden */\n lastEmittedValue: number;\n\n /** @hidden */\n canIncrement = true;\n\n /** @hidden */\n canDecrement = true;\n\n /** @hidden\n * Indicates if control has an error\n */\n isErrorState = false;\n\n /** @hidden */\n get canChangeValue(): boolean {\n return !(this.disabled || !this.editable);\n }\n\n /** @hidden */\n readonly _align$ = signal<StepInputAlign | null>(null);\n\n /** @hidden */\n readonly _textAlign$ = computed(() => {\n const align = this._align$();\n\n const isRtl = !!this._rtlService?.rtlSignal();\n\n if (!ALIGN_INPUT_OPTIONS_LIST.includes(align!)) {\n return null;\n }\n if (isRtl && align === StepInputAlign.Left) {\n return StepInputAlign.Right;\n }\n if (isRtl && align === StepInputAlign.Right) {\n return StepInputAlign.Left;\n }\n return align;\n });\n\n /** @hidden */\n private _max: number = Number.MAX_VALUE;\n\n /** @hidden */\n private _min: number = -Number.MAX_VALUE;\n\n /** @hidden */\n private _step = 1;\n\n /** @hidden */\n private _stepFn: StepInputStepFunction;\n\n /** @hidden */\n private _precision: number;\n\n /** @hidden */\n private _pendingEnteredValue: number | Error | null = null;\n\n /** @hidden */\n private get _currentValue(): number | null {\n const pendingValue = this._pendingEnteredValue;\n\n if (pendingValue instanceof Error) {\n return null;\n }\n\n if (pendingValue === null) {\n return this._value;\n }\n\n return pendingValue;\n }\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n ngOnInit(): void {\n super.ngOnInit();\n\n this._calculateCanDecrementIncrement();\n\n this._updateViewValue();\n\n this.lastEmittedValue = this._value;\n\n this._listenToFormErrorState();\n }\n\n /** @hidden\n * Override writeValue method to keep input view value up to date\n */\n writeValue(value: number): void {\n super.writeValue(value);\n this._updateViewValue();\n this._resetPendingEnteredValue();\n }\n\n /** Increase value */\n increase(step = this._getStepValueForIncrease()): void {\n if (!this.canIncrement) {\n return;\n }\n const value = addAndCutFloatingNumberDistortion(this._currentValue, step);\n this.value = this._validateValueByLimits(value);\n this._emitChangedValue();\n }\n\n /** Decrease value */\n decrease(step = this._getStepValueForDecrease()): void {\n if (!this.canDecrement) {\n return;\n }\n const value = addAndCutFloatingNumberDistortion(this._currentValue, -step);\n this.value = this._validateValueByLimits(value);\n this._emitChangedValue();\n }\n\n /** Increase value by large step */\n largeStepIncrease(): void {\n const step = this._getStepValueForIncrease() * this.largerStep;\n this.increase(step);\n }\n\n /** Decrease value by large step */\n largeStepDecrease(): void {\n const step = this._getStepValueForDecrease() * this.largerStep;\n this.decrease(step);\n }\n\n /** @hidden\n * catch value during entering from view.\n */\n onEnterValue(value: string): void {\n let pendingValue = this.parseValueInFocusMode(value);\n\n if (pendingValue !== null) {\n pendingValue = this._validateValueByLimits(pendingValue);\n }\n\n // could not parse value, value is invalid\n if (pendingValue === null) {\n this._setPendingEnteredValue(new Error('value is invalid'));\n } else {\n this._setPendingEnteredValue(pendingValue);\n }\n }\n\n /** @hidden\n * Commit entered value from view.\n */\n commitEnteredValue(): void {\n const newValue = this._currentValue;\n\n const needToUpdateView = this._value === newValue;\n\n this.value = newValue;\n\n if (needToUpdateView) {\n this._updateViewValue();\n }\n\n if (this._value !== this.lastEmittedValue) {\n this._emitChangedValue();\n }\n }\n\n /** @hidden\n * Indicates when input gets focused\n */\n onFocus(): void {\n super._onFocusChanged(true);\n // When focus happens by \"Tab\" key an input field value gets selected by default.\n // In cases when new_formatted_value !== previous_value the selection gets lost.\n // So it's needed to track selection before new value rendering and restore it.\n const { selectionStart, selectionEnd } = this._getValueSelection();\n this._updateViewValue();\n if (selectionEnd - selectionStart > 0) {\n this._setValueSelection(selectionStart, selectionEnd);\n }\n }\n\n /** @hidden\n * Indicates when input loses focus\n */\n onBlur(): void {\n super._onFocusChanged(false);\n this._updateViewValue();\n }\n\n /** @hidden */\n private _listenToFormErrorState(): void {\n this.stateChanges\n .asObservable()\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => {\n const oldValue = this.isErrorState;\n this.isErrorState = this.state === 'error';\n if (this.isErrorState !== oldValue) {\n this.markForCheck();\n }\n });\n }\n\n /** @hidden */\n private _emitChangedValue(): void {\n const value = this._value;\n this.lastEmittedValue = value;\n this.valueChange.emit(this.createChangeEvent(value));\n }\n\n /** @hidden */\n private _getStepValueForIncrease(): number {\n return this._getStepValue('increase');\n }\n\n /** @hidden */\n private _getStepValueForDecrease(): number {\n return this._getStepValue('decrease');\n }\n\n /** @hidden\n * Get step value based either on \"stepFn\" or \"step\"\n */\n private _getStepValue(action: StepInputStepFunctionAction): number {\n // steFn has precedence\n if (typeof this._stepFn === 'function') {\n return this._stepFn(this._currentValue ?? this.min, action);\n }\n return this.step;\n }\n\n /** @hidden */\n private _updateViewValue(): void {\n const formatted = this._formatValue();\n this._renderValue(formatted);\n }\n\n /** @hidden */\n private _formatValue(value = this._value): string {\n if (this.focused) {\n return this.formatValueInFocusMode(value);\n }\n return this.formatValue(value);\n }\n\n /** @hidden */\n private _renderValue(value: string): void {\n const inputEl = this._getInputNativeElement();\n this._renderer.setProperty(inputEl, 'value', value);\n }\n\n /** @hidden */\n private _getInputNativeElement(): HTMLInputElement | null {\n return this._elementRef.nativeElement as HTMLInputElement | null;\n }\n\n /** @hidden */\n private _getValueSelection(): { selectionStart: number; selectionEnd: number } {\n const inputEl = this._getInputNativeElement();\n const selectionStart = inputEl?.selectionStart || 0;\n const selectionEnd = inputEl?.selectionEnd || 0;\n return { selectionStart, selectionEnd };\n }\n\n /** @hidden */\n private _setValueSelection(selectionStart: number, selectionEnd: number): void {\n const inputEl = this._getInputNativeElement();\n if (!inputEl) {\n return;\n }\n inputEl.setSelectionRange(selectionStart, selectionEnd);\n }\n\n /** @hidden */\n private _calculateCanIncrement(): void {\n const step = this._getStepValueForIncrease();\n this.canIncrement = (this._value || 0) + step <= this._max;\n }\n\n /** @hidden */\n private _calculateCanDecrement(): void {\n const step = this._getStepValueForDecrease();\n this.canDecrement = (this._value || 0) - step >= this._min;\n }\n\n /** @hidden */\n private _calculateCanDecrementIncrement(): void {\n this._calculateCanDecrement();\n this._calculateCanIncrement();\n }\n\n /** @hidden */\n private _validateValueByLimits(value: number): number {\n return Math.min(Math.max(value, this._min), this._max);\n }\n\n /** @hidden */\n private _checkAndThrowErrorIfStepDoesntMatchPrecision(precision: number, step: number): void {\n // Check if \"precision\" is valid comparing to \"step\"\n const stepDecimalLength = getNumberDecimalLength(step);\n const precisionDecimalLength = getNumberDecimalLength(precision);\n if (stepDecimalLength > precisionDecimalLength) {\n throw Error(\n `Step input: The value of step property can not contain more digits after the decimal point than what is set to the precision property`\n );\n }\n }\n\n /** @hidden */\n private _setPendingEnteredValue(value: number | Error): void {\n this._pendingEnteredValue = value;\n }\n\n /** @hidden */\n private _resetPendingEnteredValue(): void {\n this._pendingEnteredValue = null;\n }\n}\n","import { DOWN_ARROW, PAGE_DOWN, PAGE_UP, UP_ARROW } from '@angular/cdk/keycodes';\nimport { Directive, HostListener, SkipSelf } from '@angular/core';\n\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { StepInputComponent } from './base.step-input';\n\n/**\n * This directive is intendant to be a bridge between input control and BaseStepInput Component.\n */\n@Directive({\n selector: '[fdpStepInputControl]',\n standalone: true\n})\nexport class StepInputControlDirective {\n /** @hidden */\n constructor(@SkipSelf() private stepInput: StepInputComponent) {}\n\n /**\n * @hidden\n * Handle \"input\" event to keep track of what user is entering\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.stepInput.canChangeValue) {\n return;\n }\n\n const value: string = ((event.target as HTMLInputElement).value || '').trim();\n this.stepInput.onEnterValue(value);\n }\n\n /**\n * @hidden\n * Handle \"change\" event to commit entered value\n */\n @HostListener('change')\n onChange(): void {\n if (!this.stepInput.canChangeValue) {\n return;\n }\n this.stepInput.commitEnteredValue();\n }\n\n /**\n * @hidden\n * Handle \"focus\" event\n */\n @HostListener('focus')\n onFocus(): void {\n this.stepInput.onFocus();\n }\n\n /**\n * @hidden\n * Handle \"blur\" event\n */\n @HostListener('blur')\n onBlur(): void {\n this.stepInput.onBlur();\n }\n\n /**\n * @hidden\n * Handle \"keydown\" event\n */\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (!this.stepInput.canChangeValue) {\n return;\n }\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this.stepInput.increase();\n this._muteEvent(event);\n }\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n this.stepInput.decrease();\n this._muteEvent(event);\n }\n if (KeyUtil.isKeyCode(event, PAGE_UP)) {\n this.stepInput.largeStepIncrease();\n this._muteEvent(event);\n }\n if (KeyUtil.isKeyCode(event, PAGE_DOWN)) {\n this.stepInput.largeStepDecrease();\n this._muteEvent(event);\n }\n }\n\n /**\n * @hidden\n * Handle mouse wheel\n */\n @HostListener('wheel', ['$event'])\n onMouseWheel(event: WheelEvent): void {\n if (!this.stepInput.canChangeValue || !this.stepInput.focused) {\n return;\n }\n event.preventDefault();\n if (event.deltaY > 0) {\n this.stepInput.decrease();\n } else {\n this.stepInput.increase();\n }\n }\n\n /**\n * @hidden\n * Mute event\n */\n private _muteEvent(e: Event): void {\n e.stopPropagation();\n e.preventDefault();\n }\n}\n","import { DestroyRef, Directive, HostListener, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, interval, timer } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\n\n/**\n * This is a base step input directive to be used for increase/decrease buttons.\n */\n@Directive()\nexport abstract class StepInputActionButton {\n /**\n * @hidden\n * Indicates if action can be handled\n */\n abstract canHandleAction(): boolean;\n\n /**\n * @hidden\n * Step input button action handler\n */\n abstract runAction(): void;\n /** @hidden */\n protected _destroyed = inject(DestroyRef);\n\n /** @hidden */\n @HostListener('mousedown')\n click(): void {\n if (!this.canHandleAction()) {\n return;\n }\n\n // Run action while button is pressed\n timer(500)\n .pipe(\n switchMap(() => interval(40)),\n takeUntil(fromEvent(window, 'mouseup', { capture: true, once: true }))\n )\n .pipe(takeUntilDestroyed(this._destroyed))\n .subscribe(() => this.runAction());\n\n this.runAction();\n }\n}\n","import { Directive, inject } from '@angular/core';\n\nimport { StepInputComponent } from './base.step-input';\nimport { StepInputActionButton } from './step-input-action-button';\n\n/**\n * This Directive is used to be assigned to decrement button.\n */\n@Directive({\n selector: '[fdpStepInputDecrement]',\n standalone: true\n})\nexport class StepInputDecrementDirective extends StepInputActionButton {\n private readonly stepInput = inject(StepInputComponent, { skipSelf: true });\n\n /** @hidden */\n canHandleAction(): boolean {\n return !!this.stepInput.canChangeValue;\n }\n\n /** @hidden */\n runAction(): void {\n this.stepInput.decrease();\n }\n}\n","import { Directive, inject } from '@angular/core';\n\nimport { StepInputComponent } from './base.step-input';\nimport { StepInputActionButton } from './step-input-action-button';\n\n/**\n * This Directive is used to be assigned to increment button.\n */\n@Directive({\n selector: '[fdpStepInputIncrement]',\n standalone: true\n})\nexport class StepInputIncrementDirective extends StepInputActionButton {\n private readonly stepInput = inject(StepInputComponent, { skipSelf: true });\n\n /** @hidden */\n canHandleAction(): boolean {\n return !!this.stepInput.canChangeValue;\n }\n\n /** @hidden */\n runAction(): void {\n this.stepInput.increase();\n }\n}\n","import { formatNumber } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, ViewEncapsulation } from '@angular/core';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { OnlyDigitsDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n ContentDensityModule,\n ContentDensityObserver,\n contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { StepInputChangeEvent, StepInputComponent } from '../base.step-input';\nimport { StepInputControlDirective } from '../step-input-control.directive';\nimport { StepInputDecrementDirective } from '../step-input-decrement.directive';\nimport { StepInputIncrementDirective } from '../step-input-increment.directive';\n\n/**\n * Fundamental number-step-input component\n *\n * Example of usage\n * ```html\n * <fdp-number-step-input\n * name=\"number\"\n * [value]=\"value\"\n * (valueChange)=\"onValueChange($event)\"\n * ></fdp-number-step-input>\n * ```\n *\n * */\n@Component({\n selector: 'fdp-number-step-input',\n templateUrl: 'number-step-input.component.html',\n styleUrl: 'number-step-input.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: FD_FORM_FIELD_CONTROL, useExisting: NumberStepInputComponent, multi: true },\n { provide: StepInputComponent, useExisting: NumberStepInputComponent },\n contentDensityObserverProviders()\n ],\n imports: [\n FormInputMessageGroupComponent,\n ButtonComponent,\n StepInputDecrementDirective,\n StepInputControlDirective,\n OnlyDigitsDirective,\n StepInputIncrementDirective,\n FormMessageComponent,\n ContentDensityModule\n ]\n})\nexport class NumberStepInputComponent extends StepInputComponent {\n /** Set description */\n @Input() description: string;\n\n /** @hidden */\n constructor(\n @Inject(LOCALE_ID) readonly localeId: string,\n readonly contentDensityObserver: ContentDensityObserver\n ) {\n super();\n }\n\n /** @hidden\n * Create change event instance\n */\n createChangeEvent(value: number): StepInputChangeEvent {\n return new StepInputChangeEvent(this, value);\n }\n\n /** @hidden\n * Format value taking into account LOCALE_ID\n */\n formatValue(value: number | null): string {\n const precision = this.precision;\n const digitsInfo = !isNaN(precision) ? `1.${precision}-${precision}` : undefined;\n return formatNumber(value || 0, this.localeId, digitsInfo);\n }\n\n /** @hidden\n * In order to avoid issues trying to parse formatted number\n * (potentially specific for each local)\n * we have to simplify number format once it's in focus mode.\n * In this case we deal with a regular float number\n */\n formatValueInFocusMode(value: number | null): string {\n const precision = this.precision;\n value = value || 0;\n if (!isNaN(precision)) {\n return value.toFixed(precision);\n }\n return value.toString(10);\n }\n\n /** @hidden\n * Used to parse entered value\n */\n parseValueInFocusMode(value: string | null): number | null {\n // if user leaves input empty we should consider it as '0' by default\n value = value || '0';\n const parsedValue = Number.parseFloat(value);\n return isNaN(parsedValue) ? null : parsedValue;\n }\n}\n","<fd-form-input-message-group>\n <div\n class=\"fd-step-input\"\n [class.is-focus]=\"focused\"\n [class.is-readonly]=\"!editable\"\n [class.is-disabled]=\"disabled\"\n [class.fd-step-input--without-buttons]=\"showLabels\"\n [class]=\"state ? 'is-' + state : ''\"\n >\n <button\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n fd-button\n fdType=\"transparent\"\n [glyph]=\"showLabels ? null : 'less'\"\n fdpStepInputDecrement\n [attr.aria-disabled]=\"disabled || !canDecrement\"\n [attr.title]=\"decrementLabel\"\n [attr.aria-label]=\"decrementLabel\"\n [attr.aria-controls]=\"id\"\n >\n {{ showLabels ? decrementLabel : '' }}\n </button>\n <input\n #inputElementRef\n class=\"fd-input fd-input--no-number-spinner fd-step-input__input\"\n [id]=\"id\"\n [name]=\"name\"\n [disabled]=\"disabled\"\n [readonly]=\"!editable\"\n [attr.placeholder]=\"placeholder || ''\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"description ? id + '__description' : ''\"\n [attr.aria-required]=\"required\"\n [style.textAlign]=\"_textAlign$()\"\n fdpStepInputControl\n type=\"text\"\n inputmode=\"numeric\"\n fdkOnlyDigits\n [decimal]=\"true\"\n />\n <button\n class=\"fd-step-input__button\"\n tabindex=\"-1\"\n type=\"button\"\n fd-button\n fdType=\"transparent\"\n [glyph]=\"showLabels ? null : 'add'\"\n fdpStepInputIncrement\n [attr.aria-disabled]=\"disabled || !canIncrement\"\n [attr.title]=\"incrementLabel\"\n [attr.aria-label]=\"incrementLabel\"\n [attr.aria-controls]=\"id\"\n >\n {{ showLabels ? incrementLabel : '' }}\n </button>\n </div>\n @if (stateMessage) {\n <fd-form-message [type]=\"state\" [innerHTML]=\"stateMessage\"></fd-form-message>\n }\n</fd-form-input-message-group>\n@if (description) {\n <span [id]=\"id + '__description'\" class=\"fd-form-label fd-form-label--unit-description\">\n {{ description }}\n </span>\n}\n","import { NgModule } from '@angular/core';\nimport { NumberStepInputComponent } from './number/number-step-input.component';\nimport { StepInputControlDirective } from './step-input-control.directive';\nimport { StepInputDecrementDirective } from './step-input-decrement.directive';\nimport { StepInputIncrementDirective } from './step-input-increment.directive';\n\n@NgModule({\n imports: [\n StepInputDecrementDirective,\n StepInputIncrementDirective,\n StepInputControlDirective,\n NumberStepInputComponent\n ],\n exports: [\n StepInputDecrementDirective,\n StepInputIncrementDirective,\n StepInputControlDirective,\n NumberStepInputComponent\n ]\n})\nexport class PlatformStepInputModule {}\n","import { NgModule } from '@angular/core';\nimport { SwitchComponent } from './switch/switch.component';\n\n@NgModule({\n imports: [SwitchComponent],\n exports: [SwitchComponent]\n})\nexport class PlatformSwitchModule {}\n","import { NgModule } from '@angular/core';\nimport { TextAreaComponent } from './text-area.component';\n\n@NgModule({\n imports: [TextAreaComponent],\n exports: [TextAreaComponent]\n})\nexport class PlatformTextAreaModule {}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\n\nimport { warnOnce } from '@fundamental-ngx/cdk/utils';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { TimePickerComponent } from '@fundamental-ngx/core/time-picker';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\n@Component({\n selector: 'fdp-time-picker',\n templateUrl: './time-picker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformTimePickerComponent, multi: true }],\n imports: [TimePickerComponent, FormsModule]\n})\nexport class PlatformTimePickerComponent<D> extends BaseInput implements OnInit, AfterViewInit, OnDestroy {\n /**\n * @Input date time object representation\n */\n @Input()\n set value(value: D | null) {\n super.setValue(value);\n }\n get value(): D | null {\n return super.getValue();\n }\n\n /**\n * @Input date time object representation\n */\n @Input()\n time: D;\n\n /** @Input Whether to show spinner buttons */\n @Input()\n spinnerButtons = true;\n\n /** @deprecated\n * Meridian is deprecated. Use displayFormat and parseFormat inputs or\n * DateTimeFormats.display.timeInput and DateTimeFormats.parse.timeInput instead.\n * @Input When set to false, uses the 24 hour clock (hours ranging from 0 to 23).\n * Default value based on the current locale format option\n */\n @Input()\n set meridian(value: boolean) {\n warnOnce(\n 'Property meridian is deprecated.' +\n ' Use Meridian is deprecated.' +\n ' Use displayFormat and parseFormat inputs or DateTimeFormats.display.timeInput and DateTimeFormats.parse.timeInput instead. instead.'\n );\n this._meridian = value;\n }\n\n get meridian(): boolean {\n return this._meridian;\n }\n\n /**\n * @Input When set to false, hides the input for seconds.\n * Default value based on the current locale format option\n * */\n @Input()\n displaySeconds: boolean;\n\n /**\n * @Input When set to false, hides the input for minutes.\n * Default value based on the current locale format option\n * */\n @Input()\n displayMinutes: boolean;\n\n /**\n * @Input When set to false, hides the input for hours.\n * Default value based on the current locale format option\n * */\n @Input()\n displayHours: boolean;\n\n /** @Input Default time picker placeholder which is set dependant on the hours, minutes and seconds.\n * Otherwise, It can be set to a default value\n */\n @Input()\n declare placeholder: string;\n\n /** Aria label for the time picker input. */\n @Input()\n timePickerInputLabel: string;\n\n /** Whether a null input is considered valid(success). */\n @Input()\n allowNull = true;\n\n /** Defines if time component should be used with tablet mode */\n @Input()\n tablet = false;\n\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n @Input()\n placement: Placement = 'bottom-start';\n\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n set state(state: FormStates | undefined) {\n super.state = state;\n }\n\n get state(): FormStates {\n if (this.timePickerComponent && this.timePickerComponent._isInvalidTimeInput) {\n // if any other error from core timePicker\n return 'error';\n }\n return super.state;\n }\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = true;\n\n /** Whether to validate the time picker input. */\n @Input()\n useValidation = true;\n\n /**\n * @Input when set to true, time inputs won't allow to have 1 digit\n * for example 9 will become 09\n * but 12 will be kept as 12.\n */\n @Input()\n keepTwoDigitsTime = false;\n\n /**\n * Display format option to customize time format in input control.\n * Must be a format option that is understandable by DatetimeAdapter.\n */\n @Input()\n displayFormat: unknown;\n\n /**\n * Parse format option to customize time format in input control.\n * Must be a format option that is understandable by DatetimeAdapter.\n */\n @Input()\n parseFormat: unknown;\n\n /** Event emitted when the state of the isOpen property changes. */\n @Output()\n readonly isOpenChange = new EventEmitter<boolean>();\n\n /** @hidden */\n @ViewChild(TimePickerComponent)\n timePickerComponent: TimePickerComponent<D>;\n\n /** @hidden */\n private _meridian: boolean;\n\n /** @hidden */\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Method that handles changes when popover is opened or closed.\n */\n handleOpenChange(open: boolean): void {\n this.isOpenChange.emit(open);\n }\n\n /**\n * logic to handle validation from both platform forms and core datetiimepicker\n * @param value inputted\n */\n handleTimeChange(value: D): void {\n if (this.timePickerComponent) {\n if (this.timePickerComponent._isInvalidTimeInput) {\n this.state = 'error';\n } else {\n this.state = !this.timePickerComponent.time && !this.allowNull ? 'error' : undefined;\n }\n this.value = value;\n this.stateChanges.next('time picker: handleTimeInputChange');\n }\n this.onTouched();\n }\n}\n","<fd-time-picker\n [attr.aria-label]=\"ariaLabel\"\n [attr.ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n [inputId]=\"id\"\n [required]=\"required\"\n [time]=\"time\"\n [meridian]=\"meridian\"\n [disabled]=\"disabled\"\n [displayFormat]=\"displayFormat\"\n [spinnerButtons]=\"spinnerButtons\"\n [displaySeconds]=\"displaySeconds\"\n [displayMinutes]=\"displayMinutes\"\n [displayHours]=\"displayHours\"\n [placeholder]=\"placeholder\"\n [timePickerInputLabel]=\"timePickerInputLabel\"\n [allowNull]=\"allowNull\"\n [tablet]=\"tablet\"\n [placement]=\"placement\"\n [parseFormat]=\"parseFormat\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [useValidation]=\"useValidation\"\n [keepTwoDigitsTime]=\"keepTwoDigitsTime\"\n (isOpenChange)=\"handleOpenChange($event)\"\n (ngModelChange)=\"handleTimeChange($event)\"\n [(ngModel)]=\"value\"\n>\n <ng-content></ng-content>\n</fd-time-picker>\n","import { NgModule } from '@angular/core';\nimport { PlatformTimePickerComponent } from './time-picker.component';\n\n@NgModule({\n imports: [PlatformTimePickerComponent],\n exports: [PlatformTimePickerComponent]\n})\nexport class PlatformTimePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["maxColumnsPerRow","formFieldProvider","formGroupChildProvider","i2.FormFieldLayoutService","nextUniqueId","FdCheckboxComponent","CoreCheckboxComponent","i1","FormGroupComponent","i2.CheckboxGroupComponent","createMissingDateImplementationError","FdDatePickerComponent","i1.TextAreaConfig","i3","i2","i4","CoreRadioButtonComponent","i2.RadioGroupComponent","ListComponent","CoreSelect","i1.SwitchConfig","CoreSwitchComponent","merge","isFunction","i2.FormGeneratorComponentsAccessorService","i1.FormGeneratorService","i2.FormFieldComponent","i3.FormFieldErrorDirective","i4.FormFieldErrorHeadingDirective","i5.FormFieldErrorDescriptionDirective","i6","i2.ComboboxConfig","i3.ComboboxConfig","i5","tap","filter","i3.FormGroupComponent","i4.FormFieldComponent","i5.FormFieldGroupComponent","i6.FormFieldErrorDirective","i7.FormFieldErrorHeadingDirective","i8.FormFieldErrorDescriptionDirective","i9","i2.InputGroupConfig","ButtonComponent","CheckboxComponent","i1.StepInputComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAGa,4BAA4B,GAAG,IAAI,cAAc,CAAS,8BAA8B;AAExF,MAAA,4BAA4B,GAAiB;AACtD,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE;;AAGM,MAAA,0BAA0B,GAAiB;AACpD,IAAA,CAAC,EAAE;;AAGM,MAAA,4BAA4B,GAAiB;AACtD,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE;;AAGM,MAAA,0BAA0B,GAAiB;AACpD,IAAA,CAAC,EAAE;;AAGM,MAAA,gBAAgB,GAAiB;AAC1C,IAAA,CAAC,EAAE;;;AC1BP;;;;;AAKG;SACa,YAAY,CACxB,MAAoB,EACpB,iBAA+B,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC,EAAA;IAExF,IAAI,aAAa,GAAe,SAAS;AAEzC,IAAA,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AAC1B,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,KAAK,KAAK,CAAC;QAEvE,IAAI,CAAC,eAAe,EAAE;AAClB,YAAA,OAAO,KAAK;;QAGhB,aAAa,GAAG,eAAe;AAC/B,QAAA,OAAO,IAAI;AACf,KAAC,CAAC;AAEF,IAAA,OAAO,aAAa;AACxB;;ACfA;;;;;AAKG;AASH;AACM,MAAO,6BAA8B,SAAQ,8BAA8B,CAAA;AATjF,IAAA,WAAA,GAAA;;AAUI;;;AAGG;AAEH,QAAA,IAAA,CAAA,QAAQ,GAA+B;AACnC,YAAA;AACI,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,WAAW,EAAE;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,WAAW,EAAE;AAChB;SACJ;AAMJ;8GAvBY,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1B1C,isBAoBA,EDGc,MAAA,EAAA,CAAA,4WAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,+JAAE,uBAAuB,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGlF,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBATzC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,iBAGpB,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,EAAA,QAAA,EAAA,isBAAA,EAAA,MAAA,EAAA,CAAA,4WAAA,CAAA,EAAA;8BAS5F,QAAQ,EAAA,CAAA;sBADP;gBAiBD,mBAAmB,EAAA,CAAA;sBADlB,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;AE7CrC,MAAA,2BAA2B,GAAsC;AAC1E,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,QAAQ,EAAE,OAAO;AACjB,IAAA,OAAO,EAAE;QACL,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;QAC/D,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;QAC/D,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;QAC5D,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI;AAC9D,KAAA;AACD,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,MAAM,EAAE;;;MCRC,mCAAmC,GAAG,IAAI,cAAc,CACjE,iCAAiC,EACjC;AACI,IAAA,OAAO,EAAE,MAAM;AAClB,CAAA;MAQQ,iCAAiC,GAAG,IAAI,cAAc,CAC/D,gGAAgG,EAChG;AACI,IAAA,OAAO,EAAE,OAAO;AACZ,QAAA,sBAAsB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;AACxC,QAAA,gBAAgB,EAAE;KACrB;AACJ,CAAA;;MCrBQ,wBAAwB,GAAG,IAAI,cAAc,CAAC,uBAAuB;;MCmBrE,uBAAuB,CAAA;;AAiBhC,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,iBAAiB,EAAE,4BAA4B,IAAI,IAAI,CAAC,qBAAqB;;;AAa7F,IAAA,IAAI,mBAAmB,GAAA;QACnB,OAAO,IAAI,CAAC,iBAAiB,EAAE,WAAW,IAAI,IAAI,CAAC,WAAW;;;AAIlE,IAAA,IAAI,uBAAuB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE,WAAW,IAAI,IAAI;;;AAI1D,IAAA,WAAA,CACW,WAAkD,EACjD,cAAgC,EAChC,IAAuB,EAAA;QAFxB,IAAW,CAAA,WAAA,GAAX,WAAW;QACV,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAI,CAAA,IAAA,GAAJ,IAAI;;QAjChB,IAAqB,CAAA,qBAAA,GAAe,OAAO;;AAG3C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;;;AAkCpC,IAAA,OAAO,sBAAsB,CACzB,GAA4B,EAC5B,GAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI;;;IAIf,QAAQ,GAAA;;QAEJ,IAAI,CAAC,WAAW,EAAE;;;AAItB,IAAA,eAAe,CAAC,SAA2B,EAAA;AACvC,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;QAClC,IAAI,CAAC,cAAc,EAAE;;;AAIzB,IAAA,mBAAmB,CAAC,SAA+B,EAAA;AAC/C,QAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS;QACtC,IAAI,CAAC,cAAc,EAAE;;;IAIjB,WAAW,GAAA;QACf,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACxD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;;;IAIxB,cAAc,GAAA;;;AAGlB,QAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;SAC7B,EAAE,CAAC,CAAC;;8GAvFA,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EARrB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,CAAA,mBAAA,EAAA,OAAA,CAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAGQ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,WAAW,EAAyB;AACvC;AACJ,qBAAA;AACD,oBAAA,UAAU,EAAE;AACf,iBAAA;+IAIG,mBAAmB,EAAA,CAAA;sBADlB;gBAKD,KAAK,EAAA,CAAA;sBADJ,KAAK;uBAAC,mBAAmB;gBAK1B,qBAAqB,EAAA,CAAA;sBADpB;;;MCrBQ,+BAA+B,CAAA;8GAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,iFAN9B,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAM5B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAR3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,YACvB,2BAA2B,EAAA,eAAA,EAGpB,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,MAAA,EAAA,CAAA,0CAAA,CAAA,EAAA;;;ACNpB;SACgB,qBAAqB,CAAC,MAAoB,EAAE,aAAa,GAAG,EAAE,EAAA;IAC1E,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa;AACrE,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;AACxC,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;AACxC,IAAA,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;AAE1C,IAAA,OAAO,MAAgC;AAC3C;AAEA;AACM,SAAU,mBAAmB,CAAC,MAAoB,EAAA;AACpD,IAAA,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM;AACvB,SAAA,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;AACvB,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;AACtE,QAAA,OAAO,OAAO;KACjB,EAAE,EAAc;SAChB,IAAI,CAAC,GAAG,CAAC;AAClB;;ACNA;;;;AAIG;MAEU,sBAAsB,CAAA;;AAY/B,IAAA,WAAA,CAA+D,iBAAmC,EAAA;QAAnC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;;AALxE,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAE5D,QAAA,IAAA,CAAA,YAAY,GAAsC,IAAI,GAAG,EAAE;AAI/D,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;;AAGxF;;AAEG;IACH,kBAAkB,CAAC,MAA2B,EAAE,QAAiB,EAAA;QAC7D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;QACvC,IAAI,CAAC,oBAAoB,EAAE;;AAG/B;;;AAGG;AACH,IAAA,eAAe,CAAC,OAAgB,EAAA;QAC5B,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACjF,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACjF,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAC1C,YAAA,IAAI,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;AACnE,SAAA,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE;YACnC,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC/D,gBAAA,MAAM,kBAAkB,GACpB,iBAAiB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC;AACrF,oBAAAA,mBAAgB;gBACpB,IAAI,eAAe,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE;oBACrE,eAAe,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB;;AAEvE,gBAAA,IAAI,eAAe,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,GAAGA,mBAAgB,EAAE;AAC5E,oBAAA,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,GAAGA,mBAAgB;AACvF,oBAAA,iBAAiB,CAAC,QAAQ,CAAC,IAAI,IAAI;;gBAEvC,IAAI,kBAAkB,EAAE;oBACpB,MAAM,iCAAiC,GAAGA,mBAAgB,GAAG,eAAe,CAAC,QAAQ,CAAC;oBACtF,OACI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AACzD,wBAAA,iCAAiC,EACnC;AACE,wBAAA,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;;;AAG5C,aAAC,CAAC;;AAEN,QAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE;;AAGpE;;AAEG;AACH,IAAA,WAAW,CAAC,MAA2B,EAAA;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,oBAAoB,EAAE;;AAG/B;;;;;AAKG;IACK,oBAAoB,GAAA;QACxB,KAAK,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;YACxC,IAAI,MAAM,EAAE;gBACR,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAGrD,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAhFlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,kBAYX,iCAAiC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAZ5C,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;0BAagB,MAAM;2BAAC,iCAAiC;;;AC0CzD,IAAI,SAAS,GAAG,CAAC;AAEjB,MAAMC,mBAAiB,GAAa;AAChC,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB;CACnD;AAED,MAAMC,wBAAsB,GAAa;AACrC,IAAA,OAAO,EAAE,4BAA4B;AACrC,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB;CACnD;AAED,SAAS,iBAAiB,CAAC,CAAuB,EAAA;IAC9C,OAAO,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAW;AACzC;AAEA,SAAS,eAAe,CAAC,CAAkB,EAAA;IACvC,OAAO,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;AAC/B;AAEA;;;;;;AAMG;MAmBU,kBAAkB,CAAA;;IA+C3B,IACI,YAAY,CAAC,MAAgC,EAAA;QAC7C,IAAI,CAAC,MAAM,EAAE;YACT;;AAEJ,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;QAClC,IAAI,CAAC,UAAU,EAAE;;AAGrB,IAAA,IAAI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa;;AAG7B;;AAEG;IACH,IACI,iBAAiB,CAAC,KAA+B,EAAA;QACjD,IAAI,CAAC,KAAK,EAAE;YACR;;AAEJ,QAAA,IAAI,CAAC,kBAAkB,GAAG,qBAAqB,CAAC,KAAK,CAAC;QACtD,IAAI,CAAC,uBAAuB,GAAG,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC3E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;;AAG1D,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,kBAAkB;;AAGlC;;AAEG;IACH,IACI,iBAAiB,CAAC,KAA+B,EAAA;QACjD,IAAI,CAAC,KAAK,EAAE;YACR;;AAGJ,QAAA,IAAI,CAAC,kBAAkB,GAAG,qBAAqB,CAAC,KAAK,CAAC;QACtD,IAAI,CAAC,uBAAuB,GAAG,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC3E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;;AAG1D,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,kBAAkB;;AAGlC;;AAEG;IACH,IACI,eAAe,CAAC,KAA+B,EAAA;QAC/C,IAAI,CAAC,KAAK,EAAE;YACR;;AAGJ,QAAA,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,qBAAqB,GAAG,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACvE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;;AAGtD,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB;;AAchC;;AAEG;IACH,IACI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;YAC1B;;AAEJ,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,wBAAwB,EAAE;;AAGnC,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;;;AAmEzB,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;;;AAyCzF,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB;;;AAmD9E,IAAA,IAAY,sBAAsB,GAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC3C,YAAA,OAAO,KAAK;;AAEhB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,CAAC;QACzF,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACxE,MAAM,eAAe,GAAG,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM;QAC5D,OAAO,eAAe,GAAG,kBAAkB;;AAG/C;;;;AAIG;AACH,IAAA,IAAI,sBAAsB,GAAA;QACtB,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;;AAEpD,YAAA,OAAO,IAAI;;QAEf,QACI,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,YAAY,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,oBAAoB,IAAI,CAAC,CAAC,IAAI,IAAI;;;AAyBnH,IAAA,WAAA,CACY,GAAsB,EAClB,kBAAsC,EAC7B,cAA8B,EAG1C,kCAA8D,EAC9D,6BAA2D,EACvB,oBAAsC,EAChC,iBAAmC,EAC9E,2BAAmD,EACnC,6BAAqD,EAAA;QAVrE,IAAG,CAAA,GAAA,GAAH,GAAG;QAEU,IAAc,CAAA,cAAA,GAAd,cAAc;QAG1B,IAAkC,CAAA,kCAAA,GAAlC,kCAAkC;QAClC,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAEa,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;AA3VxE;;AAEG;QAEH,IAAE,CAAA,EAAA,GAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;AAMrC;;AAEG;QAEH,IAAa,CAAA,aAAA,GAAG,KAAK;AAErB;;AAEG;AAEH,QAAA,IAAA,CAAA,UAAU,GAAuB,CAAC,UAAU,CAAC,aAAa,CAAC;;QAgG3D,IAAQ,CAAA,QAAA,GAAG,KAAK;AAkBhB;;AAEG;QAEH,IAAO,CAAA,OAAA,GAAW,CAAC;AAEnB;;AAEG;QAEH,IAAQ,CAAA,QAAA,GAAG,KAAK;;QAIhB,IAAK,CAAA,KAAA,GAAG,KAAK;;AAYb,QAAA,IAAA,CAAA,QAAQ,GAAyB,IAAI,YAAY,EAAU;;AAK3D,QAAA,IAAA,CAAA,cAAc,GAA0B,IAAI,YAAY,EAAW;AAsDnE;;AAEG;QACH,IAAW,CAAA,WAAA,GAAqB,2BAA0D;;QAG1F,IAAgB,CAAA,gBAAA,GAAgB,EAAE;;QAGlC,IAAa,CAAA,aAAA,GAAqC,EAAE;;AAGpD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;;QAoBzB,IAAS,CAAA,SAAA,GAAG,IAAI;;QAGlB,IAAsB,CAAA,sBAAA,GAAG,KAAK;;QAY9B,IAAc,CAAA,cAAA,GAAG,CAAC;;QAiBlB,IAAyB,CAAA,yBAAA,GAAgB,EAAE;;AAoDlC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QAgB7C,IAAI,CAAC,mBAAmB,GAAG;AACvB,YAAA,GAAG,2BAA2B;AAC9B,YAAA,GAAG;SACN;AACD,QAAA,IAAI,CAAC,uBAAuB,GAAG,6BAA6B,IAAI,2BAA2B;QAC3F,IAAI,CAAC,mBAAmB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACvE,IAAI,CAAC,mBAAmB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACvE,IAAI,CAAC,iBAAiB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC;;;;;;;AAOnE,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;QAC5C,IAAI,CAAC,2BAA2B,GAAG,kCAAkC,IAAI,IAAI,0BAA0B,EAAE;AACzG,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,6BAA6B,CAAC,yBAAyB,CACnF,IAAI,CAAC,2BAA2B,CACnC;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CACzB,aAAa,CAAC;AACV,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAC1E,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;YAC1E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC/E,CAAC,CAAC,IAAI,CACH,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAC1B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACzB,GAAG,CACC,CAAC,cAAc,KACX,KAAK,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAChF,CACJ,CACJ,CACJ,CACJ;;AAGL;;AAEG;IACH,sBAAsB,GAAA;;AAElB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB;;QAEJ,IAAI,CAAC,yCAAyC,CAAC,OAAO,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;;;AAI3G,IAAA,yCAAyC,CAAC,SAAoB,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,iCAAiC,EAAE;AACxC,YAAA,IAAI,CAAC,iCAAiC,CAAC,WAAW,EAAE;AACpD,YAAA,IAAI,CAAC,iCAAiC,GAAG,KAAK,CAAC;;AAEnD,QAAA,MAAM,UAAU,GAAG,CAAC,MAAW,KAAU;AACrC,YAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB;AACjD,YAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB;AACjD,YAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe;AACjD,SAAC;AACD,QAAA,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC,uBAAuB,CAAC;AACjE,aAAA,IAAI,CACD,GAAG,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC,EACpE,GAAG,CAAC,UAAU,CAAC,EACf,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvC,aAAA,SAAS,EAAE;;;IAIpB,QAAQ,GAAA;;AAEJ,QAAA,IAAI,CAAC,WAAW;YACX,IAAI,CAAC,kBAAkB,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAiB;AACjE,gBAAA,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAE7D,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE;AACzD,YAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;;AAG/D,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,IAAI,CAAC;AACA,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,iBAAA,SAAS,CAAC,CAAC,cAAc,KAAK,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;;QAG1E,IAAI,CAAC,eAAe,EAAE;QAEtB,IAAI,CAAC,yCAAyC,CAAC,MAAM,IAAI,CAAC;;;AAI9D,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAC3C,IAAI,EACJ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAC7F;;QAEL,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE;AAC1C,YAAA,IAAI,CAAC;AACA,iBAAA,IAAI,CACD,GAAG,CAAC,CAAC,QAAQ,KAAI;gBACb,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,MAAM,EAAE;AACpC,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,QAAQ,CAAC,QAAQ;AAC7E,0BAAE;0BACA,OAAO;;qBACV;oBACH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;;aAEhD,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvC,iBAAA,SAAS,EAAE;;;;IAKxB,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;;IAI3B,eAAe,GAAA;QACX,IAAI,CAAC,sBAAsB,EAAE;AAE7B,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACxF,IAAI,CAAC,sBAAsB,EAAE;AACjC,SAAC,CAAC;QACF,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;;IAI5B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC;QAC9C,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;AACvC,QAAA,IAAI,CAAC,qCAAqC,EAAE,WAAW,EAAE;;;IAI7D,SAAS,GAAA;QACL,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc;;AAG3D;;;AAGG;AACH,IAAA,wBAAwB,CAAC,gBAAkC,EAAA;AACvD,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,MAAM,KAAK,CAAC,kDAAkD,CAAC;;AAGnE,QAAA,IAAI,CAAC,OAAO,GAAG,gBAA4C;QAE3D,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACrG,IAAI,CAAC,wBAAwB,EAAE;;;AAG/B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;YAClC,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC5B,SAAC,CAAC;;AAGF,QAAA,IAAI,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE;AAC3C,YAAA,gBAAgB,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC9F,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;gBAClC,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3B,aAAC,CAAC;;AAGN,QAAA,IAAI,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE;AACtC,YAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO;YAElD,MAAM,oBAAoB,GACtB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;AAEtG,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,oBAAoB,EAAE;gBACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;;YAG7C,IAAI,oBAAoB,EAAE;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;;AAIxB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,OAAO,CAAC,OAAO,EAAE;;AAGrB;;;;;;;;AAQG;AACH,YAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AACxB,gBAAA,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1D,OAAO,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACxD,aAAC,CAAC;YAEF,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,SAAS,EAAE,OAAO,CAAC;;AAGrE,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAG3B;;;AAGG;AACH,IAAA,0BAA0B,CAAC,gBAAkC,EAAA;AACzD,QAAA,IAAI,gBAAgB,KAAK,IAAI,CAAC,OAAO,EAAE;YACnC;;AAGJ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QAEnB,IAAI,CAAC,2BAA2B,EAAE;;AAGtC;;AAEG;IACH,WAAW,GAAA;;QAEP,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM;YAC9C,IAAI,CAAC,MAAM,EAAE;AACT,gBAAA,OAAO,EAAE;;YAGb,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;gBACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;oBAC1B;;AAGJ,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;oBACpB,SAAS;AACT,oBAAA,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK;AAChC,iBAAA,CAAC;AACN,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACzB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3B,SAAC,CAAC;;AAGN;;AAEG;IACH,gBAAgB,GAAA;QACZ,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,GAAG,SAAS;;QAGjD,OAAO,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;AAGhF;;AAEG;AACH,IAAA,kBAAkB,CAAC,UAAgC,EAAA;AAC/C,QAAA,IAAI,CAAC,qCAAqC,EAAE,WAAW,EAAE;QAEzD,IAAI,CAAC,UAAU,EAAE;YACb;;AAGJ,QAAA,IAAI,CAAC,yBAAyB,GAAG,UAAU,CAAC,OAAO,EAAE;AAErD,QAAA,IAAI,CAAC,qCAAqC,GAAG,UAAU,CAAC;AACnD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aACzC,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,yBAAyB,GAAG,UAAU,CAAC,OAAO,EAAE;AACzD,SAAC,CAAC;;AAGV;;;AAGG;AACH,IAAA,YAAY,CAAC,WAAwB,EAAA;AACjC,QAAA,OAAO,OAAO,WAAW,KAAK,QAAQ;;AAG1C;;;AAGG;IACK,oBAAoB,GAAA;QACxB,IAAI,CAAC,qBAAqB,CAAC;aACtB,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAC3C,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvC,aAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf;;AAEJ,YAAA,IAAI,CAAC,OAAQ,CAAC,WAAW,GAAG,SAAS;AACzC,SAAC,CAAC;;;IAIF,qBAAqB,GAAA;QACzB,IACI,IAAI,CAAC,SAAS;AACd,YAAA,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,cAAc,EAAE;YACrB,CAAC,IAAI,CAAC,UAAU;AAChB,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EACnC;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC;;;;IAKpF,cAAc,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;;AAGxD;;;AAGG;IACK,eAAe,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,cAAc,EAAE;YACjD;;AAGJ,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC;;AAG9C;;;AAGG;IACK,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B;;AAEJ,QAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC;;AAGjD;;;AAGG;AACK,IAAA,sBAAsB,CAAC,OAAwB,EAAA;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE;YAC7D;;QAEJ,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC;;AAG5D;;;AAGG;IACK,2BAA2B,GAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B;;QAEJ,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;;AAGtD;;;;;;AAMG;IACK,wBAAwB,GAAA;QAC5B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YAChC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAErC,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;;;;;IAM/C,UAAU,GAAA;AACd,QAAA,IAAI;YACA,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU;AAC9B,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC;AACrC,YAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC;AACtC,YAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC;AACtC,YAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC;;AACzC,QAAA,MAAM;AACJ,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;;;;AAKnC,IAAA,aAAa,CAAC,wBAAgC,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,QAAQ,wBAAwB;AAC5B,gBAAA,KAAK,GAAG;AACJ,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;oBACjC;AACJ,gBAAA,KAAK,GAAG;AACJ,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe;oBAClC;AACJ,gBAAA,KAAK,GAAG;AACJ,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe;oBAClC;AACJ,gBAAA,KAAK,IAAI;AACL,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe;oBAClC;AACJ,gBAAA;AACI,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe;;;;AAK9C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;IAI1B,kBAAkB,GAAA;;AAEtB,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,YAAY,WAAW,EAAE;YACnE,IAAI,CAAC,WAAW,GAAG;gBACf,GAAG,IAAI,CAAC,mBAAmB;gBAC3B,OAAO,EAAE,IAAI,CAAC;aACjB;;AACE,aAAA,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YACtC,IAAI,CAAC,WAAW,GAAG;gBACf,GAAG,IAAI,CAAC,mBAAmB;gBAC3B,GAAG,IAAI,CAAC;aACX;;;;IAKD,sBAAsB,GAAA;AAC1B,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;QACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE;AAC3D,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,YAAY,EAAE;QAE7C,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AACxC,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CACxB,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,MAAK;gBACpC,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;aAC3B,CAAC,CACL;AACL,SAAC,CAAC;;AAtzBG,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EA8Vf,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,6BAA6B,EAG7B,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,mCAAmC,aACnC,iCAAiC,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAlWpC,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EA7BtB,eAAe,CAuJA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,gBAAgB,sCAMhB,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAjK/B,iBAAiB,CAoBX,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAAA,CAACF,mBAAiB,EAAEC,wBAAsB,EAAE,sBAAsB,CAAC,uEAmMhE,+BAA+B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,UAAU,EAehD,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,uBAAuB,4QAR7B,6BAA6B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,UAAU,EAY9C,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,6BAA6B,qEChU/C,2gMAwJA,EAAA,MAAA,EAAA,CAAA,uMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5CQ,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,+FAEjB,6BAA6B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,oBAAoB,EACpB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,kQAClB,aAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,QAAA,EAAA,kGAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGd,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlB9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGT,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA,CAACD,mBAAiB,EAAEC,wBAAsB,EAAE,sBAAsB,CAAC,EACrE,OAAA,EAAA;wBACL,YAAY;wBACZ,iBAAiB;wBACjB,gBAAgB;wBAChB,6BAA6B;wBAC7B,oBAAoB;wBACpB,kBAAkB;wBAClB,aAAa;wBACb,aAAa;wBACb;AACH,qBAAA,EAAA,QAAA,EAAA,2gMAAA,EAAA,MAAA,EAAA,CAAA,uMAAA,CAAA,EAAA;;0BA6VI;;0BACA;;0BACA;;0BACA,MAAM;2BAAC,6BAA6B;;0BAGpC,MAAM;2BAAC,mCAAmC;;0BAC1C,MAAM;2BAAC,iCAAiC;;0BACxC;;0BACA;;0BAAY;yCA/VjB,KAAK,EAAA,CAAA;sBADJ;gBAOD,EAAE,EAAA,CAAA;sBADD;gBAKD,IAAI,EAAA,CAAA;sBADH;gBAOD,aAAa,EAAA,CAAA;sBADZ;gBAOD,UAAU,EAAA,CAAA;sBADT;gBAQD,IAAI,EAAA,CAAA;sBADH,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBAOrC,WAAW,EAAA,CAAA;sBADV;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAKG,YAAY,EAAA,CAAA;sBADf;gBAkBG,iBAAiB,EAAA,CAAA;sBADpB;gBAkBG,iBAAiB,EAAA,CAAA;sBADpB;gBAmBG,eAAe,EAAA,CAAA;sBADlB;gBAoBD,UAAU,EAAA,CAAA;sBADT;gBAKD,QAAQ,EAAA,CAAA;sBADP,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAOlC,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAiBtC,OAAO,EAAA,CAAA;sBADN,KAAK;uBAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE;gBAOvC,QAAQ,EAAA,CAAA;sBADP;gBAKD,KAAK,EAAA,CAAA;sBADJ;gBAQD,kBAAkB,EAAA,CAAA;sBADjB;;;QAMD,QAAQ,EAAA,CAAA;sBAFP;;;QAOD,cAAc,EAAA,CAAA;sBAFb;gBASD,QAAQ,EAAA,CAAA;sBADP,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAKvC,eAAe,EAAA,CAAA;sBADd,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,+BAA+B,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAI5C,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU;gBAIrB,iBAAiB,EAAA,CAAA;sBADhB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,6BAA6B,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAK9D,mBAAmB,EAAA,CAAA;sBADlB,SAAS;uBAAC,qBAAqB;gBAKxB,oBAAoB,EAAA,CAAA;sBAD3B,eAAe;uBAAC,uBAAuB;gBAKvB,qBAAqB,EAAA,CAAA;sBADrC,YAAY;uBAAC,6BAA6B;;;AErTzC,MAAO,uBAAwB,SAAQ,SAAS,CAAA;;AASlD,IAAA,WAAA,CACI,QAAkC,EAClC,QAAkC,EAClC,eAA6E,EAC7E,cAA6D,EAAA;AAE7D,QAAA,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC;;QAX7C,IAAI,CAAA,IAAA,GAAG,OAAO;AAYjB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;;AAE/B;AAEK,MAAO,kBAAmB,SAAQ,WAAW,CAAA;AAM/C;;;;;;;;;;;;;;AAcG;IACH,WAAY,CAAA,SAAc,EAAE,eAA8C,EAAA;AACtE,QAAA,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC;;QAlB9B,IAAI,CAAA,IAAA,GAAG,OAAO;AAmBjB,QAAA,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,eAAe;;AAEtD;;ACxDY,MAAA,yBAAyB,GAAG;AACrC,IAAA,QAAQ,EAAE,wBAAwB;AAClC,IAAA,SAAS,EAAE;;;ACqBf;MACa,sBAAsB,CAAA;AAQlC;AAED,IAAIE,cAAY,GAAG,CAAC;AAUd,MAAO,iBAAkB,SAAQ,SAAS,CAAA;;;AAiB5C;;AAEG;;IAEH,IACI,KAAK,CAAC,WAAgB,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;;AAE9B,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;;AAiC1B,IAAA,WAAA,CAA+C,gBAAwB,CAAC,EAAA;AACpE,QAAA,KAAK,EAAE;QADoC,IAAa,CAAA,aAAA,GAAb,aAAa;;QA9C5D,IAAQ,CAAA,QAAA,GAAG,KAAK;;QAkBhB,IAAkB,CAAA,kBAAA,GAAG,KAAK;;QAQ1B,IAAU,CAAA,UAAA,GAAG,KAAK;;QAIlB,IAAW,CAAA,WAAA,GAAG,KAAK;AAEnB;;AAEG;AAEM,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAO;;;AAc5C,QAAA,IAAI,CAAC,IAAI,GAAG,gBAAgBA,cAAY,EAAE,EAAE;AAC5C,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;;;AAG/B,IAAA,aAAa,CAAC,KAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC;;AAGrD;;AAEG;IACK,gBAAgB,GAAA;QACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAEnC,QAAA,MAAM,KAAK,GAAG,IAAI,sBAAsB,EAAE;AAC1C,QAAA,KAAK,CAAC,MAAM,GAAG,IAAI;AACnB,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK;;AAjFrB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,kBA2DH,eAAe,EAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA3D7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAHf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EA0DnG,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAAC,mBAAmB,ECnGlC,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,8xBAyBA,EDiBc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EAAE,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAqB,mWAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEtD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,mBAEP,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAuB,iBAAA,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,OAAA,EACrG,CAAC,iBAAiB,EAAED,mBAAqB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,8xBAAA,EAAA;;0BA6DnD,SAAS;2BAAC,eAAe;yCAtDtC,KAAK,EAAA,CAAA;sBADJ;gBAKD,KAAK,EAAA,CAAA;sBADJ;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAUG,KAAK,EAAA,CAAA;sBADR,KAAK;uBAAC,SAAS;gBAUhB,kBAAkB,EAAA,CAAA;sBADjB;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAKD,UAAU,EAAA,CAAA;sBADT;gBAKD,WAAW,EAAA,CAAA;sBADV;gBAOQ,aAAa,EAAA,CAAA;sBADrB;gBAQD,YAAY,EAAA,CAAA;sBADX,SAAS;uBAACD,mBAAmB;;;AE7ElC;;;;AAIG;AASG,MAAO,sBAAuB,SAAQ,+BAA+B,CAAA;AAR3E,IAAA,WAAA,GAAA;;;AA0Ca,QAAA,IAAA,CAAA,WAAW,GAA2B,IAAI,YAAY,EAAY;;AAGlE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC;;AAGlC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,aAAa,EAAE;AA2FxD;AAlIG;;AAEG;IACH,IACI,KAAK,CAAC,aAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC5B,IAAI,CAAC,4BAA4B,EAAE;;AAEvC,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;AAG1B;;AAEG;IACH,IACI,QAAQ,CAAC,MAAe,EAAA;AACxB,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;;AAE1C,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK;;AAqB1C;;;;AAIG;IACH,cAAc,CAAC,cAAmB,EAAE,iBAAsB,EAAA;AACtD,QAAA,MAAM,UAAU,GAAG,cAAc,KAAK,iBAAiB;QACvD,IAAI,UAAU,EAAE;AACZ,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC;;aAC3C;AACH,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC;;QAEpD,IAAI,CAAC,yBAAyB,EAAE;QAChC,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIrC,IAAA,eAAe,CAAC,KAAa,EAAE,MAAkC,EAAE,KAAkB,EAAA;;AAEjF,QAAA,MAAM,SAAS,GAAG,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB;QAClF,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAEnC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;QAC3E,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;QAEvD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,uBAAuB,EAAE,gBAAgB,EAAE;;YAEhE;;QAGJ,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC,GAAG,KAAI;YAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;AACnC,YAAA,IAAI,QAAQ,EAAE,QAAQ,EAAE;gBACpB;;AAEJ,YAAA,MAAM,aAAa,GAAG,QAAQ,EAAE,MAAM,CAAC,SAAS;YAChD,IAAI,SAAS,EAAE;AACX,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC;;iBACvC;AACH,gBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC;;AAEpD,SAAC,CAAC;QACF,IAAI,CAAC,yBAAyB,EAAE;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIrC,IAAA,UAAU,CAAC,aAAkB,EAAA;QACzB,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,4BAA4B,EAAE;;AAGvC;;AAEG;AACH,IAAA,eAAe,CAAC,IAAS,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;;AAGlC;;AAEG;AACH,IAAA,cAAc,CAAC,IAAS,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;;;AAIjC,IAAA,wBAAwB,CAAC,IAA4C,EAAA;QACjE,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAc,IAAK,EAAE,QAAQ;;;AAIhD,IAAA,QAAQ,CAAC,KAAU,EAAE,YAAY,GAAG,IAAI,EAAA;QAC9C,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;;;IAIhD,yBAAyB,GAAA;QAC7B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC7C,IAAI,CAAC,YAAY,EAAE;;;IAIf,4BAA4B,GAAA;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,EAAE;;8GAjId,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAHpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EA4BlG,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,iBAAiB,gEAIpB,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChEnC,8pFA+EA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED9CcG,oBAAkB,EAAE,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,oMAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAErE,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBARlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,mBAEb,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,CAAC,4BAA4B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAC1G,OAAA,EAAA,CAACC,oBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,8pFAAA,EAAA;8BAO3E,KAAK,EAAA,CAAA;sBADR;gBAaG,QAAQ,EAAA,CAAA;sBADX;gBAUD,iBAAiB,EAAA,CAAA;sBADhB,eAAe;uBAAC,iBAAiB;gBAKlC,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,iBAAiB;gBAKtB,WAAW,EAAA,CAAA;sBADnB;;;ME5DQ,2BAA2B,CAAA;8GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAA3B,2BAA2B,EAAA,OAAA,EAAA,CAH1B,sBAAsB,CAAA,EAAA,OAAA,EAAA,CACtB,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAEvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAH1B,sBAAsB,CAAA,EAAA,CAAA,CAAA;;2FAGvB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,OAAO,EAAE,CAAC,sBAAsB;AACnC,iBAAA;;;ACEY,MAAA,wBAAwB,GAAmB;AACpD,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB;;AAGvC,MAAA,6BAA6B,GAAmB;AACzD,IAAA,OAAO,EAAE,4BAA4B;AACrC,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB;;MAGvC,0BAA0B,GAAG,IAAI,cAAc,CAAuB,yBAAyB;MAE/F,qBAAqB,GAAG,IAAI,cAAc,CAAsB,qBAAqB;AAErF,MAAA,0BAA0B,GAAwB;AAC3D,IAAA,oBAAoB,EAAE,GAAG;AACzB,IAAA,qBAAqB,EAAE;;AAGd,MAAA,kCAAkC,GAAa;AACxD,IAAA,OAAO,EAAE,qBAAqB;AAC9B,IAAA,QAAQ,EAAE;;AAGD,MAAA,8BAA8B,GAAkC;AACzE,IAAA,uBAAuB,EAAE,IAAI;AAC7B,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,UAAU,EAAE,CAAC,UAAU,CAAC,aAAa;;AAG5B,MAAA,sCAAsC,GAAa;AAC5D,IAAA,OAAO,EAAE,0BAA0B;AACnC,IAAA,QAAQ,EAAE;;;AC1Bd;;AAEG;MAImB,+BAA+B,CAAA;;AAgCjD,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE;;;AAItC,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,OAAO,EAAE;;AAEb,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE;AAC5B,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW;;AAErC,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK,EAAE;;;AAInF,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,KAAK;;8GAjDzB,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAFtC,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAElD,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAHpD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,SAAS,EAAE,CAAC,wBAAwB,EAAE,6BAA6B;AACtE,iBAAA;8BAOY,QAAQ,EAAA,CAAA;sBAAhB;gBAKQ,EAAE,EAAA,CAAA;sBAAV;gBAKQ,IAAI,EAAA,CAAA;sBAAZ;gBAKQ,IAAI,EAAA,CAAA;sBAAZ;gBAKQ,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;;;ACnCC,MAAO,qCAAsC,SAAQ,+BAA+B,CAAA;8GAA7E,qCAAqC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qCAAqC,ECflD,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,icAYA,EDCc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,2BAA2B,EADxD,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAG/D,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBARjD,SAAS;+BACI,qCAAqC,EAAA,aAAA,EAEhC,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAC/D,OAAA,EAAA,CAAC,WAAW,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,EAAA,QAAA,EAAA,icAAA,EAAA;;;AEgB5E;;;;;;;;;;AAUG;AAaG,MAAO,2BAA+B,SAAQ,SAAS,CAAA;AACzD;;AAEG;IACH,IACI,KAAK,CAAC,KAAwD,EAAA;AAC9D,QAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAEzB,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;AAsE3B;;;AAGG;IACH,IACI,KAAK,CAAC,KAAiB,EAAA;AACvB,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;;AAEvB,IAAA,IAAI,KAAK,GAAA;QACL,IAAI,IAAI,CAAC,qBAAqB,EAAE,mBAAmB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC3E,YAAA,OAAO,OAAO;;QAGlB,OAAO,KAAK,CAAC,KAAK;;;AAmJtB,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;;;QAjOX,IAAI,CAAA,IAAA,GAAiB,QAAQ;;QAQ7B,IAAqB,CAAA,qBAAA,GAAa,EAAE;;QAQpC,IAA0B,CAAA,0BAAA,GAAwB,EAAE;AAMpD;;;AAGG;QAEH,IAAgB,CAAA,gBAAA,GAAG,KAAK;;QAIxB,IAAa,CAAA,aAAA,GAAG,IAAI;;QAIpB,IAAe,CAAA,eAAA,GAAG,KAAK;;QAIvB,IAAgB,CAAA,gBAAA,GAAG,OAAO;;QAI1B,IAAS,CAAA,SAAA,GAAG,IAAI;;AAIhB,QAAA,IAAA,CAAA,UAAU,GAAmB,kBAAkB,CAAC,GAAG;AAEnD;;;AAGG;QAEH,IAAS,CAAA,SAAA,GAAc,cAAc;;QAQrC,IAAiB,CAAA,iBAAA,GAAG,IAAI;AAkBxB;;;AAGG;QAEH,IAAe,CAAA,eAAA,GAAG,IAAI;AAEtB;;;;;;AAMG;QAEH,IAAgB,CAAA,gBAAA,GAAwB,EAAE;AAE1C;;;AAGG;AAEH,QAAA,IAAA,CAAA,QAAQ,GAAqB;AACzB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,CAAC;YACP,WAAW,EAAE,CAAC,GAAW,KAAK,GAAG,CAAC,QAAQ;SAC7C;AAED;;;AAGG;AAEH,QAAA,IAAA,CAAA,kBAAkB,GAAqB;AACnC,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,CAAC;YACP,WAAW,EAAE,CAAC,GAAW,KAAK,GAAG,CAAC,QAAQ;SAC7C;AAED;;AAEG;QAEH,IAAY,CAAA,YAAA,GAAG,IAAI;AAEnB;;AAEG;QAEH,IAAe,CAAA,eAAA,GAAG,IAAI;AAEtB;;;;;AAKG;QAEH,IAAsB,CAAA,sBAAA,GAAG,KAAK;;QAI9B,IAAM,CAAA,MAAA,GAAG,KAAK;;QAId,IAAM,CAAA,MAAA,GAAG,IAAI;AAEb;;;;AAIG;QAEH,IAAkB,CAAA,kBAAA,GAAG,KAAK;AAE1B;;AAEG;QAEH,IAAoB,CAAA,oBAAA,GAAG,KAAK;;QAI5B,IAAM,CAAA,MAAA,GAAG,KAAK;;QAQd,IAAe,CAAA,eAAA,GAAG,KAAK;;QAIvB,IAAc,CAAA,cAAA,GAAG,KAAK;;AAIb,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAW;;AAI1C,QAAA,IAAA,CAAA,kBAAkB,GAA8B,IAAI,YAAY,EAAe;;AAI/E,QAAA,IAAA,CAAA,2BAA2B,GAA2B,IAAI,YAAY,EAAY;;AAIlF,QAAA,IAAA,CAAA,uBAAuB,GAA+B,IAAI,YAAY,EAAgB;;AAItF,QAAA,IAAA,CAAA,gCAAgC,GAAsC,IAAI,YAAY,EAE5F;;AAIM,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAkB;;QAStD,IAAgB,CAAA,gBAAA,GAAG,IAAI;;AAGd,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAqB,eAAe,EAAE;AAC5E,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAkB,iBAAiB,EAAE;AAC3E,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAcF;;AAEG;AAEH,QAAA,IAAA,CAAA,eAAe,GAA0B,MAAM,KAAK;AAEpD;;AAEG;AAEH,QAAA,IAAA,CAAA,yBAAyB,GAA0B,MAAM,KAAK;AAE9D;;AAEG;AAEH,QAAA,IAAA,CAAA,uBAAuB,GAA0B,MAAM,KAAK;AAqD5D;;AAEG;AACH,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,IAAa,KAAU;AACvC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,SAAC;;AAGD,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,MAAmB,KAAU;AACrD,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;AACxC,SAAC;;AAGD,QAAA,IAAA,CAAA,iCAAiC,GAAG,CAAC,MAAgB,KAAU;AAC3D,YAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC;AACjD,SAAC;;AAGD,QAAA,IAAA,CAAA,6BAA6B,GAAG,CAAC,WAAyB,KAAU;AAChE,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC;AAClD,SAAC;;AAGD,QAAA,IAAA,CAAA,sCAAsC,GAAG,CAAC,WAAgC,KAAU;AAChF,YAAA,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3D,SAAC;;AAGD,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,cAA8B,KAAU;AAC9D,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC;AAC9C,SAAC;AA3GG,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA,MAAMC,sCAAoC,CAAC,iBAAiB,CAAC;;AAEjE,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA,MAAMA,sCAAoC,CAAC,mBAAmB,CAAC;;;;AAuBvE,IAAA,UAAU,CAAC,KAA+D,EAAA;AACtE,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,aAAa,EAAE;;AAGxB;;;AAGG;AACH,IAAA,gBAAgB,CAAC,KAAwD,EAAA;AACrE,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAElB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC1D,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;iBAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjD,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAA4B;AACpD,gBAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;;iBAC/D;AACH,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;AAGhC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oCAAoC,CAAC;AAE5D,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACxB,gBAAA,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,qBAAqB,CAAC;;AAC/D,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AAC9B,gBAAA,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,0BAA0B,CAAC;;;aAE7E;AACH,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC1D,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;iBAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjD,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAqB;gBAC5C,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK;;iBACtC;AACH,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;AAGhC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oCAAoC,CAAC;AAE5D,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACxB,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC;;AAC7C,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AAC9B,gBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,iBAAiB,CAAC;;;QAGlE,IAAI,CAAC,YAAY,EAAE;;8GA5Td,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,gCAAA,EAAA,kCAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,aAAA,EAAA,EAAA,EAAA,SAAA,EANzB,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,2BAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAoO3F,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAAC,mBAAqB,uEClRpC,uqEAqDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDHc,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,4BAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,yBAAA,EAAA,kCAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEjC,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAXvC,SAAS;+BACI,iBAAiB,EAAA,aAAA,EAEZ,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAA6B,2BAAA,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAChG,IAAA,EAAA;AACF,wBAAA,QAAQ,EAAE;AACb,qBAAA,EAAA,OAAA,EACQ,CAAC,mBAAmB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,uqEAAA,EAAA;wDAOvC,KAAK,EAAA,CAAA;sBADR;gBAWD,IAAI,EAAA,CAAA;sBADH;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAKD,qBAAqB,EAAA,CAAA;sBADpB;gBAKD,iBAAiB,EAAA,CAAA;sBADhB;gBAKD,0BAA0B,EAAA,CAAA;sBADzB;gBAKD,iBAAiB,EAAA,CAAA;sBADhB;gBAQD,gBAAgB,EAAA,CAAA;sBADf;gBAKD,aAAa,EAAA,CAAA;sBADZ;gBAKD,eAAe,EAAA,CAAA;sBADd;gBAKD,gBAAgB,EAAA,CAAA;sBADf;gBAKD,SAAS,EAAA,CAAA;sBADR;gBAKD,UAAU,EAAA,CAAA;sBADT;gBAQD,SAAS,EAAA,CAAA;sBADR;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAKD,iBAAiB,EAAA,CAAA;sBADhB;gBAQG,KAAK,EAAA,CAAA;sBADR;gBAiBD,eAAe,EAAA,CAAA;sBADd;gBAWD,gBAAgB,EAAA,CAAA;sBADf;gBAQD,QAAQ,EAAA,CAAA;sBADP;gBAYD,kBAAkB,EAAA,CAAA;sBADjB;gBAWD,YAAY,EAAA,CAAA;sBADX;gBAOD,eAAe,EAAA,CAAA;sBADd;gBAUD,sBAAsB,EAAA,CAAA;sBADrB;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAKD,MAAM,EAAA,CAAA;sBADL;gBASD,kBAAkB,EAAA,CAAA;sBADjB;gBAOD,oBAAoB,EAAA,CAAA;sBADnB;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAKD,eAAe,EAAA,CAAA;sBADd;gBAKD,cAAc,EAAA,CAAA;sBADb;gBAKQ,YAAY,EAAA,CAAA;sBADpB;gBAKQ,kBAAkB,EAAA,CAAA;sBAD1B;gBAKQ,2BAA2B,EAAA,CAAA;sBADnC;gBAKQ,uBAAuB,EAAA,CAAA;sBAD/B;gBAKQ,gCAAgC,EAAA,CAAA;sBADxC;gBAOQ,gBAAgB,EAAA,CAAA;sBADxB;gBAOD,qBAAqB,EAAA,CAAA;sBADpB,SAAS;uBAACI,mBAAqB;gBAgChC,eAAe,EAAA,CAAA;sBADd;gBAOD,yBAAyB,EAAA,CAAA;sBADxB;gBAOD,uBAAuB,EAAA,CAAA;sBADtB;;AAuFL;AACM,SAAUD,sCAAoC,CAAC,QAAgB,EAAA;AACjE,IAAA,OAAO,KAAK,CACR,CAAwC,qCAAA,EAAA,QAAQ,CAAyC,uCAAA,CAAA;QACrF,CAA+D,6DAAA,CAAA;AAC/D,QAAA,CAAA,sBAAA,CAAwB,CAC/B;AACL;;AE5YM,MAAO,uCAAwC,SAAQ,+BAA+B,CAAA;8GAA/E,uCAAuC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uCAAuC,ECfpD,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,saAYA,EDCc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,2BAA2B,EADxD,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,4BAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,yBAAA,EAAA,kCAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAG/D,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBARnD,SAAS;+BACI,uCAAuC,EAAA,aAAA,EAElC,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAC/D,OAAA,EAAA,CAAC,WAAW,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,EAAA,QAAA,EAAA,saAAA,EAAA;;;AET5E;;AAEG;MAEU,cAAc,CAAA;AAMvB;;AAEG;IACH,OAAO,qBAAqB,CAAC,GAA4B,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,MAAsB,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,EAAE,EAAE,GAAG,CAAC;AACjF,QAAA,OAAO,UAAU;;8GAXZ,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA,CAAA;;2FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACelC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAIhD;;;AAGG;AAgBG,MAAO,iBAAkB,SAAQ,SAAS,CAAA;AAiD5C;;AAEG;IACH,IACI,KAAK,CAAC,KAAU,EAAA;QAChB,IAAI,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;;aAClB;;AAEH,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;;AAE5D,YAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;;;AAG1B,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;AA+B3B;;;AAGG;AACH,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,YAAY;;;AAI5D,IAAA,IAAY,qBAAqB,GAAA;QAC7B,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB;;;AAIvD,IAAA,WAAA,CAAsB,eAA+B,EAAA;AACjD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;AAxFrC;;AAEG;QAEH,IAAQ,CAAA,QAAA,GAAa,MAAM;AAU3B;;;;AAIG;QAEH,IAAgB,CAAA,gBAAA,GAAG,KAAK;AAExB;;AAEG;QAEH,IAAO,CAAA,OAAA,GAAG,KAAK;;QAyBf,IAAe,CAAA,eAAA,GAAG,KAAK;;QAGvB,IAAiB,CAAA,iBAAA,GAAG,CAAC;;QAGrB,IAAwB,CAAA,wBAAA,GAAG,WAAW;;QAGtC,IAAgB,CAAA,gBAAA,GAAG,KAAK;;;QAIhB,IAAkB,CAAA,kBAAA,GAAG,CAAC;;QAGtB,IAAS,CAAA,SAAA,GAAG,KAAK;;QAGR,IAAa,CAAA,aAAA,GAAG,WAAW;;QAE3B,IAAU,CAAA,UAAA,GAAG,QAAQ;AAkBlC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;;;AAI3C;;AAEG;AAEH,IAAA,eAAe,CAAC,KAAoB,EAAA;;AAEhC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;;AAElC,QAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE;;AAE7E,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;gBAC3C,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE;;AAE1C,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;AACpD,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;;;;;;IAO9C,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;YAClE,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,QAAQ,CAAmB,iBAAA,CAAA,CAAC;;;AAG3E,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC;;aACzC;AACH,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;QAEhC,KAAK,CAAC,QAAQ,EAAE;;;IAIpB,eAAe,GAAA;;QAEX,IAAI,CAAC,aAAa,EAAE;;AAGpB,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC7B,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;;QAG1B,KAAK,CAAC,eAAe,EAAE;;;IAI3B,kBAAkB,GAAA;;;;QAId,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACrC,YAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC;;;;AAK9D,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,yBAAyB,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC;;;IAIlD,yBAAyB,GAAA;QACrB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;AAEjD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;YAEhB,IAAI,CAAC,yBAAyB,EAAE;;;;IAKxC,yBAAyB,GAAA;QACrB,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE;AAC1C,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,gBAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC;;AAGlF,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,UAAU;YAC/C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS;;aAC9D;AACH,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,aAAa;YAClD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB;;AAGrE,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;;IAI1B,sBAAsB,GAAA;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;QAGrB,UAAU,CAAC,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;;;IAItD,gBAAgB,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;AAC5C,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,EAAE;AAC1D,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAmB,EAAE,EAAE,CAAC;YAC7E,IAAI,SAAS,EAAE;AACX,gBAAA,IAAI,mBAAmB,IAAI,SAAS,EAAE;oBAClC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,mBAAmB,GAAG,IAAI;;qBAC1D;AACH,oBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;wBACb,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;;yBAC3C;wBACH,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI;;;;iBAGxD;;gBAEH,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,mBAAmB,GAAG,IAAI;;;;AAKzE;;AAEG;IACH,qBAAqB,GAAA;;AAEjB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC;;YAG7D,OAAO,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;;QAEjE,OAAO,EAAE,CAAC;;AAGd;;AAEG;IACH,eAAe,GAAA;QACX,IAAI,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;AAC3C,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,UAAU;YAE/C,OAAO,IAAI,CAAC,KAAK;;AAErB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,aAAa;AAElD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC;;;AAItB,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,aAAa;;;IAIlC,iBAAiB,GAAA;AACrB,QAAA,IAAI,aAAa;AACjB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM;;AAEpD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;;AAErC,QAAA,OAAO,aAAa;;;IAIhB,uBAAuB,GAAA;;QAE3B,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC;;QAE7D,QACI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC;YAC3D,IAAI,CAAC,cAAc,CAAC,YAAY;YAChC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,EAAE,EAAE,CAAC;;;IAK9D,aAAa,GAAA;QACjB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE;AACrC,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE,GAAG,IAAI;;AAEpG,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM;;;aAElD;AACH,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;;;AAG1B,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;;;;8GA5TjD,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAK,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EATf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,KAAK,EAAE;AACV;AACJ,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1CL,+6DA8CA,EDHc,MAAA,EAAA,CAAA,yDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,EAAE,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,gnBAAE,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEnD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAf7B,SAAS;+BACI,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAAmB,iBAAA;AAC9B,4BAAA,KAAK,EAAE;AACV;AACJ,qBAAA,EAAA,OAAA,EACQ,CAAC,oBAAoB,EAAE,WAAW,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,+6DAAA,EAAA,MAAA,EAAA,CAAA,yDAAA,CAAA,EAAA;gFAO7D,MAAM,EAAA,CAAA;sBADL;gBAQD,eAAe,EAAA,CAAA;sBADd;gBAQD,IAAI,EAAA,CAAA;sBADH;gBAOD,QAAQ,EAAA,CAAA;sBADP;gBASD,SAAS,EAAA,CAAA;sBADR;gBASD,gBAAgB,EAAA,CAAA;sBADf;gBAOD,OAAO,EAAA,CAAA;sBADN;gBAOG,KAAK,EAAA,CAAA;sBADR;gBAiBD,gBAAgB,EAAA,CAAA;sBADf,SAAS;uBAAC,SAAS;gBAoDpB,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;AErJ/B,MAAO,mCAAoC,SAAQ,+BAA+B,CAAA;8GAA3E,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,ECfhD,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+PAKA,EDQc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EAD9C,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAG/D,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAR/C,SAAS;+BACI,mCAAmC,EAAA,aAAA,EAE9B,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAC/D,OAAA,EAAA,CAAC,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAAA,+PAAA,EAAA;;;AEblE;;;;;;;;;;;;;;;;;AAiBG;AAiBH,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;AAIjE;;;;AAIG;AASG,MAAO,cAAe,SAAQ,SAAS,CAAA;AAR7C,IAAA,WAAA,GAAA;;;QAWI,IAAI,CAAA,IAAA,GAAc,MAAM;;AAoBd,QAAA,IAAA,CAAA,WAAW,GAA0B,IAAI,YAAY,EAAW;AA4B7E;;IArCG,IACI,KAAK,CAAC,KAAU,EAAA;AAChB,QAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAEzB,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;;AAO3B,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,WAAW;;;IAI3B,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAC3D,MAAM,IAAI,KAAK,CAAC,CAAA,YAAA,EAAe,IAAI,CAAC,IAAI,CAAmB,iBAAA,CAAA,CAAC;;;;IAKpE,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;;AAE1B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;;IAI/B,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;;AAE3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;8GAjDvB,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAHZ,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,iDChD7F,4iBAqBA,EAAA,MAAA,EAAA,CAAA,4BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED4Bc,oBAAoB,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAElC,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;+BACI,WAAW,EAAA,eAAA,EAGJ,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,WAChF,CAAC,oBAAoB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,4iBAAA,EAAA,MAAA,EAAA,CAAA,4BAAA,CAAA,EAAA;8BAK5C,IAAI,EAAA,CAAA;sBADH;gBASO,QAAQ,EAAA,CAAA;sBADf;gBAKG,KAAK,EAAA,CAAA;sBADR;gBASS,WAAW,EAAA,CAAA;sBAApB;;;AE1DC,MAAO,kCAAmC,SAAQ,+BAA0D,CAAA;8GAArG,kCAAkC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,EChB/C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ydAcA,EDAc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,EAD3C,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAG/D,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAR9C,SAAS;+BACI,kCAAkC,EAAA,aAAA,EAE7B,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAC/D,OAAA,EAAA,CAAC,WAAW,EAAE,mBAAmB,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,ydAAA,EAAA;;;AET/D;;AAEG;MAEU,gBAAgB,CAAA;;AAiBzB,IAAA,WAAA,CAAY,cAA8B,EAAA;AAX1C;;AAEG;AACH,QAAA,IAAA,CAAA,gBAAgB,GAAqB,gBAAgB,CAAC,WAAW;AAEjE;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAA0C,IAAI,GAAG,EAAE;AAIxD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,cAAc;;AAGvD;;AAEG;IACH,OAAO,qBAAqB,CAAC,GAA8B,EAAA;AACvD,QAAA,MAAM,UAAU,GAAG,CAAC,cAA8B,KAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC;AAC5D,QAAA,OAAO,UAAU;;8GA3BZ,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACkD5B,MAAgB,cAAe,SAAQ,mBAAmB,CAAA;AADhE,IAAA,WAAA,GAAA;;;QAkCI,IAAS,CAAA,SAAA,GAAG,OAAO;;QAgBnB,IAAY,CAAA,YAAA,GAAG,IAAI;;QAYnB,IAAM,CAAA,MAAA,GAAG,KAAK;AAMd;;;AAGG;QAEH,IAAe,CAAA,eAAA,GAAG,KAAK;;QAIvB,IAAK,CAAA,KAAA,GAAG,KAAK;;QAgBb,IAAiB,CAAA,iBAAA,GAAG,KAAK;;QAIzB,IAAsB,CAAA,sBAAA,GAAkB,OAAO;;QAI/C,IAAU,CAAA,UAAA,GAAG,KAAK;;QAGlB,IAA0B,CAAA,0BAAA,GAAG,IAAI;;AAgBxB,QAAA,IAAA,CAAA,YAAY,GAA0B,IAAI,YAAY,EAAW;;AAKjE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;;AAK1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;;AAIzC,QAAA,IAAA,CAAA,gBAAgB,GAAyB,IAAI,YAAY,EAAU;;AAInE,QAAA,IAAA,CAAA,kBAAkB,GAAwB,IAAI,YAAY,EAAS;;QAsC5E,IAAM,CAAA,MAAA,GAAG,KAAK;AA4Bd;;;;AAIG;AACH,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAW;;AAGhB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;;QAM3C,IAAY,CAAA,YAAA,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAEzD,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,OAAO,EAAQ;;AAEvD,QAAA,IAAA,CAAA,iBAAiB,GAAqB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB;;AAK5E,QAAA,IAAA,CAAA,QAAQ,GAAgB,IAAI,CAAC,UAAU,CAAC,aAAa;;AAG5C,QAAA,IAAA,CAAA,eAAe,GAAa;YACzC,MAAM;YACN,KAAK;YACL,OAAO;YACP,GAAG;YACH,KAAK;YACL,QAAQ;YACR,WAAW;YACX,UAAU;YACV,UAAU;YACV,GAAG;YACH;SACH;;QAGO,IAAoB,CAAA,oBAAA,GAAU,EAAE;;AAiKhC,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,KAAU,KAAa,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG7D,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,KAAU,KAAY;AAC1C,YAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACrB,gBAAA,OAAO,KAAK,CAAC,aAAa,IAAI,EAAE;;iBAC7B,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9C,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;AAE3D,gBAAA,OAAO,UAAU,CAAC,WAAW,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW;;iBACzD;AACH,gBAAA,OAAO,KAAK;;AAEpB,SAAC;AAgRJ;;IA9oBG,IACI,UAAU,CAAC,KAAmC,EAAA;QAC9C,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;;;AAIzC,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW;;;IA8D3B,IACI,KAAK,CAAC,KAAU,EAAA;AAChB,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAC7D,QAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGzB,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;;AAgE3B,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC;;;IAoEhE,eAAe,GAAA;QACX,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,sBAAsB,EAAE;QAC7B,KAAK,CAAC,eAAe,EAAE;;;AAI3B,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,IAAI,OAAO,IAAI,UAAU,IAAI,OAAO,EAAE;AAC7C,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE;;AAExC,QAAA,IAAI,WAAW,IAAI,OAAO,IAAI,aAAa,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,EAAE;YAChG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,oBAAoB,CAAC;;;;IAIjF,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;AAEnB,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,UAAwC,CAAC,KAAK,EAAE;;AAG1D,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;;;;AAK1C,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAC7D,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;;;AAI3B,IAAA,wBAAwB,CAAC,MAAe,EAAA;QACpC,IAAI,CAAC,MAAM,EAAE;YACT,IAAI,CAAC,KAAK,EAAE;;;;IAKpB,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,YAAY,EAAE;QACnB,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB;;AAER,SAAC,CAAC;;;IAGN,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;QACnB,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;QAC7C,IAAI,CAAC,YAAY,EAAE;;;AAIvB,IAAA,+BAA+B,CAAC,KAAY,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;;;AAInD,IAAA,iBAAiB,CAAC,IAAA,GAAe,IAAI,CAAC,SAAS,EAAA;QAC3C,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,IAAI,EAAE;;AAEf,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE;AACrB,QAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;AACtB,QAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC;AAEnB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAEhC,IAAI,CAAC,aAAa,EAAE;;;AAIxB,IAAA,QAAQ,CAAC,MAAe,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;YACxB,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,IAAI,EAAE;;iBACR;AACH,gBAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,EAAE;;;;;AAMxB,IAAA,gBAAgB,CAAC,KAAuB,EAAA;QACpC,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;;;IAKpC,gBAAgB,CAAC,KAAoB,EAAE,KAAuB,EAAA;QAC1D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YAClC;;AAGJ,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;AAGhC;;;AAGG;AACH,IAAA,qBAAqB,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;;AAGJ,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;YAC9C,IAAI,CAAC,KAAK,EAAE;YACZ;;QAGJ,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;YACtC,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAGvB,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,IAAI,CAAC,aAAa,EAAE,0BAA0B,CAAC,CAAC,CAAC;gBACjD,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE;;iBACxC;AACH,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;;;aAEzB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;YAC3C,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;;AACtB,aAAA,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE;AAC1E,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;;;AAK3B,IAAA,qBAAqB,CAAC,SAA+B,EAAA;AACjD,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;;;;AAqBrD,IAAA,IAAc,EAAE,GAAA;QACZ,OAAO,IAAI,CAAC,UAAuC;;AAGvD;AAC4G;AACpG,IAAA,gBAAgB,CAAC,MAAc,EAAA;QACnC,MAAM,KAAK,GAAW,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC;QAE5F,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;;;;AAKxD,IAAA,qBAAqB,CAAC,EAAgC,EAAA;AAC1D,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AAEtB,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,UAAwC,CAAC,KAAK,EAAE;AAEtD,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAClC,gBAAA,IAAI,CAAC,eAAe,GAAG,SAAS;;;;QAIxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;;;AAIvC,IAAA,eAAe,CAAC,EAAgC,EAAA;QACpD,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;AAE7C,QAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qEAAA,CAAuE,CAAC;;AAE5F;;;;AAIG;AACH,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,YAAY,EAAE;QACzC,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACnG,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAI;AAClB,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACpD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC;YAEhD,IAAI,CAAC,aAAa,EAAE;AACxB,SAAC,CAAC;AACN,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAE/B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAExF,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AACxD,QAAA,MAAM,UAAU,GAAe;YAC3B,OAAO,EAAE,IAAI,CAAC;SACjB;AAED,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY;;AAG9C,QAAA,cAAc,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC;QACrD,cAAc,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC;;AAGvE,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE;AACrB,QAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;AACrB,QAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;AACpB,QAAA,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;AAEzB,QAAA,OAAO,cAAc;;;AAIjB,IAAA,aAAa,CAAC,MAAoC,EAAA;AACtD,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,MAAmC;;AAG9C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;AAEvB,YAAA,OAAO,IAAI,yBAAyB,CAAM,MAAM,CAAC;;AAGrD,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI,8BAA8B,CAAM,MAAM,CAAC;;AAG1D,QAAA,OAAO,SAAS;;;IAIZ,iBAAiB,GAAA;QACrB,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB;;AAGJ,QAAA,SAAS,CAAC,MAAM,EAAE,QAAQ;AACrB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;;;IAI7C,oBAAoB,GAAA;AACxB,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;AAC1B,QAAA,MAAM,IAAI,GAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAiB,CAAC,qBAAqB,EAAE;QACnG,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,cAAc,GAAG,IAAI,CAAC,IAAI;QAC9D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;;AAGlC;;;AAGG;AACK,IAAA,qBAAqB,CAAC,KAAY,EAAA;AACtC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AAErB,QAAA,MAAM,uBAAuB,GAAG,YAAY,CAAC,IAAI,CAAC;QAClD,IAAI,uBAAuB,EAAE;AACzB,YAAA,OAAO,KAA2B;;AAGtC,QAAA,MAAM,mBAAmB,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5C,IAAI,mBAAmB,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;;AAGnD,QAAA,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC1C,IAAI,mBAAmB,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;;AAGrD,QAAA,OAAO,EAAE;;AAGb;;;AAGG;AACK,IAAA,4BAA4B,CAAC,KAAY,EAAA;QAC7C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC;;aACjD,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,WAAW,EAAE;AACnD,YAAA,OAAO,IAAI,CAAC,qCAAqC,CAAC,KAAK,CAAC;;aACrD;AACH,YAAA,OAAO,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC;;;AAI9D;;;AAGG;AACK,IAAA,iCAAiC,CAAI,KAAU,EAAA;QACnD,MAAM,KAAK,GAA2B,EAAE;AAExC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrD,IAAI,CAAC,QAAQ,EAAE;gBACX;;AAGJ,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAClB,gBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;;YAGxB,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG9B,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAClC,YAAA,MAAM,UAAU,GAAqB;AACjC,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE;aACZ;AAED,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC;YAE/B,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,WAAW,EAAE;gBAC5C,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,qCAAqC,CAAC,YAAY,CAAC;;iBAC3E;gBACH,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,mCAAmC,CAAC,YAAY,CAAC;;AAEhF,YAAA,OAAO,UAAU;AACrB,SAAC,CAAC;;AAGN;;;AAGG;AACK,IAAA,qCAAqC,CAAI,KAAU,EAAA;QACvD,MAAM,WAAW,GAAuB,EAAE;AAE1C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI;gBACxE,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI;gBAC9E;AACH,aAAA,CAAC;;AAGN,QAAA,OAAO,WAAW;;AAGtB;;;AAGG;AACK,IAAA,8BAA8B,CAAC,KAAY,EAAA;QAC/C,MAAM,WAAW,GAAuB,EAAE;AAC1C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;;AAG7C,QAAA,OAAO,WAAW;;AAGtB;;;AAGG;AACK,IAAA,mCAAmC,CAAC,KAAY,EAAA;QACpD,MAAM,WAAW,GAAuB,EAAE;AAE1C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC/B;AACH,aAAA,CAAC;;AAGN,QAAA,OAAO,WAAW;;AAGtB;;AAEK;IACG,sBAAsB,GAAA;QAC1B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACtC,YAAA,QAAQ,QAAQ,CAAC,IAAI;AACjB,gBAAA,KAAK,oBAAoB;AACrB,oBAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,WAAW;oBAC9C;AACJ,gBAAA,KAAK,mBAAmB;AACpB,oBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,WAAW;oBAC7C;AACJ,gBAAA,KAAK,uBAAuB;AACxB,oBAAA,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,WAAW;oBACjD;AACJ,gBAAA,KAAK,sBAAsB;AACvB,oBAAA,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,WAAW;oBAChD;;AAEZ,SAAC,CAAC;;8GAhrBY,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAgJf,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAiB,EAJvB,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,gBAAgB,sIAQc,UAAU,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FApJjC,cAAc,EAAA,UAAA,EAAA,CAAA;kBADnC;8BAkCG,SAAS,EAAA,CAAA;sBADR;gBAKG,UAAU,EAAA,CAAA;sBADb;gBAaD,YAAY,EAAA,CAAA;sBADX;gBASD,WAAW,EAAA,CAAA;sBADV;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAQD,eAAe,EAAA,CAAA;sBADd;gBAKD,KAAK,EAAA,CAAA;sBADJ;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAKD,WAAW,EAAA,CAAA;sBADV;gBAKD,SAAS,EAAA,CAAA;sBADR;gBAKD,iBAAiB,EAAA,CAAA;sBADhB;gBAKD,sBAAsB,EAAA,CAAA;sBADrB;gBAKD,UAAU,EAAA,CAAA;sBADT;gBAID,0BAA0B,EAAA,CAAA;sBADzB;gBAKG,KAAK,EAAA,CAAA;sBADR;gBAaQ,YAAY,EAAA,CAAA;sBADpB;gBAMQ,eAAe,EAAA,CAAA;sBAFvB;gBAOQ,cAAc,EAAA,CAAA;sBAFtB;gBAMQ,gBAAgB,EAAA,CAAA;sBADxB;gBAKQ,kBAAkB,EAAA,CAAA;sBAD1B;gBAKD,aAAa,EAAA,CAAA;sBADZ,SAAS;uBAAC,gBAAgB;gBAK3B,eAAe,EAAA,CAAA;sBADd,eAAe;uBAAC,iBAAiB;gBAKlC,kBAAkB,EAAA,CAAA;sBADjB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;MCzM5C,oBAAoB,GAAG,IAAI,cAAc,CAAW,6BAA6B;;ACwBxF,MAAO,iCAAkC,SAAQ,cAA2C,CAAA;;AAkB9F,IAAA,WAAA,CAA0C,mBAAgD,EAAA;AACtF,QAAA,KAAK,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,WAAW,CAAC;AAf7D;;;;AAIG;QACH,IAAY,CAAA,YAAA,GAGP,IAAI;;;IAWT,QAAQ,GAAA;QACJ,IAAI,CAAC,6BAA6B,EAAE;;;IAIxC,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;;;IAIpC,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QACxB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC;;;IAIhD,6BAA6B,GAAA;QACjC,IAAI,CAAC,UAAU,CAAC;aACX,IAAI,CAAC,oBAAoB,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjE,aAAA,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;;;AAIlD,IAAA,aAAa,CAAC,IAAa,EAAA;QAC/B,IAAI,CAAC,IAAI,EAAE;YACP,IAAI,CAAC,cAAc,EAAE;YACrB;;QAGJ,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE;YACvC,IAAI,CAAC,KAAK,EAAE;;;;IAKZ,KAAK,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC3D,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,eAAe,EAAE,IAAI;YACrB,GAAG,IAAI,CAAC,YAAY;AACpB,YAAA,sBAAsB,EAAE,KAAK;AAC7B,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;AAC/B,SAAA,CAAC;;AApEG,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,kBAkBtB,oBAAoB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlB/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,2NC7B9C,4hDA+BA,EAAA,MAAA,EAAA,CAAA,qDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJc,YAAY,EAAqB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAS,+BAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE7D,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAR7C,SAAS;+BACI,wBAAwB,EAAA,eAAA,EAGjB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA,CAAC,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,4hDAAA,EAAA,MAAA,EAAA,CAAA,qDAAA,CAAA,EAAA;;0BAoB7F,MAAM;2BAAC,oBAAoB;yCAhBX,cAAc,EAAA,CAAA;sBAA1C,SAAS;uBAAC,gBAAgB;;;MExBlB,8BAA8B,CAAA;8GAA9B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAA9B,8BAA8B,EAAA,OAAA,EAAA,CAH7B,iCAAiC,CAAA,EAAA,OAAA,EAAA,CACjC,iCAAiC,CAAA,EAAA,CAAA,CAAA;AAElC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,YAH7B,iCAAiC,CAAA,EAAA,CAAA,CAAA;;2FAGlC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,iCAAiC,CAAC;oBAC5C,OAAO,EAAE,CAAC,iCAAiC;AAC9C,iBAAA;;;MCYY,qBAAqB,CAAA;;AAqC9B,IAAA,IAAY,QAAQ,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa;;;AAUzC,IAAA,WAAA,CAA6B,WAAyC,EAAA;QAAzC,IAAW,CAAA,WAAA,GAAX,WAAW;;AA7B/B,QAAA,IAAA,CAAA,UAAU,GAAoC,IAAI,YAAY,EAAqB;;AAG3E,QAAA,IAAA,CAAA,aAAa,GAAa,CAAC,KAAK,CAAC;;AAGjC,QAAA,IAAA,CAAA,SAAS,GAAa,CAAC,UAAU,EAAE,WAAW,CAAC;;QAG/C,IAAS,CAAA,SAAA,GAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;;QAc1D,IAAY,CAAA,YAAA,GAAG,KAAK;;AAGX,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AAInC;;;;AAIG;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;AAC9B,YAAA,MAAM,UAAU,GAAG,SAAS,CAAgB,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC;AACpF,YAAA,MAAM,qBAAqB,GAAG,SAAS,CACnC,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,kBAAkB,CACrB;AACD,YAAA,MAAM,mBAAmB,GAAG,SAAS,CAAmB,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,gBAAgB,CAAC;YAEzG,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAEvF,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;AAC5D,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAC5B,aAAC,CAAC;YAEF,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;AAC1D,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;gBACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK;AACzD,aAAC,CAAC;AACN,SAAC,CAAC;;;IAKN,UAAU,GAAA;AACN,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;;;;AAK5C,IAAA,mBAAmB,CAAC,KAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;gBAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;;iBACjC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;AACrD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;;iBAC1B,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;AACjD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;;AAC3B,iBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;;AAErD,gBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE;oBAC3B;;;AAIJ,gBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK;AAE9C,gBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEvD,oBAAA,IAAI,CAAC,SAAS,GAAG,kBAAkB;oBACnC;;AAGJ,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC/B,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE;gBAErC,IAAI,IAAI,EAAE;AACN,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;;;AAKvC,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;;;AAIxB,IAAA,UAAU,CAAC,cAAsB,EAAA;AACrC,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;AACjD,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,cAAc;QAEpC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,cAAc,CAAC,MAAM,CAAC;;;IAI/D,kBAAkB,CAAC,cAAsB,EAAE,YAAoB,EAAA;AACnE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB;AAElD,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,EAAE,YAAY,EAAE,SAAS,IAAI,SAAS,CAAC;;;AAIjF,IAAA,aAAa,CAAC,KAAoB,EAAA;AACtC,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO;;;IAIrD,iBAAiB,GAAA;AACrB,QAAA,OAAO,EACH,IAAI,CAAC,eAAe;YACpB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;AAChD,YAAA,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CACpC;;;AAIG,IAAA,kBAAkB,CAAC,UAAmB,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACjB,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;YACzB;AACH,SAAA,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE;AACnC,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;YAC7C,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,eAAe,EAAE,eAAe,CAAC;;;;IAKjE,iBAAiB,GAAA;AACrB,QAAA,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO;QAChC,IAAI,CAAC,SAAS,EAAE;YACZ;;AAGJ,QAAA,IAAI,SAAS,CAAC,OAAO,EAAE;AACnB,YAAA,IAAI,iBAAyC;AAE7C,YAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AAC/B,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;oBAClB;;AAEJ,gBAAA,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;gBAEnF,IAAI,iBAAiB,EAAE;oBACnB;;;YAIR,IAAI,iBAAiB,EAAE;AACnB,gBAAA,OAAO,iBAAiB;;;AAIhC,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;;;IAI/D,yBAAyB,CAAC,OAAqB,EAAE,SAAiB,EAAA;QACtE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;;8GAhMtG,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE;AACf,iBAAA;+EAIG,OAAO,EAAA,CAAA;sBADN;gBAQD,SAAS,EAAA,CAAA;sBADR;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAMQ,UAAU,EAAA,CAAA;sBAFlB;gBA4DD,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,MAAM;;;AC9FxB;AA4DA,IAAI,iBAAiB,GAAG,CAAC;MAEZ,8BAA8B,CAAA;AACvC;;;;AAIG;AACH,IAAA,WAAA,CACW,MAAmC,EACnC,OAAY;;QADZ,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAO,CAAA,OAAA,GAAP,OAAO;;AAErB;AAoCK,MAAO,2BAA4B,SAAQ,cAAc,CAAA;;IAgC3D,IACI,QAAQ,CAAC,aAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa;;AAE9B,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;;;AAiBzB,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC;;;IAO1C,IACI,QAAQ,CAAC,KAAK,EAAA;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAE1B,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;;;AAgDzB,IAAA,WAAA;;IAEa,wBAAiD;;IAEzC,iBAAmC;;IAEnC,SAAmB;;AAEQ,IAAA,UAA0C,EAC7E,sBAA8C,EAAA;AAEvD,QAAA,KAAK,EAAE;QATE,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QAEhB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QAEjB,IAAS,CAAA,SAAA,GAAT,SAAS;QAEkB,IAAU,CAAA,UAAA,GAAV,UAAU;QAC7C,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;;AA1HzB,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAA,+BAAA,EAAkC,iBAAiB,EAAE,EAAE;;AAIzF,QAAA,IAAA,CAAA,aAAa,GAAW,IAAI,CAAC,qBAAqB;;QAQlD,IAAS,CAAA,SAAA,GAAG,KAAK;;QAejB,IAAS,CAAA,SAAA,GAAU,EAAE;AAWrB;;AAEG;QAEH,IAAa,CAAA,aAAA,GAAkB,MAAM;;QAIrC,IAAS,CAAA,SAAA,GAAG,KAAK;;QAWP,IAAS,CAAA,SAAA,GAAG,KAAK;AAW3B;;;;;AAKG;QAEH,IAAe,CAAA,eAAA,GAAoB,UAAU;AAE7C;;;AAGG;QAEH,IAAQ,CAAA,QAAA,GAAa,EAAE;;QAIvB,IAAmB,CAAA,mBAAA,GAAG,IAAI;;AAQjB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAkC;AAiC7E;;;AAG2C;AAE3C,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,GAAW,KAAa,GAAG;;;IAGxC,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;QAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU;;AAEjG,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC1E,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAoB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC;;;;IAKpF,eAAe,GAAA;QACX,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,gBAAgB,EAAE;;;;AAK/B,IAAA,eAAe,CAAI,UAAa,EAAA;QAC5B,MAAM,KAAK,GAAG,IAAI,8BAA8B,CAAC,IAAI,EAAE,UAAU,CAAC;AAElE,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;;IAIpC,iBAAiB,CAAC,KAAU,EAAE,KAAsB,EAAA;AAChD,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAEjF,QAAA,IAAI,UAAU,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YAC1B;;AAGJ,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;;;AAIjC,IAAA,UAAU,CAAC,KAAU,EAAE,YAAY,GAAG,IAAI,EAAA;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACjF,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AACd,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;;aACtB;YACH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;AAElC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,YAAY,EAAE;YAC9B,IAAI,CAAC,KAAK,EAAE;;AAEhB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChC,IAAI,YAAY,EAAE;AACd,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;;AAEjD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAClD,IAAI,CAAC,aAAa,EAAE;;;AAIxB,IAAA,gBAAgB,CAAC,KAAY,EAAA;AACzB,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;YACrC,IAAI,CAAC,kBAAkB,EAAE;YACzB;;QAEJ,IAAI,CAAC,IAAI,CAAC,0BAA0B,IAAI,IAAI,CAAC,MAAM,EAAE;AACjD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;AACjB,aAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE;YACxC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3B,YAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAAK,EAAE;;AAGlD,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;;;IAIvC,mBAAmB,GAAA;QACf,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC7B,IAAI,CAAC,IAAI,EAAE;;;;IAKnB,WAAW,GAAA;QACP,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ;QACjC,IAAI,CAAC,YAAY,EAAE;;;AAIvB,IAAA,WAAW,CAAC,aAA+B,EAAA;QACvC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACvC,gBAAA,IAAI,KAAK,CAAC,mBAAmB,CAAC,aAAa,CAAC,WAAW,KAAK,aAAa,CAAC,KAAK,EAAE;AAC7E,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;;AAErE,aAAC,CAAC;;AAEN,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;QAC7C,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,YAAY,EAAE;;;AAIvB,IAAA,WAAW,CAAC,KAAU,EAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAClD,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAEvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,YAAY,EAAE;;;AAIvB,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AACrC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE;AAClD,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBAChD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE;;iBACxC;gBACH,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3B,gBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;;;QAGrD,IAAI,CAAC,YAAY,EAAE;;;AAIvB,IAAA,oBAAoB,CAAC,YAAiB,EAAA;QAClC,QACI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;AACrF,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;;;AAK5E,IAAA,gBAAgB,CAAC,IAAsB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;YAC3B,IAAI,CAAC,aAAa,EAAE;YAEpB;;AAGJ,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;AAIxB,IAAA,aAAa,CAAC,IAAwB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;QACnB,IAAI,CAAC,wBAAwB,EAAE;;AAGnC;;;AAGG;IACH,wBAAwB,GAAA;QACpB,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAI;YAClC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvF,YAAA,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC;AACpC,SAAC,CAAC;;;AAIN,IAAA,eAAe,CAAC,KAAwB,EAAA;QACpC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACzC;;QAGJ,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY;QACtF,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;;;;AAK7B,IAAA,eAAe,CAAC,KAAY,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,KAAK,CAAC,cAAc,EAAE;;;;AAK9B,IAAA,cAAc,CAAC,QAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;IAIxB,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;AAIhB,IAAA,eAAe,CAAC,UAA4B,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE;YACvC;;QAGJ,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC;AAE9D,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;;;AAI7D,IAAA,sBAAsB,CAAC,IAAY,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;;QAGhE,OAAO,IAAI,CAAC;AACP,aAAA,MAAM,CAAC,CAAC,MAA0B,EAAE,IAAsB,KAAI;AAC3D,YAAA,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE9C,YAAA,OAAO,MAAM;SAChB,EAAE,EAAE;AACJ,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;;;AAIpC,IAAA,YAAY,CAAC,KAAU,EAAA;;AAE3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;;AAId,IAAA,MAAM,gBAAgB,GAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC7B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC9D,MAAM,EAAE,IAAI,CAAC;AAChB,SAAA,CAAC;QAEF,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CAChD,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,EAC1E,iCAAiC,EACjC;YACI,YAAY,EAAE,IAAI,CAAC;AACtB,SAAA,EACD,EAAE,QAAQ,EAAE,CACf;;AAhYI,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,iHA2HZ,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA3H7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EA5BzB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE;AACV,aAAA;AACD,YAAA,+BAA+B;AAClC,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA8CU,aAAa,EA0Eb,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,kBAAkB,EAYf,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,YAAY,uEC3N9B,s7MAsJA,EAAA,MAAA,EAAA,CAAA,+fAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7DQ,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAChB,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,mFACvB,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,gBAAgB,EAChB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,EACd,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,8PAClB,oBAAoB,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,qBAAqB,EACrB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,6tBAElB,aAAa,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,oBAAoB,EACpB,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,eAAe,oDACf,uBAAuB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGlB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAlCvC,SAAS;+BACI,iBAAiB,EAAA,aAAA,EAGZ,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE;AACV,yBAAA;AACD,wBAAA,+BAA+B;qBAClC,EACQ,OAAA,EAAA;wBACL,gBAAgB;wBAChB,gBAAgB;wBAChB,uBAAuB;wBACvB,oBAAoB;wBACpB,gBAAgB;wBAChB,cAAc;wBACd,kBAAkB;wBAClB,oBAAoB;wBACpB,WAAW;wBACX,qBAAqB;wBACrB,qBAAqB;wBACrB,kBAAkB;wBAClB,yBAAyB;wBACzB,aAAa;wBACb,oBAAoB;wBACpB,eAAe;wBACf;AACH,qBAAA,EAAA,QAAA,EAAA,s7MAAA,EAAA,MAAA,EAAA,CAAA,+fAAA,CAAA,EAAA;;0BA6HI;;0BAAY,MAAM;2BAAC,cAAc;gFArHtC,aAAa,EAAA,CAAA;sBADZ;gBAKD,IAAI,EAAA,CAAA;sBADH;gBAKD,SAAS,EAAA,CAAA;sBADR;gBAKD,cAAc,EAAA,CAAA;sBADb;gBAKD,cAAc,EAAA,CAAA;sBADb;gBAKD,cAAc,EAAA,CAAA;sBADb,SAAS;uBAAC,aAAa;gBAQpB,QAAQ,EAAA,CAAA;sBADX;gBAYD,aAAa,EAAA,CAAA;sBADZ;gBAKD,SAAS,EAAA,CAAA;sBADR;gBAgBG,QAAQ,EAAA,CAAA;sBADX;gBAeD,eAAe,EAAA,CAAA;sBADd;gBAQD,QAAQ,EAAA,CAAA;sBADP;gBAKD,mBAAmB,EAAA,CAAA;sBADlB;gBAKD,kBAAkB,EAAA,CAAA;sBADjB;gBAKQ,eAAe,EAAA,CAAA;sBADvB;gBAKD,SAAS,EAAA,CAAA;sBADR,SAAS;uBAAC,kBAAkB;gBAK7B,eAAe,EAAA,CAAA;sBADd,SAAS;uBAAC,iBAAiB;gBAK5B,YAAY,EAAA,CAAA;sBADX,SAAS;uBAAC,cAAc;gBAKR,UAAU,EAAA,CAAA;sBAD1B,YAAY;uBAAC,YAAY;gBAuB1B,SAAS,EAAA,CAAA;sBADR;;;ME1OQ,wBAAwB,CAAA;8GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAxB,wBAAwB,EAAA,OAAA,EAAA,CAHvB,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAC3B,2BAA2B,CAAA,EAAA,CAAA,CAAA;AAE5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAHvB,2BAA2B,CAAA,EAAA,CAAA,CAAA;;2FAG5B,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,2BAA2B,CAAC;oBACtC,OAAO,EAAE,CAAC,2BAA2B;AACxC,iBAAA;;;ACSK,MAAO,uCAAwC,SAAQ,+BAA+B,CAAA;8GAA/E,uCAAuC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uCAAuC,ECfpD,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,mfAgBA,EDHc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,2BAA2B,EADxD,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,MAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAG/D,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBARnD,SAAS;+BACI,wCAAwC,EAAA,aAAA,EAEnC,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAC/D,OAAA,EAAA,CAAC,WAAW,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,EAAA,QAAA,EAAA,mfAAA,EAAA;;;AEEtE,MAAO,yCAA0C,SAAQ,+BAAiE,CAAA;8GAAnH,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,ECftD,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,iVASA,EDIc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EADlD,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAG/D,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBARrD,SAAS;+BACI,0CAA0C,EAAA,aAAA,EAErC,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAC/D,OAAA,EAAA,CAAC,WAAW,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,EAAA,QAAA,EAAA,iVAAA,EAAA;;;AEItE,IAAI,QAAQ,GAAG,CAAC;AAQV,MAAO,oBAAqB,SAAQ,SAAS,CAAA;;IAY/C,IACI,KAAK,CAAC,QAAa,EAAA;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;;AAE1B,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;;AA0B3B,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAvCX;;AAEG;QAEH,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;;QAab,IAAW,CAAA,WAAA,GAAG,KAAK;;AAQV,QAAA,IAAA,CAAA,OAAO,GAAuC,IAAI,YAAY,EAAE;;QAUzE,IAAU,CAAA,UAAA,GAAG,KAAK;AAMd,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;;;AAGvC,QAAA,IAAI,CAAC,EAAE,GAAG,CAAgB,aAAA,EAAA,QAAQ,EAAE;AACpC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAkB,eAAA,EAAA,QAAQ,EAAE;AACxC,QAAA,QAAQ,EAAE;;;AAId,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;;IAI5B,eAAe,GAAA;QACX,KAAK,CAAC,eAAe,EAAE;;;AAI3B,IAAA,YAAY,CAAC,KAAU,EAAE,SAAS,GAAG,KAAK,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,SAAS,GAAG,KAAK;;AAGrB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,QAAQ,EAAE;AACzD,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE3B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpB,IAAI,CAAC,SAAS,EAAE;;;;IAKxB,KAAK,GAAA;QACD,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE;;;IAI5D,MAAM,GAAA;QACF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;;;IAIvC,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;;;AAIhC,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,YAAY,EAAE;;8GAtGd,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiClBS,sBAAwB,EC1DvC,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,0oBAqBA,4CDEcA,sBAAwB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,IAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAExD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;+BACI,kBAAkB,EAAA,eAAA,EAEX,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAACS,sBAAwB,EAAE,WAAW,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,0oBAAA,EAAA;wDAKlE,KAAK,EAAA,CAAA;sBADJ;gBAOD,QAAQ,EAAA,CAAA;sBADP;gBAKG,KAAK,EAAA,CAAA;sBADR;gBAUD,WAAW,EAAA,CAAA;sBADV;gBAKD,QAAQ,EAAA,CAAA;sBADP,SAAS;uBAAC,UAAU;gBAKZ,OAAO,EAAA,CAAA;sBADf;gBAKO,eAAe,EAAA,CAAA;sBADtB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAAA,sBAAwB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;AE1B1D;;;;AAIG;AAEH;AACA,IAAI,YAAY,GAAG,CAAC;AAUd,MAAO,mBACT,SAAQ,+BAA+B,CAAA;;;IAKvC,IACI,KAAK,CAAC,QAAa,EAAA;AACnB,QAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAE5B,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;;IAI3B,IACI,QAAQ,CAAC,MAAe,EAAA;AACxB,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;;AAE1C,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK;;;AAqC1C,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;;QAjCX,IAAU,CAAA,UAAA,GAAG,KAAK;;QAIlB,IAAY,CAAA,YAAA,GAAG,MAAM;;AAarB,QAAA,IAAA,CAAA,MAAM,GAAuC,IAAI,YAAY,EAAwB;;QAG7E,IAAc,CAAA,cAAA,GAAG,KAAK;;QAGtB,IAAS,CAAA,SAAA,GAAgC,IAAI;;AAGpC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAQ7C,QAAA,IAAI,CAAC,EAAE,GAAG,eAAe,YAAY,EAAE,EAAE;;;AAK7C,IAAA,cAAc,CAAC,KAAoB,EAAA;QAC/B,KAAK,CAAC,wBAAwB,EAAE;AAChC,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;;;YAG7B,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AACzD,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;AAG9B,YAAA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE;;AAE3E,gBAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC;;;;;AAMxD,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;;AAIlE,IAAA,eAAe,CAAC,IAAS,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;;AAGlC;;;AAGG;AACH,IAAA,QAAQ,CAAC,KAA2B,EAAA;AAChC,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;;;IAIrC,qBAAqB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;;QAE7E,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzE,IAAI,CAAC,YAAY,EAAE;;AAGvB;;;;AAIG;IACH,eAAe,GAAA;QACX,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAC5C,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC7C,SAAC,CAAC;QACF,KAAK,CAAC,eAAe,EAAE;;;IAI3B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE;;;AAI1C,IAAA,yBAAyB,CAAC,IAAyC,EAAA;AAC/D,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAc,IAAK,CAAC,QAAQ,CAAC;;;AAI/E,IAAA,aAAa,CAAC,YAA6C,EAAA;QAC/D,IAAI,CAAC,YAAY,IAAI,YAAY,EAAE,MAAM,KAAK,CAAC,EAAE;YAC7C;;AAGJ,QAAA,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,eAAe,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAE3G,QAAA,YAAY,CAAC;aACR,IAAI,CACD,SAAS,CAAC,YAAY,CAAC,EACvB,SAAS,CAAC,MAAK;AACX,YAAA,IAAI,uBAAuB,GAAG,CAAC,CAAC;YAChC,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAI;AACjD,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,oBAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;;qBACtB;AACH,oBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;;AAG/B,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;;AAG5B,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,uBAAuB,GAAG,CAAC,EAAE;oBACpE,uBAAuB,GAAG,CAAC;;AAG/B,gBAAA,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE;AACxC,aAAC,CAAC;;AAGF,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,YAAY,IAAI,uBAAuB,GAAG,CAAC,CAAC,EAAE;gBACjE,YAAY,CAAC,OAAO,EAAE,CAAC,uBAAuB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;;AAElE,YAAA,OAAO,KAAK,CAAC,GAAG,aAAa,CAAC;SACjC,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvC,aAAA,SAAS,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;;AAG1D;;;;AAIG;AACK,IAAA,eAAe,CAAC,MAA4B,EAAA;QAChD,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;YAC7B,MAAM,CAAC,QAAQ,EAAE;YAEjB;;;AAIJ,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM;;AAG3B,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YACpB,MAAM,CAAC,MAAM,EAAE;;;;AAKf,IAAA,qBAAqB,CAAC,MAA4B,EAAA;AACtD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAE3B,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;AAG7B,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM;YACvB,MAAM,CAAC,MAAM,EAAE;;AAGnB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE;;;AAIZ,IAAA,cAAc,CAAC,aAAmC,EAAA;QACtD,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,mBAAmB,EAAE;YACnD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB;AAClG,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACrB,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE;AACjD,oBAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;;AAE3B,aAAC,CAAC;;;AAIV;;;AAGG;AACK,IAAA,cAAc,CAAC,MAA4B,EAAA;QAC/C,IAAI,MAAM,EAAE;AACR,YAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACvB,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACzB,YAAA,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;;;;IAKpE,qBAAqB,GAAA;QACzB,QACI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,YAAY,oBAAoB,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;aAChG,MAAM,KAAK,CAAC;;8GAnPhB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAHjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAmC/F,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,oBAAoB,kEAIvB,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrFtC,61DAoDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDLcR,oBAAkB,EAAE,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EAAE,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,oJAAE,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE9E,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,mBAEV,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACvG,OAAA,EAAA,CAACA,oBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,EAAA,QAAA,EAAA,61DAAA,EAAA;wDASpF,KAAK,EAAA,CAAA;sBADR,KAAK;uBAAC,UAAU;gBAUb,QAAQ,EAAA,CAAA;sBADX;gBAUD,UAAU,EAAA,CAAA;sBADT;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAKD,mBAAmB,EAAA,CAAA;sBADlB,eAAe;uBAAC,oBAAoB;gBAKrC,gBAAgB,EAAA,CAAA;sBADf,YAAY;uBAAC,oBAAoB;;;QAMlC,MAAM,EAAA,CAAA;sBAFL;gBAwBD,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MExG1B,wBAAwB,CAAA;8GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAHvB,mBAAmB,EAAE,oBAAoB,CACzC,EAAA,OAAA,EAAA,CAAA,mBAAmB,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA;+GAE1C,wBAAwB,EAAA,OAAA,EAAA,CAHvB,mBAAmB,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAG1C,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;AACpD,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,oBAAoB;AACtD,iBAAA;;;ACQK,MAAO,kCAAmC,SAAQ,+BAA+B,CAAA;8GAA1E,kCAAkC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,ECf/C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,2bAYA,EDCc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,wBAAwB,EADrD,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAG/D,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAR9C,SAAS;+BACI,kCAAkC,EAAA,aAAA,EAE7B,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAC/D,OAAA,EAAA,CAAC,WAAW,EAAE,mBAAmB,EAAE,wBAAwB,CAAC,EAAA,QAAA,EAAA,2bAAA,EAAA;;;AERzE;;AAEG;MAEU,YAAY,CAAA;;AAOrB,IAAA,WAAA,CAAY,cAA8B,EAAA;AACtC,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,cAAc;;AAGvD;;AAEG;IACH,OAAO,qBAAqB,CAAC,GAA0B,EAAA;AACnD,QAAA,MAAM,UAAU,GAAG,CAAC,cAA8B,KAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC;AACxD,QAAA,OAAO,UAAU;;8GAjBZ,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA,CAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC+BlC;;;AAGG;MACU,uBAAuB,CAAA;AAChC;;;AAGG;IACH,WACW,CAAA,OAAY;;QAAZ,IAAO,CAAA,OAAA,GAAP,OAAO;QAEd,QAAQ,CAAC,8FAA8F,CAAC;;AAE/G;AAGK,MAAgB,UAClB,SAAQ,mBAAmB,CAAA;AAF/B,IAAA,WAAA,GAAA;;;QAOI,IAAS,CAAA,SAAA,GAAG,OAAO;;QAInB,IAAM,CAAA,MAAA,GAAG,KAAK;;QAId,IAAK,CAAA,KAAA,GAAG,KAAK;;QAYb,IAAiB,CAAA,iBAAA,GAAG,KAAK;;QAIzB,IAAK,CAAA,KAAA,GAAG,iBAAiB;;QAIzB,IAAS,CAAA,SAAA,GAAa,2BAA2B;AAUjD;;;;;AAKG;QAEH,IAAe,CAAA,eAAA,GAAoB,UAAU;;QAI7C,IAAsB,CAAA,sBAAA,GAAkB,OAAO;;QAU/C,IAAQ,CAAA,QAAA,GAAG,KAAK;;QAShB,IAAmB,CAAA,mBAAA,GAAG,IAAI;;AAQ1B,QAAA,IAAA,CAAA,YAAY,GAAqB,EAAE,cAAc,EAAE,IAAI,EAAE;;QAYzD,IAAU,CAAA,UAAA,GAAG,KAAK;;QAIlB,IAAU,CAAA,UAAA,GAAG,KAAK;AAmClB;;;;AAIG;QAEH,IAAc,CAAA,cAAA,GAA+B,OAAO;;AAoBpD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAA2B;;AAqC7D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;;AAGhB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;;QAM9C,IAAO,CAAA,OAAA,GAAG,KAAK;AAEvB;;;;AAIG;AACK,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAW;;AAMpC,QAAA,IAAA,CAAA,QAAQ,GAAgB,IAAI,CAAC,UAAU,CAAC,aAAa;AA0NhE;;IA/UG,IACI,gBAAgB,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,oBAAoB,CAAC,KAAK,CAAC;;AAGxD,IAAA,IAAI,gBAAgB,GAAA;QAChB,OAAO,IAAI,CAAC,iBAAiB;;;IAIjC,IACI,iBAAiB,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,GAAG,oBAAoB,CAAC,KAAK,CAAC;;AAGzD,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,kBAAkB;;;IAyBlC,IACI,IAAI,CAAC,KAAU,EAAA;QACf,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;;;AAG7D,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,YAAY;;;AAI5B,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC;;;IAyEhE,eAAe,GAAA;QACX,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,sBAAsB,EAAE;QAC7B,KAAK,CAAC,eAAe,EAAE;;;IAI3B,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;AAEnB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AAEjC,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;;;;AAK1C,IAAA,IAAI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;;AAGzC;AACkB;AAClB,IAAA,KAAK,CAAC,KAAA,GAA2B,IAAI,EAAE,aAAsB,KAAK,EAAA;QAC9D,IAAI,KAAK,EAAE;AACP,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;YAC/C,IAAI,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;gBACjC;;;AAIR,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,SAAS,EAAE;;;;AAKxB,IAAA,QAAQ,CAAC,MAAe,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM;YACrB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;;QAGjC,IAAI,CAAC,aAAa,EAAE;;;IAIxB,gBAAgB,CAAC,KAAoB,EAAE,KAAuB,EAAA;QAC1D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YAClC;;AAGJ,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;AAIxB,IAAA,qBAAqB,CAAC,SAA+B,EAAA;AACjD,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,EAAE;;;;AAK5C,IAAA,QAAQ,CAAC,QAAa,EAAE,YAAY,GAAG,IAAI,EAAA;AACjD,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YACzB,IAAI,YAAY,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;YAEtD,IAAI,CAAC,YAAY,EAAE;;;;IAKnB,iBAAiB,GAAA;QACrB,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB;;AAGJ,QAAA,SAAS,CAAC,MAAM,EAAE,QAAQ;AACrB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;;;IAI7C,oBAAoB,GAAA;AACxB,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,cAAc,GAAG,IAAI,CAAC,IAAI;QAC9D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;;AAGlC;;;AAGG;AACK,IAAA,qBAAqB,CAAC,KAAY,EAAA;AACtC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AAErB,QAAA,MAAM,uBAAuB,GAAG,YAAY,CAAC,IAAI,CAAC;QAClD,IAAI,uBAAuB,EAAE;AACzB,YAAA,OAAO,KAA2B;;AAGtC,QAAA,MAAM,mBAAmB,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5C,IAAI,mBAAmB,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;;AAGnD,QAAA,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC1C,IAAI,mBAAmB,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;;AAGrD,QAAA,OAAO,EAAE;;AAGb;;;AAGG;AACK,IAAA,4BAA4B,CAAC,KAAY,EAAA;QAC7C,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,EAAE;AAC7C,YAAA,OAAO,IAAI,CAAC,qCAAqC,CAAC,KAAK,CAAC;;aACrD;AACH,YAAA,OAAO,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC;;;AAI9D;;;AAGG;AACK,IAAA,qCAAqC,CAAI,KAAU,EAAA;QACvD,MAAM,WAAW,GAAuB,EAAE;AAE1C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC/B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AACvD,gBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;AAChC,aAAA,CAAC;;AAGN,QAAA,OAAO,WAAW;;AAGtB;;;AAGG;AACK,IAAA,8BAA8B,CAAC,KAAe,EAAA;QAClD,MAAM,WAAW,GAAuB,EAAE;AAE1C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;;AAG7C,QAAA,OAAO,WAAW;;AAGtB;;;AAGG;AACK,IAAA,mCAAmC,CAAC,KAAY,EAAA;QACpD,MAAM,WAAW,GAAuB,EAAE;AAE1C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC/B;AACH,aAAA,CAAC;;AAGN,QAAA,OAAO,WAAW;;AAGtB;;AAEK;IACG,sBAAsB,GAAA;QAC1B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACtC,YAAA,QAAQ,QAAQ,CAAC,IAAI;AACjB,gBAAA,KAAK,qBAAqB;AACtB,oBAAA,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,WAAW;oBAC/C;AACJ,gBAAA,KAAK,wBAAwB;AACzB,oBAAA,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,WAAW;oBAClD;AACJ,gBAAA,KAAK,uBAAuB;AACxB,oBAAA,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,WAAW;oBACjD;;AAEZ,SAAC,CAAC;;8GAlbY,UAAU,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAsKX,iBAAiB,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAJvBC,eAAa,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAlKN,UAAU,EAAA,UAAA,EAAA,CAAA;kBAD/B;8BAOG,SAAS,EAAA,CAAA;sBADR;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAKD,KAAK,EAAA,CAAA;sBADJ;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAKD,iBAAiB,EAAA,CAAA;sBADhB;gBAKD,KAAK,EAAA,CAAA;sBADJ;gBAKD,SAAS,EAAA,CAAA;sBADR;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAUD,eAAe,EAAA,CAAA;sBADd;gBAKD,sBAAsB,EAAA,CAAA;sBADrB;gBAOO,KAAK,EAAA,CAAA;sBADZ;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAMO,WAAW,EAAA,CAAA;sBADlB;gBAKD,mBAAmB,EAAA,CAAA;sBADlB;gBAKD,eAAe,EAAA,CAAA;sBADd;gBAKD,YAAY,EAAA,CAAA;sBADX;gBASD,YAAY,EAAA,CAAA;sBADX;gBAKD,UAAU,EAAA,CAAA;sBADT;gBAKD,UAAU,EAAA,CAAA;sBADT;gBAKG,gBAAgB,EAAA,CAAA;sBADnB;gBAWG,iBAAiB,EAAA,CAAA;sBADpB;gBAcD,QAAQ,EAAA,CAAA;sBADP;gBAOD,QAAQ,EAAA,CAAA;sBADP;gBASD,cAAc,EAAA,CAAA;sBADb;gBAKG,IAAI,EAAA,CAAA;sBADP;gBAiBD,eAAe,EAAA,CAAA;sBADd;gBAKD,aAAa,EAAA,CAAA;sBADZ,SAAS;uBAACA,eAAa;gBAKxB,eAAe,EAAA,CAAA;sBADd,eAAe;uBAAC,iBAAiB;;;AClMhC,MAAO,eAAgB,SAAQ,UAAU,CAAA;AAT/C,IAAA,WAAA,GAAA;;;QAwBI,IAAM,CAAA,MAAA,GAAG,IAAI;AAyFhB;AAvGG;;;AAGG;IACH,IACI,KAAK,CAAC,QAAa,EAAA;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAE3B,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM;;;IAYtB,eAAe,GAAA;QACX,KAAK,CAAC,eAAe,EAAE;;QAGvB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACjD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC;;;AAIxE,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,0BAA0B,CAAgB;YAC1G,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;;;QAIxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACpC,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,EAAE;;AAG3C,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,gBAAA,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;;AAG1E,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC;gBAC7D,IAAI,SAAS,EAAE;AACX,oBAAA,MAAM,kBAAkB,GAAG,SAAS,CAAC,SAAS;AAC9C,oBAAA,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,kBAAkB,CAAC;AACnD,oBAAA,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,kBAAkB,CAAC;AACxD,oBAAA,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC;;;AAG9D,SAAC,CAAC;;;IAIN,kBAAkB,GAAA;QACd,IAAI,CAAC,aAAa,EAAE;;AAGxB;;;AAGG;AACH,IAAA,qBAAqB,CAAC,YAAiB,EAAA;QACnC,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;;;AAIxD,IAAA,YAAY,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;AAIxB,IAAA,aAAa,CAAC,MAAe,EAAA;QACzB,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE;;QAEvC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC;;;IAIjD,gBAAgB,CAAC,gBAAwB,EAAE,iBAAyB,EAAA;AACxE,QAAA,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,iBAAiB;AAC7D,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,gBAAgB,IAAI,GAAG,CAAC;AACrF,QAAA,MAAM,sBAAsB,GAAG,GAAG,GAAG,qBAAqB;;QAG1D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACpC,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,EAAE;YAC3C,MAAM,YAAY,GAAgB,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC;AAC7E,YAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,qBAAqB,CAAC;YAE7D,MAAM,gBAAgB,GAAgB,UAAU,CAAC,aAAa,CAAC,qBAAqB,CAAC;AACrF,YAAA,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;AACtE,SAAC,CAAC;;;IAIE,mBAAmB,CAAC,OAAoB,EAAE,UAAkB,EAAA;AAChE,QAAA,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG,UAAU,GAAG,gBAAgB,GAAG,UAAU,GAAG,GAAG,CAAC;;8GAtGtF,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAHb,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqBxGC,iBAAU,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9CzB,ghHAiGA,EDvEc,MAAA,EAAA,CAAA,mphCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAZ,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,2BAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EAAE,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,oJAAW,sBAAsB,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE5F,eAAe,EAAA,UAAA,EAAA,CAAA;kBAT3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,mBAGL,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAA,eAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,OAAA,EAC1G,CAAC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,OAAO,EAAE,sBAAsB,CAAC,EAAA,QAAA,EAAA,ghHAAA,EAAA,MAAA,EAAA,CAAA,mphCAAA,CAAA,EAAA;8BAQlG,KAAK,EAAA,CAAA;sBADR;gBAUD,MAAM,EAAA,CAAA;sBADL;gBAKD,MAAM,EAAA,CAAA;sBADL,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAAK,iBAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AE9BrC,MAAO,mCAAoC,SAAQ,+BAA2D,CAAA;8GAAvG,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,EChBhD,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,mzBAiBA,EDHc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAZ,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,EAD5C,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAG/D,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAR/C,SAAS;+BACI,mCAAmC,EAAA,aAAA,EAE9B,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAC/D,OAAA,EAAA,CAAC,WAAW,EAAE,mBAAmB,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,mzBAAA,EAAA;;;AEVhE;;AAEG;MAEU,YAAY,CAAA;AAMrB;;AAEG;IACH,OAAO,qBAAqB,CAAC,GAA0B,EAAA;AACnD,QAAA,MAAM,UAAU,GAAG,MAAoB,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY,EAAE,EAAE,GAAG,CAAC;AAC7E,QAAA,OAAO,UAAU;;8GAXZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA,CAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACAlC;MACa,iBAAiB,CAAA;AAK7B;AASK,MAAO,eAAgB,SAAQ,SAAS,CAAA;;IAa1C,IAAI,KAAK,CAAC,WAAgB,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;;AAE9B,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;;AAS1B,IAAA,WAAA,CAAsB,aAA2B,EAAA;AAC7C,QAAA,KAAK,EAAE;QADW,IAAa,CAAA,aAAA,GAAb,aAAa;;QAvBnC,IAAQ,CAAA,QAAA,GAAG,KAAK;AAEhB;;;AAGG;AAEM,QAAA,IAAA,CAAA,YAAY,GAAoC,IAAI,YAAY,EAAqB;AAU9F;;AAEG;QACH,IAAkB,CAAA,kBAAA,GAAG,KAAK;;;AAQ1B,IAAA,aAAa,CAAC,UAAmB,EAAA;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC;;;AAInD,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;;AAG3B;;AAEG;AACK,IAAA,YAAY,CAAC,UAAmB,EAAA;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;;AAGrC;;AAEG;AACK,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE;AACrC,QAAA,KAAK,CAAC,MAAM,GAAG,IAAI;AACnB,QAAA,KAAK,CAAC,OAAO,GAAG,UAAU;;AAG1B,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;8GA5DxB,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAa,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAHb,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,iDCnB9F,qWAWA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDScC,iBAAmB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAErC,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;+BACI,YAAY,EAAA,eAAA,EAEL,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,WACjF,CAACA,iBAAmB,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,qWAAA,EAAA;8EAK/C,QAAQ,EAAA,CAAA;sBADP;gBAQQ,YAAY,EAAA,CAAA;sBADpB;;;AEhBC,MAAO,mCAAoC,SAAQ,+BAA+B,CAAA;8GAA3E,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,ECfhD,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,wVAUA,EDGc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,EAD5C,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAG/D,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAR/C,SAAS;+BACI,mCAAmC,EAAA,aAAA,EAE9B,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,EAC/D,OAAA,EAAA,CAAC,WAAW,EAAE,mBAAmB,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,wVAAA,EAAA;;;AEFnD,MAAA,uBAAuB,GAA8B;AAC9D,IAAA;QACI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC;AAC/C,QAAA,SAAS,EAAE;AACd,KAAA;AACD,IAAA;QACI,KAAK,EAAE,CAAC,UAAU,CAAC;AACnB,QAAA,SAAS,EAAE;AACd,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;AAC3B,QAAA,SAAS,EAAE;AACd,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC7B,QAAA,SAAS,EAAE;AACd,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;AACzB,QAAA,SAAS,EAAE;AACd,KAAA;AACD,IAAA;QACI,KAAK,EAAE,CAAC,YAAY,CAAC;AACrB,QAAA,SAAS,EAAE;AACd,KAAA;AACD,IAAA;QACI,KAAK,EAAE,CAAC,QAAQ,CAAC;AACjB,QAAA,SAAS,EAAE;AACd,KAAA;AACD,IAAA;QACI,KAAK,EAAE,CAAC,aAAa,CAAC;AACtB,QAAA,SAAS,EAAE;AACd,KAAA;AACD,IAAA;QACI,KAAK,EAAE,CAAC,eAAe,CAAC;AACxB,QAAA,SAAS,EAAE;AACd;;;AC1CL;;;;AAIG;MAIU,sCAAsC,CAAA;AAHnD,IAAA,WAAA,GAAA;AAII;;AAEG;QACK,IAAyB,CAAA,yBAAA,GAA8B,uBAAuB;AA2CzF;AAzCG;;;;AAIG;IACH,YAAY,CAAC,SAAgD,EAAE,KAAe,EAAA;AAC1E,QAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,CAAC,KACvE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC3C;AAED,QAAA,IAAI,uBAAuB,GAAG,CAAC,CAAC,EAAE;YAC9B,IAAI,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,CAAC,SAAS,GAAG,SAAS;AAC7E,YAAA,OAAO,IAAI;;;AAIf,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,KAC/D,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC5C;QAED,kBAAkB,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,KAAK,KAAI;YACpD,iBAAiB,CAAC,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACpF,YAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,GAAG,iBAAiB;AAC7D,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;YAChC,KAAK;YACL;AACH,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;;AAGf;;;;AAIG;AACH,IAAA,4BAA4B,CAAC,IAAY,EAAA;QACrC,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;;8GA7CrE,sCAAsC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sCAAsC,cAFnC,MAAM,EAAA,CAAA,CAAA;;2FAET,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAHlD,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACHD;AACM,SAAU,aAAa,CAAC,IAA0B,EAAA;IACpD,OAAO,CAAC,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;AAC7C;AAEA;AACM,SAAU,YAAY,CAAC,SAA6B,EAAA;AACtD,IAAA,MAAM,WAAW,GAAoC,IAAI,GAAG,EAAE;IAE9D,IAAI,CAAC,SAAS,EAAE;AACZ,QAAA,OAAO,WAAW;;IAGtB,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;QAC9B,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;QAEjD,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;AAChD,KAAC,CAAC;AAEF,IAAA,OAAO,WAAW;AACtB;AAEA;AACgB,SAAA,iBAAiB,CAC7B,IAAqB,EACrB,KAAa,EAAA;AAEb,IAAA,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/E,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,KAAK;AAC1C,QAAA,OAAO,UAAU;;SACd;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK;;AAElC,IAAA,OAAO,IAAI;AACf;AAEA;;;;AAIG;AACG,SAAU,eAAe,CAAC,IAAS,EAAA;AACrC,IAAA,OAAO,CAAC,CAAE,IAA6B,CAAC,IAAI;AAChD;AAEA;;;;AAIG;AACH;AACM,SAAU,eAAe,CAAC,IAAS,EAAA;AACrC,IAAA,OAAO,CAAC,CAAE,IAA8B,CAAC,KAAK;AAClD;AAEA;AACgB,SAAA,aAAa,CAAC,IAAc,EAAE,SAA0C,EAAA;IACpF,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAA8B,EAAE,KAAK,KAAI;AACzD,QAAA,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK;QACnD,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI;KACnC,EAAE,IAAI,CAAC;AACZ;;AC5CA;;AAEG;MAEU,oBAAoB,CAAA;;AAqB7B,IAAA,WAAA,CACY,GAAgB,EAChB,mBAA2D,EAI3D,kBAAiD,EAIjD,eAA6C,EAAA;QAT7C,IAAG,CAAA,GAAA,GAAH,GAAG;QACH,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QAInB,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAIlB,IAAe,CAAA,eAAA,GAAf,eAAe;AA9B3B;;AAEG;AACM,QAAA,IAAA,CAAA,KAAK,GAAkC,IAAI,GAAG,EAA4B;AAEnF;;AAEG;QACH,IAAoB,CAAA,oBAAA,GAAG,yBAAyB;;QAG/B,IAAO,CAAA,OAAA,GAAwB,0BAA0B;AAE1E;;;AAGG;AACc,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAe7C,QAAA,IAAI,CAAC,OAAO,GAAGe,OAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;;AAGlF;;;;;;AAMG;AACH,IAAA,MAAM,YAAY,CAAC,QAAgB,EAAE,SAA0C,EAAA;QAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAqB;AAEnD,QAAA,MAAM,gBAAgB,GAAG,IAAI,uBAAuB,CAChD;AACI,YAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC;SACtB,EACD,EAAE,CACL;QAED,gBAAgB,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE;AAE3C,QAAA,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC;AAE/C,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC3B,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;oBAC9C;;gBAGJ,MAAM,KAAK,GAAG,IAAI,uBAAuB,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAEvD,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,aAAa,KAAI;oBACrC,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAClD,aAA6C,EAC7C,IAAI,CACP;oBAED,IAAI,CAAC,gBAAgB,EAAE;wBACnB;;oBAGJ,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC;oBAEtD,gBAAgB,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACjE,iBAAC,CAAC;gBAEF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;gBACrC;;YAGJ,MAAM,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAwC,EAAE,IAAI,CAAC;YAEjG,IAAI,CAAC,WAAW,EAAE;gBACd;;YAGJ,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;AAEvD,YAAA,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;YAE7D,WAAW,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5D,SAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAE/D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;;AAGrE,QAAA,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE;YAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;AAEnC,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;gBAC5B;;AAGJ,YAAA,MAAM,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACtE,gBAAA,IAAI,CAAC,sBAAsB,CAAwB,QAAQ,EAAE,gBAAgB,EAAE;oBAC3E,SAAS;oBACT,aAAa;oBACb;iBACH,CAAC;AACF,gBAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB;AACtD,aAAA,CAAC;AAEF,YAAA,QAAQ,CAAC,OAAO,GAAG,OAAO;AAC1B,YAAA,QAAQ,CAAC,WAAW,GAAG,WAAW;AAClC,YAAA,QAAQ,CAAC,OAAO,GAAG,YAAY;AAC/B,YAAA,QAAQ,CAAC,OAAO,GAAG,OAAO;;AAG1B,YAAA,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAEnE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,QAAwC;;AAGtF,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;YAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAA4B;YACnE,MAAM,UAAU,GAAG,YAAY,EAAE,GAAG,CAAC,WAAW,CAA4B;AAC5E,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC;AACnD,SAAC,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAE9B,QAAA,OAAO,IAAI;;AAGf;;;;;AAKG;IACH,MAAM,UAAU,CAAC,OAAwB,EAAE,IAAsB,EAAE,OAAiB,EAAE,EAAA;QAClF,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;AAEpD,QAAA,IAAI,SAAS,YAAY,uBAAuB,EAAE;YAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAuC,EAAE,IAAI,CAAC;YAChG,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;YAC/C;;;AAIR;;;;AAIG;AACH,IAAA,aAAa,CAAC,WAAmB,EAAE,IAAsB,EAAE,OAAiB,EAAE,EAAA;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;AAEpD,QAAA,IAAI,SAAS,YAAY,uBAAuB,EAAE;AAC9C,YAAA,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC;;;AAI5C;;;;;AAKG;AACH,IAAA,MAAM,YAAY,CACd,IAAgD,EAChD,WAAW,GAAG,KAAK,EAAA;AAEnB,QAAA,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;QAEvC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAEvC,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACtD,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAEjC,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;AAC5B,gBAAA,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAkC,EAAE,WAAW,CAAC;gBACvF;;AAGJ,YAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,KAAK,EAAE;AAC/B,gBAAA,OAAO,SAAS,CAAC,CAAC,CAAC;gBACnB;;AAGJ,YAAA,IAAI,QAAQ,CAAC,WAAW,EAAE;AACtB,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;gBACnE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;;AAGpD,YAAA,IAAI,WAAW,IAAI,QAAQ,CAAC,aAAa,EAAE;AACvC,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;gBACrE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;;YAGpD,IAAI,WAAW,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,UAAU,EAAE;AACvD,gBAAA,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;;AAI9D,QAAA,OAAO,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC;;AAGxD;;;;AAIG;IACH,YAAY,CAAC,SAAgD,EAAE,KAAe,EAAA;QAC1E,OAAO,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC;;AAGlE;;;;AAIG;AACH,IAAA,4BAA4B,CAAC,IAAY,EAAA;QACrC,OAAO,IAAI,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,IAAI,CAAC;;AAGtE;;;AAGG;AACH,IAAA,uBAAuB,CAAC,GAAW,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;;AAGzC;;;;AAIG;IACH,sBAAsB,CAAC,IAAY,EAAE,KAAa,EAAA;AAC9C,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,KAAK;;AAG3C;;;;;AAKG;IACH,MAAM,qBAAqB,CAAC,IAAsB,EAAA;AAC9C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3E,OAAO,MAAM,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,SAAS,CAAC;;AAGnE;;;;;AAKG;AACH,IAAA,cAAc,CAAC,IAAsB,EAAE,GAAG,YAAsB,EAAA;QAC5D,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,KAAe,EAAE,IAAI,KAAI;AACzD,YAAA,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEpE,YAAA,OAAO,KAAK;SACf,EAAE,EAAE,CAAC;QAEN,IAAI,OAAO,GAAG,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC;;QAGrC,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,OAAO,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,YAAY,CAAC,CAAC;;AAG9E,QAAA,OAAO,OAAkC;;;AAI7C,IAAA,SAAS,CAAC,IAAsB,EAAA;AAC5B,QAAA,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAChD,YAAA,IAAI,OAAO,YAAY,uBAAuB,EAAE;AAC5C,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBACvB;;;YAGJ,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;;;;AAKlD,IAAA,6BAA6B,CAAC,KAAU,EAAA;QACpC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE;YAC3C,MAAM,mBAAmB,GAAwB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAC1F,YAAA,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;AACvE,gBAAA,KAAK,CAAC,SAAS,CAAC,GAAG,UAAU;;;QAGrC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAEhD,QAAA,OAAO,KAAK;;;IAIR,yBAAyB,CAC7B,QAAsC,EACtC,IAAsB,EAAA;QAEtB,IAAI,SAAS,GAA4B,IAAI;AAE7C,QAAA,IAAIC,YAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC/B,YAAA,SAAS,GAAG,OAAO,OAAO,KAAI;AAC1B,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAS,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;gBAEvF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;gBAEhD,MAAM,SAAS,GAAG,EAAE;gBAEpB,SAAS,CAAC,GAAwB,OAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC;oBAChE,OAAO,MAAM,KAAK,SAAS,GAAG,IAAI,GAAG,MAAM;gBAE/C,OAAO,MAAM,KAAK,IAAI,GAAG,MAAM,GAAG,SAAS;AAC/C,aAAC;YAED,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,IAAI,EAAE;AACzD,YAAA,QAAQ,CAAC,eAAe;AACpB,gBAAA,OAAO,QAAQ,CAAC,eAAe,KAAK,UAAU,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC,eAAe;AAE1G,YAAA,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG5C,QAAA,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AAEvE,QAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;AAE1F,QAAA,OAAO,QAAQ;;;IAIX,wBAAwB,CAC5B,QAAsC,EACtC,IAAsB,EAAA;QAEtB,MAAM,qBAAqB,GAAG,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC;QAE9E,IAAI,CAAC,qBAAqB,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,CAAc,WAAA,EAAA,QAAQ,CAAC,IAAI,CAAA,aAAA,EAAgB,QAAQ,CAAC,IAAI,CAAA;AAC/B,gDAAA,EAAA,oBAAoB,CAAC,IAAI,CAAmC,iCAAA,CAAA,CAAC;YAEnG;;QAGJ,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC;QAEzD,MAAM,WAAW,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,OAAO,EAAE;YACzD,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,eAAe,EAAE,QAAQ,CAAC,eAAe;AACzC,YAAA,eAAe,EAAE,QAAQ;AACzB,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAEF,QAAA,IAAIA,YAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC/B,YAAA,WAAW,CAAC;AACP,iBAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3D,iBAAA,SAAS,CAAC,OAAO,KAAK,KAAI;AACvB,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC;AAE9D,gBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACrC,aAAC,CAAC;;QAGV,WAAW,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAExD,QAAA,OAAO,WAAW;;;AAId,IAAA,MAAM,4BAA4B,CACtC,IAAgD,EAChD,SAAc,EAAA;QAEd,IAAI,gBAAgB,GAA+B,EAAE;AACrD,QAAA,IAAI,GAAG,IAAI,YAAY,uBAAuB,GAAG,IAAI,GAAG,IAAI;AAE5D,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACxD,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAEjC,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;gBAC5B,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAC7D,OAAkC,EAClC,SAAS,CACZ;gBAED,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;gBACrE;;AAGJ,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAChB,gBAAA,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI;gBAC5B;;AAGJ,YAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;YACzD,gBAAgB,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;;AAG7D,QAAA,OAAO,gBAAgB;;AAG3B;;;;;;AAMG;AACK,IAAA,MAAM,yBAAyB,CACnC,QAA8B,EAC9B,IAAsB,EACtB,GAA+B,EAAA;AAE/B,QAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC;AAEzB,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;YAE3D,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;;QAG7C,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;;;AAIvC,IAAA,MAAM,sBAAsB,CAChC,QAA8B,EAC9B,IAAsB,EACtB,IAAc,EAAA;QAEd,MAAM,QAAQ,GAAmB,EAAE;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACjB,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACtE,SAAC,CAAC;QACF,QAAQ,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAGvC;;;;;AAKG;AACK,IAAA,MAAM,mBAAmB,CAAC,QAA8B,EAAE,IAAsB,EAAA;AACpF,QAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,yBAAyB,CACvD,QAAQ,EACR,IAAI,EACJ,SAAS,CACZ;QAED,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,OAAO,EAAE;;AAGb,QAAA,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAA+B,KACtD,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAiB,CACrD;;AAGrB;;;;;AAKG;IACK,MAAM,iBAAiB,CAAC,GAAQ,EAAA;AACpC,QAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC;AAEpC,QAAA,IAAI,MAAW;QAEf,MAAM,QAAQ,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,KAAU,KAAI;YAClD,MAAM,GAAG,KAAK;AAClB,SAAC,CAAC;AAEF,QAAA,IAAIA,YAAU,CAAC,MAAM,CAAC,EAAE;AACpB,YAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;;AAGxC,QAAA,OAAO,MAAM;;;AAIT,IAAA,oBAAoB,CAAC,QAAgB,EAAA;QACzC,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;;;AAI/B,IAAA,6BAA6B,CAAC,QAA4B,EAAA;QAC9D,OAAOD,OAAK,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAC;;;AAItD,IAAA,mBAAmB,CAAC,SAA0C,EAAA;QAClE,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;gBACxB;;AAGJ,YAAA,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;AAClE,SAAC,CAAC;AAEF,QAAA,OAAO,SAAS;;;IAIZ,MAAM,sBAAsB,CAAC,IAAgD,EAAA;AACjF,QAAA,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAChD,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAEjC,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;AAC5B,gBAAA,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAkC,CAAC;gBACrE;;AAGJ,YAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;AACnB,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAY,EAAE,IAAI,CAAC,KAAK,EAAE,OAA6B,CAAC;AAC9F,gBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;;;;;IAMrC,kBAAkB,CAAC,QAAiC,EAAE,QAAkC,EAAA;AAC5F,QAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;YACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;YACzC,MAAM,UAAU,GAAG,QAAQ,EAAE,GAAG,CAAC,WAAW,CAA4B;YACxE,IAAI,CAAC,UAAU,EAAE;gBACb;;AAEJ,YAAA,IAAI,OAAO,YAAY,uBAAuB,EAAE;AAC5C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC;gBAC5C;;AAGJ,YAAA,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAEzD,YAAA,IAAI,UAAU,CAAC,OAAO,EAAE;gBACpB,OAAO,EAAE,aAAa,EAAE;;AAEhC,SAAC,CAAC;;8GAziBG,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAf,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAiB,sCAAA,EAAA,EAAA,EAAA,KAAA,EA0BjB,0BAA0B,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAI1B,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHA9BxB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;0BAyBQ;;0BACA;;0BACA,MAAM;2BAAC,0BAA0B;;0BAEjC;;0BACA;;0BACA,MAAM;2BAAC,qBAAqB;;;AC/CrC;;;AAGG;MAKU,2BAA2B,CAAA;;AAoCpC,IAAA,WAAA,CACqB,qBAA2C,EAC3C,MAAwB,EACxB,SAAmB,EACmB,uBAAuD,EAAA;QAH7F,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAS,CAAA,SAAA,GAAT,SAAS;QAC6B,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;;;IAIlF,QAAQ,GAAA;AACJ,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAElG,IAAI,CAAC,cAAc,EAAE;YACjB;;AAGJ,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QAEnB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAkC,cAAc,CAAC,SAAS,EAAE;AACxG,YAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;AACtB,gBAAA,SAAS,EAAE;AACP,oBAAA;AACI,wBAAA,OAAO,EAAE,yBAAyB;wBAClC,UAAU,EAAE,MAAK;4BACb,IAAI,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE;gCAC3C,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;;AAEtD,4BAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;gCAC9B,OAAO,IAAI,CAAC,uBAAuB;;AAEvC,4BAAA,OAAO,EAAE,CAAC,2BAA2B,CAAC;;AAE7C;AACJ,iBAAA;gBACD,MAAM,EAAE,IAAI,CAAC;aAChB;AACJ,SAAA,CAAC;QAEF,YAAY,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC9C,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnC,YAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QACtC,YAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QACtC,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QAChD,YAAY,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB;AAE5D,QAAA,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,QAA+C;;AAhF/E,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,2GAwCZ,yBAAyB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAxCxC,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAyCQ;;0BAAY,MAAM;2BAAC,yBAAyB;yCApCxC,QAAQ,EAAA,CAAA;sBAAhB;gBAMD,EAAE,EAAA,CAAA;sBADD;gBAMQ,IAAI,EAAA,CAAA;sBAAZ;gBAKQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAKQ,SAAS,EAAA,CAAA;sBAAjB;;;MC1CQ,kCAAkC,CAAA;;IAM3C,WACW,CAAA,WAAkD,EACH,wBAAmC,EAAA;QADlF,IAAW,CAAA,WAAA,GAAX,WAAW;QACoC,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;AAE9E,QAAA,IAAI,CAAC,wBAAwB,EAAE,mBAAmB,CAAC,IAAI,CAAC;;;AAI5D,IAAA,OAAO,sBAAsB,CACzB,GAAuC,EACvC,GAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI;;AAlBN,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,6CAQnB,wBAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGARvC,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,8BAAA,EAAA,gCAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAJ9C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BASQ;;0BAAY,MAAM;2BAAC,wBAAwB;yCALhD,8BAA8B,EAAA,CAAA;sBAD7B;;;MCDQ,8BAA8B,CAAA;;IAUvC,WACW,CAAA,WAAkD,EACH,wBAAmC,EAAA;QADlF,IAAW,CAAA,WAAA,GAAX,WAAW;QACoC,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;AAE9E,QAAA,IAAI,CAAC,wBAAwB,EAAE,eAAe,CAAC,IAAI,CAAC;;;AAIxD,IAAA,OAAO,sBAAsB,CACzB,GAAmC,EACnC,GAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI;;AAtBN,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,6CAYf,wBAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAZvC,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAaQ;;0BAAY,MAAM;2BAAC,wBAAwB;yCAThD,0BAA0B,EAAA,CAAA;sBADzB;gBAKD,4BAA4B,EAAA,CAAA;sBAD3B;;;ACSL,MAAM,sBAAsB,GAAa;AACrC,IAAA,OAAO,EAAE,cAAc;AACvB,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB;CACxD;AAED,MAAMtB,wBAAsB,GAAa;AACrC,IAAA,OAAO,EAAE,4BAA4B;AACrC,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB;CACxD;MAWY,uBAAuB,CAAA;AATpC,IAAA,WAAA,GAAA;AAoBI;;;AAGG;QAEH,IAAkB,CAAA,kBAAA,GAA8B,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAiGjG;AA/FG;;AAEG;IACH,IACI,iBAAiB,CAAC,KAA+B,EAAA;QACjD,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;;;AAGvC,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,kBAAkB;;AAElC;;AAEG;IACH,IACI,iBAAiB,CAAC,KAA+B,EAAA;QACjD,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;;;AAIvC,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,kBAAkB;;AAElC;;AAEG;IACH,IACI,eAAe,CAAC,KAA+B,EAAA;QAC/C,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;;AAGrC,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB;;;IAuBhC,QAAQ,GAAA;QACJ,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,iBAAiB,EAAE;;;IAI5B,WAAW,GAAA;QACP,IAAI,CAAC,oBAAoB,EAAE;;;IAIvB,iBAAiB,GAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB;;QAGJ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE,iBAAiB;QACnE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE,iBAAiB;QACnE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,eAAe;;;IAI3D,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B;;AAEJ,QAAA,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;;;IAI3C,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B;;AAEJ,QAAA,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,CAAC;;8GA/G7C,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAHrB,CAAC,sBAAsB,EAAEA,wBAAsB,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAkE1C,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtEpB,CAA4B,0BAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8+EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAO7B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBATnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,YACtB,CAA4B,0BAAA,CAAA,EAAA,eAAA,EAErB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,aAC1B,CAAC,sBAAsB,EAAEA,wBAAsB,CAAC,cAC/C,IAAI,EAAA,MAAA,EAAA,CAAA,8+EAAA,CAAA,EAAA;8BAOhB,KAAK,EAAA,CAAA;sBADJ;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAQD,kBAAkB,EAAA,CAAA;sBADjB;gBAOG,iBAAiB,EAAA,CAAA;sBADpB;gBAaG,iBAAiB,EAAA,CAAA;sBADpB;gBAcG,eAAe,EAAA,CAAA;sBADlB;gBAaD,WAAW,EAAA,CAAA;sBADV;gBAMD,MAAM,EAAA,CAAA;sBADL,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;;MCtF5C,wBAAwB,CAAA;;AAMjC,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW;;QAGtC;;8GAXK,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBrC,00BAuBA,EDLc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,oJAAE,aAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,kGAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEpE,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAXpC,SAAS;+BAEI,yBAAyB,EAAA,eAAA,EAElB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC/B,IAAA,EAAA;AACF,wBAAA,+BAA+B,EAAE;qBACpC,EACQ,OAAA,EAAA,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,00BAAA,EAAA;8BAK9E,UAAU,EAAA,CAAA;sBADT;;;MEfQ,KAAK,CAAA;;AAEd,IAAA,WAAA,CACW,IAAa,EACb,IAAa,EACb,QAA2B,EAC3B,MAAe,EAAA;QAHf,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAM,CAAA,MAAA,GAAN,MAAM;;AAEpB;MAEY,UAAU,CAAA;;AAEnB,IAAA,WAAA,CACW,KAAa,EACb,MAAmB,EACnB,WAAyB,EAAA;QAFzB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAW,CAAA,WAAA,GAAX,WAAW;;AAEzB;;MChBY,sBAAsB,CAAA;;AAE/B,IAAA,SAAS,CAAC,GAA4C,EAAA;AAClD,QAAA,OAAO,GAAG,CAAC,KAAK,YAAY,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK;;8GAHhE,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACPD;;;;;;;;;;;;;;;;;AAiBG;AAqEU,MAAA,iBAAiB,GAAa;AACvC,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB;;AAKpD,IAAI,iBAAiB,GAAG,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyEG;MAoBU,kBAAkB,CAAA;AA6B3B;;AAEG;IACH,IACI,kBAAkB,CAAC,KAAmB,EAAA;AACtC,QAAA,IAAI,CAAC,mBAAmB,GAAG,qBAAqB,CAAC,KAAK,CAAC;QACvD,IAAI,CAAC,yBAAyB,EAAE;;AAGpC,IAAA,IAAI,kBAAkB,GAAA;QAClB,OAAO,IAAI,CAAC,mBAAmB;;;AA0KnC,IAAA,WAAA,GAAA;;AA5MA,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,eAAA,EAAkB,iBAAiB,EAAE,EAAE;;QAQ5C,IAAQ,CAAA,QAAA,GAAG,IAAI;;QAIf,IAAa,CAAA,aAAA,GAAG,KAAK;AAyBrB;;AAEG;QAEH,IAAiB,CAAA,iBAAA,GAAiB,4BAA4B;AAE9D;;AAEG;QAEH,IAAiB,CAAA,iBAAA,GAAiB,4BAA4B;AAE9D;;AAEG;QAEH,IAAe,CAAA,eAAA,GAAiB,gBAAgB;;QAgBhD,IAAa,CAAA,aAAA,GAAG,KAAK;;QAqBrB,IAAO,CAAA,OAAA,GAAG,KAAK;;QAWf,IAAa,CAAA,aAAA,GAAG,IAAI;AAEpB;;AAEG;AAGH,QAAA,IAAA,CAAA,QAAQ,GAAsB,IAAI,YAAY,EAAO;AAkDrD;;;AAGG;QACH,IAAQ,CAAA,QAAA,GAAgD,EAAE;;AAMjD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;;AAMtD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;QAGlC,IAAmB,CAAA,mBAAA,GAAG,0BAA0B;AAExD;;;;;;;;;AASG;QACK,IAAwB,CAAA,wBAAA,GAA0B,EAAE;;AAG3C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;;AAGnC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAE/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;QAEhC,IAAc,CAAA,cAAA,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAE7D,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAmB,mCAAmC,CAAC;;AAyHpG,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,CAAM,KAAiB,CAAC;QArHnC,IAAI,CAAC,SAAS,IAAe,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;;;AAIvG,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,YAAY,WAAW,EAAE;gBACnE,IAAI,CAAC,YAAY,GAAG;oBAChB,GAAG,IAAI,CAAC,mBAAmB;oBAC3B,OAAO,EAAE,IAAI,CAAC;iBACjB;;iBACE;gBACH,IAAI,CAAC,YAAY,GAAG;oBAChB,GAAG,IAAI,CAAC,mBAAmB;oBAC3B,GAAG,IAAI,CAAC;iBACX;;;;;IAMb,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;;QAEtC,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,yBAAyB,EAAE;;;IAIpC,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;QAEtE,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,4BAA4B,EAAE;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;;IAI3B,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;QAEtE,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,4BAA4B,EAAE;QACnC,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAEvB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;;IAI5B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;;;AAIrC,IAAA,YAAY,CAAC,SAA4B,EAAA;;;;AAIrC,QAAA,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC;;AAE1C,QAAA,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC;;;AAI5C,IAAA,eAAe,CAAC,SAA4B,EAAA;AACxC,QAAA,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC;;;AAI/C,IAAA,iBAAiB,CAAC,cAA8B,EAAA;AAC5C,QAAA,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC;;;AAIjD,IAAA,oBAAoB,CAAC,cAA8B,EAAA;AAC/C,QAAA,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC;;;IAIpD,cAAc,CAAC,IAAY,EAAE,OAAwB,EAAA;QACjD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;;AAExC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;;;;AAK7C,IAAA,iBAAiB,CAAC,IAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;;;AAItC,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,OAAO,KAAK;;;IAIhB,gBAAgB,CAAC,KAAa,EAAE,KAAY,EAAA;QACxC,OAAO,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS;;;IAIzC,sBAAsB,GAAA;AAClB,QAAA,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC;;;IAO/B,0BAA0B,GAAA;QAC9B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;YAC1C,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3B,SAAC,CAAC;;;IAIE,4BAA4B,GAAA;QAChC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAqB,KAC5B,KAAM,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAClG,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;SAC1B,CAAC,CACL;;AAGL;;;;;AAKG;IACK,oBAAoB,GAAA;AACxB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE;QACjD,MAAM,IAAI,GAAgD,EAAE;QAC5D,IAAI,SAAS,GAAG,CAAC;QACjB,IAAI,OAAO,GAAgB,EAAE;AAE7B,QAAA,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;AAC9B,YAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACrB,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC;AAE5D,gBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACxB,oBAAA,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE;;gBAE9B,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGrC,YAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC1B,MAAM,iBAAiB,GAAgB,EAAE;gBACzC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AAC7B,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO;oBACzB,OAAO,GAAG,EAAE;AACZ,oBAAA,SAAS,EAAE;;AAGf,gBAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChE,gBAAA,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;oBAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC;AAEjE,oBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE;AAClC,wBAAA,iBAAiB,CAAC,YAAY,CAAC,GAAG,EAAE;;oBAExC,iBAAiB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACpD,iBAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,WAAW,CAAC;AACnF,gBAAA,SAAS,EAAE;;;AAGnB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;;AAIhB,IAAA,oBAAoB,CAAC,YAAgC,EAAA;AACzD,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,YAAY,EAAE;AACnC,YAAA,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE;AACrB,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;;AAGlD,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;gBACrC,MAAM,IAAI,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAAC,eAAe,CAAE,CAAA,CAAC;;AAG1E,YAAA,OAAO,YAAY;;QAGvB,OAAO,IAAI,CAAC,eAAe;;;IAIvB,2BAA2B,GAAA;QAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC,OAAO,CAAC,CAAC,SAAyB,KAAI;AAC/D,YAAA,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC;;AAG9C,YAAA,IAAI,iBAAiB,CAAC,SAAS,CAAC,EAAE;gBAC9B,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;;AAEjG,SAAC,CAAC;;AAGN;;;;;AAKG;AACK,IAAA,0BAA0B,CAAC,SAA4B,EAAA;AAC3D,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAClC,YAAA,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;;QAEhD,SAAS,CAAC,sBAAsB,EAAE;AAClC,QAAA,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACpF,QAAA,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC;;AAGvD;;;AAGG;IACK,cAAc,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC;YACzC,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AAC3F,gBAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;;AAEvD,YAAA,IAAI,IAAI,CAAC,eAAe,GAAG,EAAE,IAAI,IAAI,CAAC,eAAe,GAAG,EAAE,IAAI,IAAI,CAAC,eAAe,GAAG,EAAE,EAAE;AACrF,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;;AAErD,YAAA,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe;AAC3C,YAAA,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe;AAC3C,YAAA,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe;;;AAI3C,YAAA,IAAI,SAAS,KAAK,EAAE,EAAE;gBAClB,IAAI,CAAC,KAAK,GAAG,CAAA,WAAA,EAAc,SAAS,CAAe,YAAA,EAAA,SAAS,EAAE;;iBAC3D;gBACH,IAAI,CAAC,KAAK,GAAG,CAAc,WAAA,EAAA,SAAS,eAAe,SAAS,CAAA,YAAA,EAAe,SAAS,CAAA,CAAE;;;aAEvF;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,CAAA,yCAAA,CAA2C;;;;AAKxD,IAAA,iBAAiB,CAAC,MAAc,EAAA;AACpC,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACtC,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;AAC3D,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;AAC3D,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;;;AAIvD,IAAA,wBAAwB,CAAC,KAAqB,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;YACnD;;AAEJ,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIrC,IAAA,2BAA2B,CAAC,KAAyC,EAAA;AACzE,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC;;AAGtG;;;AAGG;IACK,qBAAqB,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACzB,YAAA,OAAO,EAAE;;AAEb,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACjB,aAAA,OAAO;aACP,GAAG,CAAC,CAAC,KAAK,MAAM,wBAAwB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;AAEpF,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;;IAI5E,yBAAyB,GAAA;QAC7B,IAAI,CAAC,wBAAwB,GAAG,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC;;AAGhF;;;;AAIG;IACK,qBAAqB,GAAA;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa;AAC1C,aAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AACrB,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAChD;;8GA1gBI,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,wfA8FP,gBAAgB,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EA3GzB,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,CAAC,EA4JxE,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,4BAAmC,EAInC,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,uBAAuB,kHA7BP,MAAM,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClT3C,+nGAwEA,EAAA,MAAA,EAAA,CAAA,kj4CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDyGQ,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,4FACxB,aAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,mBAAmB,EACnB,QAAA,EAAA,kGAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,YAAY,EACZ,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,sBAAsB,0DACtB,oBAAoB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAnB9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,mBAGT,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,CAAC,EAChF,OAAA,EAAA;wBACL,WAAW;wBACX,gBAAgB;wBAChB,wBAAwB;wBACxB,aAAa;wBACb,aAAa;wBACb,mBAAmB;wBACnB,YAAY;wBACZ,sBAAsB;wBACtB;AACH,qBAAA,EAAA,QAAA,EAAA,+nGAAA,EAAA,MAAA,EAAA,CAAA,kj4CAAA,CAAA,EAAA;wDAOD,EAAE,EAAA,CAAA;sBADD;gBAKD,IAAI,EAAA,CAAA;sBADH;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAKD,aAAa,EAAA,CAAA;sBADZ;gBAKD,KAAK,EAAA,CAAA;sBADJ;gBAOD,IAAI,EAAA,CAAA;sBADH;gBAOG,kBAAkB,EAAA,CAAA;sBADrB;gBAcD,iBAAiB,EAAA,CAAA;sBADhB;gBAOD,iBAAiB,EAAA,CAAA;sBADhB;gBAOD,eAAe,EAAA,CAAA;sBADd;gBAKD,SAAS,EAAA,CAAA;sBADR;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAKD,SAAS,EAAA,CAAA;sBADR;gBAKD,aAAa,EAAA,CAAA;sBADZ;gBAOD,MAAM,EAAA,CAAA;sBADL;gBAYD,UAAU,EAAA,CAAA;sBADT;gBAKD,OAAO,EAAA,CAAA;sBADN,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAQtC,YAAY,EAAA,CAAA;sBADX;gBAKD,aAAa,EAAA,CAAA;sBADZ;;;QAQD,QAAQ,EAAA,CAAA;sBAFP;gBAQD,UAAU,EAAA,CAAA;sBADT,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;gBAKzC,WAAW,EAAA,CAAA;sBADV,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAsB5B,iBAAiB,EAAA,CAAA;sBAD1B,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,4BAAmC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;gBAKnE,gBAAgB,EAAA,CAAA;sBADvB,eAAe;uBAAC,uBAAuB;;;AEnU5C,MAAM,uBAAuB,GAAG;IAC5B,kBAAkB;IAClB,kBAAkB;IAClB,6BAA6B;IAC7B,uBAAuB;IACvB,+BAA+B;IAC/B,wBAAwB;IACxB,sBAAsB;IACtB,uBAAuB;IACvB,8BAA8B;IAC9B;CACH;MAMY,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAhB3B,kBAAkB;YAClB,kBAAkB;YAClB,6BAA6B;YAC7B,uBAAuB;YACvB,+BAA+B;YAC/B,wBAAwB;YACxB,sBAAsB;YACtB,uBAAuB;YACvB,8BAA8B;AAC9B,YAAA,kCAAkC,aATlC,kBAAkB;YAClB,kBAAkB;YAClB,6BAA6B;YAC7B,uBAAuB;YACvB,+BAA+B;YAC/B,wBAAwB;YACxB,sBAAsB;YACtB,uBAAuB;YACvB,8BAA8B;YAC9B,kCAAkC,CAAA,EAAA,CAAA,CAAA;AAOzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAhB3B,kBAAkB;YAClB,kBAAkB;YAClB,6BAA6B;YAG7B,wBAAwB,CAAA,EAAA,CAAA,CAAA;;2FAWf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,GAAG,uBAAuB,CAAC;AACrC,oBAAA,OAAO,EAAE,CAAC,GAAG,uBAAuB;AACvC,iBAAA;;;ACJD,MAAM,iBAAiB,GAAa;AAChC,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B;CAC5D;AAED,MAAM,sBAAsB,GAAa;AACrC,IAAA,OAAO,EAAE,4BAA4B;AACrC,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B;CAC5D;MASY,2BAA2B,CAAA;;AAgDpC,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,OAAO,EAAE;;QAEb,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAqB;;QAErD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,uBAAuB,EAAE;AAC9C,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAiB;;AAEjD,QAAA,OAAO,EAAE;;;IAOb,WACY,CAAA,UAAgC,EAChC,IAAuB,EAAA;QADvB,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAI,CAAA,IAAA,GAAJ,IAAI;;QALhB,IAAY,CAAA,YAAA,GAAmC,EAAE;;;IASjD,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;;;IAI7B,cAAc,CAAC,CAAS,EAAE,KAAmC,EAAA;QACzD,OAAO,KAAK,CAAC,IAAI;;;AAIrB,IAAA,gBAAgB,CAAC,KAAU,EAAA;QACvB,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI;;;IAInD,UAAU,GAAA;AACd,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB;AAE7D,QAAA,MAAM,YAAY,GAAmC;AACjD,YAAA;gBACI,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAW,SAAA,CAAA;AAC5C,gBAAA,KAAK,EAAE;AACV;SACJ;QAED,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9C,YAAA,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,IAAI;YAEpC,YAAY,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE;AACV,aAAA,CAAC;AACN,SAAC,CAAC;AAEF,QAAA,OAAO,YAAY;;8GA1Gd,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAkB,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,2QAJzB,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,EAiD1B,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAA,kBAAkB,CCtFlD,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,2hEAiDA,2CDVc,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,eAAA,EAAA,YAAA,EAAA,MAAA,EAAA,aAAA,EAAA,QAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,mBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,8BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,4BAAA,EAAA,8BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kCAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,kLAAE,2BAA2B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAElF,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,aAEzB,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,iBACvC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA,CAAC,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,EAAA,QAAA,EAAA,2hEAAA,EAAA;sHAMnF,KAAK,EAAA,CAAA;sBAAb;gBAKQ,IAAI,EAAA,CAAA;sBAAZ;gBAKQ,IAAI,EAAA,CAAA;sBAAZ;gBAKQ,aAAa,EAAA,CAAA;sBAArB;gBAKQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAMQ,IAAI,EAAA,CAAA;sBAAZ;gBAKQ,UAAU,EAAA,CAAA;sBAAlB;gBAKQ,WAAW,EAAA,CAAA;sBAAnB;gBAKgD,aAAa,EAAA,CAAA;sBAA7D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,CAAC,MAAM,kBAAkB,CAAC;;;AEhFnD;AACM,SAAU,YAAY,CAAC,KAAc,EAAA;IACvC,OAAO,KAAK,YAAY,kBAAkB;AAC9C;AAEA;AACM,SAAU,wBAAwB,CAAC,KAAc,EAAA;IACnD,OAAO,KAAK,YAAY,2BAA2B;AACvD;AAEA;AACM,SAAU,iBAAiB,CAAC,KAAc,EAAA;IAC5C,OAAO,KAAK,YAAY,uBAAuB;AACnD;AAEA;AACM,SAAU,YAAY,CAAC,KAAsD,EAAA;AAC/E,IAAA,OAAO,wBAAwB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK;AACxE;AAEA;AACM,SAAU,QAAQ,CAAC,KAAwB,EAAA;AAC7C,IAAA,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK;AAErE,IAAA,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;AACxE;;MCvBa,0BAA0B,CAAA;8GAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAA1B,0BAA0B,EAAA,OAAA,EAAA,CAHzB,qBAAqB,CAAA,EAAA,OAAA,EAAA,CACrB,qBAAqB,CAAA,EAAA,CAAA,CAAA;+GAEtB,0BAA0B,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,qBAAqB,CAAC;oBAChC,OAAO,EAAE,CAAC,qBAAqB;AAClC,iBAAA;;;MCAY,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAtB,sBAAsB,EAAA,OAAA,EAAA,CAHrB,iBAAiB,CAAA,EAAA,OAAA,EAAA,CACjB,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAElB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAHrB,iBAAiB,CAAA,EAAA,CAAA,CAAA;;2FAGlB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,iBAAiB,CAAC;oBAC5B,OAAO,EAAE,CAAC,iBAAiB;AAC9B,iBAAA;;;MCDY,kBAAkB,GAAG,IAAI,cAAc,CAAW,mBAAmB;;AC+B5E,MAAO,uBAAwB,SAAQ,cAAiC,CAAA;;AAkB1E,IAAA,WAAA,CAAwC,iBAAoC,EAAA;AACxE,QAAA,KAAK,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,QAAQ,CAAC;AAfxD;;;;AAIG;QACH,IAAY,CAAA,YAAA,GAGP,IAAI;;;IAWT,QAAQ,GAAA;QACJ,IAAI,CAAC,6BAA6B,EAAE;;;IAIxC,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QACxB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;;;IAIvD,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;;;AAI3B,IAAA,aAAa,CAAC,IAAa,EAAA;QAC/B,IAAI,CAAC,IAAI,EAAE;YACP;;QAGJ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS;QAChD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE;YACvC,IAAI,CAAC,KAAK,EAAE;;;;IAKZ,6BAA6B,GAAA;QACjC,IAAI,CAAC,UAAU,CAAC;AACX,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;;;IAIlD,KAAK,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC3D,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,eAAe,EAAE,IAAI;YACrB,GAAG,IAAI,CAAC,YAAY;AACpB,YAAA,sBAAsB,EAAE,KAAK;AAC7B,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;AAC/B,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACjF,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AACnC,SAAC,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC;AAChD,YAAA,KAAK,EAAE,CAAC,IAAI,KAAI;AACZ,gBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACnB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;oBACnD,MAAM,CAAC,WAAW,EAAE;;;AAG/B,SAAA,CAAC;;AAhFG,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,kBAkBZ,kBAAkB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlB7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,wNCpCpC,i/CA+BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJQ,YAAY,EAGZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvB,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAS,+BACT,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKX,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAfnC,SAAS;+BACI,qBAAqB,EAAA,eAAA,EAEd,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA;wBACL,YAAY;wBACZ,cAAc;wBACd,iBAAiB;wBACjB,SAAS;wBACT,gBAAgB;wBAChB,aAAa;wBACb;AACH,qBAAA,EAAA,QAAA,EAAA,i/CAAA,EAAA;;0BAoBY,MAAM;2BAAC,kBAAkB;yCAhBT,cAAc,EAAA,CAAA;sBAA1C,SAAS;uBAAC,gBAAgB;;;ME/BlB,4BAA4B,CAAA;8GAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAA5B,4BAA4B,EAAA,OAAA,EAAA,CAH3B,uBAAuB,CAAA,EAAA,OAAA,EAAA,CACvB,uBAAuB,CAAA,EAAA,CAAA,CAAA;AAExB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,YAH3B,uBAAuB,CAAA,EAAA,CAAA,CAAA;;2FAGxB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,uBAAuB,CAAC;oBAClC,OAAO,EAAE,CAAC,uBAAuB;AACpC,iBAAA;;;ACDD;;AAEG;MAEU,cAAc,CAAA;;AAiBvB,IAAA,WAAA,CAAY,cAA8B,EAAA;AAX1C;;AAEG;AACH,QAAA,IAAA,CAAA,gBAAgB,GAAqB,gBAAgB,CAAC,oBAAoB;AAE1E;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAA0C,IAAI,GAAG,EAAE;AAIxD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,cAAc;;AAGvD;;AAEG;IACH,OAAO,qBAAqB,CAAC,GAA4B,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,CAAC,cAA8B,KAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC;AAC1D,QAAA,OAAO,UAAU;;8GA3BZ,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA,CAAA;;2FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCNrB,qBAAqB,GAAG,IAAI,cAAc,CAAqB,2BAA2B;MASjF,kBAAkB,CAAA;AADxC,IAAA,WAAA,GAAA;;AAKI,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAc,EAAC;AACvC;8GALqB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBADvC;;AAkBK,MAAO,qBAAmC,SAAQ,kBAAmD,CAAA;AAV3G,IAAA,WAAA,GAAA;;;QAgBI,IAAI,CAAA,IAAA,GAA2B,oBAAoB;AAStD;;AANG,IAAA,OAAO,sBAAsB,CACzB,GAA6B,EAC7B,GAAoC,EAAA;AAEpC,QAAA,OAAO,IAAI;;8GAbN,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAPnB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAAuB;AACrC;AACJ;AACJ,iBAAA;8BAKG,QAAQ,EAAA,CAAA;sBADP,KAAK;uBAAC,oBAAoB;;AAwBzB,MAAO,6BAA2C,SAAQ,kBAAmD,CAAA;AAVnH,IAAA,WAAA,GAAA;;;QAgBI,IAAI,CAAA,IAAA,GAA2B,sBAAsB;AASxD;;AANG,IAAA,OAAO,sBAAsB,CACzB,GAAqC,EACrC,GAAoC,EAAA;AAEpC,QAAA,OAAO,IAAI;;8GAbN,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAP3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,4BAAA,EAAA,UAAA,CAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAVzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAA+B;AAC7C;AACJ;AACJ,iBAAA;8BAKG,QAAQ,EAAA,CAAA;sBADP,KAAK;uBAAC,4BAA4B;;AAwBjC,MAAO,0BAA2B,SAAQ,kBAAoD,CAAA;AAVpG,IAAA,WAAA,GAAA;;;QAYI,IAAI,CAAA,IAAA,GAA2B,mBAAmB;AASrD;;AANG,IAAA,OAAO,sBAAsB,CACzB,GAA+B,EAC/B,GAAqC,EAAA;AAErC,QAAA,OAAO,IAAI;;8GATN,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAPxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAVtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAA4B;AAC1C;AACJ;AACJ,iBAAA;;AAwBK,MAAO,8BAA4C,SAAQ,kBAAoC,CAAA;AAVrG,IAAA,WAAA,GAAA;;;QAiBI,IAAI,CAAA,IAAA,GAA2B,uBAAuB;AASzD;;AANG,IAAA,OAAO,sBAAsB,CACzB,GAAqC,EACrC,GAAqB,EAAA;AAErB,QAAA,OAAO,IAAI;;8GAdN,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAP5B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,6BAAA,EAAA,UAAA,CAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAV1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAAgC;AAC9C;AACJ;AACJ,iBAAA;8BAKG,QAAQ,EAAA,CAAA;sBADP,KAAK;uBAAC,6BAA6B;;;ACpClC,MAAgB,YAClB,SAAQ,mBAAmB,CAAA;;IA8F3B,IACI,UAAU,CAAC,KAAiC,EAAA;QAC5C,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;;;AAIzC,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW;;;IAI3B,IACI,KAAK,CAAC,KAAU,EAAA;AAChB,QAAA,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAC7D,QAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGzB,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;;IA+C3B,IAAI,SAAS,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAE5B,IAAI,CAAC,SAAS,EAAE;;AAGpB,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI,EAAE;;;AAOrC,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC;;;AAgBhE,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC;;;AAI1C,IAAA,IAAI,sBAAsB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;;;IAmDzC,WACyB,CAAA,YAA0B,EACrC,cAA8B,EAAA;AAExC,QAAA,KAAK,EAAE;QAHc,IAAY,CAAA,YAAA,GAAZ,YAAY;QACvB,IAAc,CAAA,cAAA,GAAd,cAAc;;QA3O5B,IAAS,CAAA,SAAA,GAAG,OAAO;;QAInB,IAAY,CAAA,YAAA,GAAG,IAAI;;QAYnB,IAAM,CAAA,MAAA,GAAG,KAAK;;QAQd,IAAK,CAAA,KAAA,GAAG,KAAK;;QAYb,IAAiB,CAAA,iBAAA,GAAG,KAAK;;QAQzB,IAAU,CAAA,UAAA,GAAG,KAAK;AAElB;;;;;AAKG;QAEH,IAAe,CAAA,eAAA,GAAoB,UAAU;AAE7C;;;AAGG;QAEH,IAAe,CAAA,eAAA,GAAG,KAAK;AAEvB;;;AAGG;QAEH,IAAQ,CAAA,QAAA,GAAa,EAAE;;QAIvB,IAAmB,CAAA,mBAAA,GAAG,IAAI;;QAI1B,IAAM,CAAA,MAAA,GAAG,KAAK;AA0Bd;;;;AAIG;QAEH,IAAc,CAAA,cAAA,GAA+B,gBAAgB;;;AAInD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;;;AAI1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;;QAyCnD,IAAM,CAAA,MAAA,GAAG,KAAK;;QAQd,IAAY,CAAA,YAAA,GAAiB,EAAE;;AAS/B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAW;;QAanC,IAAgB,CAAA,gBAAA,GAAiB,EAAE;;AAe3B,QAAA,IAAA,CAAA,QAAQ,GAAgB,IAAI,CAAC,UAAU,CAAC,aAAa;;AAG5C,QAAA,IAAA,CAAA,eAAe,GAAa;YACzC,MAAM;YACN,KAAK;YACL,OAAO;YACP,GAAG;YACH,KAAK;YACL,QAAQ;YACR,WAAW;YACX,UAAU;YACV,UAAU;YACV;SACH;;AAGgB,QAAA,IAAA,CAAA,oBAAoB,GAAa;YAC9C,WAAW;YACX,UAAU;YACV,UAAU;YACV,YAAY;YACZ,WAAW;YACX,WAAW;YACX,UAAU;YACV,YAAY;YACZ,YAAY;YACZ,YAAY;YACZ;SACH;;AAgPO,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,KAAU,KAAa,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG7D,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,KAAU,KAAY;AAC1C,YAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACrB,gBAAA,OAAO,KAAK,CAAC,aAAa,IAAI,EAAE;;YAGpC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;AACxC,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AAE5D,gBAAA,OAAO,UAAU,CAAC,WAAW,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW;;AAGhE,YAAA,OAAO,KAAK;AAChB,SAAC;QAvPG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB;;;IAIjE,eAAe,GAAA;QACX,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,sBAAsB,EAAE;QAC7B,KAAK,CAAC,eAAe,EAAE;;;IAI3B,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;AAEnB,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,UAAsC,CAAC,KAAK,EAAE;;AAGxD,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;;;;AAK1C,IAAA,IAAI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;;;AAI7C,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAC7D,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;;;AAI3B,IAAA,iBAAiB,CAAC,IAAY,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;YACzB;;AAEJ,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AAErB,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE;AAC1B,QAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;AAC3B,QAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;AAEzB,QAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;;;AAI3B,IAAA,kBAAkB,CAAC,MAAe,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;YACxB;;AAGJ,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;;QAGxE,IAAI,CAAC,aAAa,EAAE;;;AAIxB,IAAA,aAAa,CAAC,MAAe,EAAA;QACzB,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE;;QAErC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC;;;AAIvD,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAC9B,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;AAGhC,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;;;IAIjD,gBAAgB,CAAC,KAAoB,EAAE,KAAiB,EAAA;QACpD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YAClC;;AAGJ,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;AAGhC;;;AAGG;IACH,oBAAoB,GAAA;;AAEhB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb;;QAGJ,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAErC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAAK,EAAE;;;AAItD;;;AAGG;IACH,gBAAgB,GAAA;;;QAGZ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC7B;;;AAIJ,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;;AAGjC;;;AAGG;AACH,IAAA,qBAAqB,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;;QAGJ,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YAC/B,IAAI,CAAC,MAAM,EAAE;YACb;;QAGJ,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;YACtC,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AACd,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;;YAGjC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;AACnC,gBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;;AAChC,iBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACrB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;;;aAEzB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;YAC3C,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;;AACtB,aAAA,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE;AAC1E,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAE;AACtD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;;YAEjC,MAAM,YAAY,GACd,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;AACpC,gBAAA,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;AAChC,gBAAA,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC;AACzC,gBAAA,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;AACpC,gBAAA,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;gBAChC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC;AAExD,YAAA,IAAI,IAAI,CAAC,YAAY,IAAI,YAAY,EAAE;AACnC,gBAAA,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;;;;;AAMhD,IAAA,qBAAqB,CAAC,SAA+B,EAAA;AACjD,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;;;;AAKrD,IAAA,eAAe,CAAC,KAAwB,EAAA;AACpC,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;;;;AAKtC,IAAA,0BAA0B,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,EAAA;QAC5C,IAAI,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;QACtD,IAAI,CAAC,UAAU,EAAE;AACb,YAAA,UAAU,GAAG;AACT,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,KAAK,EAAE;aACV;;AAGL,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;;;IAIrC,MAAM,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,gBAAgB,EAAE;YAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;YACtD,IAAI,WAAW,EAAE;AACb,gBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC;gBACxC;;;AAGR,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,EAAE;AACjD,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;AAC7C,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE;;;AAIb,IAAA,0BAA0B,CAAC,YAAoB,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC;;;AAI9E,IAAA,IAAc,EAAE,GAAA;QACZ,OAAO,IAAI,CAAC,UAAqC;;;AAI3C,IAAA,WAAW,CAAC,KAAmB,EAAA;QACrC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,MAAoB,EAAE,IAAgB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;;AAqB3G;;;AAGG;AACK,IAAA,gBAAgB,CAAC,MAAc,EAAA;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9D,QAAA,MAAM,KAAK,GAAW,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,WAAW,CAAC;QAEnF,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;;;;AAKxD,IAAA,qBAAqB,CAAC,YAAoB,EAAA;AAC9C,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC;;;IAIlE,MAAM,qBAAqB,CAAC,EAA8B,EAAA;AAC9D,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AAEtB,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,UAAsC,CAAC,KAAK,EAAE;AAEpD,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAClC,gBAAA,IAAI,CAAC,eAAe,GAAG,SAAS;;;;;AAMxC,QAAA,MAAM,OAAO,CAAC,OAAO,EAAE;;QAEvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;;;AAIvC,IAAA,eAAe,CAAC,EAA8B,EAAA;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;AAE7C,QAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qEAAA,CAAuE,CAAC;;AAE5F,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,YAAY,EAAE;AACzC;;;;AAIG;QACH,MAAM,KAAK,GAAG;AACT,aAAA,IAAI;AACJ,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;YAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;YACpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,YAAY;AAE9F,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC;YAEhD,IAAI,CAAC,YAAY,EAAE;AACvB,SAAC,CAAC;AACN,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAE/B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAExF,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AACxD,QAAA,MAAM,UAAU,GAAe;YAC3B,OAAO,EAAE,IAAI,CAAC;SACjB;AAED,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY;;AAG9C,QAAA,cAAc,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC;QACrD,cAAc,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC;;AAGvE,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE;AAC1B,QAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;AAC1B,QAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;AACzB,QAAA,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;AAE9B,QAAA,OAAO,cAAc;;;AAIjB,IAAA,aAAa,CAAC,MAAkC,EAAA;AACpD,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,MAAiC;;AAG5C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;AAEvB,YAAA,OAAO,IAAI,uBAAuB,CAAM,MAAM,CAAC;;AAGnD,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI,4BAA4B,CAAM,MAAM,CAAC;;AAGxD,QAAA,OAAO,SAAS;;;IAIZ,iBAAiB,GAAA;QACrB,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,SAAS,CAAC,MAAM,EAAE,QAAQ;AACrB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;;;IAI7C,oBAAoB,GAAA;QACxB,MAAM,GAAG,GAAG,CAAC;QACb,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,IAAI;AAClD,QAAA,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAiB,CAAC,qBAAqB,EAAE;AAC9G,QAAA,MAAM,cAAc,GAAG,WAAW,GAAG,WAAW;QAEhD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,GAAG,cAAc,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ;AACjG,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC;QAEzB,IAAI,CAAC,aAAa,EAAE;;AAGxB;;;AAGG;AACK,IAAA,qBAAqB,CAAC,KAAY,EAAA;AACtC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AAErB,QAAA,MAAM,uBAAuB,GAAG,YAAY,CAAC,IAAI,CAAC;QAClD,IAAI,uBAAuB,EAAE;AACzB,YAAA,OAAO,KAAqB;;AAGhC,QAAA,MAAM,mBAAmB,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5C,IAAI,mBAAmB,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;;AAGnD,QAAA,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC1C,IAAI,mBAAmB,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;;AAGrD,QAAA,OAAO,EAAE;;AAGb;;;AAGG;AACK,IAAA,4BAA4B,CAAC,KAAY,EAAA;QAC7C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC;;aACjD,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC,qCAAqC,CAAC,KAAK,CAAC;;aACrD;AACH,YAAA,OAAO,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC;;;AAI9D;;;AAGG;AACK,IAAA,iCAAiC,CAAI,KAAU,EAAA;QACnD,MAAM,KAAK,GAA2B,EAAE;AAExC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrD,IAAI,CAAC,QAAQ,EAAE;gBACX;;AAGJ,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAClB,gBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;;YAGxB,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG9B,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAClC,YAAA,MAAM,UAAU,GAAe;AAC3B,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE;aACZ;AAED,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC;YAE/B,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC7C,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,qCAAqC,CAAC,YAAY,CAAC;;iBAC3E;gBACH,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,mCAAmC,CAAC,YAAY,CAAC;;AAGhF,YAAA,OAAO,UAAU;AACrB,SAAC,CAAC;;AAGN;;;AAGG;AACK,IAAA,qCAAqC,CAAI,KAAU,EAAA;QACvD,MAAM,WAAW,GAAiB,EAAE;AAEpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC/B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;gBACvD;AACH,aAAA,CAAC;;AAGN,QAAA,OAAO,WAAW;;AAGtB;;;AAGG;AACK,IAAA,8BAA8B,CAAC,KAAY,EAAA;QAC/C,MAAM,WAAW,GAAiB,EAAE;AAEpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;;AAG7C,QAAA,OAAO,WAAW;;AAGtB;;;AAGG;AACK,IAAA,mCAAmC,CAAC,KAAY,EAAA;QACpD,MAAM,WAAW,GAAiB,EAAE;AAEpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC/B;AACH,aAAA,CAAC;;AAGN,QAAA,OAAO,WAAW;;;IAId,sBAAsB,GAAA;AAC1B,QAAA,aAAa,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;aACrE,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,MACA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CACnG,EACD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEtC,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,QAAgD,KAAI;AAC9D,gBAAA,QAAQ,QAAQ,CAAC,IAAI;AACjB,oBAAA,KAAK,oBAAoB;AACrB,wBAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,WAAW;wBAC9C;AACJ,oBAAA,KAAK,mBAAmB;AACpB,wBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,WAAW;wBAC7C;AACJ,oBAAA,KAAK,uBAAuB;AACxB,wBAAA,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,WAAW;wBACjD;AACJ,oBAAA,KAAK,sBAAsB;AACvB,wBAAA,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,WAAW;wBAChD;;AAEZ,aAAC,CAAC;AACN,SAAC,CAAC;;8GAtxBQ,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAwB,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EA2Ib,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,iBAAiB,EAIjB,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,qBAAqB,4EAR3Bb,eAAa,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAvIN,YAAY,EAAA,UAAA,EAAA,CAAA;kBADjC;;0BA4PQ;mEA1OL,SAAS,EAAA,CAAA;sBADR;gBAKD,YAAY,EAAA,CAAA;sBADX;gBASD,WAAW,EAAA,CAAA;sBADV;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAKD,KAAK,EAAA,CAAA;sBADJ;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAKD,iBAAiB,EAAA,CAAA;sBADhB;gBAKD,sBAAsB,EAAA,CAAA;sBADrB;gBAKD,UAAU,EAAA,CAAA;sBADT;gBAUD,eAAe,EAAA,CAAA;sBADd;gBAQD,eAAe,EAAA,CAAA;sBADd;gBAQD,QAAQ,EAAA,CAAA;sBADP;gBAKD,mBAAmB,EAAA,CAAA;sBADlB;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAKG,UAAU,EAAA,CAAA;sBADb;gBAaG,KAAK,EAAA,CAAA;sBADR;gBAiBD,cAAc,EAAA,CAAA;sBADb;gBAKS,eAAe,EAAA,CAAA;sBAAxB;gBAIS,cAAc,EAAA,CAAA;sBAAvB;gBAID,aAAa,EAAA,CAAA;sBADZ,SAAS;uBAACA,eAAa;gBAKP,gBAAgB,EAAA,CAAA;sBADhC,eAAe;uBAAC,iBAAiB;gBAKjB,cAAc,EAAA,CAAA;sBAD9B,eAAe;uBAAC,qBAAqB;;;MClL7B,4BAA4B,CAAA;AACrC;;;;AAIG;AACH,IAAA,WAAA,CACW,MAAyB,EACzB,OAAY;;QADZ,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAO,CAAA,OAAA,GAAP,OAAO;;AAErB;AA8BK,MAAO,iBAAkB,SAAQ,YAAY,CAAA;;IAoB/C,WACgB,CAAA,aAA2B,EAC9B,wBAAiD,EACzC,iBAAmC,EACnC,SAAmB,EACQ,SAAyC,EACrF,eAA+B,EAAA;AAE/B,QAAA,KAAK,CAAC,aAAa,EAAE,eAAe,CAAC;QAN5B,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QAChB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAS,CAAA,SAAA,GAAT,SAAS;QACkB,IAAS,CAAA,SAAA,GAAT,SAAS;;AAtBzD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAgC;;;IA4BlE,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;;AAE7F,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC1E,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC;;;;IAKlF,eAAe,GAAA;QACX,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,gBAAgB,EAAE;;;;AAK/B,IAAA,OAAO,CAAC,KAAiB,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb;;AAGJ,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B;QACjD,IAAI,MAAM,EAAE;YACR,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC;YAChE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;AACrD,YAAA,IAAI,MAAM,IAAI,UAAU,EAAE;gBACtB;;;QAIR,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;YAChG;;QAGJ,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC;AAE9D,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;;;AAIrE,IAAA,eAAe,CAAI,UAAa,EAAA;QAC5B,MAAM,KAAK,GAAG,IAAI,4BAA4B,CAAC,IAAI,EAAE,UAAU,CAAC;AAEhE,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIpC,IAAA,gBAAgB,CAAC,IAAgB,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;YAC3B,IAAI,CAAC,aAAa,EAAE;YAEpB;;AAGJ,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;;;AAIlC,IAAA,aAAa,CAAC,IAAkB,EAAA;AAC5B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC;AAE5B,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE;YACzC;;AAGJ,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,YAAY,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,YAAY;QACrF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;;;AAI7D,IAAA,oBAAoB,CAAC,YAAiB,EAAA;QAClC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,YAAY,EAAE;AAC3C,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;;iBAC9E;gBACH,OAAO,YAAY,CAAC,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK;;;aAE1D;AACH,YAAA,OAAO,KAAK;;;;AAKpB,IAAA,kCAAkC,CAAC,YAAiB,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,YAAY;;;AAIxD,IAAA,aAAa,CAAC,IAAY,EAAA;QACtB,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,IAAI,EAAE;YACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;;AAG7D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;;;IAIlC,aAAa,GAAA;QACT,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;YACjD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;aAC3C;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC;AAE9D,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;;AAGrE,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;;;AAI1B,IAAA,eAAe,CAAC,UAAsB,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE;YACvC;;AAGJ,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;;;AAI/B,IAAA,YAAY,CAAC,KAAU,EAAA;;AAE3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAElB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;;;AAItC,IAAA,MAAM,gBAAgB,GAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC7B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC5D,MAAM,EAAE,IAAI,CAAC;AAChB,SAAA,CAAC;QAEF,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CAChD,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,EAC1E,uBAAuB,EACvB;YACI,YAAY,EAAE,IAAI,CAAC;AACtB,SAAA,EACD,EAAE,QAAQ,EAAE,CACf;;;AAIG,IAAA,sBAAsB,CAAC,IAAY,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;;QAGhE,OAAO,IAAI,CAAC;AACP,aAAA,MAAM,CAAC,CAAC,MAAoB,EAAE,IAAgB,KAAI;AAC/C,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;AAErC,YAAA,OAAO,MAAM;SAChB,EAAE,EAAE;AACJ,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;;AAlMnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,+JAyBF,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAc,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAzB7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAtBf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAAA;YACP,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE;AAC/E,YAAA,+BAA+B;SAClC,EC1DL,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,uqSAuNA,ED3JQ,MAAA,EAAA,CAAA,wOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,EACpB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,8BAA8B,EAC9B,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,whBAChB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,qBAAqB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAGV,mBAAmB,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACnB,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,oBAAoB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGf,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA5B7B,SAAS;+BACI,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA;wBACP,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE;AAC/E,wBAAA,+BAA+B;qBAClC,EACQ,OAAA,EAAA;wBACL,gBAAgB;wBAChB,gBAAgB;wBAChB,uBAAuB;wBACvB,oBAAoB;wBACpB,8BAA8B;wBAC9B,gBAAgB;wBAChB,WAAW;wBACX,qBAAqB;wBACrB,oBAAoB;wBACpB,UAAU;wBACV,OAAO;wBACP,sBAAsB;wBACtB,mBAAmB;wBACnB,eAAe;wBACf;AACH,qBAAA,EAAA,QAAA,EAAA,uqSAAA,EAAA,MAAA,EAAA,CAAA,wOAAA,CAAA,EAAA;;0BAuBI;;0BAIA;;0BAAY,MAAM;2BAAC,cAAc;mEAtBtC,eAAe,EAAA,CAAA;sBADd;gBAIO,kBAAkB,EAAA,CAAA;sBADzB,SAAS;uBAAC,oBAAoB;gBAK/B,eAAe,EAAA,CAAA;sBADd,SAAS;uBAAC,iBAAiB;gBAK5B,YAAY,EAAA,CAAA;sBADX,SAAS;uBAAC,cAAc;;;AEhF7B,MAAM,qBAAqB,GAAG;IAC1B,iBAAiB;IACjB,qBAAqB;IACrB,6BAA6B;IAC7B,0BAA0B;IAC1B;CACH;MAMY,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAX/B,iBAAiB;YACjB,qBAAqB;YACrB,6BAA6B;YAC7B,0BAA0B;AAC1B,YAAA,8BAA8B,aAJ9B,iBAAiB;YACjB,qBAAqB;YACrB,6BAA6B;YAC7B,0BAA0B;YAC1B,8BAA8B,CAAA,EAAA,CAAA,CAAA;AAOrB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAX/B,iBAAiB,CAAA,EAAA,CAAA,CAAA;;2FAWR,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,GAAG,qBAAqB,CAAC;AACnC,oBAAA,OAAO,EAAE,CAAC,GAAG,qBAAqB;AACrC,iBAAA;;;MCdY,wBAAwB,CAAA;8GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAxB,wBAAwB,EAAA,OAAA,EAAA,CAHvB,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAC3B,2BAA2B,CAAA,EAAA,CAAA,CAAA;AAE5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAHvB,2BAA2B,CAAA,EAAA,CAAA,CAAA;;2FAG5B,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,2BAA2B,CAAC;oBACtC,OAAO,EAAE,CAAC,2BAA2B;AACxC,iBAAA;;;ACND;AACM,SAAU,oCAAoC,CAAC,QAAgB,EAAA;AACjE,IAAA,OAAO,KAAK,CACR,CAA4C,yCAAA,EAAA,QAAQ,CAAyC,uCAAA,CAAA;QACzF,CAAmE,iEAAA,CAAA;AACnE,QAAA,CAAA,sBAAA,CAAwB,CAC/B;AACL;;ACsBM,MAAO,+BAAmC,SAAQ,SAAS,CAAA;AAC7D;;AAEG;IACH,IACI,KAAK,CAAC,KAAQ,EAAA;AACd,QAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAEzB,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;AAsE3B;;;AAGG;IACH,IACI,KAAK,CAAC,KAA6B,EAAA;AACnC,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;;AAGvB,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,kBAAkB,EAAE;;AAElD,YAAA,OAAO,OAAO;;QAElB,OAAO,KAAK,CAAC,KAAK;;;AAwHtB,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ;;;AAcrC,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAzNX;;;AAGG;QAEH,IAAS,CAAA,SAAA,GAAc,cAAc;;QAoCrC,IAAa,CAAA,aAAA,GAAG,IAAI;;QAIpB,IAAM,CAAA,MAAA,GAAG,KAAK;;AAQd,QAAA,IAAA,CAAA,UAAU,GAAmB,kBAAkB,CAAC,GAAG;;QAInD,IAAS,CAAA,SAAA,GAAG,IAAI;AAEhB;;;;;AAKG;QACM,IAAiB,CAAA,iBAAA,GAAG,KAAK;AAmBlC;;;AAGG;QAEH,IAAe,CAAA,eAAA,GAAG,IAAI;AAEtB;;;;;;AAMG;QAEH,IAAgB,CAAA,gBAAA,GAAwB,EAAE;AAE1C;;;AAGG;AAEH,QAAA,IAAA,CAAA,QAAQ,GAAqB;AACzB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE;SACT;AAED;;;AAGG;AAEH,QAAA,IAAA,CAAA,kBAAkB,GAAqB;AACnC,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE;SACT;AAED;;AAEG;QAEH,IAAY,CAAA,YAAA,GAAG,IAAI;;QAInB,IAAc,CAAA,cAAA,GAAG,IAAI;AAErB;;AAEG;QAEH,IAAe,CAAA,eAAA,GAAG,IAAI;;QAItB,IAAU,CAAA,UAAA,GAAG,IAAI;AAEjB;;;;AAIG;QAEH,IAAkB,CAAA,kBAAA,GAAG,KAAK;AAE1B;;AAEG;QAEH,IAAoB,CAAA,oBAAA,GAAG,KAAK;;QAI5B,IAAM,CAAA,MAAA,GAAG,KAAK;;QAQd,IAAe,CAAA,eAAA,GAAG,KAAK;;QAIvB,IAAc,CAAA,cAAA,GAAG,KAAK;;AAIb,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAW;;AAI1C,QAAA,IAAA,CAAA,gBAAgB,GAAiC,IAAI,YAAY,EAAkB;;AAInF,QAAA,IAAA,CAAA,cAAc,GAAoB,IAAI,YAAY,EAAK;;AAKvD,QAAA,IAAA,CAAA,OAAO,GAAuB,IAAI,YAAY,EAAQ;;AAoB9C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAqB,eAAe,EAAE;AAC5E,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAkB,iBAAiB,EAAE;AAC3E,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAiBF;;;AAGG;AAEH,QAAA,IAAA,CAAA,eAAe,GAA0B,MAAM,KAAK;AA2DpD;;AAEG;AACH,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,IAAa,KAAU;AACvC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,SAAC;AACD;;AAEG;AACH,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,cAA8B,KAAU;AAC9D,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC;AAC9C,SAAC;AAtFG,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA,MAAM,oCAAoC,CAAC,iBAAiB,CAAC;;AAEjE,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA,MAAM,oCAAoC,CAAC,mBAAmB,CAAC;;;QAInE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;;AAU5C;;AAEG;IACH,eAAe,GAAA;;AAEX,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,kBAAkB,EAAE;;;;AAKjC,IAAA,UAAU,CAAC,KAAQ,EAAA;AACf,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE;;AAGvB;;;AAGG;AACH,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAC9B,QAAA,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,QAAQ,CAAC;;AAG5D;;;;AAIG;AACH,IAAA,yBAAyB,CAAC,QAAW,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,IAAI,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE;AAClD,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AAChD,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;;AAE1D,gBAAA,IAAI,CAAC,KAAK,GAAG,OAAO;;iBACjB;AACH,gBAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAClE,oBAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;;qBAClB;AACH,oBAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;;;;AAI/B,YAAA,IAAI,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE;AAC9C,gBAAA,IAAI,CAAC,KAAK,GAAG,QAAQ;;AAGzB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,4CAA4C,CAAC;;AAGxE,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;QAElC,IAAI,CAAC,SAAS,EAAE;;AAgBpB;;;AAGG;IACK,kBAAkB,GAAA;AACtB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,iCAAiC,CAAC;QAClG,IAAI,CAAC,eAAe,EAAE;YAClB;;AAEJ,QAAA,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ;;8GAxUnC,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAH7B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,MAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,+BAA+B,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA4M/F,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIvB,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAwB,UAAU,EAIzD,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,uBAAuB,EAAwB,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAS,EC9OvE,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ooDA6CA,EDlBc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,0xBAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1B,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAErC,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAP3C,SAAS;+BACI,qBAAqB,EAAA,eAAA,EAEd,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,iCAAiC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,WACjG,CAAC,uBAAuB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,ooDAAA,EAAA;wDAO3C,KAAK,EAAA,CAAA;sBADR;gBAaD,SAAS,EAAA,CAAA;sBADR;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAQD,QAAQ,EAAA,CAAA;sBADP;gBAQD,cAAc,EAAA,CAAA;sBADb;gBAQD,cAAc,EAAA,CAAA;sBADb;gBAQD,YAAY,EAAA,CAAA;sBADX;gBAKD,aAAa,EAAA,CAAA;sBADZ;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAKD,iBAAiB,EAAA,CAAA;sBADhB;gBAKD,UAAU,EAAA,CAAA;sBADT;gBAKD,SAAS,EAAA,CAAA;sBADR;gBASQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAOG,KAAK,EAAA,CAAA;sBADR;gBAkBD,eAAe,EAAA,CAAA;sBADd;gBAWD,gBAAgB,EAAA,CAAA;sBADf;gBAQD,QAAQ,EAAA,CAAA;sBADP;gBAWD,kBAAkB,EAAA,CAAA;sBADjB;gBAUD,YAAY,EAAA,CAAA;sBADX;gBAKD,cAAc,EAAA,CAAA;sBADb;gBAOD,eAAe,EAAA,CAAA;sBADd;gBAKD,UAAU,EAAA,CAAA;sBADT;gBASD,kBAAkB,EAAA,CAAA;sBADjB;gBAOD,oBAAoB,EAAA,CAAA;sBADnB;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAKD,eAAe,EAAA,CAAA;sBADd;gBAKD,cAAc,EAAA,CAAA;sBADb;gBAKQ,YAAY,EAAA,CAAA;sBADpB;gBAKQ,gBAAgB,EAAA,CAAA;sBADxB;gBAKQ,cAAc,EAAA,CAAA;sBADtB;gBAMQ,OAAO,EAAA,CAAA;sBAFf;gBAMD,uBAAuB,EAAA,CAAA;sBADtB,SAAS;uBAAC,uBAAuB;gBAKxB,MAAM,EAAA,CAAA;sBADf,SAAS;uBAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;gBAK5D,QAAQ,EAAA,CAAA;sBADjB,SAAS;uBAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;gBAsCrE,eAAe,EAAA,CAAA;sBADd;;;ME5QQ,4BAA4B,CAAA;8GAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAA5B,4BAA4B,EAAA,OAAA,EAAA,CAH3B,+BAA+B,CAAA,EAAA,OAAA,EAAA,CAC/B,+BAA+B,CAAA,EAAA,CAAA,CAAA;AAEhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,YAH3B,+BAA+B,CAAA,EAAA,CAAA,CAAA;;2FAGhC,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,+BAA+B,CAAC;oBAC1C,OAAO,EAAE,CAAC,+BAA+B;AAC5C,iBAAA;;;ACJY,MAAA,+BAA+B,GAAsC;AAC9E,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,QAAQ,EAAE,OAAO;AACjB,IAAA,OAAO,EAAE;QACL,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;QAC/D,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;QAC/D,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;QAC5D,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI;AAC9D,KAAA;AACD,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,MAAM,EAAE;;;ACNZ;;;AAGG;MAKU,gCAAgC,CAAA;AACzC;;AAEG;IACH,IACI,0BAA0B,CAAC,KAAyB,EAAA;AACpD,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QAErB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU;QAC5D,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe;QAEtE,IAAI,CAAC,WAAW,EAAE;;AAGtB;;AAEG;IACH,IACI,8BAA8B,CAAC,KAAc,EAAA;AAC7C,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;QAC/B,IAAI,CAAC,WAAW,EAAE;;;IA6BtB,WACqB,CAAA,YAA8B,EAC9B,cAAgC,EAAA;QADhC,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAc,CAAA,cAAA,GAAd,cAAc;AAbnC;;AAEG;QACK,IAAiB,CAAA,iBAAA,GAAG,IAAI;;;IAchC,QAAQ,GAAA;QACJ,IAAI,CAAC,WAAW,EAAE;;AAGtB;;AAEG;IACH,IAAI,kBAAkB,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,mBAAmB,EAAE;YACpC;;AAGJ,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QAEhC,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;AAC/B,YAAA,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;;aACjC;YACH,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,CAAC;YAC3D,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,wBAAwB,IAAI,EAAE,CAAC;;QAGzE,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;IAItD,WAAW,GAAA;QACf,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACpD,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;AACzD,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;;AAC3B,aAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAClC,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;;;8GAvF5B,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,gCAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAJ5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,UAAU,EAAE;AACf,iBAAA;+GAMO,0BAA0B,EAAA,CAAA;sBAD7B;gBAcG,8BAA8B,EAAA,CAAA;sBADjC;;;MC3BQ,uCAAuC,GAAG,IAAI,cAAc,CACrE,yCAAyC,EACzC;AACI,IAAA,OAAO,EAAE,MAAM;AAClB,CAAA;;MCEQ,kBAAkB,CAAA;;AAK3B,IAAA,WAAA,CAA6D,oBAAsC,EAAA;QAC/F,IAAI,CAAC,mBAAmB,GAAG;AACvB,YAAA,GAAG,+BAA+B;AAClC,YAAA,GAAG;SACN;;AAGL;;;AAGG;AACH,IAAA,SAAS,CACL,WAAkF,EAAA;AAElF,QAAA,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;YACpB;;AAEJ,QAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,IAAI;QAC5C,IAAI,OAAO,mBAAmB,KAAK,QAAQ,IAAI,mBAAmB,YAAY,WAAW,EAAE;YACvF,OAAO;gBACH,GAAG,IAAI,CAAC,mBAAmB;AAC3B,gBAAA,OAAO,EAAE;aACZ;;QAEL,OAAO;YACH,GAAG,IAAI,CAAC,mBAAmB;AAC3B,YAAA,GAAG;SACN;;AAhCI,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kBAKP,uCAAuC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GALlD,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAMgB,MAAM;2BAAC,uCAAuC;;;MCPlD,2BAA2B,CAAA;;AAEpC,IAAA,SAAS,CAAC,KAA8B,EAAA;;QAEpC,OAAO,MAAM,CAAC,MAAM,CAAE,KAAiC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KACxE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CACnD;;8GANpB,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,yBAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,yBAAyB;AAC/B,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACsDD,IAAI,YAAY,GAAG,CAAC;AAIP,MAAA,yBAAyB,GAAwB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU;AAa/F;;;AAGG;MA+BU,sBAAsB,CAAA;AAK/B;;;AAGG;IACH,IACI,SAAS,CAAC,SAAuC,EAAA;QACjD,IAAI,CAAC,SAAS,EAAE;YACZ;;AAGJ,QAAA,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;AAE/D,QAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;;AAEtC,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU;;;AA0G1B,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC;AACR,cAAE,OAAO;AACR,aAAA,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO;AAChD,aAAA,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,aAAa,CAAC,OAAQ,CAAC;;;AAgFrD,IAAA,WAAA,CACY,UAAgC,EAChC,GAAsB,EACmB,oBAAsC,EAAA;QAF/E,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAG,CAAA,GAAA,GAAH,GAAG;;AAjNf,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAA,mBAAA,EAAsB,YAAY,EAAE,EAAE;AA0BjD;;AAEG;QAEH,IAAa,CAAA,aAAA,GAAG,KAAK;AAkBrB;;AAEG;QAEH,IAAiB,CAAA,iBAAA,GAAiB,0BAA0B;AAE5D;;AAEG;QAEH,IAAiB,CAAA,iBAAA,GAAiB,0BAA0B;AAE5D;;AAEG;QAEH,IAAe,CAAA,eAAA,GAAiB,gBAAgB;;QAIhD,IAAa,CAAA,aAAA,GAAG,IAAI;;QAIpB,IAAkB,CAAA,kBAAA,GAAiB,0BAA0B;AAE7D;;;;AAIG;QAEH,IAAmB,CAAA,mBAAA,GAAG,KAAK;AAE3B;;;AAGG;AAEH,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAoB;AAElD;;;AAGG;AAEH,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAoB;AAEpD;;AAEG;AAEH,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAyB;;AAiB/D,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;;AAG9B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;AAmB/B;;AAEG;QACH,IAAgB,CAAA,gBAAA,GAA+B,EAAE;AAEjD;;AAEG;QACH,IAAW,CAAA,WAAA,GAAG,IAAI;AAElB;;AAEG;QACH,IAAQ,CAAA,QAAA,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,WAAW,CAAC;AAEzD;;AAEG;AACH,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAyB;AAE3D;;AAEG;AACH,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAmB,EAAE,CAAC;AAEtD;;;AAGG;QACH,IAAiB,CAAA,iBAAA,GAAG,KAAK;;QAQzB,IAAY,CAAA,YAAA,GAAmC,EAAE;;AAazC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;AAEvC;;;AAGG;AACc,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AASzC,QAAA,IAAA,CAAA,gBAAgB,GAAoC,IAAI,GAAG,EAAE;QAQjE,IAAI,CAAC,mBAAmB,GAAG;AACvB,YAAA,GAAG,+BAA+B;AAClC,YAAA,GAAG;SACN;AAED,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;;;AAIzC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,YAAY,WAAW,EAAE;gBACnE,IAAI,CAAC,WAAW,GAAG;oBACf,GAAG,IAAI,CAAC,mBAAmB;oBAC3B,OAAO,EAAE,IAAI,CAAC;iBACjB;;iBACE;gBACH,IAAI,CAAC,WAAW,GAAG;oBACf,GAAG,IAAI,CAAC,mBAAmB;oBAC3B,GAAG,IAAI,CAAC;iBACX;;;;AAKb;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,qBAAqB,EAAE,WAAW,EAAE;;AAG7C;;AAEG;AACH,IAAA,MAAM,sBAAsB,GAAA;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9E,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAG3B;;AAEG;AACH,IAAA,MAAM,SAAS,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAEpB,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAE/D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAChF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAEjF,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACnB;;AAEJ,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AAClC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAE/B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;;AAG9B;;;;AAIG;AACH,IAAA,MAAM,UAAU,CAAC,OAAwB,EAAE,IAAe,EAAA;AACtD,QAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAEpD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEpE,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGlF;;;;AAIG;AACH,IAAA,MAAM,aAAa,CAAC,IAAY,EAAE,IAAc,EAAA;AAC5C,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AACpD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEpE,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGlF;;;AAGG;IACH,QAAQ,CAAC,KAAa,EAAE,KAA8B,EAAA;QAClD,OAAO,CAAA,EAAG,KAAK,CAAI,CAAA,EAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE;;;IAI5C,aAAa,CAAC,KAAa,EAAE,KAA8B,EAAA;AACvD,QAAA,OAAQ,KAAiC,CAAC,QAAQ,CAAC,IAAI;;AAG3D;;;;AAIG;IACH,MAAM,GAAA;QACF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;;;AAIhD,IAAA,gBAAgB,CAAC,KAAU,EAAA;QACvB,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI;;;IAI3D,cAAc,CAAC,CAAS,EAAE,KAAmC,EAAA;QACzD,OAAO,KAAK,CAAC,IAAI;;AAGrB;;AAEG;AACK,IAAA,MAAM,aAAa,GAAA;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAEpC,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAErF,QAAA,IAAI,CAAC,sBAAsB,EAAE,WAAW,EAAE;AAE1C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAEhB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAE/D,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;AAE9E,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aAC3D,SAAS,CAAC,YAAW;AAClB,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9E,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3B,SAAC,CAAC;AAEN,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAE7B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAExB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAEpC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB;;QAGJ,IAAI,CAAC,eAAe,EAAE;;;AAIlB,IAAA,mBAAmB,CAAC,QAAkC,EAAA;AAC1D,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAC9E;;;IAIG,UAAU,GAAA;QACd,MAAM,YAAY,GAAmC,EAAE;AACvD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB;QAC7D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9C,YAAA,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,IAAI;YAEpC,YAAY,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE;AACV,aAAA,CAAC;AACN,SAAC,CAAC;AAEF,QAAA,OAAO,YAAY;;;IAIf,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,qBAAqB,EAAE,WAAW,EAAE;AACzC,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,aAAA,IAAI,CACD2B,KAAG,CAAC,MAAK;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;SACxB,CAAC,EACF,SAAS,CAAC,MACN,IAAI,CAAC,SAAS,CAAC,aAAc,CAAC,IAAI,CAC9B,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAChCC,QAAM,CAAC,CAAC,MAAyB,KAAK,MAAM,KAAK,SAAS,CAAC,EAC3D,IAAI,CAAC,CAAC,CAAC,EACP,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CACvC,CACJ;aAEJ,SAAS,CAAC,YAAW;AAClB,YAAA,MAAM,IAAI,CAAC,SAAS,EAAE;YACtB,IAAI,CAAC,eAAe,EAAE;AAC1B,SAAC,CAAC;;;AAIF,IAAA,kBAAkB,CAAC,KAAoC,EAAA;AAC3D,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AAEzB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,OAAO,EAAE;QAE9B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,KAAI;AACtG,YAAA,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE;AACxB,SAAC,CAAC;;;AAIE,IAAA,UAAU,CAAC,KAAwB,EAAA;QACvC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;YAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK;AAC9B,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;AAE5C,YAAA,OAAO,IAAI;AACf,SAAC,CAAC;AAEF,QAAA,OAAO,KAAK;;;IAIR,sBAAsB,CAAC,IAAqB,EAAE,IAAe,EAAA;QACjE,IAAI,CAAC,IAAI,EAAE;YACP,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACzF;;QAGJ,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC;QAE7D,IAAI,CAAC,UAAU,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE;YAC5C;;QAGJ,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,IAAI,GAAG,EAAE;QAChD,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;;IAI3E,uBAAuB,CAAC,IAAY,EAAE,IAAe,EAAA;QACzD,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;YAClC;;QAGJ,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC;QAE7D,IAAI,CAAC,UAAU,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE;YAC5C;;AAGJ,QAAA,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;;AA7dzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,oFAqNnB,uCAAuC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AArN1C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAzBpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,CAAC,aAAqC,KAAK,aAAa,CAAC,QAAQ;gBAC7E,IAAI,EAAE,CAAC,sBAAsB;AAChC,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,eAAe;gBACxB,UAAU,EAAE,CAAC,aAAqC,KAAK,aAAa,CAAC,SAAS;gBAC9E,IAAI,EAAE,CAAC,sBAAsB;AAChC;SACJ,EA0HU,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAM,EAIN,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,kBAAkB,EAIf,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAAA,2BAA2B,ECpO7C,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,i9MAsHA,EDlBQ,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArB,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAsB,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,eAAA,EAAA,YAAA,EAAA,MAAA,EAAA,aAAA,EAAA,QAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,mBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,8BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,4BAAA,EAAA,8BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kCAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,4LACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gCAAgC,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,4BAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,2BAA2B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACjB,2BAA2B,EAAA,IAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAC3B,kBAAkB,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGb,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA9BlC,SAAS;+BACI,oBAAoB,EAAA,aAAA,EAEf,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,YAAY;4BACrB,UAAU,EAAE,CAAC,aAAqC,KAAK,aAAa,CAAC,QAAQ;AAC7E,4BAAA,IAAI,EAAE,CAAwB,sBAAA;AACjC,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,eAAe;4BACxB,UAAU,EAAE,CAAC,aAAqC,KAAK,aAAa,CAAC,SAAS;AAC9E,4BAAA,IAAI,EAAE,CAAwB,sBAAA;AACjC;qBACJ,EACQ,OAAA,EAAA;wBACL,mBAAmB;wBACnB,kBAAkB;wBAClB,WAAW;wBACX,mBAAmB;wBACnB,gBAAgB;wBAChB,gCAAgC;wBAChC,2BAA2B;wBAC3B,iBAAiB;wBACjB,2BAA2B;wBAC3B;AACH,qBAAA,EAAA,QAAA,EAAA,i9MAAA,EAAA;;0BAuNI,MAAM;2BAAC,uCAAuC;yCAlNnD,QAAQ,EAAA,CAAA;sBADP;gBAQG,SAAS,EAAA,CAAA;sBADZ;gBAkBD,SAAS,EAAA,CAAA;sBADR;gBAOD,aAAa,EAAA,CAAA;sBADZ;gBAQD,IAAI,EAAA,CAAA;sBADH;gBAUD,YAAY,EAAA,CAAA;sBADX;gBAOD,iBAAiB,EAAA,CAAA;sBADhB;gBAOD,iBAAiB,EAAA,CAAA;sBADhB;gBAOD,eAAe,EAAA,CAAA;sBADd;gBAKD,aAAa,EAAA,CAAA;sBADZ;gBAKD,kBAAkB,EAAA,CAAA;sBADjB;gBASD,mBAAmB,EAAA,CAAA;sBADlB;gBAQD,WAAW,EAAA,CAAA;sBADV;gBAQD,aAAa,EAAA,CAAA;sBADZ;gBAOD,mBAAmB,EAAA,CAAA;sBADlB;gBAOD,MAAM,EAAA,CAAA;sBADL,SAAS;uBAAC,MAAM;gBAKjB,SAAS,EAAA,CAAA;sBADR,SAAS;uBAAC,kBAAkB;gBAK7B,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,2BAA2B;;;AEzM7C;;;;;;AAMG;MA0CU,2BAA2B,CAAA;AACpC;;;AAGG;IACH,OAAO,UAAU,CAAC,MAA0C,EAAA;QACxD,OAAO;AACH,YAAA,QAAQ,EAAE,2BAA2B;AACrC,YAAA,SAAS,EAAE;AACP,gBAAA;AACI,oBAAA,OAAO,EAAE,0BAA0B;oBACnC,QAAQ,EAAE,MAAM,CAAC;AACpB,iBAAA;AACD,gBAAA;AACI,oBAAA,OAAO,EAAE,qBAAqB;oBAC9B,QAAQ,EAAE,MAAM,CAAC;AACpB;AACJ;SACJ;;8GAlBI,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAvChC,sBAAsB;YACtB,gCAAgC;YAChC,2BAA2B;YAC3B,qCAAqC;YACrC,kCAAkC;YAClC,mCAAmC;YACnC,mCAAmC;YACnC,kCAAkC;YAClC,uCAAuC;YACvC,mCAAmC;YACnC,2BAA2B;YAC3B,uCAAuC;YACvC,2BAA2B;YAC3B,yCAAyC;AACzC,YAAA,kBAAkB,aASlB,sBAAsB;YACtB,gCAAgC;YAChC,2BAA2B;YAC3B,qCAAqC;YACrC,kCAAkC;YAClC,mCAAmC;YACnC,mCAAmC;YACnC,kCAAkC;YAClC,uCAAuC;YACvC,mCAAmC;YACnC,2BAA2B;YAC3B,oBAAoB;YACpB,yCAAyC;YACzC,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAGb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAvBzB,SAAA,EAAA;YACP,oBAAoB;YACpB,sCAAsC;YACtC,sCAAsC;YACtC;AACH,SAAA,EAAA,OAAA,EAAA,CArBG,sBAAsB;YAGtB,qCAAqC;YACrC,kCAAkC;YAClC,mCAAmC;YACnC,mCAAmC;YACnC,kCAAkC;YAClC,uCAAuC;YACvC,mCAAmC;YACnC,2BAA2B;YAC3B,uCAAuC;AAEvC,YAAA,yCAAyC,EAqBzC,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAKf,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAzCvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,sBAAsB;wBACtB,gCAAgC;wBAChC,2BAA2B;wBAC3B,qCAAqC;wBACrC,kCAAkC;wBAClC,mCAAmC;wBACnC,mCAAmC;wBACnC,kCAAkC;wBAClC,uCAAuC;wBACvC,mCAAmC;wBACnC,2BAA2B;wBAC3B,uCAAuC;wBACvC,2BAA2B;wBAC3B,yCAAyC;wBACzC;AACH,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACP,oBAAoB;wBACpB,sCAAsC;wBACtC,sCAAsC;wBACtC;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,sBAAsB;wBACtB,gCAAgC;wBAChC,2BAA2B;wBAC3B,qCAAqC;wBACrC,kCAAkC;wBAClC,mCAAmC;wBACnC,mCAAmC;wBACnC,kCAAkC;wBAClC,uCAAuC;wBACvC,mCAAmC;wBACnC,2BAA2B;wBAC3B,oBAAoB;wBACpB,yCAAyC;wBACzC;AACH;AACJ,iBAAA;;;MCnEY,mBAAmB,CAAA;8GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAnB,mBAAmB,EAAA,OAAA,EAAA,CAHlB,cAAc,CAAA,EAAA,OAAA,EAAA,CACd,cAAc,CAAA,EAAA,CAAA,CAAA;AAEf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAHlB,cAAc,CAAA,EAAA,CAAA,CAAA;;2FAGf,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,cAAc,CAAC;oBACzB,OAAO,EAAE,CAAC,cAAc;AAC3B,iBAAA;;;ACJY,MAAA,cAAc,GAAG;AAC1B,IAAA,IAAI,EAAE,iBAAiB;AACvB,IAAA,KAAK,EAAE,uBAAuB;AAC9B,IAAA,KAAK,EAAE,uBAAuB;AAC9B,IAAA,WAAW,EAAE,+BAA+B;AAC5C,IAAA,MAAM,EAAE;;MAGC,uBAAuB,GAAG,IAAI,cAAc,CAAS,yBAAyB;;ACF3F;;AAEG;MAQU,4BAA4B,CAAA;AACrC;;AAEG;IACH,IACI,SAAS,CAAC,SAAkB,EAAA;QAC5B,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,WAAW,CAAC;;aACxD;AACH,YAAA,IAAI,CAAC,+BAA+B,CAAC,cAAc,CAAC,WAAW,CAAC;;;;AAKxE,IAAA,WAAA,CACY,WAAoC,EACpC,SAAoB,EAC5B,sBAA8C,EAAA;QAFtC,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAS,CAAA,SAAA,GAAT,SAAS;QAGjB,sBAAsB,CAAC,SAAS,EAAE;;;IAItC,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,KAAK,CAAC;;;AAIjD,IAAA,0BAA0B,CAAC,SAAiB,EAAA;AAChD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC;;;AAI9D,IAAA,+BAA+B,CAAC,SAAiB,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC;;8GAlChE,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAnC,IAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAH1B,CAAC,+BAA+B,EAAE,CAAC,EAFpC,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,2BAA2B,2DAG3B,oBAAoB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAErB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,QAAQ,EAAE,2BAA2B;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE,CAAC,+BAA+B,EAAE,CAAC;oBAC9C,OAAO,EAAE,CAAC,oBAAoB;AACjC,iBAAA;8IAMO,SAAS,EAAA,CAAA;sBADZ;;;ACHQ,MAAA,4BAA4B,GAAa;AAClD,IAAA,OAAO,EAAE,uBAAuB;AAChC,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB;;AAG1D;;;;;;;;;;;;;;;;;;;AAmBG;MAQU,wBAAwB,CAAA;;IAEjC,IAAI,QAAQ,CAAC,QAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QACzB,IAAI,CAAC,wBAAwB,EAAE;;AAEnC,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;;;IAgBzB,IACI,gBAAgB,CAAC,yBAAkD,EAAA;AACnE,QAAA,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,EAAE,aAAa,CAAC;;;AAIzE,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU;;;AAOjD,IAAA,WAAA,CAAoB,SAAoB,EAAA;QAApB,IAAS,CAAA,SAAA,GAAT,SAAS;;QAHrB,IAAS,CAAA,SAAA,GAAG,KAAK;;;IAMzB,kBAAkB,GAAA;QACd,IAAI,CAAC,wBAAwB,EAAE;;;IAI3B,wBAAwB,GAAA;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU;QAErD,IAAI,CAAC,MAAM,EAAE;YACT;;AAGJ,QAAA,MAAM,CAAC,MAAM,GAAG,aAAa;AAC7B,QAAA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;QAEhC,MAAM,CAAC,YAAY,EAAE;;;AAIjB,IAAA,sBAAsB,CAAC,sBAAmC,EAAA;QAC9D,IAAI,CAAC,sBAAsB,EAAE;YACzB;;QAEJ,MAAM,MAAM,GAAG,sBAAsB,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC7D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;;8GAhEjD,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAJtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,CAAC,4BAA4B,CAAC,sEAmB3B,UAAU,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIV,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAInB,eAAe,EAAU,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,EAZtC,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAW,gDAhBZ,sDAAsD,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKvD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,sDAAsD;oBAChE,SAAS,EAAE,CAAC,4BAA4B,CAAC;oBACzC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACf,iBAAA;8EAaG,kBAAkB,EAAA,CAAA;sBADjB,SAAS;uBAAC,WAAW;gBAKtB,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,UAAU;gBAKxB,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,mBAAmB;gBAK7B,gBAAgB,EAAA,CAAA;sBADnB,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;ACrEvD;;AAEG;MAEU,gBAAgB,CAAA;;AAOzB,IAAA,WAAA,CAAY,cAA8B,EAAA;AACtC,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,cAAc;;AAGvD;;AAEG;IACH,OAAO,qBAAqB,CAAC,GAA8B,EAAA;AACvD,QAAA,MAAM,UAAU,GAAG,CAAC,cAA8B,KAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC;AAC5D,QAAA,OAAO,UAAU;;8GAjBZ,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACHlC;;;;;AAKG;AAEU,MAAA,4BAA4B,GAAa;AAClD,IAAA,OAAO,EAAE,uBAAuB;AAChC,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB;;AAG1D;;;;;;;;;;;;AAYG;MAQU,wBAAwB,CAAA;AAPrC,IAAA,WAAA,GAAA;;QAUI,IAAI,CAAA,IAAA,GAAc,MAAM;AAC3B;8GAJY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAJtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,CAAC,4BAA4B,CAAC,0BAD/B,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKH,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,EAAE;oBACZ,SAAS,EAAE,CAAC,4BAA4B,CAAC;oBACzC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACf,iBAAA;8BAIG,IAAI,EAAA,CAAA;sBADH;;;ACVL;;;;;;;;;;;AAWG;MAoBU,mBAAmB,CAAA;;IAE5B,IACI,KAAK,CAAC,KAAU,EAAA;QAChB,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC;;AAElD,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK;;;IAY/C,IACI,sBAAsB,CAAC,wBAAiD,EAAA;AACxE,QAAA,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,EAAE,aAAa,CAAC;;;AAUvE,IAAA,WAAA,CACa,WAAwC,EACzC,SAAoB,EAClB,eAAwC,EACxC,iBAAmC,EAAA;QAHpC,IAAW,CAAA,WAAA,GAAX,WAAW;QACZ,IAAS,CAAA,SAAA,GAAT,SAAS;QACP,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;;QAV/B,IAAkB,CAAA,kBAAA,GAA+B,EAAE;;QAGnD,IAAiB,CAAA,iBAAA,GAA+B,EAAE;AAS9C,QAAA,QAAQ,CACJ,CAAA;AACkE,6EAAA,CAAA,CACrE;;;IAIL,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;AAClC;;;AAGG;AACH,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC;;;IAIxD,kBAAkB,GAAA;QACd,IAAI,CAAC,iCAAiC,EAAE;;AAG5C;;;AAGG;AACH,IAAA,gBAAgB,CAAC,QAAiB,EAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,gBAAgB,CAAC,QAAQ,CAAC;QACzD,IAAI,CAAC,iBAAiB,EAAE;;;AAI5B,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;;AAItB,IAAA,WAAW,CAAC,KAAoB,EAAA;;QAE5B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE;gBACzC,KAAK,CAAC,cAAc,EAAE;;;;;IAM1B,iCAAiC,GAAA;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAClE,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,EAAE;AAC5B,SAAC,CAAC;;;AAIE,IAAA,qBAAqB,CAAC,qBAAkC,EAAA;QAC5D,IAAI,CAAC,qBAAqB,EAAE;YACxB;;QAGJ,MAAM,YAAY,GAAG,qBAAqB,CAAC,aAAa,CAAC,OAAO,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,KAAK,CAAC;;;IAIvD,mBAAmB,GAAA;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC7C,QAAA,MAAM,eAAe,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;;AAGpF,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;QAE3B,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;YAClC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;gBAC5B;;AAEJ,YAAA,IAAI,KAAK,GAAG,eAAe,EAAE;AACzB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEvC,YAAA,IAAI,KAAK,GAAG,eAAe,EAAE;AACzB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAE1C,SAAC,CAAC;;;AAIE,IAAA,aAAa,CAAC,KAAc,EAAA;QAChC,OAAO,KAAK,YAAY,wBAAwB;;;AAI5C,IAAA,aAAa,CAAC,KAAc,EAAA;QAChC,OAAO,KAAK,YAAY,wBAAwB;;;IAI5C,iBAAiB,GAAA;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,IAAI,EAAE;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE;AAC1C,QAAA,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACpC,YAAA,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,KAAK,IAAI;AACrE,SAAC,CAAC;;;AAIE,IAAA,0BAA0B,CAAC,SAAiB,EAAA;AAChD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,SAAS,CAAC;;8GA/IjE,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAoC,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAPjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA;YACP,UAAU;AACV,YAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACnG,YAAA,+BAA+B;AAClC,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAkBa,wBAAwB,EAJrB,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,uBAAuB,EAQ7B,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,cAAc,2BAAU,UAAU,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAApC,IAAA,CAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/EjD,wwDAuCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDmBc,gBAAgB,EAAE,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,gKAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEtE,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnB/B,SAAS;+BACI,iBAAiB,EAAA,aAAA,EAGZ,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAC/B,cAAA,EAAA;AACZ,wBAAA;AACI,4BAAA,SAAS,EAAE,YAAY;AACvB,4BAAA,MAAM,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc;AAClF;qBACJ,EACU,SAAA,EAAA;wBACP,UAAU;AACV,wBAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACnG,wBAAA,+BAA+B;qBAClC,EACQ,OAAA,EAAA,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,wwDAAA,EAAA;8JAK5E,KAAK,EAAA,CAAA;sBADR;gBAUD,SAAS,EAAA,CAAA;sBADR,eAAe;uBAAC,uBAAuB;gBAKxC,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,wBAAwB;gBAKlC,sBAAsB,EAAA,CAAA;sBADzB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;MEpEtC,wBAAwB,CAAA;8GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAHvB,OAAA,EAAA,CAAA,mBAAmB,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,wBAAwB,CACrG,EAAA,OAAA,EAAA,CAAA,mBAAmB,EAAE,wBAAwB,EAAE,wBAAwB,CAAA,EAAA,CAAA,CAAA;+GAExE,wBAAwB,EAAA,OAAA,EAAA,CAHvB,mBAAmB,EAA4B,4BAA4B,CAAA,EAAA,CAAA,CAAA;;2FAG5E,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,wBAAwB,CAAC;AAChH,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,wBAAwB;AACpF,iBAAA;;;ACLD;;AAEG;MAEU,mBAAmB,CAAA;;AAiB5B,IAAA,WAAA,CAAY,cAA8B,EAAA;AAX1C;;AAEG;AACH,QAAA,IAAA,CAAA,gBAAgB,GAAqB,gBAAgB,CAAC,oBAAoB;AAE1E;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAA0C,IAAI,GAAG,EAAE;AAIxD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,cAAc;;AAGvD;;AAEG;IACH,OAAO,qBAAqB,CACxB,GAAiC,EAAA;AAEjC,QAAA,MAAM,UAAU,GAAG,CAAC,cAA8B,KAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,mBAAmB,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC;AAC/D,QAAA,OAAO,UAAU;;8GA7BZ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA,CAAA;;2FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC+DrB,MAAA,SAAS,GAAG,IAAI,cAAc,CAAS,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;MAI1E,iCAAiC,CAAA;AAC1C;;;;AAIG;AACH,IAAA,WAAA,CACW,MAAyB,EACzB,aAA4C;;QAD5C,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAa,CAAA,aAAA,GAAb,aAAa;;AAE3B;AAGK,MAAgB,iBAAkB,SAAQ,mBAAmB,CAAA;;AAkC/D,IAAA,IACI,UAAU,CAAC,KAAsC,EAAA;AAErD,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW;;;IA+C3B,IACI,KAAK,CAAC,KAAU,EAAA;AAChB,QAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;;AAG/B,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;;IA8F3B,IAAI,SAAS,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAE5B,IAAI,CAAC,SAAS,EAAE;;;AAIpB,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI,EAAE;;;AAIrC,IAAA,IAAI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;;;AAI7C,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC;;;AAgH1C,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;;QAvSX,IAAa,CAAA,aAAA,GAAU,EAAE;;QAIzB,IAAS,CAAA,SAAA,GAAG,OAAO;AAEnB;;;AAGG;QAEH,IAAe,CAAA,eAAA,GAAG,KAAK;;QAWvB,IAAY,CAAA,YAAA,GAAG,IAAI;;QAYnB,IAAM,CAAA,MAAA,GAAG,KAAK;;QAQd,IAAK,CAAA,KAAA,GAAG,KAAK;;QAYb,IAAiB,CAAA,iBAAA,GAAG,KAAK;;QAIzB,IAAsB,CAAA,sBAAA,GAAkB,OAAO;;QAI/C,IAAU,CAAA,UAAA,GAAG,KAAK;AAWlB;;;;;AAKG;QAEH,IAAe,CAAA,eAAA,GAAoB,UAAU;;QAmB7C,IAA0B,CAAA,0BAAA,GAAG,IAAI;;AAIjC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAqC;;AAIvE,QAAA,IAAA,CAAA,YAAY,GAA0B,IAAI,YAAY,EAAW;;;AAIvD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;;;AAI1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;;AAInD,QAAA,IAAA,CAAA,kBAAkB,GAAwB,IAAI,YAAY,EAAS;;QAmEnE,IAAM,CAAA,MAAA,GAAG,KAAK;AAQd;;;AAGG;QACH,IAAgB,CAAA,gBAAA,GAA2B,EAAE;;QAG7C,IAAoB,CAAA,oBAAA,GAA2B,EAAE;AAoBjD;;;AAGG;AACH,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAW;;AAGnC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;;AAGX,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAGjD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,aAAa,EAAE;;QAGpC,IAAY,CAAA,YAAA,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAYlE,QAAA,IAAA,CAAA,iBAAiB,GAAqB,IAAI,CAAC,mBAAmB,CAAC,gBAAgB;;QAG/E,IAAe,CAAA,eAAA,GAAwB,IAAI;;AAG3C,QAAA,IAAA,CAAA,QAAQ,GAAgB,IAAI,CAAC,UAAU,CAAC,aAAa;AAE7D;;;AAGG;AACc,QAAA,IAAA,CAAA,eAAe,GAAa;YACzC,SAAS;YACT,MAAM;YACN,KAAK;YACL,OAAO;YACP,GAAG;YACH,KAAK;YACL,QAAQ;YACR,WAAW;YACX,UAAU;YACV,UAAU;YACV;SACH;;AAYgB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;;AAG7B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;;AAGrC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,mBAAmB,EAAE;;AAuUhD,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,KAAU,KAAa,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG7D,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,KAAU,KAAY;AAC1C,YAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACrB,gBAAA,OAAO,KAAK,CAAC,aAAa,IAAI,EAAE;;iBAC7B,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/C,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AAE5D,gBAAA,OAAO,UAAU,CAAC,WAAW,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW;;iBACzD;AACH,gBAAA,OAAO,KAAK;;AAEpB,SAAC;QA/UG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc;;;AAIlE,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;QAE9C,IAAI,gBAAgB,EAAE;AAClB,YAAA,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,YAAY,CAAC;;;;IAKjE,eAAe,GAAA;QACX,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAgB,KAAI;AACvC,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CACxD,IAAI,EACJ,yCAAyC,CAC5C;SACJ,CAAC,CACL;QACD,KAAK,CAAC,eAAe,EAAE;;;IAI3B,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;AAEnB,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,UAA2C,CAAC,KAAK,EAAE;;AAG7D,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;;;;AAK1C,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC;AAC3C,QAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,gBAAgB,EAAE;;;AAI3B,IAAA,uBAAuB,CAAC,MAAe,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;QAC3B,IAAI,CAAC,MAAM,EAAE;YACT,IAAI,CAAC,SAAS,EAAE;;AAEpB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;;;AAInC,IAAA,aAAa,CAAC,MAAe,EAAA;QACzB,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE;;QAErC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC;;;IAIvD,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,YAAY,EAAE;;;IAIvB,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;QACnB,IAAI,CAAC,mBAAmB,EAAE;AAE1B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,YAAY,EAAE;;;AAIvB,IAAA,QAAQ,CAAC,MAAe,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;YACpB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGhC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;;QAG9B,IAAI,CAAC,YAAY,EAAE;;;AAIvB,IAAA,iBAAiB,CAAC,IAAA,GAAe,IAAI,CAAC,SAAS,EAAA;QAC3C,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,IAAI,EAAE;;AAGf,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE;AACrB,QAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;AAEtB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;;aAC7B;YACH,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC;;AAG7C,QAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;QAElB,IAAI,CAAC,YAAY,EAAE;;AAGvB;;;AAGG;AACH,IAAA,oBAAoB,CAAC,MAAe,EAAA;QAChC,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;;AAG9B,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;;AACnB,aAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGxB,QAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAAK,EAAE;;AAGlD;;;AAGG;AACH,IAAA,qBAAqB,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;;QAGJ,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;YACtC,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;YAGvB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;AACnC,gBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;;AAChC,iBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACrB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;;;aAEzB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;YAC3C,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;;aACtB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACxC,IAAI,CAAC,0BAA0B,EAAE;;AAC9B,aAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,EAAE;AACtE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnB,MAAM,YAAY,GACd,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC;AACzC,gBAAA,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;gBACpC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;YACpC,IAAI,YAAY,EAAE;;gBAEd,UAAU,CAAC,MAAK;AACZ,oBAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,wBAAA,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;;AAE5C,iBAAC,CAAC;;;;;AAMd,IAAA,qBAAqB,CAAC,SAA+B,EAAA;AACjD,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAAK,EAAE;;;;AAKtD,IAAA,YAAY,CAAC,SAAkB,EAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;;IAI9B,WAAW,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,SAAS,GAAI,IAAI,CAAC,UAAoB,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;;AAG9E;;;AAGG;IACH,gBAAgB,GAAA;QACZ,MAAM,KAAK,GAAG,IAAI,iCAAiC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;AAErE,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGpC;;;;;AAKG;AACO,IAAA,QAAQ,CAAC,KAAU,EAAE,YAAY,GAAG,IAAI,EAAA;AAC9C,QAAA,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC;QAC3C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC;QAChD,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,gBAAgB,EAAE;;;IAIjB,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE;YAC7B;;AAGJ,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC1C,YAAA,MAAM,MAAM,GAAG,CAAC,IAA0B,KACtC,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY;YAC9D,MAAM,yBAAyB,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC;AAC7E,YAAA,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,iBAAiB,CAAC;AACxE,YAAA,MAAM,UAAU,GAAG,yBAAyB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY;YACnG,IAAI,yBAAyB,KAAK,CAAC,CAAC,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE;AAC9D,gBAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAgC,KAAI;AACpF,oBAAA,UAAU,CAAC,QAAQ,GAAG,IAAI;AAC1B,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9C,iBAAC,CAAC;;iBACC,IACH,IAAI,CAAC,YAAY;gBACjB,UAAU,KAAK,IAAI,CAAC,YAAY;AAChC,gBAAA,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAC5D;gBACE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;;AAEzD,YAAA,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;gBAChB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACrD,gBAAA,UAAU,CAAC,SAAS,CAAC,CAAC,QAAQ,GAAG,IAAI;;;QAI7C,IAAI,CAAC,aAAa,EAAE;;;AAIxB,IAAA,IAAc,EAAE,GAAA;QACZ,OAAO,IAAI,CAAC,UAA0C;;;IAIhD,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAAK,EAAE;;;AAIxC,IAAA,0BAA0B,CAAC,YAAoB,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC;;AAG9E;AACmC;AACzB,IAAA,cAAc,CAAC,KAA6B,EAAA;QAClD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAA0B,EAAE,CAAC;;AAGzG;;;AAGG;AACO,IAAA,iCAAiC,CAAI,KAAU,EAAA;QACrD,MAAM,KAAK,GAA2B,EAAE;AAExC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,QAAQ,EAAE;gBACX;;AAGJ,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAClB,gBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;;YAGxB,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG9B,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAClC,YAAA,MAAM,UAAU,GAAyB;AACrC,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE;aACZ;AAED,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC;YAE/B,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC7C,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,qCAAqC,CAAC,YAAY,CAAC;;iBAC3E;gBACH,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,mCAAmC,CAAC,YAAY,CAAC;;AAGhF,YAAA,OAAO,UAAU;AACrB,SAAC,CAAC;;AAmBN;AAC+G;AACvG,IAAA,gBAAgB,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;AACpE,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;YACnB;;QAGJ,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC;AACnE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,WAAW,CAAC;QAC/E,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM;QACrG,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAE5C,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;;QAGzC,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,KAAK,CAAC;AACjG,QAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;;;;AAK7B,IAAA,qBAAqB,CAAC,EAAmC,EAAA;AAC7D,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAE1B,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,UAA2C,CAAC,KAAK,EAAE;AAEzD,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAClC,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;;;QAInC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;;;AAIvC,IAAA,eAAe,CAAC,EAAmC,EAAA;QACvD,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7C,IAAI,gBAAgB,GAAG,IAAI;AAE3B,QAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qEAAA,CAAuE,CAAC;;AAG5F,QAAA,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAEzC;;;;AAIG;AACH,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,YAAY,EAAE;QACzC,MAAM,KAAK,GAAG;AACT,aAAA,IAAI;AACJ,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACjD,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAChB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnB,IAAI,CAAC,oBAAoB,EAAE;gBAE3B;;iBACG;AACH,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS;;AAG5C,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,UAAgC,KAAI;gBAC1F,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAClD,CAAC,YAAkC,KAAK,YAAY,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAC5E;gBACD,IAAI,eAAe,EAAE;AACjB,oBAAA,UAAU,CAAC,QAAQ,GAAG,eAAe,CAAC,QAAQ;;AAElD,gBAAA,OAAO,UAAU;AACrB,aAAC,CAAC;YAEF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,YAAY;YAEjG,IAAI,gBAAgB,EAAE;AAClB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,gBAAgB;gBACjD,gBAAgB,GAAG,KAAK;;AAG5B,YAAA,MAAM,yBAAyB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM;AAClE,YAAA,IAAI,yBAAyB,GAAG,CAAC,EAAE;AAC/B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,yBAAyB,EAAE,CAAC,EAAE,EAAE;oBAChD,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBACvD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAE9F,oBAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;wBACZ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,IAAI;;;;AAKlD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC;YAEhD,IAAI,CAAC,YAAY,EAAE;AACvB,SAAC,CAAC;AACN,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAE/B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAExF,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AACxD,QAAA,MAAM,UAAU,GAAe;YAC3B,OAAO,EAAE,IAAI,CAAC;SACjB;AAED,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY;;AAG9C,QAAA,cAAc,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC;QACrD,cAAc,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC;;AAGvE,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE;AACrB,QAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;AAErB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;;aACxB;YACH,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC;;AAG7C,QAAA,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;AAEzB,QAAA,OAAO,cAAc;;;IAIjB,oBAAoB,GAAA;QACxB,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB;QAExC,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;;AAGjC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;;;IAIpE,gBAAgB,GAAA;QACpB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,qBAAqB,EAAE;YACnD;;AAGJ,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO;AAEpB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,YAAY;AAC9C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB;QAE5C,IAAI,CAAC,YAAY,EAAE;;;IAIf,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc;AAChC,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAE/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB;AAC9C,QAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS;QAEtC,IAAI,CAAC,YAAY,EAAE;;;AAIf,IAAA,aAAa,CAAC,MAAuC,EAAA;AACzD,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,MAAsC;;AAGjD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,4BAA4B,CAAM,MAAM,CAAC;;AAGxD,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI,iCAAiC,CAAM,MAAM,CAAC;;AAG7D,QAAA,OAAO,SAAS;;;IAIZ,iBAAiB,GAAA;QACrB,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB;;AAGJ,QAAA,SAAS,CAAC,MAAM,EAAE,QAAQ;AACrB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;;;IAI7C,oBAAoB,GAAA;AACxB,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;AAC1B,QAAA,MAAM,IAAI,GAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAiB,CAAC,qBAAqB,EAAE;QACnG,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QAC1D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,GAAG,cAAc,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ;QAChG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE;;AAGvB;;;AAGG;AACK,IAAA,qBAAqB,CAAC,KAAY,EAAA;AACtC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AAErB,QAAA,MAAM,uBAAuB,GAAG,sBAAsB,CAAC,IAAI,CAAC;QAC5D,IAAI,uBAAuB,EAAE;AACzB,YAAA,OAAO,KAA+B;;AAG1C,QAAA,MAAM,mBAAmB,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5C,IAAI,mBAAmB,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;;AAGnD,QAAA,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC1C,IAAI,mBAAmB,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;;AAGrD,QAAA,OAAO,EAAE;;AAGb;;;AAGG;AACK,IAAA,4BAA4B,CAAC,KAAY,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,OAAO,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC;;aACjD,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC,qCAAqC,CAAC,KAAK,CAAC;;aACrD;AACH,YAAA,OAAO,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC;;;AAI9D;;;AAGG;AACK,IAAA,qCAAqC,CAAI,KAAU,EAAA;QACvD,MAAM,WAAW,GAA2B,EAAE;AAE9C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC/B,gBAAA,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBAC3B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;gBACvD,KAAK;gBACL,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI;AACpD,aAAA,CAAC;;AAGN,QAAA,OAAO,WAAW;;AAGtB;;;AAGG;AACK,IAAA,8BAA8B,CAAC,KAAY,EAAA;QAC/C,MAAM,WAAW,GAA2B,EAAE;AAC9C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC;AACb,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBAC3B,KAAK;gBACL,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI;AACpD,aAAA,CAAC;;AAGN,QAAA,OAAO,WAAW;;AAGtB;;;AAGG;AACK,IAAA,mCAAmC,CAAC,KAAY,EAAA;QACpD,MAAM,WAAW,GAA2B,EAAE;AAE9C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC/B,gBAAA,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBAC3B,KAAK;gBACL,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI;AACpD,aAAA,CAAC;;AAGN,QAAA,OAAO,WAAW;;AAGtB;;;AAGG;IACK,sBAAsB,GAAA;QAC1B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACtC,YAAA,QAAQ,QAAQ,CAAC,IAAI;AACjB,gBAAA,KAAK,oBAAoB;AACrB,oBAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,WAAW;oBAC9C;AACJ,gBAAA,KAAK,mBAAmB;AACpB,oBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,WAAW;oBAC7C;AACJ,gBAAA,KAAK,uBAAuB;AACxB,oBAAA,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,WAAW;oBACjD;AACJ,gBAAA,KAAK,sBAAsB;AACvB,oBAAA,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,WAAW;oBAChD;;AAEZ,SAAC,CAAC;;8GA59BY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAuJlB,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAiB,EARvB,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAAG,eAAa,sIAIiB,UAAU,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAnJjC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBADtC;wDAsBG,aAAa,EAAA,CAAA;sBADZ;gBAKD,SAAS,EAAA,CAAA;sBADR;gBAQD,eAAe,EAAA,CAAA;sBADd;gBAIG,UAAU,EAAA,CAAA;sBADb;gBASD,YAAY,EAAA,CAAA;sBADX;gBASD,WAAW,EAAA,CAAA;sBADV;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAKD,KAAK,EAAA,CAAA;sBADJ;gBAKD,QAAQ,EAAA,CAAA;sBADP;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAKD,iBAAiB,EAAA,CAAA;sBADhB;gBAKD,sBAAsB,EAAA,CAAA;sBADrB;gBAKD,UAAU,EAAA,CAAA;sBADT;gBAIG,KAAK,EAAA,CAAA;sBADR;gBAgBD,eAAe,EAAA,CAAA;sBADd;gBAKD,cAAc,EAAA,CAAA;sBADb;gBAQD,mBAAmB,EAAA,CAAA;sBADlB;gBAKD,SAAS,EAAA,CAAA;sBADR;gBAKD,0BAA0B,EAAA,CAAA;sBADzB;gBAKD,eAAe,EAAA,CAAA;sBADd;gBAKD,YAAY,EAAA,CAAA;sBADX;gBAKS,eAAe,EAAA,CAAA;sBAAxB;gBAIS,cAAc,EAAA,CAAA;sBAAvB;gBAID,kBAAkB,EAAA,CAAA;sBADjB;gBAKD,aAAa,EAAA,CAAA;sBADZ,SAAS;uBAACA,eAAa;gBAKxB,kBAAkB,EAAA,CAAA;sBADjB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAKrD,eAAe,EAAA,CAAA;sBADd,eAAe;uBAAC,iBAAiB;;;MCzOzB,uBAAuB,GAAG,IAAI,cAAc,CAAW,wBAAwB;;AC0BtF,MAAO,4BAA6B,SAAQ,cAAsC,CAAA;;AAqBpF,IAAA,WAAA,CAA6C,sBAA8C,EAAA;AACvF,QAAA,KAAK,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,cAAc,CAAC;AAlBnE;;;;AAIG;QACH,IAAY,CAAA,YAAA,GAGP,IAAI;;AAGT,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc;;;IAW/C,QAAQ,GAAA;QACJ,IAAI,CAAC,gCAAgC,EAAE;;;IAI3C,YAAY,GAAA;AACR,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE;QAE7C,IAAI,eAAe,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE;AACnC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;YAC9B;;AAGJ,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;;;IAIjC,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QACxB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;;;IAIvD,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;;;AAI3B,IAAA,aAAa,CAAC,IAAa,EAAA;QAC/B,IAAI,CAAC,IAAI,EAAE;YACP;;QAGJ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE;cACvD,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB;cACxC,EAAE;QACR,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE;YACvC,IAAI,CAAC,KAAK,EAAE;;;;IAKZ,gCAAgC,GAAA;QACpC,IAAI,CAAC,UAAU,CAAC;AACX,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;;;IAIlD,KAAK,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC3D,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,eAAe,EAAE,IAAI;YACrB,GAAG,IAAI,CAAC,YAAY;AACpB,YAAA,sBAAsB,EAAE,KAAK;AAC7B,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;AAC/B,SAAA,CAAC;;AArFG,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,kBAqBjB,uBAAuB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGArBlC,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChCzC,8wFAoDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/BQ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAX,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGZ,SAAS,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB+B,iBAAe,EAAA,QAAA,EAAA,kDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAGf,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGV,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAhBxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAEpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,YAAY;wBACZ,cAAc;wBACd,iBAAiB;wBACjB,SAAS;wBACT,gBAAgB;wBAChBA,iBAAe;wBACf,aAAa;wBACb,kBAAkB;wBAClB;AACH,qBAAA,EAAA,QAAA,EAAA,8wFAAA,EAAA;;0BAuBY,MAAM;2BAAC,uBAAuB;yCAnBd,cAAc,EAAA,CAAA;sBAA1C,SAAS;uBAAC,gBAAgB;;;ME3BlB,iCAAiC,CAAA;8GAAjC,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAjC,iCAAiC,EAAA,OAAA,EAAA,CAHhC,4BAA4B,CAAA,EAAA,OAAA,EAAA,CAC5B,4BAA4B,CAAA,EAAA,CAAA,CAAA;AAE7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,YAHhC,4BAA4B,CAAA,EAAA,CAAA,CAAA;;2FAG7B,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAJ7C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,4BAA4B,CAAC;oBACvC,OAAO,EAAE,CAAC,4BAA4B;AACzC,iBAAA;;;ACmCD,IAAI,uBAAuB,GAAG,KAAK;AAEnC;;;;;;AAMG;AAsCG,MAAO,sBAAuB,SAAQ,iBAAiB,CAAA;;IAoBzD,WACa,CAAA,wBAAiD,EACd,UAA0C,EACrE,iBAAmC,EACnC,SAAmB,EAC3B,sBAA8C,EAAA;AAEvD,QAAA,KAAK,EAAE;QANE,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACW,IAAU,CAAA,UAAA,GAAV,UAAU;QACrC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAS,CAAA,SAAA,GAAT,SAAS;QACjB,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;AAZnC;;;AAGG;QACH,IAAoB,CAAA,oBAAA,GAA2B,EAAE;AAY7C,QAAA,IAAI,CAAC,uBAAuB,IAAI,SAAS,EAAE,EAAE;YACzC,QAAQ,CACJ,CAAgH,8GAAA,CAAA,CACnH;YACD,uBAAuB,GAAG,IAAI;;;;IAKtC,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;QAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU;;AAEpG,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC1E,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAuB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC;;;;IAKvF,eAAe,GAAA;QACX,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,gBAAgB,EAAE;;QAG3B,IAAI,CAAC,uBAAuB,EAAE;;;AAIlC,IAAA,eAAe,CAAC,IAA0B,EAAA;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;AAEjD,QAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;AACZ,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;;aACjC;YACH,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;;AAG5C,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;QAE9B,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;YACnC,IAAI,CAAC,mBAAmB,EAAE;;QAG9B,IAAI,CAAC,aAAa,EAAE;;;IAIxB,uBAAuB,CAAC,KAAiB,EAAE,KAAa,EAAA;QACpD,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;;;AAI9B,IAAA,cAAc,CAAC,KAAwB,EAAA;AACnC,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3C,IAAI,CAAC,KAAK,EAAE;;;;AAKpB,IAAA,0BAA0B,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,EAAA;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;QAClD,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;;AAI3B;;;;AAIK;AACL,IAAA,oBAAoB,CAAC,MAAe,EAAA;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;AACpE,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;QAE3B,IAAI,CAAC,gBAAgB,EAAE;;;AAI3B,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AACjC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;YACjE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;;;;IAK/C,WAAW,CAAC,KAA2B,EAAE,KAAkB,EAAA;QACvD,IAAI,KAAK,EAAE;YACP,KAAK,CAAC,cAAc,EAAE;;AAE1B,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;;;IAI/B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;cACnB,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC;AAC5F,cAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,KAC3B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAC3E;AAEP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE;;;AAIvB,IAAA,MAAM,CAAC,KAAiB,EAAA;AACpB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B;QACjD,IAAI,MAAM,EAAE;YACR,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,qCAAqC,CAAC;YACtE,IAAI,MAAM,EAAE;gBACR;;AAEJ,YAAA,IACI,IAAI,CAAC,YAAY,EAAE,MAAM,KAAK,CAAC;gBAC/B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS;gBAC7C,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,EAChC;gBACE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;;AAE9C,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;;AAI3B;;;AAGG;AACH,IAAA,0BAA0B,CAAC,IAAgB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAE3B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb;;AAGJ,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;AAIxB,IAAA,oBAAoB,CAAC,KAAoB,EAAA;QACrC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;YAClC,IAAI,CAAC,mBAAmB,EAAE;;aACvB,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;YAC1F,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;;AAC7B,aAAA,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;YACxE,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;;aAC5B,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACd,IAAI,CAAC,KAAK,EAAE;;AAEhB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;;aACxB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;;;;IAKnC,eAAe,CAAC,KAAiB,EAAE,KAAa,EAAA;AAC5C,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE;;;AAIhB,IAAA,aAAa,CAAC,KAAY,EAAA;AACtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;;;;AAK9C,IAAA,aAAa,CAAC,MAA8B,EAAA;AACxC,QAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,MAAM,CAAC;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;;;IAIlC,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;AAG/B;;;AAGG;IACK,qBAAqB,CAAC,KAAiB,EAAE,KAAa,EAAA;;QAE1D,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ;QACxD,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;AACvD,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE;QAC7B,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC,GAAG,KAAI;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACtC,YAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,cAAc,EAAE;AACrC,gBAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;;AAElB,oBAAA,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;;qBAC3B;;AAEH,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;;AAE3C,gBAAA,OAAO,CAAC,QAAQ,GAAG,cAAc;;AAEzC,SAAC,CAAC;QACF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;;QAE9F,MAAM,YAAY,GAAG,IAAI,GAAG,CAAc,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACxF,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC;AACjG,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAE1B,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,UAAU;YACrD,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW;;;AAI1D,IAAA,0BAA0B,CAAC,IAA0B,EAAA;AACzD,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;;;IAIzG,kBAAkB,GAAA;AACtB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC;;AAGzE,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa;;;AAItB,IAAA,gBAAgB,CAAC,YAAsB,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,YAAY,EAAE;AAC9B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACxC,IAAI,CAAC,kBAAkB,EAAE;;;;AAKzB,IAAA,MAAM,gBAAgB,GAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC7B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACjE,MAAM,EAAE,IAAI,CAAC;AAChB,SAAA,CAAC;QAEF,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CAChD,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAChF,4BAA4B,EAC5B;YACI,YAAY,EAAE,IAAI,CAAC;AACtB,SAAA,EACD,EAAE,QAAQ,EAAE,CACf;;AAzSI,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,yDAsBP,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA9B,IAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAtB7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EA9BpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE,sBAAsB;AACnC,gBAAA,KAAK,EAAE;AACV,aAAA;AACD,YAAA,+BAA+B;AAClC,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiCU,kBAAkB,ECjGjC,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+yYA0RA,EDxNQ,MAAA,EAAA,CAAA,g8GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,oJAChB,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,uBAAuB,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,oBAAoB,EACpB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,8BAA8B,EAC9B,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,yhBAChB,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,kBAAkB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,oBAAoB,EACpB,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,qIACrB,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkB,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACVY,mBAAiB,EAGjB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,eAAe,oDACf,uBAAuB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGlB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBApClC,SAAS;+BACI,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAAwB,sBAAA;AACnC,4BAAA,KAAK,EAAE;AACV,yBAAA;AACD,wBAAA,+BAA+B;qBAClC,EACQ,OAAA,EAAA;wBACL,gBAAgB;wBAChB,gBAAgB;wBAChB,uBAAuB;wBACvB,oBAAoB;wBACpB,8BAA8B;wBAC9B,gBAAgB;wBAChB,cAAc;wBACd,kBAAkB;wBAClB,oBAAoB;wBACpB,WAAW;wBACX,qBAAqB;wBACrB,oBAAoB;wBACpB,UAAU;wBACVA,mBAAiB;wBACjB,OAAO;wBACP,sBAAsB;wBACtB,mBAAmB;wBACnB,eAAe;wBACf;AACH,qBAAA,EAAA,QAAA,EAAA,+yYAAA,EAAA,MAAA,EAAA,CAAA,g8GAAA,CAAA,EAAA;;0BAwBI;;0BAAY,MAAM;2BAAC,cAAc;sIAnBtC,qBAAqB,EAAA,CAAA;sBADpB,SAAS;uBAAC,uBAAuB;gBAK1B,YAAY,EAAA,CAAA;sBADnB,SAAS;uBAAC,cAAc;gBAKzB,UAAU,EAAA,CAAA;sBADT,SAAS;uBAAC,kBAAkB;;;ME1FpB,2BAA2B,CAAA;8GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAA3B,2BAA2B,EAAA,OAAA,EAAA,CAH1B,sBAAsB,CAAA,EAAA,OAAA,EAAA,CACtB,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAEvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAH1B,sBAAsB,CAAA,EAAA,CAAA,CAAA;;2FAGvB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,OAAO,EAAE,CAAC,sBAAsB;AACnC,iBAAA;;;MCEY,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAApB,oBAAoB,EAAA,OAAA,EAAA,CAHnB,eAAe,CAAA,EAAA,OAAA,EAAA,CACf,eAAe,CAAA,EAAA,CAAA,CAAA;AAEhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAHnB,eAAe,CAAA,EAAA,CAAA,CAAA;;2FAGhB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,eAAe,CAAC;oBAC1B,OAAO,EAAE,CAAC,eAAe;AAC5B,iBAAA;;;ACHD;;AAEG;MAGU,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEI;;AAEG;QACH,IAAc,CAAA,cAAA,GAAG,WAAW;AAE5B;;AAEG;QACH,IAAc,CAAA,cAAA,GAAG,WAAW;AAM/B;8GAfY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCRrB,iCAAiC,GAAG,CAAC,KAAoB,EAAE,IAAY,KAAY;AAC5F,IAAA,KAAK,GAAG,KAAK,IAAI,CAAC;AAClB,IAAA,MAAM,YAAY,GAAG,CAAG,EAAA,IAAI,CAAE,CAAA,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5C,IAAA,MAAM,aAAa,GAAG,CAAG,EAAA,KAAK,CAAE,CAAA,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9C,IAAA,MAAM,kBAAkB,GAAG,YAAY,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC;AACjE,IAAA,MAAM,mBAAmB,GAAG,aAAa,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;IACpE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;AAExE,IAAA,OAAO,MAAM,CAAC,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;AACzD;AAEa,MAAA,sBAAsB,GAAG,CAAC,KAAa,KAAY;IAC5D,MAAM,SAAS,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,QAAQ,EAAE;AACzC,IAAA,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM;AACjD;;ACNA;MACa,oBAAoB,CAAA;AAC7B;;;;AAIG;AACH,IAAA,WAAA;;IAEW,MAAS;;IAET,OAAU,EAAA;QAFV,IAAM,CAAA,MAAA,GAAN,MAAM;QAEN,IAAO,CAAA,OAAA,GAAP,OAAO;;AAErB;IAEW;AAAZ,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACnB,CAAC,EAJW,cAAc,KAAd,cAAc,GAIzB,EAAA,CAAA,CAAA;AAKD,MAAM,wBAAwB,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC;AAEnG;;;;AAIG;AAEG,MAAgB,kBAAmB,SAAQ,SAAS,CAAA;AAD1D,IAAA,WAAA,GAAA;;;QA2EI,IAAU,CAAA,UAAA,GAAG,CAAC;;QAId,IAAU,CAAA,UAAA,GAAG,KAAK;AAWlB;;AAEG;AAEH,QAAA,IAAA,CAAA,cAAc,GAAW,MAAM,CAAC,eAAe,CAAC,CAAC,cAAc;AAE/D;;AAEG;AAEH,QAAA,IAAA,CAAA,cAAc,GAAW,MAAM,CAAC,eAAe,CAAC,CAAC,cAAc;;AAI/D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAwB;;QAMtD,IAAY,CAAA,YAAA,GAAG,IAAI;;QAGnB,IAAY,CAAA,YAAA,GAAG,IAAI;AAEnB;;AAEG;QACH,IAAY,CAAA,YAAA,GAAG,KAAK;;AAQX,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAwB,IAAI,CAAC;;AAG7C,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;YAE5B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE;YAE7C,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,KAAM,CAAC,EAAE;AAC5C,gBAAA,OAAO,IAAI;;YAEf,IAAI,KAAK,IAAI,KAAK,KAAK,cAAc,CAAC,IAAI,EAAE;gBACxC,OAAO,cAAc,CAAC,KAAK;;YAE/B,IAAI,KAAK,IAAI,KAAK,KAAK,cAAc,CAAC,KAAK,EAAE;gBACzC,OAAO,cAAc,CAAC,IAAI;;AAE9B,YAAA,OAAO,KAAK;AAChB,SAAC,CAAC;;AAGM,QAAA,IAAA,CAAA,IAAI,GAAW,MAAM,CAAC,SAAS;;AAG/B,QAAA,IAAA,CAAA,IAAI,GAAW,CAAC,MAAM,CAAC,SAAS;;QAGhC,IAAK,CAAA,KAAA,GAAG,CAAC;;QAST,IAAoB,CAAA,oBAAA,GAA0B,IAAI;;AAiBzC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;;QAG7B,IAAW,CAAA,WAAA,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAoPxE;;IA5ZG,IACI,KAAK,CAAC,KAAuB,EAAA;AAC7B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,+BAA+B,EAAE;;;AAG9C,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;;IAI3B,IACI,GAAG,CAAC,GAAW,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS;QACjD,IAAI,CAAC,sBAAsB,EAAE;;AAEjC,IAAA,IAAI,GAAG,GAAA;QACH,OAAO,IAAI,CAAC,IAAI;;;IAIpB,IACI,GAAG,CAAC,GAAW,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS;QAChD,IAAI,CAAC,sBAAsB,EAAE;;AAEjC,IAAA,IAAI,GAAG,GAAA;QACH,OAAO,IAAI,CAAC,IAAI;;;IAIpB,IACI,IAAI,CAAC,IAAY,EAAA;QACjB,IAAI,CAAC,6CAA6C,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;AACxE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,+BAA+B,EAAE;;AAE1C,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK;;;IAIrB,IACI,MAAM,CAAC,MAA6B,EAAA;AACpC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;QACrB,IAAI,CAAC,+BAA+B,EAAE;;;IAI1C,IACI,SAAS,CAAC,SAAiB,EAAA;QAC3B,IAAI,CAAC,6CAA6C,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC;AACxE,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;;AAE/B,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU;;;IAY1B,IACI,KAAK,CAAC,KAA4B,EAAA;AAClC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE3B,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;;;AAkCzB,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;;AA2C7C,IAAA,IAAY,aAAa,GAAA;AACrB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB;AAE9C,QAAA,IAAI,YAAY,YAAY,KAAK,EAAE;AAC/B,YAAA,OAAO,IAAI;;AAGf,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;YACvB,OAAO,IAAI,CAAC,MAAM;;AAGtB,QAAA,OAAO,YAAY;;;IASvB,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;QAEhB,IAAI,CAAC,+BAA+B,EAAE;QAEtC,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM;QAEnC,IAAI,CAAC,uBAAuB,EAAE;;AAGlC;;AAEG;AACH,IAAA,UAAU,CAAC,KAAa,EAAA;AACpB,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,yBAAyB,EAAE;;;AAIpC,IAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,wBAAwB,EAAE,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB;;QAEJ,MAAM,KAAK,GAAG,iCAAiC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAC/C,IAAI,CAAC,iBAAiB,EAAE;;;AAI5B,IAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,wBAAwB,EAAE,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB;;QAEJ,MAAM,KAAK,GAAG,iCAAiC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC;QAC1E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAC/C,IAAI,CAAC,iBAAiB,EAAE;;;IAI5B,iBAAiB,GAAA;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,EAAE,GAAG,IAAI,CAAC,UAAU;AAC9D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;;IAIvB,iBAAiB,GAAA;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,EAAE,GAAG,IAAI,CAAC,UAAU;AAC9D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAGvB;;AAEG;AACH,IAAA,YAAY,CAAC,KAAa,EAAA;QACtB,IAAI,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAEpD,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACvB,YAAA,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC;;;AAI5D,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;YACvB,IAAI,CAAC,uBAAuB,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;;aACxD;AACH,YAAA,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC;;;AAIlD;;AAEG;IACH,kBAAkB,GAAA;AACd,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa;AAEnC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,KAAK,QAAQ;AAEjD,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ;QAErB,IAAI,gBAAgB,EAAE;YAClB,IAAI,CAAC,gBAAgB,EAAE;;QAG3B,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,EAAE;YACvC,IAAI,CAAC,iBAAiB,EAAE;;;AAIhC;;AAEG;IACH,OAAO,GAAA;AACH,QAAA,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC;;;;QAI3B,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE;QAClE,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,YAAY,GAAG,cAAc,GAAG,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,YAAY,CAAC;;;AAI7D;;AAEG;IACH,MAAM,GAAA;AACF,QAAA,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,gBAAgB,EAAE;;;IAInB,uBAAuB,GAAA;AAC3B,QAAA,IAAI,CAAC;AACA,aAAA,YAAY;AACZ,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;AACZ,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY;YAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,KAAK,OAAO;AAC1C,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;gBAChC,IAAI,CAAC,YAAY,EAAE;;AAE3B,SAAC,CAAC;;;IAIF,iBAAiB,GAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;;;IAIhD,wBAAwB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;;;IAIjC,wBAAwB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;;AAGzC;;AAEG;AACK,IAAA,aAAa,CAAC,MAAmC,EAAA;;AAErD,QAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;AACpC,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;;QAE/D,OAAO,IAAI,CAAC,IAAI;;;IAIZ,gBAAgB,GAAA;AACpB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;;;AAIxB,IAAA,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;;AAE7C,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;;AAI1B,IAAA,YAAY,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,EAAE;QAC7C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;;;IAI/C,sBAAsB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAwC;;;IAI5D,kBAAkB,GAAA;AACtB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAC7C,QAAA,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,CAAC;AACnD,QAAA,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,CAAC;AAC/C,QAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE;;;IAInC,kBAAkB,CAAC,cAAsB,EAAE,YAAoB,EAAA;AACnE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,EAAE;QAC7C,IAAI,CAAC,OAAO,EAAE;YACV;;AAEJ,QAAA,OAAO,CAAC,iBAAiB,CAAC,cAAc,EAAE,YAAY,CAAC;;;IAInD,sBAAsB,GAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,EAAE;AAC5C,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI;;;IAItD,sBAAsB,GAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,EAAE;AAC5C,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI;;;IAItD,+BAA+B,GAAA;QACnC,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,sBAAsB,EAAE;;;AAIzB,IAAA,sBAAsB,CAAC,KAAa,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;;;IAIlD,6CAA6C,CAAC,SAAiB,EAAE,IAAY,EAAA;;AAEjF,QAAA,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,IAAI,CAAC;AACtD,QAAA,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,SAAS,CAAC;AAChE,QAAA,IAAI,iBAAiB,GAAG,sBAAsB,EAAE;AAC5C,YAAA,MAAM,KAAK,CACP,CAAuI,qIAAA,CAAA,CAC1I;;;;AAKD,IAAA,uBAAuB,CAAC,KAAqB,EAAA;AACjD,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;;;IAI7B,yBAAyB,GAAA;AAC7B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;8GAvalB,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBADvC;8BAeO,KAAK,EAAA,CAAA;sBADR;gBAaG,GAAG,EAAA,CAAA;sBADN;gBAWG,GAAG,EAAA,CAAA;sBADN;gBAWG,IAAI,EAAA,CAAA;sBADP;gBAYG,MAAM,EAAA,CAAA;sBADT;gBAQG,SAAS,EAAA,CAAA;sBADZ;gBAWD,UAAU,EAAA,CAAA;sBADT;gBAKD,UAAU,EAAA,CAAA;sBADT;gBAKG,KAAK,EAAA,CAAA;sBADR;gBAYD,cAAc,EAAA,CAAA;sBADb;gBAOD,cAAc,EAAA,CAAA;sBADb;gBAKD,WAAW,EAAA,CAAA;sBADV;;;ACxIL;;AAEG;MAKU,yBAAyB,CAAA;;AAElC,IAAA,WAAA,CAAgC,SAA6B,EAAA;QAA7B,IAAS,CAAA,SAAA,GAAT,SAAS;;AAEzC;;;AAGG;AAEH,IAAA,OAAO,CAAC,KAAiB,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YAChC;;AAGJ,QAAA,MAAM,KAAK,GAAW,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;AAC7E,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC;;AAGtC;;;AAGG;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YAChC;;AAEJ,QAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;;AAGvC;;;AAGG;IAEH,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;;AAG5B;;;AAGG;IAEH,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;;AAG3B;;;AAGG;AAEH,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YAChC;;QAEJ,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;QAE1B,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;QAE1B,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;AAClC,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;QAE1B,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;AAClC,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;;AAI9B;;;AAGG;AAEH,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;YAC3D;;QAEJ,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;aACtB;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;;AAIjC;;;AAGG;AACK,IAAA,UAAU,CAAC,CAAQ,EAAA;QACvB,CAAC,CAAC,eAAe,EAAE;QACnB,CAAC,CAAC,cAAc,EAAE;;8GAlGb,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAGgB;yCAOb,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;gBAejC,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,QAAQ;gBAatB,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO;gBAUrB,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,MAAM;gBAUpB,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;gBA4BnC,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;ACvFrC;;AAEG;MAEmB,qBAAqB,CAAA;AAD3C,IAAA,WAAA,GAAA;;AAcc,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAoB5C;;IAhBG,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;YACzB;;;QAIJ,KAAK,CAAC,GAAG;AACJ,aAAA,IAAI,CACD,SAAS,CAAC,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC,EAC7B,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAEzE,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAEtC,IAAI,CAAC,SAAS,EAAE;;8GA/BF,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAD1C;8BAkBG,KAAK,EAAA,CAAA;sBADJ,YAAY;uBAAC,WAAW;;;ACpB7B;;AAEG;AAKG,MAAO,2BAA4B,SAAQ,qBAAqB,CAAA;AAJtE,IAAA,WAAA,GAAA;;QAKqB,IAAS,CAAA,SAAA,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAW9E;;IARG,eAAe,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc;;;IAI1C,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;8GAVpB,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACND;;AAEG;AAKG,MAAO,2BAA4B,SAAQ,qBAAqB,CAAA;AAJtE,IAAA,WAAA,GAAA;;QAKqB,IAAS,CAAA,SAAA,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAW9E;;IARG,eAAe,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc;;;IAI1C,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;8GAVpB,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACMD;;;;;;;;;;;;AAYK;AAuBC,MAAO,wBAAyB,SAAQ,kBAAkB,CAAA;;IAK5D,WACgC,CAAA,QAAgB,EACnC,sBAA8C,EAAA;AAEvD,QAAA,KAAK,EAAE;QAHqB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAC3B,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;;AAKnC;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC3B,QAAA,OAAO,IAAI,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;;AAGhD;;AAEG;AACH,IAAA,WAAW,CAAC,KAAoB,EAAA;AAC5B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAChC,QAAA,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAK,EAAA,EAAA,SAAS,IAAI,SAAS,CAAA,CAAE,GAAG,SAAS;AAChF,QAAA,OAAO,YAAY,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;;AAG9D;;;;;AAKG;AACH,IAAA,sBAAsB,CAAC,KAAoB,EAAA;AACvC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAChC,QAAA,KAAK,GAAG,KAAK,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AACnB,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;;AAEnC,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAG7B;;AAEG;AACH,IAAA,qBAAqB,CAAC,KAAoB,EAAA;;AAEtC,QAAA,KAAK,GAAG,KAAK,IAAI,GAAG;QACpB,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AAC5C,QAAA,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,WAAW;;AAlDzC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,kBAMrB,SAAS,EAAA,EAAA,EAAA,KAAA,EAAAvC,IAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AANZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAhBtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAAA;YACP,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,wBAAwB,EAAE,KAAK,EAAE,IAAI,EAAE;AACtF,YAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,wBAAwB,EAAE;AACtE,YAAA,+BAA+B;AAClC,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxCL,+7EAoEA,ED1BQ,MAAA,EAAA,CAAA,o8+CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,8BAA8B,EAC9B,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqC,iBAAe,yIACf,2BAA2B,EAAA,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,mBAAmB,EACnB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,2BAA2B,EAC3B,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,4GACpB,oBAAoB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGf,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAtBpC,SAAS;+BACI,uBAAuB,EAAA,aAAA,EAGlB,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;wBACP,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,0BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE;AACtF,wBAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,0BAA0B,EAAE;AACtE,wBAAA,+BAA+B;qBAClC,EACQ,OAAA,EAAA;wBACL,8BAA8B;wBAC9BA,iBAAe;wBACf,2BAA2B;wBAC3B,yBAAyB;wBACzB,mBAAmB;wBACnB,2BAA2B;wBAC3B,oBAAoB;wBACpB;AACH,qBAAA,EAAA,QAAA,EAAA,+7EAAA,EAAA,MAAA,EAAA,CAAA,o8+CAAA,CAAA,EAAA;;0BAQI,MAAM;2BAAC,SAAS;gFAJZ,WAAW,EAAA,CAAA;sBAAnB;;;MElCQ,uBAAuB,CAAA;8GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,YAZ5B,2BAA2B;YAC3B,2BAA2B;YAC3B,yBAAyB;AACzB,YAAA,wBAAwB,aAGxB,2BAA2B;YAC3B,2BAA2B;YAC3B,yBAAyB;YACzB,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAGnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,YAT5B,wBAAwB,CAAA,EAAA,CAAA,CAAA;;2FASnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAdnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,2BAA2B;wBAC3B,2BAA2B;wBAC3B,yBAAyB;wBACzB;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,2BAA2B;wBAC3B,2BAA2B;wBAC3B,yBAAyB;wBACzB;AACH;AACJ,iBAAA;;;MCZY,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAApB,oBAAoB,EAAA,OAAA,EAAA,CAHnB,eAAe,CAAA,EAAA,OAAA,EAAA,CACf,eAAe,CAAA,EAAA,CAAA,CAAA;AAEhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAHnB,eAAe,CAAA,EAAA,CAAA,CAAA;;2FAGhB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,eAAe,CAAC;oBAC1B,OAAO,EAAE,CAAC,eAAe;AAC5B,iBAAA;;;MCCY,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAtB,sBAAsB,EAAA,OAAA,EAAA,CAHrB,iBAAiB,CAAA,EAAA,OAAA,EAAA,CACjB,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAElB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAHrB,iBAAiB,CAAA,EAAA,CAAA,CAAA;;2FAGlB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,iBAAiB,CAAC;oBAC5B,OAAO,EAAE,CAAC,iBAAiB;AAC9B,iBAAA;;;ACoBK,MAAO,2BAA+B,SAAQ,SAAS,CAAA;AACzD;;AAEG;IACH,IACI,KAAK,CAAC,KAAe,EAAA;AACrB,QAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAEzB,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;;AAa3B;;;;;AAKG;IACH,IACI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,QAAQ,CACJ,kCAAkC;YAC9B,8BAA8B;AAC9B,YAAA,sIAAsI,CAC7I;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAG1B,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;;AAiDzB;;;AAGG;IACH,IACI,KAAK,CAAC,KAA6B,EAAA;AACnC,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;;AAGvB,IAAA,IAAI,KAAK,GAAA;QACL,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE;;AAE1E,YAAA,OAAO,OAAO;;QAElB,OAAO,KAAK,CAAC,KAAK;;;AAgDtB,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;;QAnIX,IAAc,CAAA,cAAA,GAAG,IAAI;;QAuDrB,IAAS,CAAA,SAAA,GAAG,IAAI;;QAIhB,IAAM,CAAA,MAAA,GAAG,KAAK;AAEd;;;AAGG;QAEH,IAAS,CAAA,SAAA,GAAc,cAAc;AAmBrC;;;AAGG;QAEH,IAAe,CAAA,eAAA,GAAG,IAAI;;QAItB,IAAa,CAAA,aAAA,GAAG,IAAI;AAEpB;;;;AAIG;QAEH,IAAiB,CAAA,iBAAA,GAAG,KAAK;;AAkBhB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAW;AAY/C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;;;AAI3C;;AAEG;AACH,IAAA,gBAAgB,CAAC,IAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGhC;;;AAGG;AACH,IAAA,gBAAgB,CAAC,KAAQ,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE;AAC9C,gBAAA,IAAI,CAAC,KAAK,GAAG,OAAO;;iBACjB;gBACH,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS;;AAExF,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oCAAoC,CAAC;;QAEhE,IAAI,CAAC,SAAS,EAAE;;8GAlLX,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAHzB,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,2BAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAkJ3F,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,mBAAmB,uECzKlC,4/BA8BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDNc,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,0BAAA,EAAA,8BAAA,EAAA,0BAAA,EAAA,wBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEjC,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;+BACI,iBAAiB,EAAA,eAAA,EAEV,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,6BAA6B,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,WAC7F,CAAC,mBAAmB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,4/BAAA,EAAA;wDAOvC,KAAK,EAAA,CAAA;sBADR;gBAYD,IAAI,EAAA,CAAA;sBADH;gBAKD,cAAc,EAAA,CAAA;sBADb;gBAUG,QAAQ,EAAA,CAAA;sBADX;gBAmBD,cAAc,EAAA,CAAA;sBADb;gBAQD,cAAc,EAAA,CAAA;sBADb;gBAQD,YAAY,EAAA,CAAA;sBADX;gBAOO,WAAW,EAAA,CAAA;sBADlB;gBAKD,oBAAoB,EAAA,CAAA;sBADnB;gBAKD,SAAS,EAAA,CAAA;sBADR;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAQD,SAAS,EAAA,CAAA;sBADR;gBAQG,KAAK,EAAA,CAAA;sBADR;gBAkBD,eAAe,EAAA,CAAA;sBADd;gBAKD,aAAa,EAAA,CAAA;sBADZ;gBASD,iBAAiB,EAAA,CAAA;sBADhB;gBAQD,aAAa,EAAA,CAAA;sBADZ;gBAQD,WAAW,EAAA,CAAA;sBADV;gBAKQ,YAAY,EAAA,CAAA;sBADpB;gBAKD,mBAAmB,EAAA,CAAA;sBADlB,SAAS;uBAAC,mBAAmB;;;MElKrB,wBAAwB,CAAA;8GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAxB,wBAAwB,EAAA,OAAA,EAAA,CAHvB,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAC3B,2BAA2B,CAAA,EAAA,CAAA,CAAA;AAE5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAHvB,2BAA2B,CAAA,EAAA,CAAA,CAAA;;2FAG5B,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,2BAA2B,CAAC;oBACtC,OAAO,EAAE,CAAC,2BAA2B;AACxC,iBAAA;;;ACND;;AAEG;;;;"}
|