{"version":3,"file":"ngx-t-forms-t-workflow-picker.component-D0ttyEex.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/t-workflow-picker/t-workflow-picker.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/t-workflow-picker/t-workflow-picker.component.html"],"sourcesContent":["import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  DestroyRef,\r\n  ElementRef,\r\n  Input,\r\n  Optional,\r\n  Self,\r\n  ViewEncapsulation,\r\n  computed,\r\n  inject,\r\n  output,\r\n  signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { DatePipe } from '@angular/common';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { NgControl } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { EMPTY, Observable, Subject, Subscription, catchError, finalize, take } from 'rxjs';\r\n\r\nimport type { IWorkflowOption } from 'ngx-t-forms-types';\r\nimport type { IConfigElementError } from '../../t-dynamic-data-edit.component';\r\n\r\n/** Chip variant rendered beside a workflow row. */\r\nexport type WorkflowRowKind = 'in-out' | 'doc' | 'flow';\r\n\r\n/** Pre-computed view model for one workflow row — keeps the template free of logic. */\r\nexport interface WorkflowRow {\r\n  readonly option: IWorkflowOption;\r\n  readonly kind: WorkflowRowKind;\r\n  readonly label: string;\r\n  readonly selected: boolean;\r\n}\r\n\r\nconst KIND_LABELS: Readonly<Record<WorkflowRowKind, string>> = {\r\n  'in-out': 'IN/OUT',\r\n  doc: 'DOC',\r\n  flow: 'FLOW',\r\n};\r\n\r\nfunction toRow(option: IWorkflowOption, selected: boolean): WorkflowRow {\r\n  const kind: WorkflowRowKind = option.isCheckInCheckOut\r\n    ? 'in-out'\r\n    : option.isDocument\r\n      ? 'doc'\r\n      : 'flow';\r\n  return { option, kind, label: KIND_LABELS[kind], selected };\r\n}\r\n\r\n/**\r\n * Picks a single workflow from a consumer-supplied stream of options.\r\n *\r\n * Rendered state (`loading`, `error`, the option list and the current selection)\r\n * is signal-backed: the options stream resolves outside any template event, so a\r\n * plain field write would never mark this OnPush view dirty and the spinner would\r\n * hang until an unrelated change-detection pass happened to sweep it up.\r\n */\r\n@Component({\r\n  selector: 'lib-t-workflow-picker',\r\n  imports: [\r\n    DatePipe,\r\n    MatToolbarModule,\r\n    MatButtonModule,\r\n    MatIconModule,\r\n    MatCardModule,\r\n    MatListModule,\r\n    MatChipsModule,\r\n    MatDividerModule,\r\n    MatProgressSpinnerModule,\r\n  ],\r\n  templateUrl: './t-workflow-picker.component.html',\r\n  styleUrl: './t-workflow-picker.component.css',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.Emulated,\r\n  providers: [{ provide: MatFormFieldControl, useExisting: TWorkflowPickerComponent }],\r\n  host: {\r\n    '[attr.id]': 'id',\r\n    '[attr.aria-describedby]': 'describedBy',\r\n    '[class.floating]': 'shouldLabelFloat',\r\n  },\r\n})\r\nexport class TWorkflowPickerComponent implements MatFormFieldControl<string | undefined> {\r\n  static nextId = 0;\r\n\r\n  readonly stateChanges = new Subject<void>();\r\n  focused = false;\r\n  touched = false;\r\n  @Input() disabled = false;\r\n  readonly controlType = 'lib-t-workflow-picker';\r\n  readonly autofilled = false;\r\n\r\n  @Input() errors: IConfigElementError[] | undefined = [];\r\n\r\n  private _required = false;\r\n  @Input()\r\n  get required(): boolean {\r\n    return this._required;\r\n  }\r\n  set required(value: boolean) {\r\n    this._required = coerceBooleanProperty(value);\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  /**\r\n   * Signal-backed so the template re-renders when the parent pushes a value back\r\n   * down (or a reactive form calls `writeValue`) rather than only on a click.\r\n   */\r\n  readonly #value = signal<string | undefined>(undefined);\r\n\r\n  @Input()\r\n  get value(): string | undefined {\r\n    return this.#value();\r\n  }\r\n  set value(val: string | undefined) {\r\n    if (this.#value() === val) return;\r\n    this.#value.set(val);\r\n    this.onChange(val);\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  @Input()\r\n  get placeholder(): string {\r\n    return this._placeholder;\r\n  }\r\n  set placeholder(value: string) {\r\n    this._placeholder = value;\r\n    this.stateChanges.next();\r\n  }\r\n  private _placeholder: string = '';\r\n\r\n  readonly id = `lib-t-workflow-picker-${TWorkflowPickerComponent.nextId++}`;\r\n  describedBy = '';\r\n  get shouldLabelFloat(): boolean {\r\n    return this.focused || !this.empty;\r\n  }\r\n\r\n  get empty(): boolean {\r\n    return !this.value || this.value.length === 0;\r\n  }\r\n\r\n  get errorState(): boolean {\r\n    return (\r\n      (!this.value && this.required && this.touched) ||\r\n      !!this.ngControl?.errors ||\r\n      (this.errors || []).length > 0\r\n    );\r\n  }\r\n\r\n  readonly #elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n  readonly #destroyRef = inject(DestroyRef);\r\n\r\n  constructor(@Optional() @Self() public ngControl: NgControl) {\r\n    if (this.ngControl != null) {\r\n      this.ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  // ControlValueAccessor methods — Angular's CVA contract accepts any callback signature.\r\n  // TODO(Phase-4): revisit once Angular tightens CVA generics upstream.\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  onChange: (val: any) => void = () => {};\r\n  onTouched: () => void = () => {};\r\n\r\n  writeValue(value: string | undefined): void {\r\n    this.#value.set(value);\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  registerOnChange(fn: (val: any) => void): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => void): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  // MatFormFieldControl methods\r\n  setDescribedByIds(ids: string[]): void {\r\n    const element = this.#elementRef?.nativeElement;\r\n    if (element) {\r\n      element.setAttribute('aria-describedby', ids.join(' '));\r\n    }\r\n  }\r\n\r\n  onContainerClick(_event: MouseEvent): void {\r\n    if (!this.focused) {\r\n      this.focused = true;\r\n      this.stateChanges.next();\r\n    }\r\n  }\r\n\r\n  markAsTouched(): void {\r\n    if (!this.touched) {\r\n      this.touched = true;\r\n      this.onTouched();\r\n      this.stateChanges.next();\r\n    }\r\n  }\r\n\r\n  // ---- Workflow options ----------------------------------------------------\r\n\r\n  #source: Observable<IWorkflowOption[] | undefined> | undefined;\r\n  #loadRequested = false;\r\n  #inFlight: Subscription | undefined;\r\n\r\n  /**\r\n   * Stream of selectable workflows.\r\n   *\r\n   * Parents commonly bind a getter that rebuilds this observable on every change\r\n   * detection pass, so a fresh reference must never re-trigger a fetch: the first\r\n   * defined source starts the one automatic load, every later load is explicit.\r\n   */\r\n  @Input() set getWorkflowOptions(value: Observable<IWorkflowOption[] | undefined> | undefined) {\r\n    this.#source = value;\r\n    if (value && !this.#loadRequested) this.loadWorkflows();\r\n  }\r\n\r\n  readonly valueChanged = output<string | undefined>();\r\n  readonly workflowNameChanged = output<string | undefined>();\r\n\r\n  readonly #workflows = signal<readonly IWorkflowOption[]>([]);\r\n  readonly #loading = signal(false);\r\n  readonly #error = signal<unknown>(undefined);\r\n\r\n  protected readonly loading = this.#loading.asReadonly();\r\n  protected readonly error = this.#error.asReadonly();\r\n\r\n  /**\r\n   * Either the single selected row or the full pick list — resolved once per\r\n   * state change instead of re-running `find()` on every change detection pass.\r\n   * An id that no loaded option matches falls back to the list so the selection\r\n   * stays recoverable rather than rendering an empty row.\r\n   */\r\n  protected readonly rows = computed<readonly WorkflowRow[]>(() => {\r\n    const selectedId = this.#value();\r\n    const workflows = this.#workflows();\r\n    const selected = selectedId\r\n      ? workflows.find((option) => option.id === selectedId)\r\n      : undefined;\r\n    return selected ? [toRow(selected, true)] : workflows.map((option) => toRow(option, false));\r\n  });\r\n\r\n  /** Toggles the row: selects it, or clears the binding when it is already selected. */\r\n  protected select(row: WorkflowRow): void {\r\n    if (this.disabled) return;\r\n    this.markAsTouched();\r\n\r\n    const next = row.selected ? undefined : row.option.id;\r\n    this.value = next;\r\n    this.valueChanged.emit(next);\r\n    this.workflowNameChanged.emit(next ? row.option.name : undefined);\r\n  }\r\n\r\n  /** (Re)fetches the workflow list, replacing any request still in flight. */\r\n  protected loadWorkflows(): void {\r\n    const source$ = this.#source;\r\n    if (!source$) return;\r\n\r\n    this.#inFlight?.unsubscribe();\r\n    this.#loadRequested = true;\r\n    this.#error.set(undefined);\r\n    this.#loading.set(true);\r\n\r\n    this.#inFlight = source$\r\n      .pipe(\r\n        take(1),\r\n        catchError((error: unknown) => {\r\n          this.#error.set(error);\r\n          return EMPTY;\r\n        }),\r\n        // Clears the spinner on emit, error, completion-without-emit and\r\n        // unsubscribe alike — the previous code only cleared it on emit.\r\n        finalize(() => this.#loading.set(false)),\r\n        takeUntilDestroyed(this.#destroyRef),\r\n      )\r\n      .subscribe((workflows) => this.#workflows.set(workflows ?? []));\r\n  }\r\n}\r\n","<mat-toolbar class=\"lib-t-workflow-picker__bar\">\r\n  @if (error()) {\r\n    <span class=\"lib-t-workflow-picker__bar-label\">Failed to load workflow list</span>\r\n    <span class=\"lib-t-workflow-picker__spacer\"></span>\r\n    <button type=\"button\" color=\"primary\" mat-raised-button (click)=\"loadWorkflows()\">\r\n      Retry\r\n      <mat-icon>refresh</mat-icon>\r\n    </button>\r\n  } @else {\r\n    <span class=\"lib-t-workflow-picker__bar-label\">Reload workflows</span>\r\n    <span class=\"lib-t-workflow-picker__spacer\"></span>\r\n    <button type=\"button\" mat-stroked-button (click)=\"loadWorkflows()\">\r\n      Reload\r\n      <mat-icon>refresh</mat-icon>\r\n    </button>\r\n  }\r\n</mat-toolbar>\r\n\r\n@if (loading()) {\r\n  <div class=\"lib-t-workflow-picker__loading\">\r\n    <mat-spinner diameter=\"40\" />\r\n  </div>\r\n} @else if (!error()) {\r\n  <mat-card>\r\n    <mat-nav-list class=\"lib-t-workflow-picker__list\">\r\n      @for (row of rows(); track row.option.id) {\r\n        <mat-list-item (click)=\"select(row)\">\r\n          <mat-chip class=\"docType\" [attr.data-kind]=\"row.kind\" matListItemIcon>\r\n            <span class=\"lib-t-workflow-picker__chip-label\">{{ row.label }}</span>\r\n          </mat-chip>\r\n\r\n          <div matListItemTitle>\r\n            <div>{{ row.option.name }}</div>\r\n            <div class=\"lib-t-workflow-picker__meta\">\r\n              {{ row.option.createdAt | date: 'medium' }} &nbsp; {{ row.option.numberOfSteps }}\r\n            </div>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            matListItemMeta\r\n            mat-icon-button\r\n            [attr.aria-label]=\"\r\n              row.selected ? 'Clear selected workflow' : 'Select ' + row.option.name\r\n            \">\r\n            <mat-icon [color]=\"row.selected ? 'primary' : undefined\">\r\n              {{ row.selected ? 'check_circle' : 'radio_button_unchecked' }}\r\n            </mat-icon>\r\n          </button>\r\n        </mat-list-item>\r\n\r\n        @if (!$last) {\r\n          <mat-divider />\r\n        }\r\n      } @empty {\r\n        <div class=\"lib-t-workflow-picker__empty\">No workflows available.</div>\r\n      }\r\n    </mat-nav-list>\r\n  </mat-card>\r\n}\r\n"],"names":["i2","i3","i4","i5","i7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAM,WAAW,GAA8C;AAC7D,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;CACb;AAED,SAAS,KAAK,CAAC,MAAuB,EAAE,QAAiB,EAAA;AACvD,IAAA,MAAM,IAAI,GAAoB,MAAM,CAAC;AACnC,UAAE;UACA,MAAM,CAAC;AACP,cAAE;cACA,MAAM;AACZ,IAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE;AAC7D;AAEA;;;;;;;AAOG;MAyBU,wBAAwB,CAAA;aAC5B,IAAA,CAAA,MAAM,GAAG,CAAH,CAAK;AAYlB,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IACA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEA;;;AAGG;AACM,IAAA,MAAM;AAEf,IAAA,IACI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;IACtB;IACA,IAAI,KAAK,CAAC,GAAuB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG;YAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEA,IAAA,IACI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;IACA,IAAI,WAAW,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAKA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;IACpC;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;IAC/C;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,QACE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;AAC7C,YAAA,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM;YACxB,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC;IAElC;AAES,IAAA,WAAW;AACX,IAAA,WAAW;AAEpB,IAAA,WAAA,CAAuC,SAAoB,EAAA;QAApB,IAAA,CAAA,SAAS,GAAT,SAAS;AAnEvC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;QAC3C,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;QACN,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,WAAW,GAAG,uBAAuB;QACrC,IAAA,CAAA,UAAU,GAAG,KAAK;QAElB,IAAA,CAAA,MAAM,GAAsC,EAAE;QAE/C,IAAA,CAAA,SAAS,GAAG,KAAK;AAUzB;;;AAGG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAqB,SAAS,6EAAC;QAqB/C,IAAA,CAAA,YAAY,GAAW,EAAE;AAExB,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,sBAAA,EAAyB,wBAAwB,CAAC,MAAM,EAAE,EAAE;QAC1E,IAAA,CAAA,WAAW,GAAG,EAAE;AAiBP,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC;AACzD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;;;AAWzC,QAAA,IAAA,CAAA,QAAQ,GAAuB,MAAK,EAAE,CAAC;AACvC,QAAA,IAAA,CAAA,SAAS,GAAe,MAAK,EAAE,CAAC;QA+ChC,IAAA,CAAA,cAAc,GAAG,KAAK;QAeb,IAAA,CAAA,YAAY,GAAG,MAAM,EAAsB;QAC3C,IAAA,CAAA,mBAAmB,GAAG,MAAM,EAAsB;AAElD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA6B,EAAE,iFAAC;AACnD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACxB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAU,SAAS,6EAAC;AAEzB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AACpC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAEnD;;;;;AAKG;AACgB,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAyB,MAAK;AAC9D,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE;AAChC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE;YACnC,MAAM,QAAQ,GAAG;AACf,kBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,UAAU;kBACnD,SAAS;AACb,YAAA,OAAO,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7F,QAAA,CAAC,2EAAC;AA9FA,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;QACrC;IACF;AAQA,IAAA,UAAU,CAAC,KAAyB,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;;AAGA,IAAA,gBAAgB,CAAC,EAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;;AAGA,IAAA,iBAAiB,CAAC,GAAa,EAAA;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa;QAC/C,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzD;IACF;AAEA,IAAA,gBAAgB,CAAC,MAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC1B;IACF;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC1B;IACF;;AAIA,IAAA,OAAO;AACP,IAAA,cAAc;AACd,IAAA,SAAS;AAET;;;;;;AAMG;IACH,IAAa,kBAAkB,CAAC,KAA4D,EAAA;AAC1F,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,aAAa,EAAE;IACzD;AAKS,IAAA,UAAU;AACV,IAAA,QAAQ;AACR,IAAA,MAAM;;AAqBL,IAAA,MAAM,CAAC,GAAgB,EAAA;QAC/B,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE;AACrD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;IACnE;;IAGU,aAAa,GAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAEvB,IAAI,CAAC,SAAS,GAAG;aACd,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,UAAU,CAAC,CAAC,KAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;;;QAGF,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACxC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAErC,aAAA,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACnE;+GAzMW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,SAAA,EAPxB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC,0BCpFtF,suEA4DA,EAAA,MAAA,EAAA,CAAA,i2BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDWI,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,wBAAwB,gOARxB,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAqBC,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAxBpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACP,QAAQ;wBACR,gBAAgB;wBAChB,eAAe;wBACf,aAAa;wBACb,aAAa;wBACb,aAAa;wBACb,cAAc;wBACd,gBAAgB;wBAChB,wBAAwB;AACzB,qBAAA,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,QAAQ,EAAA,SAAA,EAC9B,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAA,wBAA0B,EAAE,CAAC,EAAA,IAAA,EAC9E;AACJ,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,yBAAyB,EAAE,aAAa;AACxC,wBAAA,kBAAkB,EAAE,kBAAkB;AACvC,qBAAA,EAAA,QAAA,EAAA,suEAAA,EAAA,MAAA,EAAA,CAAA,i2BAAA,CAAA,EAAA;;0BAwEY;;0BAAY;;sBAhExB;;sBAIA;;sBAGA;;sBAeA;;sBAWA;;sBAkGA;;;;;"}