{"version":3,"file":"tableau-ui-angular-list.mjs","sources":["../../../projects/component-library/list/src/pipes/is-value-selected.pipe.ts","../../../projects/component-library/list/src/list-base.component.ts","../../../projects/component-library/list/src/list-single-select.component.ts","../../../projects/component-library/list/src/list.component.html","../../../projects/component-library/list/src/list-multi-select.component.ts","../../../projects/component-library/list/src/tableau-ui-list.module.ts","../../../projects/component-library/list/src/tableau-ui-angular-list.ts"],"sourcesContent":["import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { Primitive } from 'tableau-ui-angular/types';\n\n@Pipe({\n  name: 'isValueSelected',\n  standalone: false,\n  pure: true,\n})\nexport class IsValueSelectedPipe<T extends Primitive> implements PipeTransform {\n  transform(selectedValue: T | T[] | undefined, optionValue: T, allowMultiple: boolean): boolean {\n    if (allowMultiple && Array.isArray(selectedValue)) {\n      return selectedValue.includes(optionValue);\n    } else {\n      return (\n        selectedValue === optionValue\n        // ||\n        // this.safeStringify(selectedValue) ===\n        //     this.safeStringify(optionValue)\n      );\n    }\n  }\n}\n","import type { WritableSignal } from '@angular/core';\nimport { computed, contentChildren, Directive, ElementRef, inject, model, signal } from '@angular/core';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport type { IOptionGridContext } from 'tableau-ui-angular/common';\nimport { OptionComponent } from 'tableau-ui-angular/common';\nimport type { Primitive } from 'tableau-ui-angular/types';\nimport type { ListMultiSelectComponent } from './list-multi-select.component';\n\nexport const LIST_COMPONENT_HOST = {\n  class: 'tab-input',\n  '[class.silent-focus]': '$focusMode() === \"silent\"',\n  '[tabindex]': '$disabled() || $focusMode() === \"none\" ? -1 : 0',\n  '(keydown)': 'onKeyDown($event)',\n  '(blur)': 'onBlur()',\n  '(focus)': 'onFocus()',\n  '(mouseleave)': 'onMouseOut()',\n};\n\n@Directive()\nexport abstract class ListBaseComponent<TOption extends Primitive, TValue extends TOption | TOption[]> implements ControlValueAccessor {\n  protected readonly $options = contentChildren<OptionComponent<TOption>>(OptionComponent<TOption>);\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  // #region Inputs\n\n  protected $isMultiSelect(): this is ListMultiSelectComponent<TOption> {\n    return false;\n  }\n\n  /**\n   * Sets the focusability of the list\n   * @remarks\n   * - 'strong' - The list can be focused and navigated using the keyboard. Focus indicators are shown and are strong (primary color).\n   * - 'silent' - The list can be focused and navigated using the keyboard. Focus indicators are shown, but are subtle .\n   * - 'none' - The list cannot be focused or navigated using the keyboard.\n   * @default 'full'\n   */\n  readonly $focusMode = model<'none' | 'silent' | 'strong'>('strong', {\n    alias: 'focusMode',\n  });\n  /**\n   * Whether the list is disabled\n   * @remarks\n   * Set this using the FormControl if you are using reactive forms.\n   * Only set this manually if you are not using reactive forms.\n   *\n   * @default false\n   */\n  readonly $disabled = model(false, {\n    alias: 'disabled',\n  });\n  /**\n   * The currently selected value.\n   * @remarks\n   * If allowMultiple is true, this should be an array of values.\n   * If allowMultiple is false, this should be a single value.\n   */\n  readonly $value = model<TValue | undefined>(undefined, {\n    alias: 'value',\n  });\n  /**\n   * The location of the check icon in dropdown option if an option is selected\n   * @default 'none'\n   */\n  readonly $selectedCheckIconLocation = model<'left' | 'none' | 'right'>('none', {\n    alias: 'selectedCheckIconLocation',\n  });\n  /**\n   * Highlight the selected item(s) with a primary back color\n   * @default true\n   */\n  readonly $selectedItemHighlight = model<boolean>(true, {\n    alias: 'selectedItemHighlight',\n  });\n  /**\n   * Whether multiple values can be selected\n   * @default false\n   */\n\n  /**\n   * The template context to use for the dropdown options\n   * @remarks\n   * Use this to display the 'icon', 'text', and 'hint' properties of the options conditionally\n   */\n  readonly $itemTemplateContext = model<IOptionGridContext>(\n    {\n      renderIcon: true,\n      renderText: true,\n      renderHint: true,\n    },\n    {\n      alias: 'itemTemplateContext',\n    },\n  );\n\n  // #endregion\n\n  protected readonly $itemTemplateActualContext = computed(() => {\n    return {\n      renderIcon: this.$itemTemplateContext().renderIcon,\n      renderText: this.$itemTemplateContext().renderText,\n      renderHint: this.$itemTemplateContext().renderHint,\n      renderAsDisabled: this.$itemTemplateContext().renderAsDisabled ?? this.$disabled(),\n    };\n  });\n\n  // #region ControlValueAccessor\n  // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars\n  onChange = (value: TValue | undefined) => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n  writeValue(value: TValue | undefined): void {\n    this.$value.set(value);\n  }\n  registerOnChange(fn: (value: TValue | undefined) => void): void {\n    this.onChange = fn;\n  }\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n  setDisabledState(isDisabled: boolean): void {\n    this.$disabled.set(isDisabled);\n  }\n  // #endregion\n  // #region Value selection\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  protected readonly $highlightedOption: WritableSignal<OptionComponent<TOption> | undefined> = signal<OptionComponent<TOption> | undefined>(undefined);\n\n  selectValue(option: OptionComponent<TOption>, event: MouseEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n    if (!this.$disabled() && !option.$disabled()) {\n      const value = this.$value();\n      const optionValue = option.$value();\n      this.selectValueInternal(value, optionValue);\n      this.onChange(this.$value());\n      this.onTouched();\n      if (this.elementRef.nativeElement.tabIndex !== -1) {\n        this.elementRef.nativeElement.focus();\n      }\n    }\n  }\n  protected abstract readonly selectValueInternal: (currentValue: TValue | undefined, selectedValue: TOption) => void;\n  clearValue(e: Event) {\n    e.preventDefault();\n    e.stopPropagation();\n    if (this.$disabled()) {\n      return;\n    }\n    this.clearValueInternal();\n    this.onChange(this.$value());\n    this.onTouched();\n  }\n  protected abstract readonly clearValueInternal: () => void;\n  // #region Focus management\n  protected readonly $focused = signal(false);\n  onFocus() {\n    this.$focused.set(true);\n  }\n  onBlur() {\n    this.$focused.set(false);\n    this.$highlightedOption.set(undefined);\n  }\n  onMouseOut() {\n    this.$highlightedOption.set(undefined);\n  }\n\n  /**\n   *\n   *\n   * @param e Handles KeyDown event for:\n   * - host element\n   * - global keydown event when dropdown is open\n   * @returns\n   */\n  onKeyDown(e: KeyboardEvent) {\n    if (e.key === 'Enter' || e.key === ' ') {\n      if (this.$highlightedOption()) {\n        this.selectValue(this.$highlightedOption()!, new MouseEvent('click'));\n      }\n      e.preventDefault();\n      e.stopPropagation();\n    }\n    if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n      // - we find the currently HIGHLIGHTED option\n      // - we find the next option to highlight\n      // - if no option is found, we highlight the first/last option\n\n      let currentIndex: number;\n      let nextIndex: number = -1;\n      if (this.$highlightedOption()) {\n        currentIndex = this.$options().findIndex(o => o.$value() === this.$highlightedOption()!.$value());\n      } else {\n        // find already selected option\n        const value = this.$value();\n        let val: Primitive;\n\n        if (e.key === 'ArrowDown') {\n          // find the last selected option\n          if (this.$isMultiSelect()) {\n            if (value != null && Array.isArray(value) && value.length > 0) {\n              val = value[value.length - 1];\n            }\n          } else {\n            if (value !== undefined && !Array.isArray(value)) {\n              val = value;\n            }\n          }\n        } else {\n          // find the first selected option\n          if (this.$isMultiSelect()) {\n            if (value != null && Array.isArray(value) && value.length > 0) {\n              val = value[0];\n            }\n          } else {\n            if (value !== undefined && !Array.isArray(value)) {\n              val = value;\n            }\n          }\n        }\n        nextIndex = currentIndex = this.$options().findIndex(o => o.$value() === val);\n      }\n\n      if (nextIndex === -1) {\n        // find the next index to highlight/select\n        if (e.key === 'ArrowDown') {\n          if (currentIndex === -1) {\n            // find the first non disabled option\n            nextIndex = this.$options().findIndex(o => !o.$disabled());\n          } else {\n            // find the next option that is not disabled\n            nextIndex = this.$options().findIndex((o, i) => i > currentIndex && !o.$disabled());\n            // if no option is found, find the next option that is not disabled before the current item\n            if (nextIndex === -1) {\n              nextIndex = this.$options().findIndex((o, i) => i < currentIndex && !o.$disabled());\n            }\n          }\n        } else if (e.key === 'ArrowUp') {\n          if (currentIndex === -1) {\n            // find the last non disabled option\n            nextIndex = this.$options()\n              .slice()\n              .reverse()\n              .findIndex(o => !o.$disabled());\n            if (nextIndex !== -1) {\n              nextIndex = this.$options().length - nextIndex - 1;\n            }\n          } else {\n            const flippedCurrentIndex = this.$options().length - currentIndex - 1;\n            // find the next option that is not disabled\n            nextIndex = [...this.$options()].reverse().findIndex((o, i) => i > flippedCurrentIndex && !o.$disabled());\n            // if no option is found, find the next option that is not disabled before the current item\n            if (nextIndex === -1) {\n              nextIndex = [...this.$options()].reverse().findIndex((o, i) => i < flippedCurrentIndex && !o.$disabled());\n            }\n            if (nextIndex !== -1) {\n              nextIndex = this.$options().length - nextIndex - 1;\n            }\n          }\n        }\n      }\n      if (nextIndex !== -1) {\n        this.$highlightedOption.set(this.$options()[nextIndex]);\n        setTimeout(\n          () =>\n            this.elementRef.nativeElement.querySelector(`.option-wrapper.highlight`)?.scrollIntoView({\n              block: 'nearest',\n            }),\n          10,\n        );\n      }\n\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }\n}\n","import type { Primitive } from 'tableau-ui-angular/types';\nimport { LIST_COMPONENT_HOST, ListBaseComponent } from './list-base.component';\nimport { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'tab-list-single-select',\n  standalone: false,\n  templateUrl: './list.component.html',\n  styleUrl: './list.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ListSingleSelectComponent),\n      multi: true,\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: LIST_COMPONENT_HOST,\n})\nexport class ListSingleSelectComponent<T extends Primitive> extends ListBaseComponent<T, T> {\n  protected override selectValueInternal: (currentValue: T | undefined, selectedValue: T) => void = (currentValue, selectedValue) => {\n    this.$value.set(selectedValue);\n  };\n  protected override clearValueInternal: () => void = () => {\n    this.$value.set(undefined);\n  };\n}\n","@for (option of $options(); track option.$value()) {\n  <!-- eslint-disable-next-line  @angular-eslint/template/interactive-supports-focus, @angular-eslint/template/click-events-have-key-events -->\n  <div\n    class=\"option-wrapper\"\n    [class.disabled]=\"option.$disabled() || $disabled()\"\n    [class.highlight]=\"!!$highlightedOption() && $highlightedOption()!.$value() === option.$value()\"\n    [class.selected]=\"($value() | isValueSelected: option.$value() : $isMultiSelect()) && $selectedItemHighlight()\"\n    (click)=\"selectValue(option, $event)\"\n    (mouseenter)=\"$highlightedOption.set(option)\"\n  >\n    <div class=\"check\" [ngClass]=\"$selectedCheckIconLocation()\">\n      @if ($value() | isValueSelected: option.$value() : $isMultiSelect()) {\n        <tab-icon value=\"check\" />\n      }\n    </div>\n    <div class=\"option-content\">\n      <ng-container [ngTemplateOutlet]=\"option.$template()\" [ngTemplateOutletContext]=\"$itemTemplateActualContext()\" />\n    </div>\n  </div>\n}\n","import type { Primitive } from 'tableau-ui-angular/types';\nimport { LIST_COMPONENT_HOST, ListBaseComponent } from './list-base.component';\nimport { Component, forwardRef, ChangeDetectionStrategy } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'tab-list-multi-select',\n  standalone: false,\n  templateUrl: './list.component.html',\n  styleUrl: './list.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ListMultiSelectComponent),\n      multi: true,\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: LIST_COMPONENT_HOST,\n})\nexport class ListMultiSelectComponent<T extends Primitive> extends ListBaseComponent<T, T[]> {\n  protected override $isMultiSelect(): this is ListMultiSelectComponent<T> {\n    return true;\n  }\n\n  protected override selectValueInternal: (currentValue: T[] | undefined, selectedValue: T) => void = (currentValue, selectedValue) => {\n    if (currentValue === undefined || !Array.isArray(currentValue)) {\n      this.$value.set([selectedValue]);\n    } else if (!currentValue.includes(selectedValue)) {\n      this.$value.set([...currentValue, selectedValue]);\n    } else {\n      this.$value.set(currentValue.filter(e => e !== selectedValue));\n    }\n  };\n\n  protected override clearValueInternal: () => void = () => {\n    this.$value.set([]);\n  };\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IsValueSelectedPipe } from './pipes/is-value-selected.pipe';\nimport { TableauUiCommonModule } from 'tableau-ui-angular/common';\nimport { TableauUiIconModule } from 'tableau-ui-angular/icon';\nimport { ListSingleSelectComponent } from './list-single-select.component';\nimport { ListMultiSelectComponent } from './list-multi-select.component';\n\n@NgModule({\n  imports: [CommonModule, TableauUiCommonModule, TableauUiIconModule],\n  declarations: [IsValueSelectedPipe, ListSingleSelectComponent, ListMultiSelectComponent],\n  exports: [ListSingleSelectComponent, ListMultiSelectComponent],\n})\nexport class TableauUiListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i3.IsValueSelectedPipe"],"mappings":";;;;;;;;;MASa,mBAAmB,CAAA;AAC9B,IAAA,SAAS,CAAC,aAAkC,EAAE,WAAc,EAAE,aAAsB,EAAA;QAClF,IAAI,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AACjD,YAAA,OAAO,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC;;aACrC;YACL,QACE,aAAa,KAAK;;;;;;;uGANb,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAnB,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,iBAAiB;AACvB,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,IAAI,EAAE,IAAI;AACX,iBAAA;;;ACAM,MAAM,mBAAmB,GAAG;AACjC,IAAA,KAAK,EAAE,WAAW;AAClB,IAAA,sBAAsB,EAAE,2BAA2B;AACnD,IAAA,YAAY,EAAE,iDAAiD;AAC/D,IAAA,WAAW,EAAE,mBAAmB;AAChC,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,cAAc,EAAE,cAAc;CAC/B;MAGqB,iBAAiB,CAAA;AAClB,IAAA,QAAQ,GAAG,eAAe,EAA2B,eAAwB,EAAC;AAChF,IAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;;IAG/D,cAAc,GAAA;AACtB,QAAA,OAAO,KAAK;;AAGd;;;;;;;AAOG;AACM,IAAA,UAAU,GAAG,KAAK,CAA+B,QAAQ,EAAE;AAClE,QAAA,KAAK,EAAE,WAAW;AACnB,KAAA,CAAC;AACF;;;;;;;AAOG;AACM,IAAA,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE;AAChC,QAAA,KAAK,EAAE,UAAU;AAClB,KAAA,CAAC;AACF;;;;;AAKG;AACM,IAAA,MAAM,GAAG,KAAK,CAAqB,SAAS,EAAE;AACrD,QAAA,KAAK,EAAE,OAAO;AACf,KAAA,CAAC;AACF;;;AAGG;AACM,IAAA,0BAA0B,GAAG,KAAK,CAA4B,MAAM,EAAE;AAC7E,QAAA,KAAK,EAAE,2BAA2B;AACnC,KAAA,CAAC;AACF;;;AAGG;AACM,IAAA,sBAAsB,GAAG,KAAK,CAAU,IAAI,EAAE;AACrD,QAAA,KAAK,EAAE,uBAAuB;AAC/B,KAAA,CAAC;AACF;;;AAGG;AAEH;;;;AAIG;IACM,oBAAoB,GAAG,KAAK,CACnC;AACE,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,UAAU,EAAE,IAAI;KACjB,EACD;AACE,QAAA,KAAK,EAAE,qBAAqB;AAC7B,KAAA,CACF;;AAIkB,IAAA,0BAA0B,GAAG,QAAQ,CAAC,MAAK;QAC5D,OAAO;AACL,YAAA,UAAU,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,UAAU;AAClD,YAAA,UAAU,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,UAAU;AAClD,YAAA,UAAU,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,UAAU;YAClD,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,gBAAgB,IAAI,IAAI,CAAC,SAAS,EAAE;SACnF;AACH,KAAC,CAAC;;;AAIF,IAAA,QAAQ,GAAG,CAAC,KAAyB,KAAI,GAAG;;AAE5C,IAAA,SAAS,GAAG,MAAK,GAAG;AACpB,IAAA,UAAU,CAAC,KAAyB,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;;AAExB,IAAA,gBAAgB,CAAC,EAAuC,EAAA;AACtD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAEpB,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAErB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;;;;;AAKb,IAAA,kBAAkB,GAAyD,MAAM,CAAuC,SAAS,CAAC;IAErJ,WAAW,CAAC,MAAgC,EAAE,KAAiB,EAAA;QAC7D,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE;AAC5C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE;AACnC,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,KAAK,CAAC,CAAC,EAAE;AACjD,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;;;;AAK3C,IAAA,UAAU,CAAC,CAAQ,EAAA;QACjB,CAAC,CAAC,cAAc,EAAE;QAClB,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB;;QAEF,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,EAAE;;;AAIC,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3C,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;;IAEzB,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;;IAExC,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;;AAGxC;;;;;;;AAOG;AACH,IAAA,SAAS,CAAC,CAAgB,EAAA;AACxB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;AACtC,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAG,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;;YAEvE,CAAC,CAAC,cAAc,EAAE;YAClB,CAAC,CAAC,eAAe,EAAE;;AAErB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;;;;AAKhD,YAAA,IAAI,YAAoB;AACxB,YAAA,IAAI,SAAS,GAAW,CAAC,CAAC;AAC1B,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBAC7B,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,kBAAkB,EAAG,CAAC,MAAM,EAAE,CAAC;;iBAC5F;;AAEL,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,gBAAA,IAAI,GAAc;AAElB,gBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;;AAEzB,oBAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACzB,wBAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC7D,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;;;yBAE1B;AACL,wBAAA,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BAChD,GAAG,GAAG,KAAK;;;;qBAGV;;AAEL,oBAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACzB,wBAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7D,4BAAA,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;;;yBAEX;AACL,wBAAA,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BAChD,GAAG,GAAG,KAAK;;;;gBAIjB,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC;;AAG/E,YAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;;AAEpB,gBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;AACzB,oBAAA,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;;AAEvB,wBAAA,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;;yBACrD;;wBAEL,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;;AAEnF,wBAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;4BACpB,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;;;;AAGlF,qBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;AAC9B,oBAAA,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;;AAEvB,wBAAA,SAAS,GAAG,IAAI,CAAC,QAAQ;AACtB,6BAAA,KAAK;AACL,6BAAA,OAAO;6BACP,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACjC,wBAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;4BACpB,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC;;;yBAE/C;AACL,wBAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,YAAY,GAAG,CAAC;;AAErE,wBAAA,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,mBAAmB,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;;AAEzG,wBAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AACpB,4BAAA,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,mBAAmB,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;;AAE3G,wBAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;4BACpB,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC;;;;;AAK1D,YAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC;AACvD,gBAAA,UAAU,CACR,MACE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA,yBAAA,CAA2B,CAAC,EAAE,cAAc,CAAC;AACvF,oBAAA,KAAK,EAAE,SAAS;iBACjB,CAAC,EACJ,EAAE,CACH;;YAGH,CAAC,CAAC,cAAc,EAAE;YAClB,CAAC,CAAC,eAAe,EAAE;;;uGA7PH,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,0BAAA,EAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,0BAAA,EAAA,iCAAA,EAAA,sBAAA,EAAA,6BAAA,EAAA,oBAAA,EAAA,2BAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,GACmC,eAAwB,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAD5E,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBADtC;;;ACEK,MAAO,yBAA+C,SAAQ,iBAAuB,CAAA;AACtE,IAAA,mBAAmB,GAA4D,CAAC,YAAY,EAAE,aAAa,KAAI;AAChI,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;AAChC,KAAC;IACkB,kBAAkB,GAAe,MAAK;AACvD,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,KAAC;uGANU,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAVzB,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,UAAA,EAAA,mDAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBH,0/BAoBA,EAAA,MAAA,EAAA,CAAA,s/CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,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,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,eAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDAa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAfrC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,KAAK,EAGN,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC;AACxD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC,mBAAmB,EAAA,QAAA,EAAA,0/BAAA,EAAA,MAAA,EAAA,CAAA,s/CAAA,CAAA,EAAA;;;AEErB,MAAO,wBAA8C,SAAQ,iBAAyB,CAAA;IACvE,cAAc,GAAA;AAC/B,QAAA,OAAO,IAAI;;AAGM,IAAA,mBAAmB,GAA8D,CAAC,YAAY,EAAE,aAAa,KAAI;AAClI,QAAA,IAAI,YAAY,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAC9D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;;aAC3B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,aAAa,CAAC,CAAC;;aAC5C;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,CAAC;;AAElE,KAAC;IAEkB,kBAAkB,GAAe,MAAK;AACvD,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACrB,KAAC;uGAjBU,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAVxB,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,UAAA,EAAA,mDAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EDhBH,0/BAoBA,EAAA,MAAA,EAAA,CAAA,s/CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,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,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,eAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FCAa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAfpC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,KAAK,EAGN,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC,mBAAmB,EAAA,QAAA,EAAA,0/BAAA,EAAA,MAAA,EAAA,CAAA,s/CAAA,CAAA,EAAA;;;MCLd,mBAAmB,CAAA;uGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAHf,YAAA,EAAA,CAAA,mBAAmB,EAAE,yBAAyB,EAAE,wBAAwB,CAAA,EAAA,OAAA,EAAA,CAD7E,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,CAExD,EAAA,OAAA,EAAA,CAAA,yBAAyB,EAAE,wBAAwB,CAAA,EAAA,CAAA;AAElD,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAJpB,OAAA,EAAA,CAAA,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,CAAA,EAAA,CAAA;;2FAIvD,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,CAAC;AACnE,oBAAA,YAAY,EAAE,CAAC,mBAAmB,EAAE,yBAAyB,EAAE,wBAAwB,CAAC;AACxF,oBAAA,OAAO,EAAE,CAAC,yBAAyB,EAAE,wBAAwB,CAAC;AAC/D,iBAAA;;;ACZD;;AAEG;;;;"}