{"version":3,"file":"mat-table-filter.mjs","sources":["../../../projects/mat-table-filter/src/lib/mat-table-filter.enum.ts","../../../projects/mat-table-filter/src/lib/services/filter-predicate.ts","../../../projects/mat-table-filter/src/lib/services/alpha-numeric-predicate.service.ts","../../../projects/mat-table-filter/src/lib/services/array-predicate.service.ts","../../../projects/mat-table-filter/src/lib/services/mat-table-filter.service.ts","../../../projects/mat-table-filter/src/lib/mat-table-filter.directive.ts","../../../projects/mat-table-filter/src/lib/mat-table-filter.module.ts","../../../projects/mat-table-filter/src/public-api.ts","../../../projects/mat-table-filter/src/mat-table-filter.ts"],"sourcesContent":["export enum MatTableFilter {\n  EQUALS = 'EQUALS',\n  ANYWHERE = 'ANYWHERE',\n  STARTS_WITH = 'STARTS_WITH',\n  ENDS_WITH = 'ENDS_WITH'\n}\n","import { MatTableFilter } from '../mat-table-filter.enum';\nimport { ItemPair } from '../item-pair';\nimport isString from 'lodash-es/isString';\nimport { Options } from '../options';\n\nexport abstract class FilterPredicate<T> {\n\n  public abstract equals(itemPair: ItemPair<T>): boolean;\n  public abstract anywhere(itemPair: ItemPair<T>): boolean;\n  public abstract startsWith(itemPair: ItemPair<T>): boolean;\n  public abstract endsWith(itemPair: ItemPair<T>): boolean;\n\n  public executeCondition(itemPair: ItemPair<T>, options: Options): boolean {\n    this.handleLetterCasing(itemPair, options.caseSensitive);\n    switch (options.filterType) {\n      case MatTableFilter.EQUALS:\n        return this.equals(itemPair);\n      case MatTableFilter.ANYWHERE:\n        return this.anywhere(itemPair);\n      case MatTableFilter.STARTS_WITH:\n        return this.startsWith(itemPair);\n      case MatTableFilter.ENDS_WITH:\n        return this.endsWith(itemPair);\n      default:\n        return true;\n    }\n  }\n\n  private handleLetterCasing(itemPair: ItemPair<any>, caseSensitive?: boolean): void {\n    if (!caseSensitive) {\n      this.transformAllLowerCase(itemPair);\n    }\n  }\n\n  private transformAllLowerCase(object: any) {\n    // tslint:disable-next-line:forin\n    for (const key in object) {\n      const value = object[key];\n      if (isString(value)) {\n        object[key] = value.toLowerCase();\n      } else {\n        this.transformAllLowerCase(value);\n      }\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { FilterPredicate } from './filter-predicate';\nimport { ItemPair } from '../item-pair';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AlphaNumericPredicateService extends FilterPredicate<string> {\n\n  constructor() {\n    super();\n   }\n\n  public equals(itemPair: ItemPair<string>): boolean {\n    return itemPair.example === itemPair.item;\n  }\n  public anywhere(itemPair: ItemPair<string>): boolean {\n    return itemPair.item.includes(itemPair.example);\n  }\n  public startsWith(itemPair: ItemPair<string>): boolean {\n    return itemPair.item.startsWith(itemPair.example);\n  }\n  public endsWith(itemPair: ItemPair<string>): boolean {\n    return itemPair.item.endsWith(itemPair.example);\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { FilterPredicate } from './filter-predicate';\nimport isEqual from 'lodash-es/isEqual';\nimport difference from 'lodash-es/difference';\nimport flatten from 'lodash-es/flatten';\nimport { ItemPair } from '../item-pair';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ArrayPredicateService extends FilterPredicate<Array<any>> {\n\n  // tslint:disable-next-line:max-line-length\n  private static readonly UNSUPPORTED_OPERATION_WARNING = 'This filterType is unsupported for array filtering. FilterType.ANYWHERE is executed instead!';\n  private static readonly SUGGESTION_WARNING = 'You can set a custom predicate for the array property through PropertyOptions!';\n  constructor() {\n    super();\n  }\n\n  private static warn() {\n    console.warn(ArrayPredicateService.UNSUPPORTED_OPERATION_WARNING);\n    console.warn(ArrayPredicateService.SUGGESTION_WARNING);\n  }\n\n  public equals(itemPair: ItemPair<Array<any>>): boolean {\n    return isEqual(itemPair.example.sort(), itemPair.item.sort());\n  }\n  public anywhere(itemPair: ItemPair<Array<any>>): boolean {\n    return this.isSubset(itemPair.example, itemPair.item);\n  }\n  public startsWith(itemPair: ItemPair<Array<any>>): boolean {\n    ArrayPredicateService.warn();\n    return this.anywhere(itemPair);\n  }\n  public endsWith(itemPair: ItemPair<Array<any>>): boolean {\n    ArrayPredicateService.warn();\n    return this.anywhere(itemPair);\n  }\n\n  private isSubset(example: Array<any>, item: Array<any>): boolean {\n    return !difference(flatten(example), flatten(item)).length;\n  }\n\n}\n","import { PropertyOptions, PredicateFunc } from '../property-options';\nimport { ItemPair } from './../item-pair';\nimport { ArrayPredicateService } from './array-predicate.service';\nimport { AlphaNumericPredicateService } from './alpha-numeric-predicate.service';\nimport { Injectable } from '@angular/core';\nimport isEqual from 'lodash-es/isEqual';\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport isNil from 'lodash-es/isNil';\nimport every from 'lodash-es/every';\nimport isFunction from 'lodash-es/isFunction';\nimport isArray from 'lodash-es/isArray';\nimport isBoolean from 'lodash-es/isBoolean';\nimport isString from 'lodash-es/isString';\nimport isNumber from 'lodash-es/isNumber';\nimport isEmpty from 'lodash-es/isEmpty';\nimport { Options } from '../options';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class MatTableFilterService {\n  constructor(private _alphaNumericService: AlphaNumericPredicateService, private _arrayService: ArrayPredicateService) {}\n\n  public filterPredicate(itemPair: ItemPair<any>, propertyOptions: PropertyOptions,\n                         commonOptions: Options | PredicateFunc, propertyName?: string): boolean {\n    // tslint:disable-next-line:forin\n    const exampleKeys = Object.keys(itemPair.example);\n    for (const key of exampleKeys) {\n      const exampleValue = cloneDeep(itemPair.example[key]);\n      if (isNil(exampleValue) || every(exampleValue, isEmpty) && typeof exampleValue !== 'boolean') {\n        // if example entity's property is undefined/null/empty then it means the caller wants all the data\n        continue;\n      }\n      if (itemPair.item?.hasOwnProperty(key)) {\n        // if example entity has additional columns then search fails\n        const itemValue = cloneDeep(itemPair.item[key]);\n        const nextPropertyName = this.getNextPropertyName(key, propertyName);\n        const options = this.finalizeOptionsForProperty(commonOptions, propertyOptions, nextPropertyName);\n        if (isFunction(options)) { // if user defined predicate is present for property\n          const customPredicate = options as PredicateFunc;\n          if (!customPredicate(itemValue)) {\n            return false;\n          }\n        } else {\n          const columnOptions = options as Options;\n          if (this.isAlphaNumeric(itemValue)) {\n            const valuePair: ItemPair<string> = {item: itemValue.toString(), example: exampleValue};\n            if (!this._alphaNumericService.executeCondition(valuePair, columnOptions)) {\n              return false;\n            }\n          } else if (isArray(itemValue)) {\n            const valuePair: ItemPair<any[]> = {item: itemValue, example: exampleValue};\n            if (!this._arrayService.executeCondition(valuePair, columnOptions)) {\n              return false;\n            }\n          } else if (isBoolean(itemValue)) {\n            if (itemValue !== exampleValue) {\n              return false;\n            }\n          } else {\n            const valuePair: ItemPair<any> = {item: itemValue, example: exampleValue};\n            if (!this.filterPredicate(valuePair, propertyOptions, options, nextPropertyName)) {\n              // if one of the inner properties returns true, this shouldnt affect the whole item's filtering\n              // however if it returns false then the item must not be in the list\n              return false;\n            }\n          }\n        }\n      } else {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  private finalizeOptionsForProperty(commonOptions: Options | PredicateFunc, propertyOptions: PropertyOptions, propertyName: string):\n   Options | PredicateFunc {\n    if (propertyOptions && propertyOptions.hasOwnProperty(propertyName)) {\n      return propertyOptions[propertyName];\n    } else {\n      return commonOptions;\n    }\n  }\n\n  private getNextPropertyName(key: string, propertyName?: string): string {\n    return propertyName ? (propertyName + '.' + key) : key;\n  }\n\n  public isChanged(oldEntity: any, newEntity: any): boolean {\n    return !isEqual(this.toPlainJson(oldEntity), this.toPlainJson(newEntity));\n  }\n\n  public toPlainJson(object?: any): JSON | null {\n    if (!object)\n      return null;\n    return JSON.parse(JSON.stringify(object));\n  }\n\n  private isAlphaNumeric(value: any): boolean {\n    return isString(value) || isNumber(value);\n  }\n}\n","import { PropertyOptions } from './property-options';\nimport { Directive, DoCheck, Input, Host, Self, Optional } from '@angular/core';\nimport { MatTable, MatTableDataSource } from '@angular/material/table';\nimport { BehaviorSubject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { MatTableFilter } from './mat-table-filter.enum';\nimport { MatTableFilterService } from './services/mat-table-filter.service';\n\n@Directive({\n  selector: '[matTableFilter]',\n  exportAs: 'matTableFilter'\n})\nexport class MatTableFilterDirective implements DoCheck {\n  private _oldExampleEntity: any;\n\n  @Input() exampleEntity: any;\n\n  /**\n   * in millis\n   */\n  @Input() debounceTime = 400;\n  @Input() filterType: MatTableFilter = MatTableFilter.ANYWHERE;\n  @Input() caseSensitive = false;\n  @Input() customPredicate: (data: any) => boolean;\n  @Input() propertyOptions: PropertyOptions;\n  private _exampleEntitySubject: BehaviorSubject<void>;\n\n\n  constructor(\n    private _filterService: MatTableFilterService,\n    @Host() @Self() @Optional() private _table: MatTable<any>\n  ) {\n    this.initDebounceSubject();\n  }\n\n  ngDoCheck(): void {\n    if (this._filterService.isChanged(this._oldExampleEntity, this.exampleEntity)) {\n      this._oldExampleEntity = this._filterService.toPlainJson(this.exampleEntity);\n      this._exampleEntitySubject.next(undefined);\n    }\n  }\n\n\n  private initDebounceSubject() {\n    this._exampleEntitySubject = new BehaviorSubject<void>(undefined);\n    this._exampleEntitySubject.pipe(\n      debounceTime(this.debounceTime))\n      .subscribe(_ => {\n        this.updateFilterPredicate();\n      });\n  }\n\n  private updateFilterPredicate() {\n    const matDataSource = this.getMatDataSource();\n    if (matDataSource) {\n      matDataSource.filterPredicate = this.getFilterPredicate();\n      matDataSource.filter = this.exampleEntity as any;\n    }\n  }\n\n  private getFilterPredicate() {\n    if (this.customPredicate) {\n      return this.customPredicate;\n    } else {\n      return (item: any): boolean => {\n        return this._filterService.filterPredicate({ example: this.exampleEntity, item }, this.propertyOptions,\n          { filterType: this.filterType, caseSensitive: this.caseSensitive });\n      };\n    }\n  }\n\n  private getMatDataSource(): MatTableDataSource<any> {\n    const matTable = this._table as MatTable<any>;\n    return (matTable.dataSource as MatTableDataSource<any>);\n  }\n\n}\n","import { NgModule } from '@angular/core';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTableFilterDirective } from './mat-table-filter.directive';\n\n@NgModule({\n  declarations: [MatTableFilterDirective],\n  imports: [\n    MatTableModule\n  ],\n  exports: [MatTableFilterDirective]\n})\nexport class MatTableFilterModule { }\n","/*\n * Public API Surface of mat-table-filter\n */\n\nexport * from './lib/mat-table-filter.module';\nexport { MatTableFilterService } from './lib/services/mat-table-filter.service';\nexport { MatTableFilter } from './lib/mat-table-filter.enum';\nexport { Options } from './lib/options';\nexport * from './lib/property-options';\nexport { MatTableFilterDirective } from './lib/mat-table-filter.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AlphaNumericPredicateService","i2.ArrayPredicateService","i1.MatTableFilterService"],"mappings":";;;;;;;;;;;;;;;;;;;IAAY,eAKX;AALD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,cAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACzB,CAAC,EALW,cAAc,KAAd,cAAc,GAKzB,EAAA,CAAA,CAAA;;MCAqB,eAAe,CAAA;IAO5B,gBAAgB,CAAC,QAAqB,EAAE,OAAgB,EAAA;QAC7D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACzD,QAAQ,OAAO,CAAC,UAAU;YACxB,KAAK,cAAc,CAAC,MAAM;AACxB,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,KAAK,cAAc,CAAC,QAAQ;AAC1B,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACjC,KAAK,cAAc,CAAC,WAAW;AAC7B,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnC,KAAK,cAAc,CAAC,SAAS;AAC3B,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjC,YAAA;AACE,gBAAA,OAAO,IAAI,CAAC;AACf,SAAA;KACF;IAEO,kBAAkB,CAAC,QAAuB,EAAE,aAAuB,EAAA;QACzE,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACtC,SAAA;KACF;AAEO,IAAA,qBAAqB,CAAC,MAAW,EAAA;;AAEvC,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACxB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1B,YAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACnB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;AACnC,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACnC,aAAA;AACF,SAAA;KACF;AACF;;ACtCK,MAAO,4BAA6B,SAAQ,eAAuB,CAAA;AAEvE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;KACR;AAEK,IAAA,MAAM,CAAC,QAA0B,EAAA;AACtC,QAAA,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,IAAI,CAAC;KAC3C;AACM,IAAA,QAAQ,CAAC,QAA0B,EAAA;QACxC,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACjD;AACM,IAAA,UAAU,CAAC,QAA0B,EAAA;QAC1C,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACnD;AACM,IAAA,QAAQ,CAAC,QAA0B,EAAA;QACxC,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACjD;;yHAjBU,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,4BAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cAF3B,MAAM,EAAA,CAAA,CAAA;2FAEP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACIK,MAAO,qBAAsB,SAAQ,eAA2B,CAAA;AAKpE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;KACT;AAEO,IAAA,OAAO,IAAI,GAAA;AACjB,QAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,6BAA6B,CAAC,CAAC;AAClE,QAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;KACxD;AAEM,IAAA,MAAM,CAAC,QAA8B,EAAA;AAC1C,QAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KAC/D;AACM,IAAA,QAAQ,CAAC,QAA8B,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;KACvD;AACM,IAAA,UAAU,CAAC,QAA8B,EAAA;QAC9C,qBAAqB,CAAC,IAAI,EAAE,CAAC;AAC7B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAChC;AACM,IAAA,QAAQ,CAAC,QAA8B,EAAA;QAC5C,qBAAqB,CAAC,IAAI,EAAE,CAAC;AAC7B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAChC;IAEO,QAAQ,CAAC,OAAmB,EAAE,IAAgB,EAAA;AACpD,QAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;KAC5D;;AA7BD;AACwB,qBAA6B,CAAA,6BAAA,GAAG,8FAA8F,CAAC;AAC/H,qBAAkB,CAAA,kBAAA,GAAG,gFAAgF,CAAC;kHAJnH,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCWY,qBAAqB,CAAA;IAChC,WAAoB,CAAA,oBAAkD,EAAU,aAAoC,EAAA;QAAhG,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAA8B;QAAU,IAAa,CAAA,aAAA,GAAb,aAAa,CAAuB;KAAI;AAEjH,IAAA,eAAe,CAAC,QAAuB,EAAE,eAAgC,EACzD,aAAsC,EAAE,YAAqB,EAAA;;QAElF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClD,QAAA,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;YAC7B,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,YAAA,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,OAAO,YAAY,KAAK,SAAS,EAAE;;gBAE5F,SAAS;AACV,aAAA;YACD,IAAI,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE;;gBAEtC,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACrE,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAClG,gBAAA,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;oBACvB,MAAM,eAAe,GAAG,OAAwB,CAAC;AACjD,oBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;AAC/B,wBAAA,OAAO,KAAK,CAAC;AACd,qBAAA;AACF,iBAAA;AAAM,qBAAA;oBACL,MAAM,aAAa,GAAG,OAAkB,CAAC;AACzC,oBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AAClC,wBAAA,MAAM,SAAS,GAAqB,EAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,YAAY,EAAC,CAAC;wBACxF,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE;AACzE,4BAAA,OAAO,KAAK,CAAC;AACd,yBAAA;AACF,qBAAA;AAAM,yBAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;wBAC7B,MAAM,SAAS,GAAoB,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAC,CAAC;wBAC5E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE;AAClE,4BAAA,OAAO,KAAK,CAAC;AACd,yBAAA;AACF,qBAAA;AAAM,yBAAA,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;wBAC/B,IAAI,SAAS,KAAK,YAAY,EAAE;AAC9B,4BAAA,OAAO,KAAK,CAAC;AACd,yBAAA;AACF,qBAAA;AAAM,yBAAA;wBACL,MAAM,SAAS,GAAkB,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAC,CAAC;AAC1E,wBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE;;;AAGhF,4BAAA,OAAO,KAAK,CAAC;AACd,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAEO,IAAA,0BAA0B,CAAC,aAAsC,EAAE,eAAgC,EAAE,YAAoB,EAAA;QAE/H,IAAI,eAAe,IAAI,eAAe,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;AACnE,YAAA,OAAO,eAAe,CAAC,YAAY,CAAC,CAAC;AACtC,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,aAAa,CAAC;AACtB,SAAA;KACF;IAEO,mBAAmB,CAAC,GAAW,EAAE,YAAqB,EAAA;AAC5D,QAAA,OAAO,YAAY,IAAI,YAAY,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;KACxD;IAEM,SAAS,CAAC,SAAc,EAAE,SAAc,EAAA;AAC7C,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;KAC3E;AAEM,IAAA,WAAW,CAAC,MAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,MAAM;AACT,YAAA,OAAO,IAAI,CAAC;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;KAC3C;AAEO,IAAA,cAAc,CAAC,KAAU,EAAA;QAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC3C;;kHAhFU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCPY,uBAAuB,CAAA;IAgBlC,WACU,CAAA,cAAqC,EACT,MAAqB,EAAA;QADjD,IAAc,CAAA,cAAA,GAAd,cAAc,CAAuB;QACT,IAAM,CAAA,MAAA,GAAN,MAAM,CAAe;AAb3D;;AAEG;QACM,IAAY,CAAA,YAAA,GAAG,GAAG,CAAC;AACnB,QAAA,IAAA,CAAA,UAAU,GAAmB,cAAc,CAAC,QAAQ,CAAC;QACrD,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAU7B,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAED,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;AAC7E,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7E,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC5C,SAAA;KACF;IAGO,mBAAmB,GAAA;QACzB,IAAI,CAAC,qBAAqB,GAAG,IAAI,eAAe,CAAO,SAAS,CAAC,CAAC;QAClE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC7B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAC/B,SAAS,CAAC,CAAC,IAAG;YACb,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC/B,SAAC,CAAC,CAAC;KACN;IAEO,qBAAqB,GAAA;AAC3B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC9C,QAAA,IAAI,aAAa,EAAE;AACjB,YAAA,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1D,YAAA,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,aAAoB,CAAC;AAClD,SAAA;KACF;IAEO,kBAAkB,GAAA;QACxB,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,OAAO,IAAI,CAAC,eAAe,CAAC;AAC7B,SAAA;AAAM,aAAA;YACL,OAAO,CAAC,IAAS,KAAa;AAC5B,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EACpG,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AACxE,aAAC,CAAC;AACH,SAAA;KACF;IAEO,gBAAgB,GAAA;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAuB,CAAC;QAC9C,OAAQ,QAAQ,CAAC,UAAsC,CAAC;KACzD;;oHA9DU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;wGAAvB,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;AAC3B,iBAAA,CAAA;;0BAmBI,IAAI;;0BAAI,IAAI;;0BAAI,QAAQ;4CAflB,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAKG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;MCbK,oBAAoB,CAAA;;iHAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EANhB,YAAA,EAAA,CAAA,uBAAuB,CAEpC,EAAA,OAAA,EAAA,CAAA,cAAc,aAEN,uBAAuB,CAAA,EAAA,CAAA,CAAA;AAEtB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAJ7B,cAAc,CAAA,EAAA,CAAA,CAAA;2FAIL,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,uBAAuB,CAAC;AACvC,oBAAA,OAAO,EAAE;wBACP,cAAc;AACf,qBAAA;oBACD,OAAO,EAAE,CAAC,uBAAuB,CAAC;AACnC,iBAAA,CAAA;;;ACVD;;AAEG;;ACFH;;AAEG;;;;"}