{"version":3,"file":"chips.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chip-tokens.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chip.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chip-default-options.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chip-input.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chip-list.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/chips/chips.module.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport type { SbbChip } from './chip';\nimport type { SbbChipList } from './chip-list';\n\n/**\n * Token used to provide a `SbbChipList` to `SbbChip`.\n * Used primarily to avoid circular imports between `SbbChipList` and `SbbChip`.\n */\nexport const SBB_CHIP_LIST = new InjectionToken<SbbChipList>('SBB_CHIP_LIST');\n\n/**\n * Token used to provide a `SbbChip` to `SbbChipList`.\n * Used primarily to avoid circular imports between `SbbChipList` and `SbbChip`.\n */\nexport const SBB_CHIP = new InjectionToken<SbbChip>('SBB_CHIP');\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport { BACKSPACE, DELETE } from '@angular/cdk/keycodes';\nimport {\n  afterNextRender,\n  ANIMATION_MODULE_TYPE,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostAttributeToken,\n  inject,\n  InjectionToken,\n  Injector,\n  Input,\n  NgZone,\n  numberAttribute,\n  OnDestroy,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { TypeRef } from '@sbb-esta/angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\nimport { Subject } from 'rxjs';\n\nimport type { SbbChipList } from './chip-list';\nimport { SBB_CHIP, SBB_CHIP_LIST } from './chip-tokens';\n\n/** Represents an event fired on an individual `sbb-chip`. */\nexport interface SbbChipEvent {\n  /** The chip the event was fired on. */\n  chip: SbbChip;\n}\n\n/**\n * Injection token that can be used to reference instances of `SbbChipRemove`. It serves as\n * alternative token to the actual `SbbChipRemove` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const SBB_CHIP_REMOVE = new InjectionToken<SbbChipRemove>('SbbChipRemove');\n\n/**\n * Injection token that can be used to reference instances of `SbbChipTrailingIcon`. It serves as\n * alternative token to the actual `SbbChipTrailingIcon` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const SBB_CHIP_TRAILING_ICON = new InjectionToken<SbbChipTrailingIcon>(\n  'SbbChipTrailingIcon',\n);\n\n/**\n * Dummy directive to add CSS class to chip trailing icon.\n * @docs-private\n */\n@Directive({\n  selector: 'sbb-chip-trailing-icon, [sbbChipTrailingIcon]',\n  host: { class: 'sbb-chip-trailing-icon' },\n  providers: [{ provide: SBB_CHIP_TRAILING_ICON, useExisting: SbbChipTrailingIcon }],\n})\nexport class SbbChipTrailingIcon {}\n\n/**\n * Design styled Chip component. Used inside the SbbChipList component.\n */\n@Component({\n  selector: `sbb-basic-chip, [sbb-basic-chip], sbb-chip, [sbb-chip]`,\n  exportAs: 'sbbChip',\n  template: ` <ng-content></ng-content>\n    @if (removable && !removeIcon) {\n      <sbb-icon sbbChipRemove svgIcon=\"cross-small\"> </sbb-icon>\n    }`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'sbb-chip sbb-icon-scaled sbb-button-reset-frameless',\n    '[attr.tabindex]': 'disabled ? null : tabIndex',\n    '[attr.role]': 'role',\n    '[class.sbb-chip-with-trailing-icon]': 'trailingIcon || removable',\n    '[class.sbb-chip-disabled]': 'disabled',\n    '[attr.disabled]': 'disabled || null',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '(click)': '_handleClick($event)',\n    '(keydown)': '_handleKeydown($event)',\n    '(focus)': 'focus()',\n    '(blur)': '_blur()',\n  },\n  providers: [{ provide: SBB_CHIP, useExisting: SbbChip }],\n  imports: [SbbIconModule, forwardRef(() => SbbChipRemove)],\n})\nexport class SbbChip implements FocusableOption, OnDestroy {\n  _elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n  _changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef, { optional: true })!;\n  private _ngZone = inject(NgZone);\n  private _chipList = inject<TypeRef<SbbChipList>>(SBB_CHIP_LIST, { optional: true, host: true });\n\n  /** Whether the chip has focus. */\n  _hasFocus: boolean = false;\n\n  /** Whether animations for the chip are enabled. */\n  _animationsDisabled: boolean;\n\n  /** Whether the chip list as a whole is disabled. */\n  _chipListDisabled: boolean = false;\n\n  /** The chip's trailing icon. */\n  @ContentChild(SBB_CHIP_TRAILING_ICON) trailingIcon: SbbChipTrailingIcon;\n\n  /** The chip's remove toggler. */\n  @ContentChild(SBB_CHIP_REMOVE) removeIcon: SbbChipRemove;\n\n  /** ARIA role that should be applied to the chip. */\n  @Input() role: string = 'option';\n\n  /** The value of the chip. Defaults to the content inside `<sbb-chip>` tags. */\n  @Input()\n  get value(): any {\n    return this._value !== undefined ? this._value : this._elementRef.nativeElement.textContent;\n  }\n  set value(value: any) {\n    this._value = value;\n  }\n  protected _value: any;\n\n  /** Whether the chip is disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this._chipListDisabled || this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = value;\n  }\n  protected _disabled: boolean = false;\n\n  /**\n   * Determines whether the chip displays the remove styling and emits (removed) events.\n   */\n  @Input({ transform: booleanAttribute }) removable: boolean = true;\n\n  /** Tab index of the chip. */\n  @Input({\n    transform: (value: unknown) => (value == null ? undefined : numberAttribute(value)),\n  })\n  tabIndex: number = -1;\n\n  /** Emits when the chip is focused. */\n  readonly _onFocus = new Subject<SbbChipEvent>();\n\n  /** Emits when the chip is blurred. */\n  readonly _onBlur = new Subject<SbbChipEvent>();\n\n  /** Emitted when the chip is destroyed. */\n  @Output() readonly destroyed: EventEmitter<SbbChipEvent> = new EventEmitter<SbbChipEvent>();\n\n  /**\n   * Emitted when a chip is to be removed.\n   *\n   * If a FormControl (Array or Set) on the sbb-chip-list is present and no subscriber\n   * listens to (removed), the input value will automatically be removed from\n   * the FormControl collection.\n   */\n  @Output() readonly removed: EventEmitter<SbbChipEvent> = new EventEmitter<SbbChipEvent>();\n\n  private _injector = inject(Injector);\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const animationMode = inject(ANIMATION_MODULE_TYPE, { optional: true });\n    const tabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });\n\n    this._addHostClassName();\n\n    this._animationsDisabled = animationMode === 'NoopAnimations';\n    this.tabIndex = tabIndex != null ? parseInt(tabIndex, 10) || -1 : -1;\n  }\n\n  _addHostClassName() {\n    const basicChipAttrName = 'sbb-basic-chip';\n    const element = this._elementRef.nativeElement as HTMLElement;\n\n    if (\n      element.hasAttribute(basicChipAttrName) ||\n      element.tagName.toLowerCase() === basicChipAttrName\n    ) {\n      element.classList.add(basicChipAttrName);\n      return;\n    } else {\n      element.classList.add('sbb-standard-chip');\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroyed.emit({ chip: this });\n  }\n\n  /** Allows for programmatic focusing of the chip. */\n  focus(): void {\n    if (!this._hasFocus) {\n      this._elementRef.nativeElement.focus();\n      this._onFocus.next({ chip: this });\n    }\n    this._hasFocus = true;\n  }\n\n  /**\n   * Allows for programmatic removal of the chip. Called by the SbbChipList when the DELETE or\n   * BACKSPACE keys are pressed.\n   *\n   * Informs any listeners of the removal request. Does not remove the chip from the DOM.\n   */\n  remove(): void {\n    if (this.removable) {\n      this._removeValueFromControl();\n      this.removed.emit({ chip: this });\n    }\n  }\n\n  private _removeValueFromControl() {\n    const control = this._chipList?.ngControl?.control;\n    if (!control || this.removed.observers.length) {\n      return;\n    }\n\n    const currentCollection = control.value;\n    const isArray = Array.isArray(currentCollection);\n    const isSet = currentCollection instanceof Set;\n\n    if (isArray) {\n      if (!currentCollection.includes(this.value)) {\n        return;\n      }\n      const indexInChipList = this._chipList?.chips.toArray().indexOf(this);\n      if (indexInChipList! >= 0 && currentCollection[indexInChipList!] === this.value) {\n        control.patchValue(currentCollection.filter((val, index) => indexInChipList !== index));\n      } else {\n        // Filter by value can delete more than one entry at once, so only use this as a fallback.\n        control.patchValue(currentCollection.filter((val) => val !== this.value));\n      }\n    } else if (isSet) {\n      const newCurrentCollection = new Set(currentCollection);\n      newCurrentCollection.delete(this.value);\n      control.patchValue(newCurrentCollection);\n    }\n\n    if (isArray || isSet) {\n      control.markAsDirty();\n    }\n  }\n\n  /** Handles click events on the chip. */\n  _handleClick(event: Event) {\n    if (this.disabled) {\n      event.preventDefault();\n    }\n  }\n\n  /** Handle custom key presses. */\n  _handleKeydown(event: KeyboardEvent): void {\n    if (this.disabled) {\n      return;\n    }\n\n    // Ignore backspace events where the user is holding down the key\n    // so that we don't accidentally remove too many chips.\n    if ((event.keyCode === BACKSPACE && !event.repeat) || event.keyCode === DELETE) {\n      event.preventDefault();\n      this.remove();\n    }\n  }\n\n  _blur(): void {\n    // When animations are enabled, Angular may end up removing the chip from the DOM a little\n    // earlier than usual, causing it to be blurred and throwing off the logic in the chip list\n    // that moves focus not the next item. To work around the issue, we defer marking the chip\n    // as not focused until after the next render.\n    afterNextRender(\n      () =>\n        this._ngZone.run(() => {\n          this._hasFocus = false;\n          this._onBlur.next({ chip: this });\n        }),\n      { injector: this._injector },\n    );\n  }\n}\n\n/**\n * Applies proper (click) support and adds styling for use with the Sbb Design \"cancel\"\n *\n * You *may* use a custom icon, but you may need to override the `sbb-chip-remove` positioning\n * styles to properly center the icon within the chip.\n */\n@Directive({\n  selector: '[sbbChipRemove]',\n  host: {\n    class: 'sbb-chip-remove sbb-chip-trailing-icon',\n    '(click)': '_handleClick($event)',\n  },\n  providers: [{ provide: SBB_CHIP_REMOVE, useExisting: SbbChipRemove }],\n})\nexport class SbbChipRemove {\n  protected _parentChip: SbbChip = inject(SbbChip);\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    if (elementRef.nativeElement.nodeName === 'BUTTON') {\n      elementRef.nativeElement.setAttribute('type', 'button');\n    }\n  }\n\n  /** Calls the parent chip's public `remove()` method if applicable. */\n  _handleClick(event: Event): void {\n    const parentChip = this._parentChip;\n\n    if (parentChip.removable && !parentChip.disabled) {\n      parentChip.remove();\n    }\n\n    // We need to stop event propagation because otherwise the event will bubble up to the\n    // form field and cause the `onContainerClick` method to be invoked. This method would then\n    // reset the focused chip that has been focused after chip removal. Usually the parent\n    // the parent click listener of the `SbbChip` would prevent propagation, but it can happen\n    // that the chip is being removed before the event bubbles up.\n    event.stopPropagation();\n    event.preventDefault();\n  }\n}\n","import { ENTER } from '@angular/cdk/keycodes';\nimport { InjectionToken } from '@angular/core';\n\n/** Default options, for the chips module, that can be overridden. */\nexport interface SbbChipsDefaultOptions {\n  /** The list of key codes that will trigger a chipEnd event. */\n  separatorKeyCodes: readonly number[] | ReadonlySet<number>;\n}\n\n/** Injection token to be used to override the default options for the chips module. */\nexport const SBB_CHIPS_DEFAULT_OPTIONS = new InjectionToken<SbbChipsDefaultOptions>(\n  'sbb-chips-default-options',\n  {\n    providedIn: 'root',\n    factory: () => ({\n      separatorKeyCodes: [ENTER],\n    }),\n  },\n);\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport { BACKSPACE, hasModifierKey, TAB } from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport {\n  SbbAutocompleteSelectedEvent,\n  SbbAutocompleteTrigger,\n} from '@sbb-esta/angular/autocomplete';\nimport { TypeRef } from '@sbb-esta/angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { SbbChipsDefaultOptions, SBB_CHIPS_DEFAULT_OPTIONS } from './chip-default-options';\nimport type { SbbChipList } from './chip-list';\nimport { SbbChipTextControl } from './chip-text-control';\nimport { SBB_CHIP_LIST } from './chip-tokens';\n\n/** Represents an input event on a `sbbChipInput`. */\nexport interface SbbChipInputEvent {\n  /** The value of the input. */\n  value: string;\n\n  /**\n   * Reference to the chip input that emitted the event.\n   */\n  chipInput: SbbChipInput;\n}\n\n/**\n * Directive that adds chip-specific behaviors to an input element inside `<sbb-form-field>`.\n * May be placed inside or outside of an `<sbb-chip-list>`.\n */\n@Directive({\n  selector: 'input[sbbChipInputFor], input[sbbChipInput]',\n  exportAs: 'sbbChipInput, sbbChipInputFor',\n  host: {\n    class: 'sbb-chip-input sbb-input-element',\n    '(keydown)': '_keydown($event)',\n    '(blur)': '_blur()',\n    '(focus)': '_focus()',\n    '(input)': '_onInput()',\n    '[id]': 'id',\n    '[attr.disabled]': 'disabled || null',\n    '[attr.placeholder]': 'placeholder || null',\n    '[attr.aria-invalid]': '_chipList && _chipList.ngControl ? _chipList.ngControl.invalid : null',\n    '[attr.aria-required]': '_chipList && _chipList.required || null',\n  },\n})\nexport class SbbChipInput implements SbbChipTextControl, OnChanges, OnDestroy, AfterContentInit {\n  protected _elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLInputElement>>(ElementRef);\n  private _defaultOptions = inject<SbbChipsDefaultOptions>(SBB_CHIPS_DEFAULT_OPTIONS);\n  autocompleteTrigger?: SbbAutocompleteTrigger =\n    inject(SbbAutocompleteTrigger, { self: true, optional: true }) || undefined;\n  private _ngControl = inject(NgControl, { self: true, optional: true });\n\n  /** Whether the control is focused. */\n  focused: boolean = false;\n  _chipList: SbbChipList;\n\n  private _destroyed = new Subject<void>();\n\n  /** Register input for chip list */\n  @Input('sbbChipInputFor')\n  set chipList(value: SbbChipList) {\n    if (value) {\n      this._chipList = value;\n      this._chipList.registerInput(this);\n    }\n  }\n\n  /**\n   * Whether the chipEnd event will be emitted when the input is blurred.\n   */\n  @Input({ alias: 'sbbChipInputAddOnBlur', transform: booleanAttribute })\n  addOnBlur: boolean = false;\n\n  /**\n   * The list of key codes that will trigger a chipEnd event.\n   *\n   * Defaults to `[ENTER]`.\n   */\n  @Input('sbbChipInputSeparatorKeyCodes')\n  separatorKeyCodes: readonly number[] | ReadonlySet<number> =\n    this._defaultOptions.separatorKeyCodes;\n\n  /**\n   * Emitted when a chip is to be added.\n   *\n   * If a FormControl (Array or Set) on the sbb-chip-list is present and no subscriber\n   * listens to (sbbChipInputTokenEnd), the input value will automatically be added to\n   * the FormControl collection.\n   */\n  @Output('sbbChipInputTokenEnd') readonly chipEnd = new EventEmitter<SbbChipInputEvent>();\n\n  /** The input's placeholder text. */\n  @Input() placeholder: string = '';\n\n  /** Unique id for the input. */\n  @Input() id: string = inject(_IdGenerator).getId('sbb-chip-list-input-');\n\n  /** Whether the input is disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this._disabled || (this._chipList && this._chipList.disabled);\n  }\n  set disabled(value: boolean) {\n    this._disabled = value;\n  }\n  private _disabled: boolean = false;\n\n  /** Whether the input is empty. */\n  get empty(): boolean {\n    return !this.inputElement.value;\n  }\n\n  /** The native input element to which this directive is attached. */\n  readonly inputElement!: HTMLInputElement;\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const chipList = inject<TypeRef<SbbChipList>>(SBB_CHIP_LIST, { host: true, optional: true });\n    this.inputElement = this._elementRef.nativeElement as HTMLInputElement;\n\n    if (chipList) {\n      this.chipList = chipList;\n    }\n  }\n\n  ngOnChanges(): void {\n    this._chipList.stateChanges.next();\n  }\n\n  ngOnDestroy(): void {\n    this.chipEnd.complete();\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  ngAfterContentInit(): void {\n    // Try to add autocomplete selected value to FormControl.\n    // Skip this part, if there are already other observers which might have its own logic.\n    if (this.autocompleteTrigger && this.autocompleteTrigger.autocomplete) {\n      this.autocompleteTrigger.autocomplete.optionSelected\n        .pipe(\n          filter(\n            () => this.autocompleteTrigger?.autocomplete.optionSelected.observers.length === 1,\n          ),\n          takeUntil(this._destroyed),\n        )\n        .subscribe((selectedEvent: SbbAutocompleteSelectedEvent) => {\n          this._addValueToControl(selectedEvent.option.viewValue);\n          this.chipEnd.emit({\n            value: selectedEvent.option.viewValue,\n            chipInput: this,\n          });\n        });\n    }\n  }\n\n  /** Utility method to make host definition/tests more clear. */\n  _keydown(event?: KeyboardEvent) {\n    if (event) {\n      // Allow the user's focus to escape when they're tabbing forward. Note that we don't\n      // want to do this when going backwards, because focus should go back to the first chip.\n      if (event.keyCode === TAB && !hasModifierKey(event, 'shiftKey')) {\n        this._chipList._allowFocusEscape();\n      }\n\n      if (this.empty && event.keyCode === BACKSPACE) {\n        // Ignore events where the user is holding down backspace\n        // so that we don't accidentally remove too many chips.\n        if (!event.repeat) {\n          this._chipList._keyManager.setLastItemActive();\n        }\n        event.preventDefault();\n      }\n    }\n\n    // If an autocomplete is open, we have to ensure that the (optionSelected) listener\n    // is called before this._emitChipEnd is called. The (optionSelected) listener clears\n    // the input and therefore we can prevent adding the current chip input value to the formControl.\n    // If not using this logic, the current chip input value will be added together\n    // with the selected autocomplete value.\n    if (this.autocompleteTrigger?.autocomplete.isOpen) {\n      Promise.resolve().then(() => this._emitChipEnd(event));\n    } else {\n      this._emitChipEnd(event);\n    }\n  }\n\n  /** Checks to see if the blur should emit the (chipEnd) event. */\n  _blur() {\n    if (this.addOnBlur) {\n      this._emitChipEnd();\n    }\n    this.focused = false;\n    // Blur the chip list if it is not focused\n    if (!this._chipList.focused) {\n      this._chipList._blur();\n    }\n    this._chipList.stateChanges.next();\n  }\n\n  _focus() {\n    this.focused = true;\n    this._chipList.stateChanges.next();\n  }\n\n  /** Checks to see if the (chipEnd) event needs to be emitted. */\n  _emitChipEnd(event?: KeyboardEvent) {\n    if (!this.inputElement.value && !!event) {\n      this._chipList._keydown(event);\n    }\n\n    if (!event || this._isSeparatorKey(event)) {\n      this._addValueToControl(this.inputElement.value);\n\n      this.chipEnd.emit({\n        value: this.inputElement.value,\n        chipInput: this,\n      });\n\n      event?.preventDefault();\n    }\n  }\n\n  private _addValueToControl(inputValue: string) {\n    if (!this._chipList?.ngControl?.control || inputValue === '' || this.chipEnd.observers.length) {\n      return;\n    }\n    const control = this._chipList.ngControl.control;\n    const currentCollection = control.value;\n    const isArray = Array.isArray(currentCollection);\n    const isSet = currentCollection instanceof Set;\n    if (isArray) {\n      control.patchValue([...currentCollection, inputValue]);\n    } else if (isSet) {\n      control.patchValue(new Set([...currentCollection, inputValue]));\n    }\n    if (isArray || isSet) {\n      this._chipList.ngControl.control.markAsDirty();\n      this.clear();\n    }\n  }\n\n  _onInput() {\n    // Let chip list know whenever the value changes.\n    this._chipList.stateChanges.next();\n  }\n\n  /** Focuses the input. */\n  focus(options?: FocusOptions): void {\n    this.inputElement.focus(options);\n  }\n\n  /** Clears the input */\n  clear(): void {\n    this.inputElement.value = '';\n    this._ngControl?.control?.setValue(null);\n  }\n\n  /** Checks whether a keycode is one of the configured separators. */\n  private _isSeparatorKey(event: KeyboardEvent) {\n    return !hasModifierKey(event) && new Set(this.separatorKeyCodes).has(event.keyCode);\n  }\n}\n","import { FocusKeyManager, _IdGenerator } from '@angular/cdk/a11y';\nimport {\n  AfterContentInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { SbbErrorStateMatcher, _ErrorStateTracker } from '@sbb-esta/angular/core';\nimport { SbbFormFieldControl } from '@sbb-esta/angular/form-field';\nimport { merge, Observable, Subject, Subscription } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\n\nimport type { SbbChip, SbbChipEvent } from './chip';\nimport { SbbChipTextControl } from './chip-text-control';\nimport { SBB_CHIP, SBB_CHIP_LIST } from './chip-tokens';\n\n/**\n * A design chips component (named ChipList for its similarity to the List component).\n */\n@Component({\n  selector: 'sbb-chip-list',\n  template: `<ng-content></ng-content>`,\n  exportAs: 'sbbChipList',\n  host: {\n    class: 'sbb-chip-list',\n    '[attr.tabindex]': 'disabled ? null : _tabIndex',\n    '[attr.aria-required]': 'role ? required : null',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[attr.aria-invalid]': 'errorState',\n    '[attr.role]': 'role',\n    '[class.sbb-chip-list-disabled]': 'disabled',\n    '[class.sbb-disabled]': 'disabled',\n    '[class.sbb-chip-list-invalid]': 'errorState',\n    '[class.sbb-chip-list-required]': 'required',\n    '[class.sbb-expanded]': '_chipInput?.autocompleteTrigger?.autocomplete?.isOpen',\n    '[class.sbb-focused]': 'focused',\n    '[class.sbb-input-element]': '_chipInput',\n    '[attr.aria-orientation]': 'ariaOrientation',\n    '(focus)': 'focus()',\n    '(blur)': '_blur()',\n    '(keydown)': '_keydown($event)',\n    '[id]': '_uid',\n  },\n  providers: [\n    { provide: SbbFormFieldControl, useExisting: SbbChipList },\n    { provide: SBB_CHIP_LIST, useExisting: SbbChipList },\n  ],\n  styleUrls: ['./chips.css'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SbbChipList\n  implements\n    SbbFormFieldControl<any>,\n    ControlValueAccessor,\n    AfterContentInit,\n    DoCheck,\n    OnInit,\n    OnDestroy\n{\n  protected _elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  ngControl: NgControl = inject(NgControl, { optional: true, self: true })!;\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  readonly controlType: string = 'sbb-chip-list';\n\n  /**\n   * When a chip is destroyed, we store the index of the destroyed chip until the chips\n   * query list notifies about the update. This is necessary because we cannot determine an\n   * appropriate chip that should receive focus until the array of chips updated completely.\n   */\n  private _lastDestroyedChipIndex: number | null = null;\n\n  /** Subject that emits when the component has been destroyed. */\n  private readonly _destroyed = new Subject<void>();\n\n  /** Subscription to focus changes in the chips. */\n  private _chipFocusSubscription: Subscription | null;\n\n  /** Subscription to blur changes in the chips. */\n  private _chipBlurSubscription: Subscription | null;\n\n  /** Subscription to remove changes in chips. */\n  private _chipRemoveSubscription: Subscription | null;\n\n  private _errorStateTracker: _ErrorStateTracker;\n\n  /** The chip input to add more chips */\n  _chipInput: SbbChipTextControl;\n\n  /** Uid of the chip list */\n  _uid: string = inject(_IdGenerator).getId('sbb-chip-list-');\n\n  /** Tab index for the chip list. */\n  _tabIndex: number = 0;\n\n  /**\n   * User defined tab index.\n   * When it is not null, use user defined tab index. Otherwise use _tabIndex\n   */\n  _userTabIndex: number | null = null;\n\n  /** The FocusKeyManager which handles focus. */\n  _keyManager: FocusKeyManager<SbbChip>;\n\n  /** Function when touched */\n  _onTouched: () => void = () => {};\n\n  /** Function when changed */\n  _onChange: (value: any) => void = () => {};\n\n  /** The ARIA role applied to the chip list. */\n  @Input()\n  get role(): string | null {\n    if (this._explicitRole) {\n      return this._explicitRole;\n    }\n\n    return this.empty ? null : 'listbox';\n  }\n  set role(role: string | null) {\n    this._explicitRole = role;\n  }\n  private _explicitRole?: string | null;\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  @Input('aria-describedby') userAriaDescribedBy: string;\n\n  /** An object used to control when error messages are shown. */\n  @Input()\n  get errorStateMatcher() {\n    return this._errorStateTracker.matcher;\n  }\n  set errorStateMatcher(value: SbbErrorStateMatcher) {\n    this._errorStateTracker.matcher = value;\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get value(): any {\n    return this._value;\n  }\n  set value(value: any) {\n    this.writeValue(value);\n    this._value = value;\n  }\n  protected _value: any;\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  get id(): string {\n    return this._chipInput ? this._chipInput.id : this._uid;\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  @Input({ transform: booleanAttribute }) required: boolean = false;\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get placeholder(): string {\n    return this._chipInput ? this._chipInput.placeholder : this._placeholder;\n  }\n  set placeholder(value: string) {\n    this._placeholder = value;\n    this.stateChanges.next();\n  }\n  protected _placeholder: string;\n\n  /** Whether any chips or the sbbChipInput inside of this chip-list has focus. */\n  get focused(): boolean {\n    return (this._chipInput && this._chipInput.focused) || this._hasFocusedChip();\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  get empty(): boolean {\n    return (!this._chipInput || this._chipInput.empty) && (!this.chips || this.chips.length === 0);\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return this.ngControl ? !!this.ngControl.disabled : this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = value;\n    this._syncChipsState();\n  }\n  protected _disabled: boolean = false;\n\n  /** Orientation of the chip list. */\n  @Input('aria-orientation') ariaOrientation: 'horizontal' | 'vertical' = 'horizontal';\n\n  @Input()\n  set tabIndex(value: number) {\n    this._userTabIndex = value;\n    this._tabIndex = value;\n  }\n\n  /** Combined stream of all of the child chips' focus change events. */\n  get chipFocusChanges(): Observable<SbbChipEvent> {\n    return merge(...this.chips.map((chip) => chip._onFocus));\n  }\n\n  /** Combined stream of all of the child chips' blur change events. */\n  get chipBlurChanges(): Observable<SbbChipEvent> {\n    return merge(...this.chips.map((chip) => chip._onBlur));\n  }\n\n  /** Combined stream of all of the child chips' remove change events. */\n  get chipRemoveChanges(): Observable<SbbChipEvent> {\n    return merge(...this.chips.map((chip) => chip.destroyed));\n  }\n\n  /**\n   * Event that emits whenever the raw value of the chip-list changes. This is here primarily\n   * to facilitate the two-way binding for the `value` input.\n   * @docs-private\n   */\n  @Output() readonly valueChange = new EventEmitter<any>();\n\n  /** The chip components contained within this chip list. */\n  @ContentChildren(SBB_CHIP, {\n    // We need to use `descendants: true`, because Ivy will no longer match\n    // indirect descendants if it's left as false.\n    descendants: true,\n  })\n  chips: QueryList<SbbChip>;\n\n  /**\n   * Emits whenever the component state changes and should cause the parent\n   * form-field to update. Implemented as part of `SbbFormFieldControl`.\n   * @docs-private\n   */\n  readonly stateChanges = new Subject<void>();\n\n  /** Whether the chip grid is in an error state. */\n  get errorState() {\n    return this._errorStateTracker.errorState;\n  }\n  set errorState(value: boolean) {\n    this._errorStateTracker.errorState = value;\n  }\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const parentForm = inject(NgForm, { optional: true })!;\n    const parentFormGroup = inject(FormGroupDirective, { optional: true })!;\n    const defaultErrorStateMatcher = inject(SbbErrorStateMatcher);\n    const ngControl = this.ngControl;\n\n    if (this.ngControl) {\n      this.ngControl.valueAccessor = this;\n    }\n\n    this._errorStateTracker = new _ErrorStateTracker(\n      defaultErrorStateMatcher,\n      ngControl,\n      parentFormGroup,\n      parentForm,\n      this.stateChanges,\n    );\n  }\n\n  ngAfterContentInit() {\n    this._keyManager = new FocusKeyManager<SbbChip>(this.chips)\n      .withWrap()\n      .withVerticalOrientation()\n      .withHomeAndEnd()\n      .withHorizontalOrientation('ltr');\n\n    this._keyManager.tabOut.subscribe(() => this._allowFocusEscape());\n\n    // When the list changes, re-subscribe\n    this.chips.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\n      if (this.disabled) {\n        // Since this happens after the content has been\n        // checked, we need to defer it to the next tick.\n        Promise.resolve().then(() => {\n          this._syncChipsState();\n        });\n      }\n\n      this._resetChips();\n\n      // Check to see if we need to update our tab index\n      this._updateTabIndex();\n\n      // Check to see if we have a destroyed chip and need to refocus\n      this._updateFocusForDestroyedChips();\n\n      // Reposition autocomplete if present and open because size of list can be changed\n      if (this._chipInput?.autocompleteTrigger?.autocomplete.isOpen) {\n        // We have to delay position update after DOM is rendered\n        Promise.resolve().then(() => {\n          this._chipInput?.autocompleteTrigger?.updatePosition();\n        });\n      }\n\n      this.stateChanges.next();\n    });\n  }\n\n  ngOnInit() {\n    this.stateChanges.next();\n  }\n\n  ngDoCheck() {\n    if (this.ngControl) {\n      // We need to re-evaluate this on every change detection cycle, because there are some\n      // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n      // that whatever logic is in here has to be super lean or we risk destroying the performance.\n      this.updateErrorState();\n\n      if (this.ngControl.disabled !== this._disabled) {\n        this.disabled = !!this.ngControl.disabled;\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._keyManager?.destroy();\n    this._destroyed.next();\n    this._destroyed.complete();\n    this.stateChanges.complete();\n    this._dropSubscriptions();\n  }\n\n  /** Associates an HTML input element with this chip list. */\n  registerInput(inputElement: SbbChipTextControl): void {\n    this._chipInput = inputElement;\n\n    // We use this attribute to match the chip list to its input in test harnesses.\n    // Set the attribute directly here to avoid \"changed after checked\" errors.\n    this._elementRef.nativeElement.setAttribute('data-sbb-chip-input', inputElement.id);\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  setDescribedByIds(ids: string[]) {\n    if (ids.length) {\n      this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n    } else {\n      this._elementRef.nativeElement.removeAttribute('aria-describedby');\n    }\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  writeValue(value: any): void {}\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnChange(fn: (value: any) => void): void {\n    this._onChange = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    this.stateChanges.next();\n  }\n\n  /**\n   * Implemented as part of SbbFormFieldControl.\n   * @docs-private\n   */\n  onContainerClick(event: MouseEvent) {\n    if (!this._originatesFromChip(event)) {\n      this.focus();\n    }\n  }\n\n  /**\n   * Focuses the first non-disabled chip in this chip list, or the associated input when there\n   * are no eligible chips.\n   */\n  focus(options?: FocusOptions): void {\n    if (this.disabled) {\n      return;\n    }\n\n    // Focus on first element if there's no chipInput inside chip-list\n    if (this._chipInput && this._chipInput.focused) {\n      // do nothing\n    } else if (this.chips.length > 0) {\n      this._keyManager.setFirstItemActive();\n      this.stateChanges.next();\n    } else {\n      this._focusInput(options);\n      this.stateChanges.next();\n    }\n  }\n\n  /** Attempt to focus an input if we have one. */\n  _focusInput(options?: FocusOptions) {\n    if (this._chipInput) {\n      this._chipInput.focus(options);\n    }\n  }\n\n  /**\n   * Pass events to the keyboard manager. Available here for tests.\n   */\n  _keydown(event: KeyboardEvent) {\n    const target = event.target as HTMLElement;\n\n    if (target && target.classList.contains('sbb-chip')) {\n      this._keyManager.onKeydown(event);\n      this.stateChanges.next();\n    }\n  }\n\n  /**\n   * Check the tab index as you should not be allowed to focus an empty list.\n   */\n  protected _updateTabIndex(): void {\n    // If we have 0 chips, we should not allow keyboard focus\n    this._tabIndex = this._userTabIndex || (this.chips.length === 0 ? -1 : 0);\n  }\n\n  /**\n   * If the amount of chips changed, we need to update the\n   * key manager state and focus the next closest chip.\n   */\n  protected _updateFocusForDestroyedChips() {\n    // Move focus to the closest chip. If no other chips remain, focus the chip-list itself.\n    if (this._lastDestroyedChipIndex != null) {\n      if (this.chips.length) {\n        const newChipIndex = Math.min(this._lastDestroyedChipIndex, this.chips.length - 1);\n        this._keyManager.setActiveItem(newChipIndex);\n      } else {\n        this.focus();\n      }\n    }\n\n    this._lastDestroyedChipIndex = null;\n  }\n\n  /**\n   * Utility to ensure all indexes are valid.\n   *\n   * @param index The index to be checked.\n   * @returns True if the index is valid for our list of chips.\n   */\n  private _isValidIndex(index: number): boolean {\n    return index >= 0 && index < this.chips.length;\n  }\n\n  /** Refreshes the error state of the chip grid. */\n  updateErrorState() {\n    this._errorStateTracker.updateErrorState();\n  }\n\n  /** When blurred, mark the field as touched when focus moved outside the chip list. */\n  _blur() {\n    if (!this._hasFocusedChip()) {\n      this._keyManager.setActiveItem(-1);\n    }\n\n    if (!this.disabled) {\n      if (this._chipInput) {\n        // If there's a chip input, we should check whether the focus moved to chip input.\n        // If the focus is not moved to chip input, mark the field as touched. If the focus moved\n        // to chip input, do nothing.\n        // Timeout is needed to wait for the focus() event trigger on chip input.\n        setTimeout(() => {\n          if (!this.focused) {\n            this._markAsTouched();\n          }\n        });\n      } else {\n        // If there's no chip input, then mark the field as touched.\n        this._markAsTouched();\n      }\n    }\n  }\n\n  /** Mark the field as touched */\n  _markAsTouched() {\n    this._onTouched();\n    this._changeDetectorRef.markForCheck();\n    this.stateChanges.next();\n  }\n\n  /**\n   * Removes the `tabindex` from the chip list and resets it back afterwards, allowing the\n   * user to tab out of it. This prevents the list from capturing focus and redirecting\n   * it back to the first chip, creating a focus trap, if it user tries to tab away.\n   */\n  _allowFocusEscape() {\n    if (this._tabIndex !== -1) {\n      this._tabIndex = -1;\n      this._changeDetectorRef.markForCheck();\n\n      setTimeout(() => {\n        this._tabIndex = this._userTabIndex || 0;\n        this._changeDetectorRef.markForCheck();\n      });\n    }\n  }\n\n  private _resetChips() {\n    this._dropSubscriptions();\n    this._listenToChipsFocus();\n    this._listenToChipsRemoved();\n  }\n\n  private _dropSubscriptions() {\n    if (this._chipFocusSubscription) {\n      this._chipFocusSubscription.unsubscribe();\n      this._chipFocusSubscription = null;\n    }\n\n    if (this._chipBlurSubscription) {\n      this._chipBlurSubscription.unsubscribe();\n      this._chipBlurSubscription = null;\n    }\n\n    if (this._chipRemoveSubscription) {\n      this._chipRemoveSubscription.unsubscribe();\n      this._chipRemoveSubscription = null;\n    }\n  }\n\n  /** Listens to user-generated selection events on each chip. */\n  private _listenToChipsFocus(): void {\n    this._chipFocusSubscription = this.chipFocusChanges.subscribe((event) => {\n      const chipIndex: number = this.chips.toArray().indexOf(event.chip);\n\n      if (this._isValidIndex(chipIndex)) {\n        this._keyManager.updateActiveItem(chipIndex);\n      }\n      this.stateChanges.next();\n    });\n\n    this._chipBlurSubscription = this.chipBlurChanges.subscribe(() => {\n      this._blur();\n      this.stateChanges.next();\n    });\n  }\n\n  private _listenToChipsRemoved(): void {\n    this._chipRemoveSubscription = this.chipRemoveChanges.subscribe((event) => {\n      const chip = event.chip;\n      const chipIndex = this.chips.toArray().indexOf(event.chip);\n\n      // In case the chip that will be removed is currently focused, we temporarily store\n      // the index in order to be able to determine an appropriate sibling chip that will\n      // receive focus.\n      if (this._isValidIndex(chipIndex) && chip._hasFocus) {\n        this._lastDestroyedChipIndex = chipIndex;\n      }\n    });\n  }\n\n  /** Checks whether an event comes from inside a chip element. */\n  private _originatesFromChip(event: Event): boolean {\n    let currentElement = event.target as HTMLElement | null;\n\n    while (currentElement && currentElement !== this._elementRef.nativeElement) {\n      if (currentElement.classList.contains('sbb-chip')) {\n        return true;\n      }\n\n      currentElement = currentElement.parentElement;\n    }\n\n    return false;\n  }\n\n  /** Checks whether any of the chips is focused. */\n  private _hasFocusedChip() {\n    return this.chips && this.chips.some((chip) => chip._hasFocus);\n  }\n\n  /** Syncs the list's state with the individual chips. */\n  private _syncChipsState() {\n    if (this.chips) {\n      this.chips.forEach((chip) => {\n        chip._chipListDisabled = this._disabled;\n        chip._changeDetectorRef.markForCheck();\n      });\n    }\n  }\n}\n","import { ENTER } from '@angular/cdk/keycodes';\nimport { NgModule } from '@angular/core';\nimport { SbbCommonModule } from '@sbb-esta/angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\n\nimport { SbbChip, SbbChipRemove, SbbChipTrailingIcon } from './chip';\nimport { SbbChipsDefaultOptions, SBB_CHIPS_DEFAULT_OPTIONS } from './chip-default-options';\nimport { SbbChipInput } from './chip-input';\nimport { SbbChipList } from './chip-list';\n\nconst CHIP_DECLARATIONS = [SbbChipList, SbbChip, SbbChipInput, SbbChipRemove, SbbChipTrailingIcon];\n\n@NgModule({\n  imports: [SbbCommonModule, SbbIconModule, ...CHIP_DECLARATIONS],\n  exports: CHIP_DECLARATIONS,\n  providers: [\n    {\n      provide: SBB_CHIPS_DEFAULT_OPTIONS,\n      useValue: {\n        separatorKeyCodes: [ENTER],\n      } as SbbChipsDefaultOptions,\n    },\n  ],\n})\nexport class SbbChipsModule {}\n"],"names":["SBB_CHIP_LIST","InjectionToken","SBB_CHIP","SBB_CHIP_REMOVE","SBB_CHIP_TRAILING_ICON","SbbChipTrailingIcon","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","host","classAttribute","providers","provide","useExisting","ngImport","decorators","args","class","SbbChip","_elementRef","inject","ElementRef","_changeDetectorRef","ChangeDetectorRef","optional","_ngZone","NgZone","_chipList","_hasFocus","_animationsDisabled","_chipListDisabled","trailingIcon","removeIcon","role","value","_value","undefined","nativeElement","textContent","disabled","_disabled","removable","tabIndex","_onFocus","Subject","_onBlur","destroyed","EventEmitter","removed","_injector","Injector","constructor","animationMode","ANIMATION_MODULE_TYPE","HostAttributeToken","_addHostClassName","parseInt","basicChipAttrName","element","hasAttribute","tagName","toLowerCase","classList","add","ngOnDestroy","emit","chip","focus","next","remove","_removeValueFromControl","control","ngControl","observers","length","currentCollection","isArray","Array","isSet","Set","includes","indexInChipList","chips","toArray","indexOf","patchValue","filter","val","index","newCurrentCollection","delete","markAsDirty","_handleClick","event","preventDefault","_handleKeydown","keyCode","BACKSPACE","repeat","DELETE","_blur","afterNextRender","run","injector","Component","ɵcmp","ɵɵngDeclareComponent","minVersion","version","type","booleanAttribute","numberAttribute","descendants","propertyName","first","predicate","exportAs","template","isInline","dependencies","kind","forwardRef","SbbIconModule","SbbChipRemove","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","imports","ContentChild","Input","transform","Output","_parentChip","elementRef","nodeName","setAttribute","parentChip","stopPropagation","listeners","SBB_CHIPS_DEFAULT_OPTIONS","providedIn","factory","separatorKeyCodes","ENTER","SbbChipInput","_defaultOptions","autocompleteTrigger","SbbAutocompleteTrigger","self","_ngControl","NgControl","focused","_destroyed","chipList","registerInput","addOnBlur","chipEnd","placeholder","id","_IdGenerator","getId","empty","inputElement","ngOnChanges","stateChanges","complete","ngAfterContentInit","autocomplete","optionSelected","pipe","takeUntil","subscribe","selectedEvent","_addValueToControl","option","viewValue","chipInput","_keydown","TAB","hasModifierKey","_allowFocusEscape","_keyManager","setLastItemActive","isOpen","Promise","resolve","then","_emitChipEnd","_focus","_isSeparatorKey","inputValue","clear","_onInput","options","setValue","has","inputs","outputs","properties","usesOnChanges","alias","SbbChipList","controlType","_lastDestroyedChipIndex","_chipFocusSubscription","_chipBlurSubscription","_chipRemoveSubscription","_errorStateTracker","_chipInput","_uid","_tabIndex","_userTabIndex","_onTouched","_onChange","_explicitRole","userAriaDescribedBy","errorStateMatcher","matcher","writeValue","required","_placeholder","_hasFocusedChip","_syncChipsState","ariaOrientation","chipFocusChanges","merge","map","chipBlurChanges","chipRemoveChanges","valueChange","errorState","parentForm","NgForm","parentFormGroup","FormGroupDirective","defaultErrorStateMatcher","SbbErrorStateMatcher","valueAccessor","_ErrorStateTracker","FocusKeyManager","withWrap","withVerticalOrientation","withHomeAndEnd","withHorizontalOrientation","tabOut","changes","startWith","_resetChips","_updateTabIndex","_updateFocusForDestroyedChips","updatePosition","ngOnInit","ngDoCheck","updateErrorState","destroy","_dropSubscriptions","setDescribedByIds","ids","join","removeAttribute","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","onContainerClick","_originatesFromChip","setFirstItemActive","_focusInput","contains","onKeydown","newChipIndex","Math","min","setActiveItem","_isValidIndex","setTimeout","_markAsTouched","markForCheck","_listenToChipsFocus","_listenToChipsRemoved","unsubscribe","chipIndex","updateActiveItem","currentElement","parentElement","some","forEach","SbbFormFieldControl","queries","styles","ContentChildren","CHIP_DECLARATIONS","SbbChipsModule","NgModule","SbbCommonModule","exports","ɵinj","ɵɵngDeclareInjector","useValue"],"mappings":";;;;;;;;;;;;;MASaA,aAAa,GAAG,IAAIC,cAAc,CAAc,eAAe;MAM/DC,QAAQ,GAAG,IAAID,cAAc,CAAU,UAAU;;MC4BjDE,eAAe,GAAG,IAAIF,cAAc,CAAgB,eAAe;MAOnEG,sBAAsB,GAAG,IAAIH,cAAc,CACtD,qBAAqB;MAYVI,mBAAmB,CAAA;;;;;UAAnBA,mBAAmB;AAAAC,IAAAA,IAAA,EAAA,EAAA;AAAAC,IAAAA,MAAA,EAAAC,EAAA,CAAAC,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;UAAnBL,mBAAmB;AAAAM,IAAAA,YAAA,EAAA,IAAA;AAAAC,IAAAA,QAAA,EAAA,+CAAA;AAAAC,IAAAA,IAAA,EAAA;AAAAC,MAAAA,cAAA,EAAA;KAAA;AAAAC,IAAAA,SAAA,EAFnB,CAAC;AAAEC,MAAAA,OAAO,EAAEZ,sBAAsB;AAAEa,MAAAA,WAAW,EAAEZ;AAAmB,KAAE,CAAC;AAAAa,IAAAA,QAAA,EAAAV;AAAA,GAAA,CAAA;;;;;;QAEvEH,mBAAmB;AAAAc,EAAAA,UAAA,EAAA,CAAA;UAL/BT,SAAS;AAACU,IAAAA,IAAA,EAAA,CAAA;AACTR,MAAAA,QAAQ,EAAE,+CAA+C;AACzDC,MAAAA,IAAI,EAAE;AAAEQ,QAAAA,KAAK,EAAE;OAA0B;AACzCN,MAAAA,SAAS,EAAE,CAAC;AAAEC,QAAAA,OAAO,EAAEZ,sBAAsB;AAAEa,QAAAA,WAAW,EAAqBZ;OAAE;KAClF;;;MA+BYiB,OAAO,CAAA;AAClBC,EAAAA,WAAW,GAA4BC,MAAM,CAA0BC,UAAU,CAAC;AAClFC,EAAAA,kBAAkB,GAAsBF,MAAM,CAACG,iBAAiB,EAAE;AAAEC,IAAAA,QAAQ,EAAE;AAAM,GAAA,CAAE;AAC9EC,EAAAA,OAAO,GAAGL,MAAM,CAACM,MAAM,CAAC;AACxBC,EAAAA,SAAS,GAAGP,MAAM,CAAuBxB,aAAa,EAAE;AAAE4B,IAAAA,QAAQ,EAAE,IAAI;AAAEf,IAAAA,IAAI,EAAE;AAAI,GAAE,CAAC;AAG/FmB,EAAAA,SAAS,GAAY,KAAK;EAG1BC,mBAAmB;AAGnBC,EAAAA,iBAAiB,GAAY,KAAK;EAGIC,YAAY;EAGnBC,UAAU;AAGhCC,EAAAA,IAAI,GAAW,QAAQ;EAGhC,IACIC,KAAKA,GAAA;AACP,IAAA,OAAO,IAAI,CAACC,MAAM,KAAKC,SAAS,GAAG,IAAI,CAACD,MAAM,GAAG,IAAI,CAAChB,WAAW,CAACkB,aAAa,CAACC,WAAW;AAC7F;EACA,IAAIJ,KAAKA,CAACA,KAAU,EAAA;IAClB,IAAI,CAACC,MAAM,GAAGD,KAAK;AACrB;EACUC,MAAM;EAGhB,IACII,QAAQA,GAAA;AACV,IAAA,OAAO,IAAI,CAACT,iBAAiB,IAAI,IAAI,CAACU,SAAS;AACjD;EACA,IAAID,QAAQA,CAACL,KAAc,EAAA;IACzB,IAAI,CAACM,SAAS,GAAGN,KAAK;AACxB;AACUM,EAAAA,SAAS,GAAY,KAAK;AAKIC,EAAAA,SAAS,GAAY,IAAI;EAMjEC,QAAQ,GAAW,CAAC,CAAC;AAGZC,EAAAA,QAAQ,GAAG,IAAIC,OAAO,EAAgB;AAGtCC,EAAAA,OAAO,GAAG,IAAID,OAAO,EAAgB;AAG3BE,EAAAA,SAAS,GAA+B,IAAIC,YAAY,EAAgB;AASxEC,EAAAA,OAAO,GAA+B,IAAID,YAAY,EAAgB;AAEjFE,EAAAA,SAAS,GAAG7B,MAAM,CAAC8B,QAAQ,CAAC;AAGpCC,EAAAA,WAAAA,GAAA;AACE,IAAA,MAAMC,aAAa,GAAGhC,MAAM,CAACiC,qBAAqB,EAAE;AAAE7B,MAAAA,QAAQ,EAAE;AAAM,KAAA,CAAC;IACvE,MAAMkB,QAAQ,GAAGtB,MAAM,CAAC,IAAIkC,kBAAkB,CAAC,UAAU,CAAC,EAAE;AAAE9B,MAAAA,QAAQ,EAAE;AAAI,KAAE,CAAC;IAE/E,IAAI,CAAC+B,iBAAiB,EAAE;AAExB,IAAA,IAAI,CAAC1B,mBAAmB,GAAGuB,aAAa,KAAK,gBAAgB;AAC7D,IAAA,IAAI,CAACV,QAAQ,GAAGA,QAAQ,IAAI,IAAI,GAAGc,QAAQ,CAACd,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACtE;AAEAa,EAAAA,iBAAiBA,GAAA;IACf,MAAME,iBAAiB,GAAG,gBAAgB;AAC1C,IAAA,MAAMC,OAAO,GAAG,IAAI,CAACvC,WAAW,CAACkB,aAA4B;AAE7D,IAAA,IACEqB,OAAO,CAACC,YAAY,CAACF,iBAAiB,CAAC,IACvCC,OAAO,CAACE,OAAO,CAACC,WAAW,EAAE,KAAKJ,iBAAiB,EACnD;AACAC,MAAAA,OAAO,CAACI,SAAS,CAACC,GAAG,CAACN,iBAAiB,CAAC;AACxC,MAAA;AACF,KAAC,MAAM;AACLC,MAAAA,OAAO,CAACI,SAAS,CAACC,GAAG,CAAC,mBAAmB,CAAC;AAC5C;AACF;AAEAC,EAAAA,WAAWA,GAAA;AACT,IAAA,IAAI,CAAClB,SAAS,CAACmB,IAAI,CAAC;AAAEC,MAAAA,IAAI,EAAE;AAAM,KAAA,CAAC;AACrC;AAGAC,EAAAA,KAAKA,GAAA;AACH,IAAA,IAAI,CAAC,IAAI,CAACvC,SAAS,EAAE;AACnB,MAAA,IAAI,CAACT,WAAW,CAACkB,aAAa,CAAC8B,KAAK,EAAE;AACtC,MAAA,IAAI,CAACxB,QAAQ,CAACyB,IAAI,CAAC;AAAEF,QAAAA,IAAI,EAAE;AAAM,OAAA,CAAC;AACpC;IACA,IAAI,CAACtC,SAAS,GAAG,IAAI;AACvB;AAQAyC,EAAAA,MAAMA,GAAA;IACJ,IAAI,IAAI,CAAC5B,SAAS,EAAE;MAClB,IAAI,CAAC6B,uBAAuB,EAAE;AAC9B,MAAA,IAAI,CAACtB,OAAO,CAACiB,IAAI,CAAC;AAAEC,QAAAA,IAAI,EAAE;AAAM,OAAA,CAAC;AACnC;AACF;AAEQI,EAAAA,uBAAuBA,GAAA;IAC7B,MAAMC,OAAO,GAAG,IAAI,CAAC5C,SAAS,EAAE6C,SAAS,EAAED,OAAO;IAClD,IAAI,CAACA,OAAO,IAAI,IAAI,CAACvB,OAAO,CAACyB,SAAS,CAACC,MAAM,EAAE;AAC7C,MAAA;AACF;AAEA,IAAA,MAAMC,iBAAiB,GAAGJ,OAAO,CAACrC,KAAK;AACvC,IAAA,MAAM0C,OAAO,GAAGC,KAAK,CAACD,OAAO,CAACD,iBAAiB,CAAC;AAChD,IAAA,MAAMG,KAAK,GAAGH,iBAAiB,YAAYI,GAAG;AAE9C,IAAA,IAAIH,OAAO,EAAE;MACX,IAAI,CAACD,iBAAiB,CAACK,QAAQ,CAAC,IAAI,CAAC9C,KAAK,CAAC,EAAE;AAC3C,QAAA;AACF;AACA,MAAA,MAAM+C,eAAe,GAAG,IAAI,CAACtD,SAAS,EAAEuD,KAAK,CAACC,OAAO,EAAE,CAACC,OAAO,CAAC,IAAI,CAAC;AACrE,MAAA,IAAIH,eAAgB,IAAI,CAAC,IAAIN,iBAAiB,CAACM,eAAgB,CAAC,KAAK,IAAI,CAAC/C,KAAK,EAAE;AAC/EqC,QAAAA,OAAO,CAACc,UAAU,CAACV,iBAAiB,CAACW,MAAM,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAKP,eAAe,KAAKO,KAAK,CAAC,CAAC;AACzF,OAAC,MAAM;AAELjB,QAAAA,OAAO,CAACc,UAAU,CAACV,iBAAiB,CAACW,MAAM,CAAEC,GAAG,IAAKA,GAAG,KAAK,IAAI,CAACrD,KAAK,CAAC,CAAC;AAC3E;KACD,MAAM,IAAI4C,KAAK,EAAE;AAChB,MAAA,MAAMW,oBAAoB,GAAG,IAAIV,GAAG,CAACJ,iBAAiB,CAAC;AACvDc,MAAAA,oBAAoB,CAACC,MAAM,CAAC,IAAI,CAACxD,KAAK,CAAC;AACvCqC,MAAAA,OAAO,CAACc,UAAU,CAACI,oBAAoB,CAAC;AAC1C;IAEA,IAAIb,OAAO,IAAIE,KAAK,EAAE;MACpBP,OAAO,CAACoB,WAAW,EAAE;AACvB;AACF;EAGAC,YAAYA,CAACC,KAAY,EAAA;IACvB,IAAI,IAAI,CAACtD,QAAQ,EAAE;MACjBsD,KAAK,CAACC,cAAc,EAAE;AACxB;AACF;EAGAC,cAAcA,CAACF,KAAoB,EAAA;IACjC,IAAI,IAAI,CAACtD,QAAQ,EAAE;AACjB,MAAA;AACF;AAIA,IAAA,IAAKsD,KAAK,CAACG,OAAO,KAAKC,SAAS,IAAI,CAACJ,KAAK,CAACK,MAAM,IAAKL,KAAK,CAACG,OAAO,KAAKG,MAAM,EAAE;MAC9EN,KAAK,CAACC,cAAc,EAAE;MACtB,IAAI,CAACzB,MAAM,EAAE;AACf;AACF;AAEA+B,EAAAA,KAAKA,GAAA;IAKHC,eAAe,CACb,MACE,IAAI,CAAC5E,OAAO,CAAC6E,GAAG,CAAC,MAAK;MACpB,IAAI,CAAC1E,SAAS,GAAG,KAAK;AACtB,MAAA,IAAI,CAACiB,OAAO,CAACuB,IAAI,CAAC;AAAEF,QAAAA,IAAI,EAAE;AAAM,OAAA,CAAC;AACnC,KAAC,CAAC,EACJ;MAAEqC,QAAQ,EAAE,IAAI,CAACtD;AAAW,KAAA,CAC7B;AACH;;;;;UAjMW/B,OAAO;AAAAhB,IAAAA,IAAA,EAAA,EAAA;AAAAC,IAAAA,MAAA,EAAAC,EAAA,CAAAC,eAAA,CAAAmG;AAAA,GAAA,CAAA;AAAP,EAAA,OAAAC,IAAA,GAAArG,EAAA,CAAAsG,oBAAA,CAAA;AAAAC,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAC,IAAAA,IAAA,EAAA3F,OAAO;;;;;;yCAmCE4F,gBAAgB,CAAA;AAAArE,MAAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAYhBqE,gBAAgB,CAIvB;AAAApE,MAAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAACR,KAAc,IAAMA,KAAK,IAAI,IAAI,GAAGE,SAAS,GAAG2E,eAAe,CAAC7E,KAAK,CAAE;;;;;;;;;;;;;;;;;;;;;;;eAtD1E,CAAC;AAAEtB,MAAAA,OAAO,EAAEd,QAAQ;AAAEe,MAAAA,WAAW,EAAEK;AAAS,KAAA,CAAC;;;;iBAmB1ClB,sBAAsB;AAAAgH,MAAAA,WAAA,EAAA;AAAA,KAAA,EAAA;AAAAC,MAAAA,YAAA,EAAA,YAAA;AAAAC,MAAAA,KAAA,EAAA,IAAA;AAAAC,MAAAA,SAAA,EAGtBpH,eAAe;AAzCnBiH,MAAAA,WAAA,EAAA;AAAA,KAAA,CAAA;IAAAI,QAAA,EAAA,CAAA,SAAA,CAAA;AAAAtG,IAAAA,QAAA,EAAAV,EAAA;AAAAiH,IAAAA,QAAA,EAAA,CAAA;;;KAGN,CAAA;AAiBMC,IAAAA,QAAA,EAAA,IAAA;AAAAC,IAAAA,YAAA,EAAA,CAAA;AAAAC,MAAAA,IAAA,EAAA,UAAA;AAAAX,MAAAA,IAAA,EAAAzG,EAAA,CAAAqH,UAAA,CAAA,MAAAC,aAAa;;;;;;;;;gCAoNZC,aAAa,CAAA;AAAAnH,MAAAA,QAAA,EAAA;AAAA,KAAA,CAAA;AAAAoH,IAAAA,eAAA,EAAAxH,EAAA,CAAAyH,uBAAA,CAAAC,MAAA;AAAAC,IAAAA,aAAA,EAAA3H,EAAA,CAAA4H,iBAAA,CAAAC;AAAA,GAAA,CAAA;;;;;;QAlNb/G,OAAO;AAAAH,EAAAA,UAAA,EAAA,CAAA;UAzBnByF,SAAS;AAACxF,IAAAA,IAAA,EAAA,CAAA;AACTR,MAAAA,QAAQ,EAAE,CAAwD,sDAAA,CAAA;AAClE4G,MAAAA,QAAQ,EAAE,SAAS;AACnBC,MAAAA,QAAQ,EAAE,CAAA;;;AAGN,KAAA,CAAA;MACJO,eAAe,EAAEC,uBAAuB,CAACC,MAAM;MAC/CC,aAAa,EAAEC,iBAAiB,CAACC,IAAI;AACrCxH,MAAAA,IAAI,EAAE;AACJQ,QAAAA,KAAK,EAAE,qDAAqD;AAC5D,QAAA,iBAAiB,EAAE,4BAA4B;AAC/C,QAAA,aAAa,EAAE,MAAM;AACrB,QAAA,qCAAqC,EAAE,2BAA2B;AAClE,QAAA,2BAA2B,EAAE,UAAU;AACvC,QAAA,iBAAiB,EAAE,kBAAkB;AACrC,QAAA,sBAAsB,EAAE,qBAAqB;AAC7C,QAAA,SAAS,EAAE,sBAAsB;AACjC,QAAA,WAAW,EAAE,wBAAwB;AACrC,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,QAAQ,EAAE;OACX;AACDN,MAAAA,SAAS,EAAE,CAAC;AAAEC,QAAAA,OAAO,EAAEd,QAAQ;AAAEe,QAAAA,WAAW,EAASK;AAAA,OAAE,CAAC;MACxDgH,OAAO,EAAE,CAACR,aAAa,EAAED,UAAU,CAAC,MAAME,aAAa,CAAC;KACzD;;;;;YAiBEQ,YAAY;aAACnI,sBAAsB;;;YAGnCmI,YAAY;aAACpI,eAAe;;;YAG5BqI;;;YAGAA;;;YAUAA,KAAK;aAAC;AAAEC,QAAAA,SAAS,EAAEvB;OAAkB;;;YAYrCsB,KAAK;aAAC;AAAEC,QAAAA,SAAS,EAAEvB;OAAkB;;;YAGrCsB,KAAK;AAACpH,MAAAA,IAAA,EAAA,CAAA;QACLqH,SAAS,EAAGnG,KAAc,IAAMA,KAAK,IAAI,IAAI,GAAGE,SAAS,GAAG2E,eAAe,CAAC7E,KAAK;OAClF;;;YAUAoG;;;YASAA;;;;MA2IUX,aAAa,CAAA;AACdY,EAAAA,WAAW,GAAYnH,MAAM,CAACF,OAAO,CAAC;AAGhDiC,EAAAA,WAAAA,GAAA;AACE,IAAA,MAAMqF,UAAU,GAAGpH,MAAM,CAA0BC,UAAU,CAAC;AAE9D,IAAA,IAAImH,UAAU,CAACnG,aAAa,CAACoG,QAAQ,KAAK,QAAQ,EAAE;MAClDD,UAAU,CAACnG,aAAa,CAACqG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AACzD;AACF;EAGA9C,YAAYA,CAACC,KAAY,EAAA;AACvB,IAAA,MAAM8C,UAAU,GAAG,IAAI,CAACJ,WAAW;IAEnC,IAAII,UAAU,CAAClG,SAAS,IAAI,CAACkG,UAAU,CAACpG,QAAQ,EAAE;MAChDoG,UAAU,CAACtE,MAAM,EAAE;AACrB;IAOAwB,KAAK,CAAC+C,eAAe,EAAE;IACvB/C,KAAK,CAACC,cAAc,EAAE;AACxB;;;;;UA3BW6B,aAAa;AAAAzH,IAAAA,IAAA,EAAA,EAAA;AAAAC,IAAAA,MAAA,EAAAC,EAAA,CAAAC,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;UAAbqH,aAAa;AAAApH,IAAAA,YAAA,EAAA,IAAA;AAAAC,IAAAA,QAAA,EAAA,iBAAA;AAAAC,IAAAA,IAAA,EAAA;AAAAoI,MAAAA,SAAA,EAAA;AAAA,QAAA,OAAA,EAAA;OAAA;AAAAnI,MAAAA,cAAA,EAAA;KAAA;AAAAC,IAAAA,SAAA,EAFb,CAAC;AAAEC,MAAAA,OAAO,EAAEb,eAAe;AAAEc,MAAAA,WAAW,EAAE8G;AAAa,KAAE,CAAC;AAAA7G,IAAAA,QAAA,EAAAV;AAAA,GAAA,CAAA;;;;;;QAE1DuH,aAAa;AAAA5G,EAAAA,UAAA,EAAA,CAAA;UARzBT,SAAS;AAACU,IAAAA,IAAA,EAAA,CAAA;AACTR,MAAAA,QAAQ,EAAE,iBAAiB;AAC3BC,MAAAA,IAAI,EAAE;AACJQ,QAAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,SAAS,EAAE;OACZ;AACDN,MAAAA,SAAS,EAAE,CAAC;AAAEC,QAAAA,OAAO,EAAEb,eAAe;AAAEc,QAAAA,WAAW,EAAe8G;OAAE;KACrE;;;;;MCpSYmB,yBAAyB,GAAG,IAAIjJ,cAAc,CACzD,2BAA2B,EAC3B;AACEkJ,EAAAA,UAAU,EAAE,MAAM;EAClBC,OAAO,EAAEA,OAAO;IACdC,iBAAiB,EAAE,CAACC,KAAK;GAC1B;AACF,CAAA;;MC0CUC,YAAY,CAAA;AACbhI,EAAAA,WAAW,GAA4BC,MAAM,CAA+BC,UAAU,CAAC;AACzF+H,EAAAA,eAAe,GAAGhI,MAAM,CAAyB0H,yBAAyB,CAAC;AACnFO,EAAAA,mBAAmB,GACjBjI,MAAM,CAACkI,sBAAsB,EAAE;AAAEC,IAAAA,IAAI,EAAE,IAAI;AAAE/H,IAAAA,QAAQ,EAAE;GAAM,CAAC,IAAIY,SAAS;AACrEoH,EAAAA,UAAU,GAAGpI,MAAM,CAACqI,SAAS,EAAE;AAAEF,IAAAA,IAAI,EAAE,IAAI;AAAE/H,IAAAA,QAAQ,EAAE;AAAI,GAAE,CAAC;AAGtEkI,EAAAA,OAAO,GAAY,KAAK;EACxB/H,SAAS;AAEDgI,EAAAA,UAAU,GAAG,IAAI/G,OAAO,EAAQ;EAGxC,IACIgH,QAAQA,CAAC1H,KAAkB,EAAA;AAC7B,IAAA,IAAIA,KAAK,EAAE;MACT,IAAI,CAACP,SAAS,GAAGO,KAAK;AACtB,MAAA,IAAI,CAACP,SAAS,CAACkI,aAAa,CAAC,IAAI,CAAC;AACpC;AACF;AAMAC,EAAAA,SAAS,GAAY,KAAK;AAQ1Bb,EAAAA,iBAAiB,GACf,IAAI,CAACG,eAAe,CAACH,iBAAiB;AASCc,EAAAA,OAAO,GAAG,IAAIhH,YAAY,EAAqB;AAG/EiH,EAAAA,WAAW,GAAW,EAAE;EAGxBC,EAAE,GAAW7I,MAAM,CAAC8I,YAAY,CAAC,CAACC,KAAK,CAAC,sBAAsB,CAAC;EAGxE,IACI5H,QAAQA,GAAA;AACV,IAAA,OAAO,IAAI,CAACC,SAAS,IAAK,IAAI,CAACb,SAAS,IAAI,IAAI,CAACA,SAAS,CAACY,QAAS;AACtE;EACA,IAAIA,QAAQA,CAACL,KAAc,EAAA;IACzB,IAAI,CAACM,SAAS,GAAGN,KAAK;AACxB;AACQM,EAAAA,SAAS,GAAY,KAAK;EAGlC,IAAI4H,KAAKA,GAAA;AACP,IAAA,OAAO,CAAC,IAAI,CAACC,YAAY,CAACnI,KAAK;AACjC;EAGSmI,YAAY;AAGrBlH,EAAAA,WAAAA,GAAA;AACE,IAAA,MAAMyG,QAAQ,GAAGxI,MAAM,CAAuBxB,aAAa,EAAE;AAAEa,MAAAA,IAAI,EAAE,IAAI;AAAEe,MAAAA,QAAQ,EAAE;AAAI,KAAE,CAAC;AAC5F,IAAA,IAAI,CAAC6I,YAAY,GAAG,IAAI,CAAClJ,WAAW,CAACkB,aAAiC;AAEtE,IAAA,IAAIuH,QAAQ,EAAE;MACZ,IAAI,CAACA,QAAQ,GAAGA,QAAQ;AAC1B;AACF;AAEAU,EAAAA,WAAWA,GAAA;AACT,IAAA,IAAI,CAAC3I,SAAS,CAAC4I,YAAY,CAACnG,IAAI,EAAE;AACpC;AAEAJ,EAAAA,WAAWA,GAAA;AACT,IAAA,IAAI,CAAC+F,OAAO,CAACS,QAAQ,EAAE;AACvB,IAAA,IAAI,CAACb,UAAU,CAACvF,IAAI,EAAE;AACtB,IAAA,IAAI,CAACuF,UAAU,CAACa,QAAQ,EAAE;AAC5B;AAEAC,EAAAA,kBAAkBA,GAAA;IAGhB,IAAI,IAAI,CAACpB,mBAAmB,IAAI,IAAI,CAACA,mBAAmB,CAACqB,YAAY,EAAE;AACrE,MAAA,IAAI,CAACrB,mBAAmB,CAACqB,YAAY,CAACC,cAAc,CACjDC,IAAI,CACHtF,MAAM,CACJ,MAAM,IAAI,CAAC+D,mBAAmB,EAAEqB,YAAY,CAACC,cAAc,CAAClG,SAAS,CAACC,MAAM,KAAK,CAAC,CACnF,EACDmG,SAAS,CAAC,IAAI,CAAClB,UAAU,CAAC,CAC3B,CACAmB,SAAS,CAAEC,aAA2C,IAAI;QACzD,IAAI,CAACC,kBAAkB,CAACD,aAAa,CAACE,MAAM,CAACC,SAAS,CAAC;AACvD,QAAA,IAAI,CAACnB,OAAO,CAAC9F,IAAI,CAAC;AAChB/B,UAAAA,KAAK,EAAE6I,aAAa,CAACE,MAAM,CAACC,SAAS;AACrCC,UAAAA,SAAS,EAAE;AACZ,SAAA,CAAC;AACJ,OAAC,CAAC;AACN;AACF;EAGAC,QAAQA,CAACvF,KAAqB,EAAA;AAC5B,IAAA,IAAIA,KAAK,EAAE;AAGT,MAAA,IAAIA,KAAK,CAACG,OAAO,KAAKqF,GAAG,IAAI,CAACC,cAAc,CAACzF,KAAK,EAAE,UAAU,CAAC,EAAE;AAC/D,QAAA,IAAI,CAAClE,SAAS,CAAC4J,iBAAiB,EAAE;AACpC;MAEA,IAAI,IAAI,CAACnB,KAAK,IAAIvE,KAAK,CAACG,OAAO,KAAKC,SAAS,EAAE;AAG7C,QAAA,IAAI,CAACJ,KAAK,CAACK,MAAM,EAAE;AACjB,UAAA,IAAI,CAACvE,SAAS,CAAC6J,WAAW,CAACC,iBAAiB,EAAE;AAChD;QACA5F,KAAK,CAACC,cAAc,EAAE;AACxB;AACF;AAOA,IAAA,IAAI,IAAI,CAACuD,mBAAmB,EAAEqB,YAAY,CAACgB,MAAM,EAAE;AACjDC,MAAAA,OAAO,CAACC,OAAO,EAAE,CAACC,IAAI,CAAC,MAAM,IAAI,CAACC,YAAY,CAACjG,KAAK,CAAC,CAAC;AACxD,KAAC,MAAM;AACL,MAAA,IAAI,CAACiG,YAAY,CAACjG,KAAK,CAAC;AAC1B;AACF;AAGAO,EAAAA,KAAKA,GAAA;IACH,IAAI,IAAI,CAAC0D,SAAS,EAAE;MAClB,IAAI,CAACgC,YAAY,EAAE;AACrB;IACA,IAAI,CAACpC,OAAO,GAAG,KAAK;AAEpB,IAAA,IAAI,CAAC,IAAI,CAAC/H,SAAS,CAAC+H,OAAO,EAAE;AAC3B,MAAA,IAAI,CAAC/H,SAAS,CAACyE,KAAK,EAAE;AACxB;AACA,IAAA,IAAI,CAACzE,SAAS,CAAC4I,YAAY,CAACnG,IAAI,EAAE;AACpC;AAEA2H,EAAAA,MAAMA,GAAA;IACJ,IAAI,CAACrC,OAAO,GAAG,IAAI;AACnB,IAAA,IAAI,CAAC/H,SAAS,CAAC4I,YAAY,CAACnG,IAAI,EAAE;AACpC;EAGA0H,YAAYA,CAACjG,KAAqB,EAAA;IAChC,IAAI,CAAC,IAAI,CAACwE,YAAY,CAACnI,KAAK,IAAI,CAAC,CAAC2D,KAAK,EAAE;AACvC,MAAA,IAAI,CAAClE,SAAS,CAACyJ,QAAQ,CAACvF,KAAK,CAAC;AAChC;IAEA,IAAI,CAACA,KAAK,IAAI,IAAI,CAACmG,eAAe,CAACnG,KAAK,CAAC,EAAE;MACzC,IAAI,CAACmF,kBAAkB,CAAC,IAAI,CAACX,YAAY,CAACnI,KAAK,CAAC;AAEhD,MAAA,IAAI,CAAC6H,OAAO,CAAC9F,IAAI,CAAC;AAChB/B,QAAAA,KAAK,EAAE,IAAI,CAACmI,YAAY,CAACnI,KAAK;AAC9BiJ,QAAAA,SAAS,EAAE;AACZ,OAAA,CAAC;MAEFtF,KAAK,EAAEC,cAAc,EAAE;AACzB;AACF;EAEQkF,kBAAkBA,CAACiB,UAAkB,EAAA;IAC3C,IAAI,CAAC,IAAI,CAACtK,SAAS,EAAE6C,SAAS,EAAED,OAAO,IAAI0H,UAAU,KAAK,EAAE,IAAI,IAAI,CAAClC,OAAO,CAACtF,SAAS,CAACC,MAAM,EAAE;AAC7F,MAAA;AACF;IACA,MAAMH,OAAO,GAAG,IAAI,CAAC5C,SAAS,CAAC6C,SAAS,CAACD,OAAO;AAChD,IAAA,MAAMI,iBAAiB,GAAGJ,OAAO,CAACrC,KAAK;AACvC,IAAA,MAAM0C,OAAO,GAAGC,KAAK,CAACD,OAAO,CAACD,iBAAiB,CAAC;AAChD,IAAA,MAAMG,KAAK,GAAGH,iBAAiB,YAAYI,GAAG;AAC9C,IAAA,IAAIH,OAAO,EAAE;MACXL,OAAO,CAACc,UAAU,CAAC,CAAC,GAAGV,iBAAiB,EAAEsH,UAAU,CAAC,CAAC;KACvD,MAAM,IAAInH,KAAK,EAAE;AAChBP,MAAAA,OAAO,CAACc,UAAU,CAAC,IAAIN,GAAG,CAAC,CAAC,GAAGJ,iBAAiB,EAAEsH,UAAU,CAAC,CAAC,CAAC;AACjE;IACA,IAAIrH,OAAO,IAAIE,KAAK,EAAE;MACpB,IAAI,CAACnD,SAAS,CAAC6C,SAAS,CAACD,OAAO,CAACoB,WAAW,EAAE;MAC9C,IAAI,CAACuG,KAAK,EAAE;AACd;AACF;AAEAC,EAAAA,QAAQA,GAAA;AAEN,IAAA,IAAI,CAACxK,SAAS,CAAC4I,YAAY,CAACnG,IAAI,EAAE;AACpC;EAGAD,KAAKA,CAACiI,OAAsB,EAAA;AAC1B,IAAA,IAAI,CAAC/B,YAAY,CAAClG,KAAK,CAACiI,OAAO,CAAC;AAClC;AAGAF,EAAAA,KAAKA,GAAA;AACH,IAAA,IAAI,CAAC7B,YAAY,CAACnI,KAAK,GAAG,EAAE;IAC5B,IAAI,CAACsH,UAAU,EAAEjF,OAAO,EAAE8H,QAAQ,CAAC,IAAI,CAAC;AAC1C;EAGQL,eAAeA,CAACnG,KAAoB,EAAA;AAC1C,IAAA,OAAO,CAACyF,cAAc,CAACzF,KAAK,CAAC,IAAI,IAAId,GAAG,CAAC,IAAI,CAACkE,iBAAiB,CAAC,CAACqD,GAAG,CAACzG,KAAK,CAACG,OAAO,CAAC;AACrF;;;;;UAxNWmD,YAAY;AAAAjJ,IAAAA,IAAA,EAAA,EAAA;AAAAC,IAAAA,MAAA,EAAAC,EAAA,CAAAC,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;UAAZ6I,YAAY;AAAA5I,IAAAA,YAAA,EAAA,IAAA;AAAAC,IAAAA,QAAA,EAAA,6CAAA;AAAA+L,IAAAA,MAAA,EAAA;AAAA3C,MAAAA,QAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,CAAA;AAAAE,MAAAA,SAAA,EAAA,CAAA,uBAAA,EAAA,WAAA,EAyB6BhD,gBAAgB,CAAA;AAAAmC,MAAAA,iBAAA,EAAA,CAAA,+BAAA,EAAA,mBAAA,CAAA;AAAAe,MAAAA,WAAA,EAAA,aAAA;AAAAC,MAAAA,EAAA,EAAA,IAAA;AAAA1H,MAAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EA4BhDuE,gBAAgB;KAAA;AAAA0F,IAAAA,OAAA,EAAA;AAAAzC,MAAAA,OAAA,EAAA;KAAA;AAAAtJ,IAAAA,IAAA,EAAA;AAAAoI,MAAAA,SAAA,EAAA;AAAA,QAAA,SAAA,EAAA,kBAAA;AAAA,QAAA,MAAA,EAAA,SAAA;AAAA,QAAA,OAAA,EAAA,UAAA;AAAA,QAAA,OAAA,EAAA;OAAA;AAAA4D,MAAAA,UAAA,EAAA;AAAA,QAAA,IAAA,EAAA,IAAA;AAAA,QAAA,eAAA,EAAA,kBAAA;AAAA,QAAA,kBAAA,EAAA,qBAAA;AAAA,QAAA,mBAAA,EAAA,uEAAA;AAAA,QAAA,oBAAA,EAAA;OAAA;AAAA/L,MAAAA,cAAA,EAAA;KAAA;AAAA0G,IAAAA,QAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,CAAA;AAAAsF,IAAAA,aAAA,EAAA,IAAA;AAAA5L,IAAAA,QAAA,EAAAV;AAAA,GAAA,CAAA;;;;;;QArDzB+I,YAAY;AAAApI,EAAAA,UAAA,EAAA,CAAA;UAhBxBT,SAAS;AAACU,IAAAA,IAAA,EAAA,CAAA;AACTR,MAAAA,QAAQ,EAAE,6CAA6C;AACvD4G,MAAAA,QAAQ,EAAE,+BAA+B;AACzC3G,MAAAA,IAAI,EAAE;AACJQ,QAAAA,KAAK,EAAE,kCAAkC;AACzC,QAAA,WAAW,EAAE,kBAAkB;AAC/B,QAAA,QAAQ,EAAE,SAAS;AACnB,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,iBAAiB,EAAE,kBAAkB;AACrC,QAAA,oBAAoB,EAAE,qBAAqB;AAC3C,QAAA,qBAAqB,EAAE,uEAAuE;AAC9F,QAAA,sBAAsB,EAAE;AACzB;KACF;;;;;YAeEmH,KAAK;aAAC,iBAAiB;;;YAWvBA,KAAK;AAACpH,MAAAA,IAAA,EAAA,CAAA;AAAE2L,QAAAA,KAAK,EAAE,uBAAuB;AAAEtE,QAAAA,SAAS,EAAEvB;OAAkB;;;YAQrEsB,KAAK;aAAC,+BAA+B;;;YAWrCE,MAAM;aAAC,sBAAsB;;;YAG7BF;;;YAGAA;;;YAGAA,KAAK;aAAC;AAAEC,QAAAA,SAAS,EAAEvB;OAAkB;;;;;MChD3B8F,WAAW,CAAA;AASZzL,EAAAA,WAAW,GAA4BC,MAAM,CAA0BC,UAAU,CAAC;AACpFC,EAAAA,kBAAkB,GAAGF,MAAM,CAACG,iBAAiB,CAAC;AACtDiD,EAAAA,SAAS,GAAcpD,MAAM,CAACqI,SAAS,EAAE;AAAEjI,IAAAA,QAAQ,EAAE,IAAI;AAAE+H,IAAAA,IAAI,EAAE;AAAI,GAAE,CAAE;AAMhEsD,EAAAA,WAAW,GAAW,eAAe;AAOtCC,EAAAA,uBAAuB,GAAkB,IAAI;AAGpCnD,EAAAA,UAAU,GAAG,IAAI/G,OAAO,EAAQ;EAGzCmK,sBAAsB;EAGtBC,qBAAqB;EAGrBC,uBAAuB;EAEvBC,kBAAkB;EAG1BC,UAAU;EAGVC,IAAI,GAAWhM,MAAM,CAAC8I,YAAY,CAAC,CAACC,KAAK,CAAC,gBAAgB,CAAC;AAG3DkD,EAAAA,SAAS,GAAW,CAAC;AAMrBC,EAAAA,aAAa,GAAkB,IAAI;EAGnC9B,WAAW;AAGX+B,EAAAA,UAAU,GAAeA,MAAK,EAAG;AAGjCC,EAAAA,SAAS,GAAyBA,MAAK,EAAG;EAG1C,IACIvL,IAAIA,GAAA;IACN,IAAI,IAAI,CAACwL,aAAa,EAAE;MACtB,OAAO,IAAI,CAACA,aAAa;AAC3B;AAEA,IAAA,OAAO,IAAI,CAACrD,KAAK,GAAG,IAAI,GAAG,SAAS;AACtC;EACA,IAAInI,IAAIA,CAACA,IAAmB,EAAA;IAC1B,IAAI,CAACwL,aAAa,GAAGxL,IAAI;AAC3B;EACQwL,aAAa;EAMMC,mBAAmB;EAG9C,IACIC,iBAAiBA,GAAA;AACnB,IAAA,OAAO,IAAI,CAACT,kBAAkB,CAACU,OAAO;AACxC;EACA,IAAID,iBAAiBA,CAACzL,KAA2B,EAAA;AAC/C,IAAA,IAAI,CAACgL,kBAAkB,CAACU,OAAO,GAAG1L,KAAK;AACzC;EAMA,IACIA,KAAKA,GAAA;IACP,OAAO,IAAI,CAACC,MAAM;AACpB;EACA,IAAID,KAAKA,CAACA,KAAU,EAAA;AAClB,IAAA,IAAI,CAAC2L,UAAU,CAAC3L,KAAK,CAAC;IACtB,IAAI,CAACC,MAAM,GAAGD,KAAK;AACrB;EACUC,MAAM;EAMhB,IAAI8H,EAAEA,GAAA;AACJ,IAAA,OAAO,IAAI,CAACkD,UAAU,GAAG,IAAI,CAACA,UAAU,CAAClD,EAAE,GAAG,IAAI,CAACmD,IAAI;AACzD;AAMwCU,EAAAA,QAAQ,GAAY,KAAK;EAMjE,IACI9D,WAAWA,GAAA;AACb,IAAA,OAAO,IAAI,CAACmD,UAAU,GAAG,IAAI,CAACA,UAAU,CAACnD,WAAW,GAAG,IAAI,CAAC+D,YAAY;AAC1E;EACA,IAAI/D,WAAWA,CAAC9H,KAAa,EAAA;IAC3B,IAAI,CAAC6L,YAAY,GAAG7L,KAAK;AACzB,IAAA,IAAI,CAACqI,YAAY,CAACnG,IAAI,EAAE;AAC1B;EACU2J,YAAY;EAGtB,IAAIrE,OAAOA,GAAA;AACT,IAAA,OAAQ,IAAI,CAACyD,UAAU,IAAI,IAAI,CAACA,UAAU,CAACzD,OAAO,IAAK,IAAI,CAACsE,eAAe,EAAE;AAC/E;EAMA,IAAI5D,KAAKA,GAAA;IACP,OAAO,CAAC,CAAC,IAAI,CAAC+C,UAAU,IAAI,IAAI,CAACA,UAAU,CAAC/C,KAAK,MAAM,CAAC,IAAI,CAAClF,KAAK,IAAI,IAAI,CAACA,KAAK,CAACR,MAAM,KAAK,CAAC,CAAC;AAChG;EAMA,IACInC,QAAQA,GAAA;AACV,IAAA,OAAO,IAAI,CAACiC,SAAS,GAAG,CAAC,CAAC,IAAI,CAACA,SAAS,CAACjC,QAAQ,GAAG,IAAI,CAACC,SAAS;AACpE;EACA,IAAID,QAAQA,CAACL,KAAc,EAAA;IACzB,IAAI,CAACM,SAAS,GAAGN,KAAK;IACtB,IAAI,CAAC+L,eAAe,EAAE;AACxB;AACUzL,EAAAA,SAAS,GAAY,KAAK;AAGT0L,EAAAA,eAAe,GAA8B,YAAY;EAEpF,IACIxL,QAAQA,CAACR,KAAa,EAAA;IACxB,IAAI,CAACoL,aAAa,GAAGpL,KAAK;IAC1B,IAAI,CAACmL,SAAS,GAAGnL,KAAK;AACxB;EAGA,IAAIiM,gBAAgBA,GAAA;AAClB,IAAA,OAAOC,KAAK,CAAC,GAAG,IAAI,CAAClJ,KAAK,CAACmJ,GAAG,CAAEnK,IAAI,IAAKA,IAAI,CAACvB,QAAQ,CAAC,CAAC;AAC1D;EAGA,IAAI2L,eAAeA,GAAA;AACjB,IAAA,OAAOF,KAAK,CAAC,GAAG,IAAI,CAAClJ,KAAK,CAACmJ,GAAG,CAAEnK,IAAI,IAAKA,IAAI,CAACrB,OAAO,CAAC,CAAC;AACzD;EAGA,IAAI0L,iBAAiBA,GAAA;AACnB,IAAA,OAAOH,KAAK,CAAC,GAAG,IAAI,CAAClJ,KAAK,CAACmJ,GAAG,CAAEnK,IAAI,IAAKA,IAAI,CAACpB,SAAS,CAAC,CAAC;AAC3D;AAOmB0L,EAAAA,WAAW,GAAG,IAAIzL,YAAY,EAAO;EAQxDmC,KAAK;AAOIqF,EAAAA,YAAY,GAAG,IAAI3H,OAAO,EAAQ;EAG3C,IAAI6L,UAAUA,GAAA;AACZ,IAAA,OAAO,IAAI,CAACvB,kBAAkB,CAACuB,UAAU;AAC3C;EACA,IAAIA,UAAUA,CAACvM,KAAc,EAAA;AAC3B,IAAA,IAAI,CAACgL,kBAAkB,CAACuB,UAAU,GAAGvM,KAAK;AAC5C;AAGAiB,EAAAA,WAAAA,GAAA;AACE,IAAA,MAAMuL,UAAU,GAAGtN,MAAM,CAACuN,MAAM,EAAE;AAAEnN,MAAAA,QAAQ,EAAE;AAAM,KAAA,CAAE;AACtD,IAAA,MAAMoN,eAAe,GAAGxN,MAAM,CAACyN,kBAAkB,EAAE;AAAErN,MAAAA,QAAQ,EAAE;AAAM,KAAA,CAAE;AACvE,IAAA,MAAMsN,wBAAwB,GAAG1N,MAAM,CAAC2N,oBAAoB,CAAC;AAC7D,IAAA,MAAMvK,SAAS,GAAG,IAAI,CAACA,SAAS;IAEhC,IAAI,IAAI,CAACA,SAAS,EAAE;AAClB,MAAA,IAAI,CAACA,SAAS,CAACwK,aAAa,GAAG,IAAI;AACrC;AAEA,IAAA,IAAI,CAAC9B,kBAAkB,GAAG,IAAI+B,kBAAkB,CAC9CH,wBAAwB,EACxBtK,SAAS,EACToK,eAAe,EACfF,UAAU,EACV,IAAI,CAACnE,YAAY,CAClB;AACH;AAEAE,EAAAA,kBAAkBA,GAAA;IAChB,IAAI,CAACe,WAAW,GAAG,IAAI0D,eAAe,CAAU,IAAI,CAAChK,KAAK,CAAC,CACxDiK,QAAQ,EAAE,CACVC,uBAAuB,EAAE,CACzBC,cAAc,EAAE,CAChBC,yBAAyB,CAAC,KAAK,CAAC;AAEnC,IAAA,IAAI,CAAC9D,WAAW,CAAC+D,MAAM,CAACzE,SAAS,CAAC,MAAM,IAAI,CAACS,iBAAiB,EAAE,CAAC;IAGjE,IAAI,CAACrG,KAAK,CAACsK,OAAO,CAAC5E,IAAI,CAAC6E,SAAS,CAAC,IAAI,CAAC,EAAE5E,SAAS,CAAC,IAAI,CAAClB,UAAU,CAAC,CAAC,CAACmB,SAAS,CAAC,MAAK;MAClF,IAAI,IAAI,CAACvI,QAAQ,EAAE;AAGjBoJ,QAAAA,OAAO,CAACC,OAAO,EAAE,CAACC,IAAI,CAAC,MAAK;UAC1B,IAAI,CAACoC,eAAe,EAAE;AACxB,SAAC,CAAC;AACJ;MAEA,IAAI,CAACyB,WAAW,EAAE;MAGlB,IAAI,CAACC,eAAe,EAAE;MAGtB,IAAI,CAACC,6BAA6B,EAAE;MAGpC,IAAI,IAAI,CAACzC,UAAU,EAAE9D,mBAAmB,EAAEqB,YAAY,CAACgB,MAAM,EAAE;AAE7DC,QAAAA,OAAO,CAACC,OAAO,EAAE,CAACC,IAAI,CAAC,MAAK;AAC1B,UAAA,IAAI,CAACsB,UAAU,EAAE9D,mBAAmB,EAAEwG,cAAc,EAAE;AACxD,SAAC,CAAC;AACJ;AAEA,MAAA,IAAI,CAACtF,YAAY,CAACnG,IAAI,EAAE;AAC1B,KAAC,CAAC;AACJ;AAEA0L,EAAAA,QAAQA,GAAA;AACN,IAAA,IAAI,CAACvF,YAAY,CAACnG,IAAI,EAAE;AAC1B;AAEA2L,EAAAA,SAASA,GAAA;IACP,IAAI,IAAI,CAACvL,SAAS,EAAE;MAIlB,IAAI,CAACwL,gBAAgB,EAAE;MAEvB,IAAI,IAAI,CAACxL,SAAS,CAACjC,QAAQ,KAAK,IAAI,CAACC,SAAS,EAAE;QAC9C,IAAI,CAACD,QAAQ,GAAG,CAAC,CAAC,IAAI,CAACiC,SAAS,CAACjC,QAAQ;AAC3C;AACF;AACF;AAEAyB,EAAAA,WAAWA,GAAA;AACT,IAAA,IAAI,CAACwH,WAAW,EAAEyE,OAAO,EAAE;AAC3B,IAAA,IAAI,CAACtG,UAAU,CAACvF,IAAI,EAAE;AACtB,IAAA,IAAI,CAACuF,UAAU,CAACa,QAAQ,EAAE;AAC1B,IAAA,IAAI,CAACD,YAAY,CAACC,QAAQ,EAAE;IAC5B,IAAI,CAAC0F,kBAAkB,EAAE;AAC3B;EAGArG,aAAaA,CAACQ,YAAgC,EAAA;IAC5C,IAAI,CAAC8C,UAAU,GAAG9C,YAAY;AAI9B,IAAA,IAAI,CAAClJ,WAAW,CAACkB,aAAa,CAACqG,YAAY,CAAC,qBAAqB,EAAE2B,YAAY,CAACJ,EAAE,CAAC;AACrF;EAMAkG,iBAAiBA,CAACC,GAAa,EAAA;IAC7B,IAAIA,GAAG,CAAC1L,MAAM,EAAE;AACd,MAAA,IAAI,CAACvD,WAAW,CAACkB,aAAa,CAACqG,YAAY,CAAC,kBAAkB,EAAE0H,GAAG,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChF,KAAC,MAAM;MACL,IAAI,CAAClP,WAAW,CAACkB,aAAa,CAACiO,eAAe,CAAC,kBAAkB,CAAC;AACpE;AACF;EAGAzC,UAAUA,CAAC3L,KAAU,EAAA;EAGrBqO,gBAAgBA,CAACC,EAAwB,EAAA;IACvC,IAAI,CAAChD,SAAS,GAAGgD,EAAE;AACrB;EAGAC,iBAAiBA,CAACD,EAAc,EAAA;IAC9B,IAAI,CAACjD,UAAU,GAAGiD,EAAE;AACtB;EAGAE,gBAAgBA,CAACC,UAAmB,EAAA;IAClC,IAAI,CAACpO,QAAQ,GAAGoO,UAAU;AAC1B,IAAA,IAAI,CAACpG,YAAY,CAACnG,IAAI,EAAE;AAC1B;EAMAwM,gBAAgBA,CAAC/K,KAAiB,EAAA;AAChC,IAAA,IAAI,CAAC,IAAI,CAACgL,mBAAmB,CAAChL,KAAK,CAAC,EAAE;MACpC,IAAI,CAAC1B,KAAK,EAAE;AACd;AACF;EAMAA,KAAKA,CAACiI,OAAsB,EAAA;IAC1B,IAAI,IAAI,CAAC7J,QAAQ,EAAE;AACjB,MAAA;AACF;IAGA,IAAI,IAAI,CAAC4K,UAAU,IAAI,IAAI,CAACA,UAAU,CAACzD,OAAO,EAAE,CAE/C,MAAM,IAAI,IAAI,CAACxE,KAAK,CAACR,MAAM,GAAG,CAAC,EAAE;AAChC,MAAA,IAAI,CAAC8G,WAAW,CAACsF,kBAAkB,EAAE;AACrC,MAAA,IAAI,CAACvG,YAAY,CAACnG,IAAI,EAAE;AAC1B,KAAC,MAAM;AACL,MAAA,IAAI,CAAC2M,WAAW,CAAC3E,OAAO,CAAC;AACzB,MAAA,IAAI,CAAC7B,YAAY,CAACnG,IAAI,EAAE;AAC1B;AACF;EAGA2M,WAAWA,CAAC3E,OAAsB,EAAA;IAChC,IAAI,IAAI,CAACe,UAAU,EAAE;AACnB,MAAA,IAAI,CAACA,UAAU,CAAChJ,KAAK,CAACiI,OAAO,CAAC;AAChC;AACF;EAKAhB,QAAQA,CAACvF,KAAoB,EAAA;AAC3B,IAAA,MAAM1F,MAAM,GAAG0F,KAAK,CAAC1F,MAAqB;IAE1C,IAAIA,MAAM,IAAIA,MAAM,CAAC2D,SAAS,CAACkN,QAAQ,CAAC,UAAU,CAAC,EAAE;AACnD,MAAA,IAAI,CAACxF,WAAW,CAACyF,SAAS,CAACpL,KAAK,CAAC;AACjC,MAAA,IAAI,CAAC0E,YAAY,CAACnG,IAAI,EAAE;AAC1B;AACF;AAKUuL,EAAAA,eAAeA,GAAA;AAEvB,IAAA,IAAI,CAACtC,SAAS,GAAG,IAAI,CAACC,aAAa,KAAK,IAAI,CAACpI,KAAK,CAACR,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3E;AAMUkL,EAAAA,6BAA6BA,GAAA;AAErC,IAAA,IAAI,IAAI,CAAC9C,uBAAuB,IAAI,IAAI,EAAE;AACxC,MAAA,IAAI,IAAI,CAAC5H,KAAK,CAACR,MAAM,EAAE;AACrB,QAAA,MAAMwM,YAAY,GAAGC,IAAI,CAACC,GAAG,CAAC,IAAI,CAACtE,uBAAuB,EAAE,IAAI,CAAC5H,KAAK,CAACR,MAAM,GAAG,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC8G,WAAW,CAAC6F,aAAa,CAACH,YAAY,CAAC;AAC9C,OAAC,MAAM;QACL,IAAI,CAAC/M,KAAK,EAAE;AACd;AACF;IAEA,IAAI,CAAC2I,uBAAuB,GAAG,IAAI;AACrC;EAQQwE,aAAaA,CAAC9L,KAAa,EAAA;IACjC,OAAOA,KAAK,IAAI,CAAC,IAAIA,KAAK,GAAG,IAAI,CAACN,KAAK,CAACR,MAAM;AAChD;AAGAsL,EAAAA,gBAAgBA,GAAA;AACd,IAAA,IAAI,CAAC9C,kBAAkB,CAAC8C,gBAAgB,EAAE;AAC5C;AAGA5J,EAAAA,KAAKA,GAAA;AACH,IAAA,IAAI,CAAC,IAAI,CAAC4H,eAAe,EAAE,EAAE;AAC3B,MAAA,IAAI,CAACxC,WAAW,CAAC6F,aAAa,CAAC,CAAC,CAAC,CAAC;AACpC;AAEA,IAAA,IAAI,CAAC,IAAI,CAAC9O,QAAQ,EAAE;MAClB,IAAI,IAAI,CAAC4K,UAAU,EAAE;AAKnBoE,QAAAA,UAAU,CAAC,MAAK;AACd,UAAA,IAAI,CAAC,IAAI,CAAC7H,OAAO,EAAE;YACjB,IAAI,CAAC8H,cAAc,EAAE;AACvB;AACF,SAAC,CAAC;AACJ,OAAC,MAAM;QAEL,IAAI,CAACA,cAAc,EAAE;AACvB;AACF;AACF;AAGAA,EAAAA,cAAcA,GAAA;IACZ,IAAI,CAACjE,UAAU,EAAE;AACjB,IAAA,IAAI,CAACjM,kBAAkB,CAACmQ,YAAY,EAAE;AACtC,IAAA,IAAI,CAAClH,YAAY,CAACnG,IAAI,EAAE;AAC1B;AAOAmH,EAAAA,iBAAiBA,GAAA;AACf,IAAA,IAAI,IAAI,CAAC8B,SAAS,KAAK,CAAC,CAAC,EAAE;AACzB,MAAA,IAAI,CAACA,SAAS,GAAG,CAAC,CAAC;AACnB,MAAA,IAAI,CAAC/L,kBAAkB,CAACmQ,YAAY,EAAE;AAEtCF,MAAAA,UAAU,CAAC,MAAK;AACd,QAAA,IAAI,CAAClE,SAAS,GAAG,IAAI,CAACC,aAAa,IAAI,CAAC;AACxC,QAAA,IAAI,CAAChM,kBAAkB,CAACmQ,YAAY,EAAE;AACxC,OAAC,CAAC;AACJ;AACF;AAEQ/B,EAAAA,WAAWA,GAAA;IACjB,IAAI,CAACQ,kBAAkB,EAAE;IACzB,IAAI,CAACwB,mBAAmB,EAAE;IAC1B,IAAI,CAACC,qBAAqB,EAAE;AAC9B;AAEQzB,EAAAA,kBAAkBA,GAAA;IACxB,IAAI,IAAI,CAACnD,sBAAsB,EAAE;AAC/B,MAAA,IAAI,CAACA,sBAAsB,CAAC6E,WAAW,EAAE;MACzC,IAAI,CAAC7E,sBAAsB,GAAG,IAAI;AACpC;IAEA,IAAI,IAAI,CAACC,qBAAqB,EAAE;AAC9B,MAAA,IAAI,CAACA,qBAAqB,CAAC4E,WAAW,EAAE;MACxC,IAAI,CAAC5E,qBAAqB,GAAG,IAAI;AACnC;IAEA,IAAI,IAAI,CAACC,uBAAuB,EAAE;AAChC,MAAA,IAAI,CAACA,uBAAuB,CAAC2E,WAAW,EAAE;MAC1C,IAAI,CAAC3E,uBAAuB,GAAG,IAAI;AACrC;AACF;AAGQyE,EAAAA,mBAAmBA,GAAA;IACzB,IAAI,CAAC3E,sBAAsB,GAAG,IAAI,CAACoB,gBAAgB,CAACrD,SAAS,CAAEjF,KAAK,IAAI;AACtE,MAAA,MAAMgM,SAAS,GAAW,IAAI,CAAC3M,KAAK,CAACC,OAAO,EAAE,CAACC,OAAO,CAACS,KAAK,CAAC3B,IAAI,CAAC;AAElE,MAAA,IAAI,IAAI,CAACoN,aAAa,CAACO,SAAS,CAAC,EAAE;AACjC,QAAA,IAAI,CAACrG,WAAW,CAACsG,gBAAgB,CAACD,SAAS,CAAC;AAC9C;AACA,MAAA,IAAI,CAACtH,YAAY,CAACnG,IAAI,EAAE;AAC1B,KAAC,CAAC;IAEF,IAAI,CAAC4I,qBAAqB,GAAG,IAAI,CAACsB,eAAe,CAACxD,SAAS,CAAC,MAAK;MAC/D,IAAI,CAAC1E,KAAK,EAAE;AACZ,MAAA,IAAI,CAACmE,YAAY,CAACnG,IAAI,EAAE;AAC1B,KAAC,CAAC;AACJ;AAEQuN,EAAAA,qBAAqBA,GAAA;IAC3B,IAAI,CAAC1E,uBAAuB,GAAG,IAAI,CAACsB,iBAAiB,CAACzD,SAAS,CAAEjF,KAAK,IAAI;AACxE,MAAA,MAAM3B,IAAI,GAAG2B,KAAK,CAAC3B,IAAI;AACvB,MAAA,MAAM2N,SAAS,GAAG,IAAI,CAAC3M,KAAK,CAACC,OAAO,EAAE,CAACC,OAAO,CAACS,KAAK,CAAC3B,IAAI,CAAC;MAK1D,IAAI,IAAI,CAACoN,aAAa,CAACO,SAAS,CAAC,IAAI3N,IAAI,CAACtC,SAAS,EAAE;QACnD,IAAI,CAACkL,uBAAuB,GAAG+E,SAAS;AAC1C;AACF,KAAC,CAAC;AACJ;EAGQhB,mBAAmBA,CAAChL,KAAY,EAAA;AACtC,IAAA,IAAIkM,cAAc,GAAGlM,KAAK,CAAC1F,MAA4B;IAEvD,OAAO4R,cAAc,IAAIA,cAAc,KAAK,IAAI,CAAC5Q,WAAW,CAACkB,aAAa,EAAE;MAC1E,IAAI0P,cAAc,CAACjO,SAAS,CAACkN,QAAQ,CAAC,UAAU,CAAC,EAAE;AACjD,QAAA,OAAO,IAAI;AACb;MAEAe,cAAc,GAAGA,cAAc,CAACC,aAAa;AAC/C;AAEA,IAAA,OAAO,KAAK;AACd;AAGQhE,EAAAA,eAAeA,GAAA;AACrB,IAAA,OAAO,IAAI,CAAC9I,KAAK,IAAI,IAAI,CAACA,KAAK,CAAC+M,IAAI,CAAE/N,IAAI,IAAKA,IAAI,CAACtC,SAAS,CAAC;AAChE;AAGQqM,EAAAA,eAAeA,GAAA;IACrB,IAAI,IAAI,CAAC/I,KAAK,EAAE;AACd,MAAA,IAAI,CAACA,KAAK,CAACgN,OAAO,CAAEhO,IAAI,IAAI;AAC1BA,QAAAA,IAAI,CAACpC,iBAAiB,GAAG,IAAI,CAACU,SAAS;AACvC0B,QAAAA,IAAI,CAAC5C,kBAAkB,CAACmQ,YAAY,EAAE;AACxC,OAAC,CAAC;AACJ;AACF;;;;;UAjjBW7E,WAAW;AAAA1M,IAAAA,IAAA,EAAA,EAAA;AAAAC,IAAAA,MAAA,EAAAC,EAAA,CAAAC,eAAA,CAAAmG;AAAA,GAAA,CAAA;AAAX,EAAA,OAAAC,IAAA,GAAArG,EAAA,CAAAsG,oBAAA,CAAA;AAAAC,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAC,IAAAA,IAAA,EAAA+F,WAAW;AAuHFrM,IAAAA,YAAA,EAAA,IAAA;AAAAC,IAAAA,QAAA,EAAA,eAAA;AAAA+L,IAAAA,MAAA,EAAA;AAAAtK,MAAAA,IAAA,EAAA,MAAA;AAAAyL,MAAAA,mBAAA,EAAA,CAAA,kBAAA,EAAA,qBAAA,CAAA;AAAAC,MAAAA,iBAAA,EAAA,mBAAA;AAAAzL,MAAAA,KAAA,EAAA,OAAA;AAAA4L,MAAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAAhH,gBAAgB,CAiChB;AAAAkD,MAAAA,WAAA,EAAA,aAAA;AAAAzH,MAAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAAuE,gBAAgB,CAhKzB;AAAAoH,MAAAA,eAAA,EAAA,CAAA,kBAAA,EAAA,iBAAA,CAAA;AAAAxL,MAAAA,QAAA,EAAA;KAAA;AAAA8J,IAAAA,OAAA,EAAA;AAAAgC,MAAAA,WAAA,EAAA;KAAA;AAAA/N,IAAAA,IAAA,EAAA;AAAAoI,MAAAA,SAAA,EAAA;AAAA,QAAA,OAAA,EAAA,SAAA;AAAA,QAAA,MAAA,EAAA,SAAA;AAAA,QAAA,SAAA,EAAA;OAAA;AAAA4D,MAAAA,UAAA,EAAA;AAAA,QAAA,eAAA,EAAA,6BAAA;AAAA,QAAA,oBAAA,EAAA,wBAAA;AAAA,QAAA,oBAAA,EAAA,qBAAA;AAAA,QAAA,mBAAA,EAAA,YAAA;AAAA,QAAA,WAAA,EAAA,MAAA;AAAA,QAAA,8BAAA,EAAA,UAAA;AAAA,QAAA,oBAAA,EAAA,UAAA;AAAA,QAAA,6BAAA,EAAA,YAAA;AAAA,QAAA,8BAAA,EAAA,UAAA;AAAA,QAAA,oBAAA,EAAA,uDAAA;AAAA,QAAA,mBAAA,EAAA,SAAA;AAAA,QAAA,yBAAA,EAAA,YAAA;AAAA,QAAA,uBAAA,EAAA,iBAAA;AAAA,QAAA,IAAA,EAAA;OAAA;AAAA/L,MAAAA,cAAA,EAAA;KAAA;AAAAC,IAAAA,SAAA,EAAA,CACT;AAAEC,MAAAA,OAAO,EAAEuR,mBAAmB;AAAEtR,MAAAA,WAAW,EAAE+L;AAAa,KAAA,EAC1D;AAAEhM,MAAAA,OAAO,EAAEhB,aAAa;AAAEiB,MAAAA,WAAW,EAAE+L;AAAa,KAAA,CACrD;AAuMgBwF,IAAAA,OAAA,EAAA,CAAA;AAAAnL,MAAAA,YAAA,EAAA,OAAA;AAAAE,MAAAA,SAAA,EAAArH,QAAQ;;;;;cAhOf,CAA2B,yBAAA,CAAA;AAAAwH,IAAAA,QAAA,EAAA,IAAA;IAAA+K,MAAA,EAAA,CAAA,ygEAAA,CAAA;AAAAzK,IAAAA,eAAA,EAAAxH,EAAA,CAAAyH,uBAAA,CAAAC,MAAA;AAAAC,IAAAA,aAAA,EAAA3H,EAAA,CAAA4H,iBAAA,CAAAC;AAAA,GAAA,CAAA;;;;;;QA8B1B2E,WAAW;AAAA7L,EAAAA,UAAA,EAAA,CAAA;UAhCvByF,SAAS;AACExF,IAAAA,IAAA,EAAA,CAAA;AAAAR,MAAAA,QAAA,EAAA,eAAe;AACf6G,MAAAA,QAAA,EAAA,CAA2B,yBAAA,CAAA;AAC3BD,MAAAA,QAAA,EAAA,aAAa;AACjB3G,MAAAA,IAAA,EAAA;AACJQ,QAAAA,KAAK,EAAE,eAAe;AACtB,QAAA,iBAAiB,EAAE,6BAA6B;AAChD,QAAA,sBAAsB,EAAE,wBAAwB;AAChD,QAAA,sBAAsB,EAAE,qBAAqB;AAC7C,QAAA,qBAAqB,EAAE,YAAY;AACnC,QAAA,aAAa,EAAE,MAAM;AACrB,QAAA,gCAAgC,EAAE,UAAU;AAC5C,QAAA,sBAAsB,EAAE,UAAU;AAClC,QAAA,+BAA+B,EAAE,YAAY;AAC7C,QAAA,gCAAgC,EAAE,UAAU;AAC5C,QAAA,sBAAsB,EAAE,uDAAuD;AAC/E,QAAA,qBAAqB,EAAE,SAAS;AAChC,QAAA,2BAA2B,EAAE,YAAY;AACzC,QAAA,yBAAyB,EAAE,iBAAiB;AAC5C,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,QAAQ,EAAE,SAAS;AACnB,QAAA,WAAW,EAAE,kBAAkB;AAC/B,QAAA,MAAM,EAAE;OACT;AACUN,MAAAA,SAAA,EAAA,CACT;AAAEC,QAAAA,OAAO,EAAEuR,mBAAmB;AAAEtR,QAAAA,WAAW;AAAe,OAAA,EAC1D;AAAED,QAAAA,OAAO,EAAEhB,aAAa;AAAEiB,QAAAA,WAAW;AAAe,OAAA,CACrD;MAAAkH,aAAA,EAEcC,iBAAiB,CAACC,IAAI;MACpBL,eAAA,EAAAC,uBAAuB,CAACC,MAAM;MAAAuK,MAAA,EAAA,CAAA,ygEAAA;KAAA;;;;;YAmE9CjK;;;YAiBAA,KAAK;aAAC,kBAAkB;;;YAGxBA;;;YAYAA;;;YAsBAA,KAAK;aAAC;AAAEC,QAAAA,SAAS,EAAEvB;OAAkB;;;YAMrCsB;;;YA2BAA,KAAK;aAAC;AAAEC,QAAAA,SAAS,EAAEvB;OAAkB;;;YAWrCsB,KAAK;aAAC,kBAAkB;;;YAExBA;;;YA0BAE;;;YAGAgK,eAAe;MAACtR,IAAA,EAAA,CAAAlB,QAAQ,EAAE;AAGzBkH,QAAAA,WAAW,EAAE;OACd;;;;;AC5PH,MAAMuL,iBAAiB,GAAG,CAAC3F,WAAW,EAAE1L,OAAO,EAAEiI,YAAY,EAAExB,aAAa,EAAE1H,mBAAmB,CAAC;MAcrFuS,cAAc,CAAA;;;;;UAAdA,cAAc;AAAAtS,IAAAA,IAAA,EAAA,EAAA;AAAAC,IAAAA,MAAA,EAAAC,EAAA,CAAAC,eAAA,CAAAoS;AAAA,GAAA,CAAA;;;;;UAAdD,cAAc;AAAAtK,IAAAA,OAAA,EAAA,CAXfwK,eAAe,EAAEhL,aAAa,EAHfkF,WAAW,EAAE1L,OAAO,EAAEiI,YAAY,EAAExB,aAAa,EAAE1H,mBAAmB,CAAtE;IAAA0S,OAAA,EAAA,CAAA/F,WAAW,EAAE1L,OAAO,EAAEiI,YAAY,EAAExB,aAAa,EAAE1H,mBAAmB;AAAA,GAAA,CAAA;AAcpF,EAAA,OAAA2S,IAAA,GAAAxS,EAAA,CAAAyS,mBAAA,CAAA;AAAAlM,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAA9F,IAAAA,QAAA,EAAAV,EAAA;AAAAyG,IAAAA,IAAA,EAAA2L,cAAc;AATd7R,IAAAA,SAAA,EAAA,CACT;AACEC,MAAAA,OAAO,EAAEkI,yBAAyB;AAClCgK,MAAAA,QAAQ,EAAE;QACR7J,iBAAiB,EAAE,CAACC,KAAK;AACA;AAC5B,KAAA,CACF;AAAAhB,IAAAA,OAAA,EAAA,CATSwK,eAAe,EAAEhL,aAAa,EAHFxG,OAAO;AAAA,GAAA,CAAA;;;;;;QAclCsR,cAAc;AAAAzR,EAAAA,UAAA,EAAA,CAAA;UAZ1B0R,QAAQ;AAACzR,IAAAA,IAAA,EAAA,CAAA;MACRkH,OAAO,EAAE,CAACwK,eAAe,EAAEhL,aAAa,EAAE,GAAG6K,iBAAiB,CAAC;AAC/DI,MAAAA,OAAO,EAAEJ,iBAAiB;AAC1B5R,MAAAA,SAAS,EAAE,CACT;AACEC,QAAAA,OAAO,EAAEkI,yBAAyB;AAClCgK,QAAAA,QAAQ,EAAE;UACR7J,iBAAiB,EAAE,CAACC,KAAK;AACA;OAC5B;KAEJ;;;;;;"}