{"version":3,"file":"proangular-pro-table.mjs","sources":["../../../src/app/public/utilities/quick-sort.ts","../../../src/app/public/utilities/type-checks.ts","../../../src/app/public/utilities/copy-to-clipboard.ts","../../../src/app/public/utilities/get-nested-object-data.ts","../../../src/app/public/utilities/get-data.ts","../../../src/app/public/utilities/get-date.ts","../../../src/app/public/utilities/get-type-of.ts","../../../src/app/public/utilities/json-safe-replacer.ts","../../../src/app/public/utilities/scroll-top.ts","../../../src/app/public/pipes/date-time.pipe.ts","../../../src/app/public/table/table.component.ts","../../../src/app/public/table/table.component.html","../../../src/app/public/public.ts","../../../src/app/public/proangular-pro-table.ts"],"sourcesContent":["import { SortDirection } from '@angular/material/sort';\n\nexport function quickSort<T>(\n  data: readonly T[],\n  key: keyof T,\n  direction: SortDirection | null,\n): readonly T[] {\n  return [...data].sort((a, b) => {\n    const valueA = a[key] as T;\n    const valueB = b[key] as T;\n\n    if (valueA === null || valueA === undefined) {\n      return 1;\n    }\n    if (valueB === null || valueB === undefined) {\n      return -1;\n    }\n\n    if (valueA < valueB) {\n      return direction === 'asc' ? -1 : 1;\n    }\n    if (valueA > valueB) {\n      return direction === 'asc' ? 1 : -1;\n    }\n    return 0;\n  });\n}\n","import {\n  Primitive,\n  TableTemplateReferenceExpandableObject,\n  TableTemplateReferenceObject,\n} from '../types';\n\nexport function isNonEmptyObject(value: unknown): value is object {\n  return value instanceof Object && Object.keys(value).length > 0;\n}\n\nexport function isNonEmptyPrimitive(\n  value: unknown,\n): value is NonNullable<Primitive> {\n  return isPrimitive(value) && value !== null && value !== undefined;\n}\n\nexport function isNonEmptyString(value: unknown): value is string {\n  return isString(value) && !isWhitespaceString(value);\n}\n\nexport function isPrimitive(value: unknown): value is Primitive {\n  return (\n    value === null ||\n    value === undefined ||\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    typeof value === 'boolean' ||\n    typeof value === 'symbol' ||\n    typeof value === 'bigint'\n  );\n}\n\nexport function isString(value: unknown): value is string {\n  return typeof value === 'string' || value instanceof String;\n}\n\nexport function isTableTemplateRefExpandableObject(\n  value: unknown,\n): value is TableTemplateReferenceExpandableObject {\n  return (\n    value instanceof Object &&\n    'context' in value &&\n    'templateRef' in value &&\n    'isExpanded' in value\n  );\n}\n\nexport function isTableTemplateRefObject(\n  value: unknown,\n): value is TableTemplateReferenceObject {\n  return (\n    value instanceof Object &&\n    'context' in value &&\n    'templateRef' in value &&\n    !('isExpanded' in value)\n  );\n}\n\nexport function isNonEmptyValue<T>(value: T): value is NonNullable<T> {\n  return value !== null && value !== undefined;\n}\n\nexport function isWhitespaceString(value: unknown): boolean {\n  return typeof value === 'string' && value.trim() === '';\n}\n","import { Clipboard } from '@angular/cdk/clipboard';\n\nimport { isNonEmptyString } from './type-checks';\n\nexport function copyToClipboard(\n  content: string,\n  clipboard: Clipboard,\n): boolean {\n  if (!isNonEmptyString(content)) {\n    throw new Error('Failed to copy empty string to the clipboard!');\n  }\n\n  const success: boolean = clipboard.copy(content);\n  return success;\n}\n","import { DateTime } from 'luxon';\n\nimport { DefinedPrimitive, NestedKeysOfString } from '../types';\nimport { isNonEmptyPrimitive } from './type-checks';\n\nexport function getNestedObjectData<T>(\n  data: T,\n  stringKeys: NestedKeysOfString<T>,\n): DefinedPrimitive | object | Date | DateTime | null {\n  const keys = stringKeys.split('.');\n  let value: unknown = data;\n\n  for (const key of keys) {\n    if (\n      value instanceof Object &&\n      Object.prototype.hasOwnProperty.call(value, key)\n    ) {\n      value = value[key as keyof typeof value];\n    }\n  }\n\n  if (isNonEmptyPrimitive(value) || typeof value === 'object') {\n    return value;\n  }\n\n  return null;\n}\n","import { DateTime } from 'luxon';\n\nimport { DefinedPrimitive, NestedKeysOfString } from '../types';\nimport { getNestedObjectData } from './get-nested-object-data';\n\nexport function getData<T>(\n  dataSourceItem: T,\n  columnKey: NestedKeysOfString<T>,\n  placeholderEmptyData: string,\n): DefinedPrimitive | object | Date | DateTime {\n  const data = getNestedObjectData<T>(dataSourceItem, columnKey);\n  if (data === 0) {\n    return '0';\n  }\n\n  if (typeof data === 'boolean') {\n    return data ? 'True' : 'False';\n  }\n\n  if (data === null) {\n    return placeholderEmptyData;\n  }\n\n  return data;\n}\n","export function getDate(value: unknown): Date | null {\n  return value instanceof Date ? value : null;\n}\n","import { DateTime } from 'luxon';\n\nexport function getTypeOf(\n  value: unknown,\n): 'date' | 'datetime' | 'time' | string {\n  if (value instanceof Date) {\n    return 'date';\n  }\n\n  if (value instanceof DateTime) {\n    return 'datetime';\n  }\n\n  return typeof value;\n}\n","import { ElementRef, TemplateRef } from '@angular/core';\n\nexport const jsonSafeReplacer = (() => {\n  const seen = new WeakSet<object>();\n  const dropKeys = new Set([\n    'templateRef',\n    'viewContainerRef',\n    '__ngContext__',\n    '_def',\n    'blueprint',\n  ]);\n\n  return function (_key: string, value: unknown): unknown {\n    if (dropKeys.has(_key)) {\n      return undefined;\n    }\n\n    if (value instanceof TemplateRef) {\n      return '[TemplateRef]';\n    }\n\n    if (typeof ElementRef !== 'undefined' && value instanceof ElementRef) {\n      return '[ElementRef]';\n    }\n\n    if (typeof value === 'function') {\n      return `[Function ${value.name || 'anonymous'}]`;\n    }\n\n    if (value && typeof value === 'object') {\n      seen.add(value);\n    }\n\n    return value;\n  };\n})();\n","import { ElementRef } from '@angular/core';\n\nexport function scrollTop(\n  elementRef: ElementRef<HTMLElement>,\n  { offset = 0 }: { offset?: number } = {},\n): void {\n  const topOfTableWithOffset =\n    elementRef.nativeElement.getBoundingClientRect().top +\n    window.scrollY -\n    offset;\n  window.scrollTo({ top: topOfTableWithOffset, behavior: 'smooth' });\n}\n","import { DateTime } from 'luxon';\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\nimport { DateTimeFormat } from '../types';\nimport { isNonEmptyValue } from '../utilities';\n\n@Pipe({ name: 'dateTime', standalone: true })\nexport class DateTimePipe implements PipeTransform {\n  private readonly defaultFormat: DateTimeFormat = 'MM/dd/yyyy';\n\n  /**\n   * Transforms a DateTime object into a formatted string for display.\n   *\n   * @param value The value to transform.\n   * @returns The transformed value as a string.\n   */\n  public transform(\n    value: DateTime | null | undefined | unknown,\n    format: DateTimeFormat = this.defaultFormat,\n  ): string {\n    if (!isNonEmptyValue(value) || !(value instanceof DateTime)) {\n      return '';\n    }\n    return value.toFormat(format);\n  }\n}\n","import {\n  BehaviorSubject,\n  ReplaySubject,\n  combineLatest,\n  firstValueFrom,\n  map,\n  shareReplay,\n} from 'rxjs';\n\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  Output,\n  TrackByFunction,\n  ViewChild,\n  booleanAttribute,\n  inject,\n  numberAttribute,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport {\n  MatSort,\n  MatSortModule,\n  Sort,\n  SortDirection,\n} from '@angular/material/sort';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { DateTimePipe } from '../pipes';\nimport {\n  TableColumn,\n  TableSortChangeEvent,\n  TableTemplateReferenceExpandableObject,\n} from '../types';\nimport {\n  getData as _getData,\n  getDate as _getDate,\n  getTypeOf as _getTypeOf,\n  isNonEmptyObject as _isNonEmptyObject,\n  isTableTemplateRefExpandableObject as _isTableTemplateRefExpandableObject,\n  isTableTemplateRefObject as _isTableTemplateRefObject,\n  copyToClipboard,\n  isNonEmptyString,\n} from '../utilities';\n\nconst rT = { required: true };\nconst rF = { required: false };\nconst rFB = { required: false, transform: booleanAttribute };\nconst rFN = { required: false, transform: numberAttribute };\n\n/**\n * A custom table component wrapper for Angular Material's table component.\n *\n * @see https://material.angular.dev/components/table/overview\n */\n@Component({\n  selector: 'pro-table[columns][data]',\n  standalone: true,\n  imports: [\n    CommonModule,\n    MatTableModule,\n    MatSortModule,\n    MatCheckboxModule,\n    MatTooltipModule,\n    DateTimePipe,\n  ],\n  templateUrl: './table.component.html',\n  styleUrls: ['./table.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableComponent<T extends object & { id: number | string }>\n  implements AfterViewInit\n{\n  /** ---- INJECTED SERVICE DEPENDENCIES ---- */\n\n  private readonly clipboard = inject(Clipboard);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly matSnackBar = inject(MatSnackBar);\n\n  /** ---- INPUT BINDINGS (REQUIRED) ---- */\n\n  @Input(rT) public set columns(value: ReadonlyArray<TableColumn<T>>) {\n    this.columnsSubject.next(value);\n  }\n\n  @Input(rT)\n  public set data(values: readonly T[] | null | undefined) {\n    if (values === null || values === undefined) {\n      this.dataSubject.next(null);\n      return;\n    }\n    this.dataSubject.next(\n      new MatTableDataSource<T, MatPaginator>(Array.from(values)),\n    );\n  }\n\n  /** ---- INPUT BINDINGS (OPTIONAL) ---- */\n\n  @Input(rF) public initialSort: TableSortChangeEvent<T> | null = null;\n\n  @Input(rF) public placeholderEmptyData = 'N/A';\n\n  @Input(rF) public placeholderEmptyList = 'No items to display.';\n\n  @Input(rF) public placeholderLoading = 'Loading...';\n\n  @Input(rF) public set selectable(value: BooleanInput) {\n    this.selectableSubject.next(coerceBooleanProperty(value));\n  }\n\n  @Input(rFB) public stickyHeader = false;\n\n  @Input(rFN) public maxSelectableRows: number | null = null;\n\n  /** ---- INPUT + HOST BINDINGS ---- */\n\n  @HostBinding('class.highlight-odd-rows')\n  @Input(rF)\n  public highlightOddRows = false;\n\n  @HostBinding('class.clickable')\n  @Input(rF)\n  public rowClickEnabled = false;\n\n  /** ---- OUTPUT EVENTS ---- */\n\n  @Output() public readonly rowClick = new EventEmitter<T>();\n\n  @Output() public readonly rowSelectChange = new EventEmitter<readonly T[]>();\n\n  @Output() public readonly sortChange = new EventEmitter<\n    TableSortChangeEvent<T>\n  >();\n\n  /** ---- DATA STREAMS ---- */\n\n  private readonly selectableSubject = new BehaviorSubject<boolean>(false);\n\n  protected readonly selectableChanges = this.selectableSubject\n    .asObservable()\n    .pipe(shareReplay({ bufferSize: 1, refCount: true }));\n\n  private readonly columnsSubject = new ReplaySubject<\n    ReadonlyArray<TableColumn<T>>\n  >(1);\n\n  protected readonly columnsChanges = this.columnsSubject.asObservable();\n\n  protected readonly columnKeysChanges = combineLatest([\n    this.columnsSubject,\n    this.selectableChanges,\n  ]).pipe(\n    map(([columns, selectable]) => {\n      const keys = columns.map(({ key }) => key);\n      return selectable ? ['select', ...keys] : keys;\n    }),\n    takeUntilDestroyed(this.destroyRef),\n  );\n\n  private readonly dataSubject = new ReplaySubject<\n    MatTableDataSource<T, MatPaginator> | null | undefined\n  >(1);\n\n  protected readonly dataChanges = this.dataSubject\n    .asObservable()\n    .pipe(shareReplay({ bufferSize: 1, refCount: true }));\n\n  private readonly isAllSelectedSubject = new BehaviorSubject<boolean>(false);\n\n  protected readonly isAllSelectedChanges =\n    this.isAllSelectedSubject.asObservable();\n\n  /** ---- UTILITIES ---- */\n\n  protected readonly getData = _getData;\n\n  protected readonly getDate = _getDate;\n\n  protected readonly getTypeOf = _getTypeOf;\n\n  protected readonly isNonEmptyObject = _isNonEmptyObject;\n\n  protected readonly isTableTemplateRefExpandableObject =\n    _isTableTemplateRefExpandableObject;\n\n  protected readonly isTableTemplateRefObject = _isTableTemplateRefObject;\n\n  /** ---- MEMBERS ---- */\n\n  @ViewChild(MatSort) private matSort!: MatSort;\n\n  protected selectedKeys = new Set<string | number>();\n\n  protected set expandableObject(\n    value: TableTemplateReferenceExpandableObject | null,\n  ) {\n    if (value !== null && !this.isTableTemplateRefExpandableObject(value)) {\n      throw new Error(\n        'The expandable value must be of type TableTemplateReferenceExpandableObject.',\n      );\n    }\n    this.#expandableObject = value;\n  }\n\n  protected get expandableObject(): TableTemplateReferenceExpandableObject | null {\n    return this.#expandableObject;\n  }\n\n  #expandableObject: TableTemplateReferenceExpandableObject | null = null;\n\n  /** ---- FUNCTIONS ---- */\n\n  public ngAfterViewInit(): void {\n    if (!this.matSort) {\n      return; // `mat-sort` isn't used, return early\n    }\n\n    const init = this.initialSort;\n    if (init?.key && init.direction) {\n      this.matSort.sort({\n        disableClear: false,\n        id: init.key,\n        start: init.direction satisfies SortDirection,\n      });\n    }\n  }\n\n  public clearSelected(): void {\n    this.selectedKeys.clear();\n    this.rowSelectChange.emit([]);\n    this.updateAllSelectedStatus();\n  }\n\n  @Input()\n  public trackByFn: TrackByFunction<T> = (_index, item) => item['id'];\n\n  protected isRowExpanded(\n    rowObjectData: T,\n    expandableObject: TableTemplateReferenceExpandableObject | null,\n  ): boolean {\n    if (expandableObject === null) return false;\n    const obj = rowObjectData as Record<string, unknown>;\n    for (const k of Object.keys(obj)) {\n      if (obj[k] === expandableObject) return true;\n    }\n    return false;\n  }\n\n  protected isSelected(row: T): boolean {\n    return this.selectedKeys.has(this.trackByFn(0, row));\n  }\n\n  protected async masterToggle(): Promise<void> {\n    const data = (await firstValueFrom(this.dataChanges))?.data ?? [];\n    const allSelected = data.every((row) => this.isSelected(row));\n\n    if (\n      allSelected ||\n      (this.maxSelectableRows !== null &&\n        this.selectedKeys.size >= this.maxSelectableRows)\n    ) {\n      for (const row of data) this.selectedKeys.delete(this.trackByFn(0, row));\n    } else {\n      for (const row of data) {\n        if (\n          this.maxSelectableRows !== null &&\n          this.selectedKeys.size >= this.maxSelectableRows\n        ) {\n          this.matSnackBar.open(\n            `You can only select up to ${this.maxSelectableRows} rows.`,\n            'Close',\n            { duration: 3000 },\n          );\n          break;\n        }\n        this.selectedKeys.add(this.trackByFn(0, row));\n      }\n    }\n\n    this.rowSelectChange.emit(await this.getSelectedRows());\n    this.updateAllSelectedStatus();\n  }\n\n  protected onRowClick(\n    rowObjectData: T,\n    event: MouseEvent,\n    column?: TableColumn<T>,\n    item?: HTMLTableCellElement,\n  ): void {\n    event.stopPropagation();\n\n    if (column?.copyable && item) {\n      this.copyToClipboard(item);\n      return;\n    }\n    if (!this.rowClickEnabled) return;\n\n    this.rowClick.emit(rowObjectData);\n  }\n\n  protected async onSortChange(sort: Sort): Promise<void> {\n    const key = sort.active;\n    const direction = isNonEmptyString(sort.direction) ? sort.direction : null;\n    const columns = await firstValueFrom(this.columnsSubject);\n    const column = columns.find((c) => c.key === key);\n    if (!column?.isSortable) return;\n\n    const sortChange: TableSortChangeEvent<T> = {\n      direction,\n      key:\n        direction && isNonEmptyString(key)\n          ? (column.sortKey ?? column.key)\n          : null,\n    };\n    this.sortChange.emit(sortChange);\n  }\n\n  protected async toggleSelection(row: T): Promise<void> {\n    const key = this.trackByFn(0, row);\n    if (this.selectedKeys.has(key)) {\n      this.selectedKeys.delete(key);\n    } else {\n      if (\n        this.maxSelectableRows !== null &&\n        this.selectedKeys.size >= this.maxSelectableRows\n      ) {\n        this.matSnackBar.open(\n          `You can only select up to ${this.maxSelectableRows} rows.`,\n          'Close',\n          { duration: 3000 },\n        );\n        return;\n      }\n      this.selectedKeys.add(key);\n    }\n\n    this.rowSelectChange.emit(await this.getSelectedRows());\n    this.updateAllSelectedStatus();\n  }\n\n  private copyToClipboard(item: HTMLTableCellElement): void {\n    const content = item.innerHTML.replace(/<[^>]*>/g, '').trim();\n    const copied = copyToClipboard(content, this.clipboard);\n\n    if (!copied) {\n      this.matSnackBar.open(\n        `Failed to copy \"${content}\" to clipboard!`,\n        'Close',\n        { duration: 3000 },\n      );\n      return;\n    }\n\n    this.matSnackBar.open(`Copied \"${content}\" to clipboard!`, 'Close', {\n      duration: 3000,\n    });\n  }\n\n  private async getSelectedRows(): Promise<T[]> {\n    const data = (await firstValueFrom(this.dataChanges))?.data ?? [];\n    return data.filter((row) => this.selectedKeys.has(this.trackByFn(0, row)));\n  }\n\n  private async updateAllSelectedStatus(): Promise<void> {\n    const data = (await firstValueFrom(this.dataChanges))?.data ?? [];\n    const allSelected =\n      data.length > 0 &&\n      data.every((row) => this.selectedKeys.has(this.trackByFn(0, row)));\n    this.isAllSelectedSubject.next(allSelected);\n  }\n}\n","@let columns = columnsChanges | async;\n@let columnKeys = columnKeysChanges | async;\n@let isSelectable = selectableChanges | async;\n@let isAllSelected = isAllSelectedChanges | async;\n\n@if (dataChanges | async; as dataSource) {\n  <table\n    mat-table\n    [dataSource]=\"dataSource\"\n    matSort\n    (matSortChange)=\"onSortChange($event)\"\n    multiTemplateDataRows\n  >\n    @if (isSelectable) {\n      <ng-container matColumnDef=\"select\">\n        <th mat-header-cell *matHeaderCellDef>\n          <mat-checkbox\n            (change)=\"masterToggle()\"\n            [checked]=\"isAllSelected === true\"\n            [indeterminate]=\"isAllSelected === false && selectedKeys.size > 0\"\n          />\n        </th>\n        <td mat-cell *matCellDef=\"let row\">\n          <mat-checkbox\n            (click)=\"$event.stopPropagation()\"\n            (change)=\"toggleSelection(row)\"\n            [disabled]=\"\n              maxSelectableRows !== null &&\n              selectedKeys.size >= maxSelectableRows &&\n              !isSelected(row)\n            \"\n            [checked]=\"isSelected(row)\"\n          ></mat-checkbox>\n        </td>\n      </ng-container>\n    }\n    @for (column of columns; track column.key) {\n      <ng-container [matColumnDef]=\"column.key\">\n        <th\n          mat-header-cell\n          *matHeaderCellDef\n          mat-sort-header\n          [disabled]=\"!column.isSortable\"\n        >\n          {{ column.label }}\n        </th>\n        <td\n          mat-cell\n          *matCellDef=\"let dataSourceItem\"\n          #item\n          (click)=\"onRowClick(dataSourceItem, $event, column, item)\"\n          [class.copyable]=\"column.copyable\"\n          [matTooltip]=\"column.copyable ? 'Click to copy ' + column.label : ''\"\n          [style.min-width]=\"\n            column.minWidthPx ? column.minWidthPx + 'px' : undefined\n          \"\n        >\n          @let data = getData(dataSourceItem, column.key, placeholderEmptyData);\n          @switch (getTypeOf(data)) {\n            @case ('datetime') {\n              <span [title]=\"data | dateTime: 'MM/dd/yyyy, hh:mm a (ZZZZ)'\">\n                {{ data | dateTime: 'MM/dd/yyyy, hh:mm a' }}\n              </span>\n            }\n            @case ('date') {\n              {{ getDate(data) | date: 'MM/dd/yyyy' }}\n            }\n            @case ('object') {\n              @if (isTableTemplateRefObject(data)) {\n                @let tableTemplateRefObject = data;\n                <ng-container\n                  *ngTemplateOutlet=\"\n                    tableTemplateRefObject.templateRef;\n                    context: isNonEmptyObject(tableTemplateRefObject.context)\n                      ? tableTemplateRefObject.context\n                      : null\n                  \"\n                ></ng-container>\n              } @else {\n                @if (isTableTemplateRefExpandableObject(data)) {\n                  @let tableTemplateRefExpandableObject = data;\n                  <button\n                    class=\"expandable-row-button\"\n                    (click)=\"\n                      expandableObject =\n                        expandableObject === tableTemplateRefExpandableObject\n                          ? null\n                          : tableTemplateRefExpandableObject;\n                      $event.stopPropagation()\n                    \"\n                  >\n                    {{\n                      expandableObject === tableTemplateRefExpandableObject\n                        ? 'Collapse'\n                        : 'Expand'\n                    }}\n                  </button>\n                } @else {\n                  {{ data }}\n                }\n              }\n            }\n            @default {\n              {{ data }}\n            }\n          }\n        </td>\n      </ng-container>\n    }\n    <ng-container matColumnDef=\"expandableRow\">\n      <td\n        mat-cell\n        *matCellDef=\"let rowObjectData\"\n        [attr.colspan]=\"columnKeys?.length ?? 1\"\n      >\n        <div\n          class=\"expandable-row-details\"\n          [class.open]=\"isRowExpanded(rowObjectData, expandableObject)\"\n        >\n          <div>\n            @if (\n              expandableObject && isRowExpanded(rowObjectData, expandableObject)\n            ) {\n              <div animate.leave=\"exp-leave\">\n                <ng-container\n                  *ngTemplateOutlet=\"\n                    expandableObject.templateRef;\n                    context: isNonEmptyObject(expandableObject.context)\n                      ? expandableObject.context\n                      : null\n                  \"\n                ></ng-container>\n              </div>\n            }\n          </div>\n        </div>\n      </td>\n    </ng-container>\n\n    <tr mat-header-row *matHeaderRowDef=\"columnKeys; sticky: stickyHeader\"></tr>\n    <tr\n      mat-row\n      *matRowDef=\"let rowObjectData; columns: columnKeys; let i = dataIndex\"\n      [class]=\"(i + 1) % 2 === 0 ? 'even' : 'odd'\"\n      (click)=\"onRowClick(rowObjectData, $event)\"\n    ></tr>\n    <tr\n      mat-row\n      class=\"expandable-row\"\n      *matRowDef=\"let rowObjectData; columns: ['expandableRow']\"\n    ></tr>\n    <tr class=\"empty\" *matNoDataRow>\n      <td [attr.colspan]=\"columnKeys?.length || 0\">\n        {{ placeholderEmptyList }}\n      </td>\n    </tr>\n  </table>\n} @else if ((dataChanges | async) === null) {\n  <p class=\"loading\">{{ placeholderLoading }}</p>\n} @else {\n  <p>Failed to load data.</p>\n}\n","// Components\nexport { TableComponent } from './table/table.component';\n\n// Pipes\n// export * from './pipes';\n\n// Utilities\n// export * from './utilities';\n\n// Types\nexport type {\n  TableColumn,\n  TableSortChangeEvent,\n  TableTemplateReferenceExpandableObject,\n  TableTemplateReferenceObject,\n} from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public';\n"],"names":["_getData","_getDate","_getTypeOf","_isNonEmptyObject","_isTableTemplateRefExpandableObject","_isTableTemplateRefObject"],"mappings":";;;;;;;;;;;;;;;;;;;SAEgB,SAAS,CACvB,IAAkB,EAClB,GAAY,EACZ,SAA+B,EAAA;AAE/B,IAAA,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC7B,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAM;AAC1B,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAM;QAE1B,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;AAC3C,YAAA,OAAO,CAAC;QACV;QACA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;YAC3C,OAAO,CAAC,CAAC;QACX;AAEA,QAAA,IAAI,MAAM,GAAG,MAAM,EAAE;AACnB,YAAA,OAAO,SAAS,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QACrC;AACA,QAAA,IAAI,MAAM,GAAG,MAAM,EAAE;AACnB,YAAA,OAAO,SAAS,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC;AACA,QAAA,OAAO,CAAC;AACV,IAAA,CAAC,CAAC;AACJ;;ACpBM,SAAU,gBAAgB,CAAC,KAAc,EAAA;AAC7C,IAAA,OAAO,KAAK,YAAY,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;AACjE;AAEM,SAAU,mBAAmB,CACjC,KAAc,EAAA;AAEd,IAAA,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AACpE;AAEM,SAAU,gBAAgB,CAAC,KAAc,EAAA;IAC7C,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AACtD;AAEM,SAAU,WAAW,CAAC,KAAc,EAAA;IACxC,QACE,KAAK,KAAK,IAAI;AACd,QAAA,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS;QAC1B,OAAO,KAAK,KAAK,QAAQ;AACzB,QAAA,OAAO,KAAK,KAAK,QAAQ;AAE7B;AAEM,SAAU,QAAQ,CAAC,KAAc,EAAA;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM;AAC7D;AAEM,SAAU,kCAAkC,CAChD,KAAc,EAAA;IAEd,QACE,KAAK,YAAY,MAAM;AACvB,QAAA,SAAS,IAAI,KAAK;AAClB,QAAA,aAAa,IAAI,KAAK;QACtB,YAAY,IAAI,KAAK;AAEzB;AAEM,SAAU,wBAAwB,CACtC,KAAc,EAAA;IAEd,QACE,KAAK,YAAY,MAAM;AACvB,QAAA,SAAS,IAAI,KAAK;AAClB,QAAA,aAAa,IAAI,KAAK;AACtB,QAAA,EAAE,YAAY,IAAI,KAAK,CAAC;AAE5B;AAEM,SAAU,eAAe,CAAI,KAAQ,EAAA;AACzC,IAAA,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAC9C;AAEM,SAAU,kBAAkB,CAAC,KAAc,EAAA;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;AACzD;;AC5DM,SAAU,eAAe,CAC7B,OAAe,EACf,SAAoB,EAAA;AAEpB,IAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE;AAC9B,QAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;IAClE;IAEA,MAAM,OAAO,GAAY,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAChD,IAAA,OAAO,OAAO;AAChB;;ACTM,SAAU,mBAAmB,CACjC,IAAO,EACP,UAAiC,EAAA;IAEjC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;IAClC,IAAI,KAAK,GAAY,IAAI;AAEzB,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IACE,KAAK,YAAY,MAAM;AACvB,YAAA,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAChD;AACA,YAAA,KAAK,GAAG,KAAK,CAAC,GAAyB,CAAC;QAC1C;IACF;IAEA,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC3D,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI;AACb;;SCrBgB,OAAO,CACrB,cAAiB,EACjB,SAAgC,EAChC,oBAA4B,EAAA;IAE5B,MAAM,IAAI,GAAG,mBAAmB,CAAI,cAAc,EAAE,SAAS,CAAC;AAC9D,IAAA,IAAI,IAAI,KAAK,CAAC,EAAE;AACd,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE;QAC7B,OAAO,IAAI,GAAG,MAAM,GAAG,OAAO;IAChC;AAEA,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,OAAO,oBAAoB;IAC7B;AAEA,IAAA,OAAO,IAAI;AACb;;ACxBM,SAAU,OAAO,CAAC,KAAc,EAAA;IACpC,OAAO,KAAK,YAAY,IAAI,GAAG,KAAK,GAAG,IAAI;AAC7C;;ACAM,SAAU,SAAS,CACvB,KAAc,EAAA;AAEd,IAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IAAI,KAAK,YAAY,QAAQ,EAAE;AAC7B,QAAA,OAAO,UAAU;IACnB;IAEA,OAAO,OAAO,KAAK;AACrB;;ACZO,MAAM,gBAAgB,GAAG,CAAC,MAAK;AACpC,IAAA,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU;AAClC,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;QACvB,aAAa;QACb,kBAAkB;QAClB,eAAe;QACf,MAAM;QACN,WAAW;AACZ,KAAA,CAAC;IAEF,OAAO,UAAU,IAAY,EAAE,KAAc,EAAA;AAC3C,QAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtB,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,IAAI,KAAK,YAAY,WAAW,EAAE;AAChC,YAAA,OAAO,eAAe;QACxB;QAEA,IAAI,OAAO,UAAU,KAAK,WAAW,IAAI,KAAK,YAAY,UAAU,EAAE;AACpE,YAAA,OAAO,cAAc;QACvB;AAEA,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,OAAO,aAAa,KAAK,CAAC,IAAI,IAAI,WAAW,GAAG;QAClD;AAEA,QAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACjB;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AACH,CAAC,GAAG;;ACjCE,SAAU,SAAS,CACvB,UAAmC,EACnC,EAAE,MAAM,GAAG,CAAC,EAAA,GAA0B,EAAE,EAAA;IAExC,MAAM,oBAAoB,GACxB,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,GAAG;AACpD,QAAA,MAAM,CAAC,OAAO;AACd,QAAA,MAAM;AACR,IAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACpE;;MCHa,YAAY,CAAA;IACN,aAAa,GAAmB,YAAY;AAE7D;;;;;AAKG;AACI,IAAA,SAAS,CACd,KAA4C,EAC5C,MAAA,GAAyB,IAAI,CAAC,aAAa,EAAA;AAE3C,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,YAAY,QAAQ,CAAC,EAAE;AAC3D,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/B;wGAjBW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE;;;ACkD5C,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC7B,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC9B,MAAM,GAAG,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE;AAC5D,MAAM,GAAG,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE;AAE3D;;;;AAIG;MAgBU,cAAc,CAAA;;AAKR,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;;IAIlD,IAAsB,OAAO,CAAC,KAAoC,EAAA;AAChE,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;IAEA,IACW,IAAI,CAAC,MAAuC,EAAA;QACrD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B;QACF;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,IAAI,kBAAkB,CAAkB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAC5D;IACH;;IAIkB,WAAW,GAAmC,IAAI;IAElD,oBAAoB,GAAG,KAAK;IAE5B,oBAAoB,GAAG,sBAAsB;IAE7C,kBAAkB,GAAG,YAAY;IAEnD,IAAsB,UAAU,CAAC,KAAmB,EAAA;QAClD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC3D;IAEmB,YAAY,GAAG,KAAK;IAEpB,iBAAiB,GAAkB,IAAI;;IAMnD,gBAAgB,GAAG,KAAK;IAIxB,eAAe,GAAG,KAAK;;AAIJ,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAK;AAEhC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAgB;AAElD,IAAA,UAAU,GAAG,IAAI,YAAY,EAEpD;;AAIc,IAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;IAErD,iBAAiB,GAAG,IAAI,CAAC;AACzC,SAAA,YAAY;AACZ,SAAA,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAEtC,IAAA,cAAc,GAAG,IAAI,aAAa,CAEjD,CAAC,CAAC;AAEe,IAAA,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAEnD,iBAAiB,GAAG,aAAa,CAAC;AACnD,QAAA,IAAI,CAAC,cAAc;AACnB,QAAA,IAAI,CAAC,iBAAiB;AACvB,KAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,KAAI;AAC5B,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAC1C,QAAA,OAAO,UAAU,GAAG,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI;IAChD,CAAC,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACpC;AAEgB,IAAA,WAAW,GAAG,IAAI,aAAa,CAE9C,CAAC,CAAC;IAEe,WAAW,GAAG,IAAI,CAAC;AACnC,SAAA,YAAY;AACZ,SAAA,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAEtC,IAAA,oBAAoB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAExD,IAAA,oBAAoB,GACrC,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;;IAIvB,OAAO,GAAGA,OAAQ;IAElB,OAAO,GAAGC,OAAQ;IAElB,SAAS,GAAGC,SAAU;IAEtB,gBAAgB,GAAGC,gBAAiB;IAEpC,kCAAkC,GACnDC,kCAAmC;IAElB,wBAAwB,GAAGC,wBAAyB;;AAI3C,IAAA,OAAO;AAEzB,IAAA,YAAY,GAAG,IAAI,GAAG,EAAmB;IAEnD,IAAc,gBAAgB,CAC5B,KAAoD,EAAA;AAEpD,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,EAAE;AACrE,YAAA,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E;QACH;AACA,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;IAChC;AAEA,IAAA,IAAc,gBAAgB,GAAA;QAC5B,OAAO,IAAI,CAAC,iBAAiB;IAC/B;IAEA,iBAAiB,GAAkD,IAAI;;IAIhE,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO;QACT;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW;QAC7B,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAChB,gBAAA,YAAY,EAAE,KAAK;gBACnB,EAAE,EAAE,IAAI,CAAC,GAAG;gBACZ,KAAK,EAAE,IAAI,CAAC,SAAiC;AAC9C,aAAA,CAAC;QACJ;IACF;IAEO,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,uBAAuB,EAAE;IAChC;AAGO,IAAA,SAAS,GAAuB,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;IAEzD,aAAa,CACrB,aAAgB,EAChB,gBAA+D,EAAA;QAE/D,IAAI,gBAAgB,KAAK,IAAI;AAAE,YAAA,OAAO,KAAK;QAC3C,MAAM,GAAG,GAAG,aAAwC;QACpD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAChC,YAAA,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,gBAAgB;AAAE,gBAAA,OAAO,IAAI;QAC9C;AACA,QAAA,OAAO,KAAK;IACd;AAEU,IAAA,UAAU,CAAC,GAAM,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD;AAEU,IAAA,MAAM,YAAY,GAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI,EAAE;AACjE,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAE7D,QAAA,IACE,WAAW;AACX,aAAC,IAAI,CAAC,iBAAiB,KAAK,IAAI;gBAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,EACnD;YACA,KAAK,MAAM,GAAG,IAAI,IAAI;AAAE,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1E;aAAO;AACL,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,gBAAA,IACE,IAAI,CAAC,iBAAiB,KAAK,IAAI;oBAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAChD;AACA,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,CAAA,0BAAA,EAA6B,IAAI,CAAC,iBAAiB,QAAQ,EAC3D,OAAO,EACP,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB;oBACD;gBACF;AACA,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/C;QACF;QAEA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QACvD,IAAI,CAAC,uBAAuB,EAAE;IAChC;AAEU,IAAA,UAAU,CAClB,aAAgB,EAChB,KAAiB,EACjB,MAAuB,EACvB,IAA2B,EAAA;QAE3B,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,MAAM,EAAE,QAAQ,IAAI,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1B;QACF;QACA,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE;AAE3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;IACnC;IAEU,MAAM,YAAY,CAAC,IAAU,EAAA;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;AACvB,QAAA,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;QAC1E,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;AACzD,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,UAAU;YAAE;AAEzB,QAAA,MAAM,UAAU,GAA4B;YAC1C,SAAS;AACT,YAAA,GAAG,EACD,SAAS,IAAI,gBAAgB,CAAC,GAAG;mBAC5B,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG;AAC/B,kBAAE,IAAI;SACX;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;IAClC;IAEU,MAAM,eAAe,CAAC,GAAM,EAAA;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;QAClC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;QAC/B;aAAO;AACL,YAAA,IACE,IAAI,CAAC,iBAAiB,KAAK,IAAI;gBAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAChD;AACA,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,CAAA,0BAAA,EAA6B,IAAI,CAAC,iBAAiB,QAAQ,EAC3D,OAAO,EACP,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB;gBACD;YACF;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5B;QAEA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QACvD,IAAI,CAAC,uBAAuB,EAAE;IAChC;AAEQ,IAAA,eAAe,CAAC,IAA0B,EAAA;AAChD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;QAC7D,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;QAEvD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,mBAAmB,OAAO,CAAA,eAAA,CAAiB,EAC3C,OAAO,EACP,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB;YACD;QACF;QAEA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,OAAO,CAAA,eAAA,CAAiB,EAAE,OAAO,EAAE;AAClE,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;IACJ;AAEQ,IAAA,MAAM,eAAe,GAAA;AAC3B,QAAA,MAAM,IAAI,GAAG,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI,EAAE;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5E;AAEQ,IAAA,MAAM,uBAAuB,GAAA;AACnC,QAAA,MAAM,IAAI,GAAG,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI,EAAE;AACjE,QAAA,MAAM,WAAW,GACf,IAAI,CAAC,MAAM,GAAG,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC;IAC7C;wGA3SW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,mVAvBe,gBAAgB,CAAA,EAAA,iBAAA,EAAA,CAAA,mBAAA,EAAA,mBAAA,EAChB,eAAe,CAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,0BAAA,EAAA,uBAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA6I5C,OAAO,gDCzMpB,g9KAkKA,EAAA,MAAA,EAAA,CAAA,oyDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3FI,YAAY,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,UAAA,EAAA,IAAA,EACZ,cAAc,2lCACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,gBAAgB,gaAChB,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAMH,cAAc,EAAA,UAAA,EAAA,CAAA;kBAf1B,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,cAAc;wBACd,aAAa;wBACb,iBAAiB;wBACjB,gBAAgB;wBAChB,YAAY;qBACb,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,g9KAAA,EAAA,MAAA,EAAA,CAAA,oyDAAA,CAAA,EAAA;;sBAa9C,KAAK;uBAAC,EAAE;;sBAIR,KAAK;uBAAC,EAAE;;sBAaR,KAAK;uBAAC,EAAE;;sBAER,KAAK;uBAAC,EAAE;;sBAER,KAAK;uBAAC,EAAE;;sBAER,KAAK;uBAAC,EAAE;;sBAER,KAAK;uBAAC,EAAE;;sBAIR,KAAK;uBAAC,GAAG;;sBAET,KAAK;uBAAC,GAAG;;sBAIT,WAAW;uBAAC,0BAA0B;;sBACtC,KAAK;uBAAC,EAAE;;sBAGR,WAAW;uBAAC,iBAAiB;;sBAC7B,KAAK;uBAAC,EAAE;;sBAKR;;sBAEA;;sBAEA;;sBA2DA,SAAS;uBAAC,OAAO;;sBA4CjB;;;AErPH;;ACAA;;AAEG;;;;"}