{"version":3,"file":"ellipsis.mjs","sources":["../../../../packages/abc/ellipsis/ellipsis.component.ts","../../../../packages/abc/ellipsis/ellipsis.module.ts","../../../../packages/abc/ellipsis/ellipsis.ts"],"sourcesContent":["import { CdkObserveContent } from '@angular/cdk/observers';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Injector,\n  ViewEncapsulation,\n  afterNextRender,\n  booleanAttribute,\n  effect,\n  inject,\n  input,\n  numberAttribute,\n  runInInjectionContext,\n  signal,\n  viewChild\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\nimport { NzTooltipDirective } from 'ng-zorro-antd/tooltip';\n\n@Component({\n  selector: 'ellipsis',\n  exportAs: 'ellipsis',\n  template: `\n    <div (cdkObserveContent)=\"refresh()\" #orgEl style=\"display: none\"><ng-content /></div>\n    <ng-template #tooltipTpl let-con>\n      @if (tooltip()) {\n        <span\n          nz-tooltip\n          [nzTooltipTitle]=\"titleTpl\"\n          [nzTooltipOverlayStyle]=\"{ 'overflow-wrap': 'break-word', 'word-wrap': 'break-word' }\"\n        >\n          <ng-container *ngTemplateOutlet=\"con\" />\n          <ng-template #titleTpl><div [innerHTML]=\"orgHtml()\"></div></ng-template>\n        </span>\n      } @else {\n        <ng-container *ngTemplateOutlet=\"con\" />\n      }\n    </ng-template>\n    @let c = cls();\n    @switch (type()) {\n      @case ('default') {\n        <span [class]=\"c\"></span>\n      }\n      @case ('length') {\n        <ng-template [ngTemplateOutlet]=\"tooltipTpl\" [ngTemplateOutletContext]=\"{ $implicit: lengthTpl }\" />\n        <ng-template #lengthTpl>{{ text() }}</ng-template>\n      }\n      @case ('line-clamp') {\n        <ng-template [ngTemplateOutlet]=\"tooltipTpl\" [ngTemplateOutletContext]=\"{ $implicit: lineClampTpl }\" />\n        <ng-template #lineClampTpl>\n          <div [class]=\"c\" [style]=\"{ '-webkit-line-clamp': lines(), '-webkit-box-orient': 'vertical' }\"></div>\n        </ng-template>\n      }\n      @case ('line') {\n        <div [class]=\"c\">\n          <div class=\"ellipsis__handle\">\n            <ng-template [ngTemplateOutlet]=\"tooltipTpl\" [ngTemplateOutletContext]=\"{ $implicit: lineTpl }\" />\n            <ng-template #lineTpl>{{ linsWord }}</ng-template>\n            <div class=\"ellipsis__shadow\" #shadowOrgEl [innerHTML]=\"orgHtml()\"></div>\n            <div class=\"ellipsis__shadow\" #shadowTextEl>\n              <span>{{ text() }}</span>\n            </div>\n          </div>\n        </div>\n      }\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [CdkObserveContent, NzTooltipDirective, NgTemplateOutlet]\n})\nexport class EllipsisComponent {\n  private readonly el: HTMLElement = inject(ElementRef).nativeElement;\n  private readonly injector = inject(Injector);\n  private readonly dom = inject(DomSanitizer);\n  private readonly doc = inject(DOCUMENT);\n  private isSupportLineClamp = this.doc.body.style['webkitLineClamp'] !== undefined;\n  private readonly orgEl = viewChild.required<ElementRef<HTMLElement>>('orgEl');\n  private readonly shadowOrgEl = viewChild<ElementRef<HTMLElement>>('shadowOrgEl');\n  private readonly shadowTextEl = viewChild<ElementRef<HTMLElement>>('shadowTextEl');\n  protected orgHtml = signal<SafeHtml | null>(null);\n  protected type = signal('default');\n  protected cls = signal<Record<string, NzSafeAny>>({});\n  readonly text = signal('');\n  targetCount = 0;\n\n  readonly tooltip = input(false, { transform: booleanAttribute });\n  readonly length = input(null, {\n    transform: (v: unknown) => (v == null ? null : numberAttribute(v))\n  });\n  readonly lines = input(null, {\n    transform: (v: unknown) => (v == null ? null : numberAttribute(v))\n  });\n  readonly fullWidthRecognition = input(false, { transform: booleanAttribute });\n  readonly tail = input('...');\n\n  protected get linsWord(): string {\n    const { targetCount, text, tail } = this;\n    return (\n      (targetCount > 0 ? text().substring(0, targetCount) : '') +\n      (targetCount > 0 && targetCount < text().length ? tail() : '')\n    );\n  }\n\n  private get win(): NzSafeAny {\n    return this.doc.defaultView ?? window;\n  }\n\n  constructor() {\n    effect(() => {\n      this.refresh();\n    });\n  }\n\n  private getStrFullLength(str: string): number {\n    return str.split('').reduce((pre, cur) => {\n      const charCode = cur.charCodeAt(0);\n      if (charCode >= 0 && charCode <= 128) {\n        return pre + 1;\n      }\n      return pre + 2;\n    }, 0);\n  }\n\n  private cutStrByFullLength(str: string, maxLength: number): string {\n    let showLength = 0;\n    return str.split('').reduce((pre, cur) => {\n      const charCode = cur.charCodeAt(0);\n      if (charCode >= 0 && charCode <= 128) {\n        showLength += 1;\n      } else {\n        showLength += 2;\n      }\n      if (showLength <= maxLength) {\n        return pre + cur;\n      }\n      return pre;\n    }, '');\n  }\n\n  private bisection(\n    targetHeight: number,\n    mid: number,\n    begin: number,\n    end: number,\n    text: string,\n    node: HTMLElement\n  ): number {\n    const suffix = this.tail();\n    node.innerHTML = text.substring(0, mid) + suffix;\n    let sh = node.offsetHeight;\n\n    if (sh <= targetHeight) {\n      node.innerHTML = text.substring(0, mid + 1) + suffix;\n      sh = node.offsetHeight;\n      if (sh > targetHeight || mid === begin) {\n        return mid;\n      }\n      begin = mid;\n      mid = end - begin === 1 ? begin + 1 : Math.floor((end - begin) / 2) + begin;\n      return this.bisection(targetHeight, mid, begin, end, text, node);\n    }\n    if (mid - 1 < 0) {\n      return mid;\n    }\n    node.innerHTML = text.substring(0, mid - 1) + suffix;\n    sh = node.offsetHeight;\n    if (sh <= targetHeight) {\n      return mid - 1;\n    }\n    end = mid;\n    mid = Math.floor((end - begin) / 2) + begin;\n    return this.bisection(targetHeight, mid, begin, end, text, node);\n  }\n\n  private genType(): void {\n    const lines = this.lines();\n    const length = this.length();\n    const isSupportLineClamp = this.isSupportLineClamp;\n    this.cls.set({\n      ellipsis: true,\n      ellipsis__lines: lines && !isSupportLineClamp,\n      'ellipsis__line-clamp': lines && isSupportLineClamp\n    });\n    if (!lines && !length) {\n      this.type.set('default');\n    } else if (!lines) {\n      this.type.set('length');\n    } else if (isSupportLineClamp) {\n      this.type.set('line-clamp');\n    } else {\n      this.type.set('line');\n    }\n  }\n\n  private gen(): void {\n    const lines = this.lines();\n    const length = this.length();\n    const type = this.type();\n    const { fullWidthRecognition, tail, orgEl } = this;\n    if (type === 'length') {\n      const lengthText = orgEl().nativeElement.textContent!;\n      const textLength = fullWidthRecognition() ? this.getStrFullLength(lengthText) : lengthText.length;\n      if (length == null || textLength <= length || length < 0) {\n        this.text.set(lengthText);\n      } else {\n        let displayText: string;\n        if (length - tail().length <= 0) {\n          displayText = '';\n        } else {\n          displayText = fullWidthRecognition()\n            ? this.cutStrByFullLength(lengthText, length)\n            : lengthText.slice(0, length);\n        }\n        this.text.set(displayText + tail());\n      }\n    } else if (type === 'line') {\n      const { shadowOrgEl, shadowTextEl } = this;\n      const orgNode = shadowOrgEl()!.nativeElement;\n      const lineText = orgNode.innerText ?? orgNode.textContent!;\n      const lineHeight = parseInt(this.win.getComputedStyle(this.getEl('.ellipsis')).lineHeight!, 10);\n      const targetHeight = lines! * lineHeight;\n      const handleEl = this.getEl('.ellipsis__handle');\n      handleEl!.style.height = `${targetHeight}px`;\n\n      if (orgNode.offsetHeight <= targetHeight) {\n        this.text.set(lineText);\n        this.targetCount = lineText.length;\n      } else {\n        // bisection\n        const len = lineText.length;\n        const mid = Math.ceil(len / 2);\n\n        const firstChild = shadowTextEl()!.nativeElement.firstChild as HTMLElement;\n        const count = this.bisection(targetHeight, mid, 0, len, lineText, firstChild);\n        this.text.set(lineText);\n        this.targetCount = count;\n      }\n    }\n  }\n\n  private getEl(cls: string): HTMLElement | null {\n    return this.el.querySelector<HTMLElement>(cls);\n  }\n\n  protected refresh(): void {\n    this.genType();\n    const { dom, orgEl } = this;\n    const html = orgEl().nativeElement.innerHTML;\n    this.orgHtml.set(dom.bypassSecurityTrustHtml(html));\n    const type = this.type();\n    runInInjectionContext(this.injector, () => {\n      afterNextRender(() => {\n        this.gen();\n        if (type !== 'line') {\n          const el = this.getEl('.ellipsis');\n          if (el) {\n            el.innerHTML = html;\n          }\n        }\n      });\n    });\n  }\n}\n","import { ObserversModule } from '@angular/cdk/observers';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { NzTooltipModule } from 'ng-zorro-antd/tooltip';\n\nimport { EllipsisComponent } from './ellipsis.component';\n\nconst COMPONENTS = [EllipsisComponent];\n\n@NgModule({\n  imports: [CommonModule, ObserversModule, NzTooltipModule, ...COMPONENTS],\n  exports: COMPONENTS\n})\nexport class EllipsisModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;MA2Ea,iBAAiB,CAAA;AACX,IAAA,EAAE,GAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;AAClD,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;AAC1B,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC/B,IAAA,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,SAAS;AAChE,IAAA,KAAK,GAAG,SAAS,CAAC,QAAQ,CAA0B,OAAO,CAAC;AAC5D,IAAA,WAAW,GAAG,SAAS,CAA0B,aAAa,kFAAC;AAC/D,IAAA,YAAY,GAAG,SAAS,CAA0B,cAAc,mFAAC;AACxE,IAAA,OAAO,GAAG,MAAM,CAAkB,IAAI,8EAAC;AACvC,IAAA,IAAI,GAAG,MAAM,CAAC,SAAS,2EAAC;AACxB,IAAA,GAAG,GAAG,MAAM,CAA4B,EAAE,0EAAC;AAC5C,IAAA,IAAI,GAAG,MAAM,CAAC,EAAE,2EAAC;IAC1B,WAAW,GAAG,CAAC;IAEN,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACvD,IAAA,MAAM,GAAG,KAAK,CAAC,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,CAAA,EAC1B,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,GAClE;AACO,IAAA,KAAK,GAAG,KAAK,CAAC,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,CAAA,EACzB,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,GAClE;IACO,oBAAoB,GAAG,KAAK,CAAC,KAAK,4FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACpE,IAAA,IAAI,GAAG,KAAK,CAAC,KAAK,2EAAC;AAE5B,IAAA,IAAc,QAAQ,GAAA;QACpB,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI;QACxC,QACE,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE;aACvD,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;IAElE;AAEA,IAAA,IAAY,GAAG,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM;IACvC;AAEA,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,OAAO,EAAE;AAChB,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,gBAAgB,CAAC,GAAW,EAAA;AAClC,QAAA,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;YACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YAClC,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,GAAG,EAAE;gBACpC,OAAO,GAAG,GAAG,CAAC;YAChB;YACA,OAAO,GAAG,GAAG,CAAC;QAChB,CAAC,EAAE,CAAC,CAAC;IACP;IAEQ,kBAAkB,CAAC,GAAW,EAAE,SAAiB,EAAA;QACvD,IAAI,UAAU,GAAG,CAAC;AAClB,QAAA,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;YACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YAClC,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,GAAG,EAAE;gBACpC,UAAU,IAAI,CAAC;YACjB;iBAAO;gBACL,UAAU,IAAI,CAAC;YACjB;AACA,YAAA,IAAI,UAAU,IAAI,SAAS,EAAE;gBAC3B,OAAO,GAAG,GAAG,GAAG;YAClB;AACA,YAAA,OAAO,GAAG;QACZ,CAAC,EAAE,EAAE,CAAC;IACR;IAEQ,SAAS,CACf,YAAoB,EACpB,GAAW,EACX,KAAa,EACb,GAAW,EACX,IAAY,EACZ,IAAiB,EAAA;AAEjB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM;AAChD,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY;AAE1B,QAAA,IAAI,EAAE,IAAI,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM;AACpD,YAAA,EAAE,GAAG,IAAI,CAAC,YAAY;YACtB,IAAI,EAAE,GAAG,YAAY,IAAI,GAAG,KAAK,KAAK,EAAE;AACtC,gBAAA,OAAO,GAAG;YACZ;YACA,KAAK,GAAG,GAAG;AACX,YAAA,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK;AAC3E,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QAClE;AACA,QAAA,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE;AACf,YAAA,OAAO,GAAG;QACZ;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM;AACpD,QAAA,EAAE,GAAG,IAAI,CAAC,YAAY;AACtB,QAAA,IAAI,EAAE,IAAI,YAAY,EAAE;YACtB,OAAO,GAAG,GAAG,CAAC;QAChB;QACA,GAAG,GAAG,GAAG;AACT,QAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK;AAC3C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;IAClE;IAEQ,OAAO,GAAA;AACb,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;AAClD,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACX,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,eAAe,EAAE,KAAK,IAAI,CAAC,kBAAkB;YAC7C,sBAAsB,EAAE,KAAK,IAAI;AAClC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAC1B;aAAO,IAAI,CAAC,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB;aAAO,IAAI,kBAAkB,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;QAC7B;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QACvB;IACF;IAEQ,GAAG,GAAA;AACT,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI;AAClD,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;YACrB,MAAM,UAAU,GAAG,KAAK,EAAE,CAAC,aAAa,CAAC,WAAY;AACrD,YAAA,MAAM,UAAU,GAAG,oBAAoB,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM;AACjG,YAAA,IAAI,MAAM,IAAI,IAAI,IAAI,UAAU,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE;AACxD,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YAC3B;iBAAO;AACL,gBAAA,IAAI,WAAmB;gBACvB,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE;oBAC/B,WAAW,GAAG,EAAE;gBAClB;qBAAO;oBACL,WAAW,GAAG,oBAAoB;0BAC9B,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM;0BAC1C,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;gBACjC;gBACA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,EAAE,CAAC;YACrC;QACF;AAAO,aAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AAC1B,YAAA,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,IAAI;AAC1C,YAAA,MAAM,OAAO,GAAG,WAAW,EAAG,CAAC,aAAa;YAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAY;YAC1D,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,UAAW,EAAE,EAAE,CAAC;AAC/F,YAAA,MAAM,YAAY,GAAG,KAAM,GAAG,UAAU;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;YAChD,QAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,YAAY,IAAI;AAE5C,YAAA,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;AACxC,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvB,gBAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM;YACpC;iBAAO;;AAEL,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM;gBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBAE9B,MAAM,UAAU,GAAG,YAAY,EAAG,CAAC,aAAa,CAAC,UAAyB;AAC1E,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC;AAC7E,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YAC1B;QACF;IACF;AAEQ,IAAA,KAAK,CAAC,GAAW,EAAA;QACvB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAc,GAAG,CAAC;IAChD;IAEU,OAAO,GAAA;QACf,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI;QAC3B,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,aAAa,CAAC,SAAS;AAC5C,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACnD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAK;YACxC,eAAe,CAAC,MAAK;gBACnB,IAAI,CAAC,GAAG,EAAE;AACV,gBAAA,IAAI,IAAI,KAAK,MAAM,EAAE;oBACnB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;oBAClC,IAAI,EAAE,EAAE;AACN,wBAAA,EAAE,CAAC,SAAS,GAAG,IAAI;oBACrB;gBACF;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;uGA/LW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjDlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,6BAAA,EAAA,yBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAEtD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBApD7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB;AAClE,iBAAA;6FAOsE,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACV,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACZ,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC3EnF,MAAM,UAAU,GAAG,CAAC,iBAAiB,CAAC;MAMzB,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAd,cAAc,EAAA,OAAA,EAAA,CAHf,YAAY,EAAE,eAAe,EAAE,eAAe,EAHtC,iBAAiB,CAAA,EAAA,OAAA,EAAA,CAAjB,iBAAiB,CAAA,EAAA,CAAA;AAMxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAAA,OAAA,EAAA,CAHf,YAAY,EAAE,eAAe,EAAE,eAAe,CAAA,EAAA,CAAA;;2FAG7C,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC;AACxE,oBAAA,OAAO,EAAE;AACV,iBAAA;;;ACbD;;AAEG;;;;"}