{"version":3,"file":"ng-devui-sticky.mjs","sources":["../../devui/sticky/sticky.component.ts","../../devui/sticky/sticky.module.ts","../../devui/sticky/ng-devui-sticky.ts"],"sourcesContent":["import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { WindowRef } from 'ng-devui/window-ref';\r\nimport { Subscription, fromEvent } from 'rxjs';\r\nimport { filter, throttleTime } from 'rxjs/operators';\r\n\r\nexport type StickyStatus = 'normal' | 'follow' | 'stay' | 'remain';\r\n\r\n@Component({\r\n  selector: 'd-sticky',\r\n  template: `\r\n    <div #stickyWrapper [style.zIndex]=\"zIndex\">\r\n      <ng-content></ng-content>\r\n    </div>\r\n  `,\r\n  preserveWhitespaces: false,\r\n})\r\nexport class StickyComponent implements OnInit, AfterViewInit, OnDestroy {\r\n  @HostBinding('style.position') hostPosition = 'relative';\r\n  @Input() zIndex: number;\r\n  @Input() container: Element; // 默认值父容器\r\n  @Input() view: {\r\n    top?: number;\r\n    bottom?: number;\r\n  };\r\n  @Input() scrollTarget;\r\n\r\n  @Output() statusChange: EventEmitter<StickyStatus> = new EventEmitter<StickyStatus>();\r\n  @ViewChild('stickyWrapper', { static: true }) wrapper;\r\n\r\n  _prevStatus: StickyStatus = undefined;\r\n  _status: StickyStatus = 'normal';\r\n  set status(status: StickyStatus) {\r\n    if (status !== this._status) {\r\n      this._prevStatus = this._status;\r\n      this._status = status;\r\n      this.statusChange.emit(this._status);\r\n      this.statusProcess(this._status);\r\n    }\r\n  }\r\n  get status() {\r\n    return this._status;\r\n  }\r\n\r\n  parentNode;\r\n  containerLeft; // 用于监听是否是横向滚动\r\n\r\n  private THROTTLE_DELAY = 16;\r\n  private THROTTLE_TRIGGER = 100;\r\n  private scrollPreStart;\r\n  private scrollTimer;\r\n  subscription: Subscription;\r\n\r\n  constructor(private el: ElementRef, private windowRef: WindowRef) {}\r\n\r\n  ngOnInit() {\r\n    this.parentNode = this.el.nativeElement.parentNode;\r\n    if (!this.container) {\r\n      this.container = this.parentNode;\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.scrollTarget = this.scrollTarget || this.windowRef.window; // window有scroll事件，document.documentElement没有scroll事件\r\n    this.scrollTarget.addEventListener('scroll', this.throttle);\r\n    this.initScrollStatus(this.scrollTarget);\r\n    if (this.scrollTarget !== this.windowRef.window) {\r\n      this.subscription = fromEvent<Event>(this.windowRef.window, 'scroll')\r\n        .pipe(\r\n          throttleTime(100, undefined, { leading: true, trailing: true }),\r\n          filter(\r\n            (event) =>\r\n              event.target !== this.scrollTarget &&\r\n              (event.target === this.windowRef.window ||\r\n                event.target === this.windowRef.document || // fix ie11 document.contains is not defined\r\n                ((<HTMLElement>event.target).contains && (<HTMLElement>event.target).contains(this.scrollTarget)))\r\n          )\r\n        )\r\n        .subscribe((event) => {\r\n          this.statusProcess(this._status);\r\n        });\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.scrollTarget.removeEventListener('scroll', this.throttle);\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  statusProcess(status) {\r\n    switch (status) {\r\n    case 'normal':\r\n      this.wrapper.nativeElement.style.top = 'auto';\r\n      this.wrapper.nativeElement.style.left = 'auto';\r\n      this.wrapper.nativeElement.style.position = 'static';\r\n      break;\r\n    case 'follow': {\r\n      const viewOffset =\r\n        this.scrollTarget && this.scrollTarget !== this.windowRef.window ? this.scrollTarget.getBoundingClientRect().top : 0;\r\n      this.wrapper.nativeElement.style.top = Number(viewOffset) + ((this.view && this.view.top) || 0) + 'px';\r\n      this.wrapper.nativeElement.style.left = this.wrapper.nativeElement.getBoundingClientRect().left + 'px';\r\n      this.wrapper.nativeElement.style.position = 'fixed';\r\n      break;\r\n    }\r\n    case 'stay': {\r\n      this.wrapper.nativeElement.style.top = this.calculateRelativePosition(this.wrapper.nativeElement, this.parentNode, 'top') + 'px';\r\n      this.wrapper.nativeElement.style.left = 'auto';\r\n      this.wrapper.nativeElement.style.position = 'relative';\r\n      break;\r\n    }\r\n    case 'remain': {\r\n      if (this.wrapper.nativeElement.style.position !== 'fixed' || this.wrapper.nativeElement.style.position !== 'absolute') {\r\n        this.wrapper.nativeElement.style.top = this.calculateRelativePosition(this.wrapper.nativeElement, this.parentNode, 'top') + 'px';\r\n        this.wrapper.nativeElement.style.left = 'auto';\r\n        this.wrapper.nativeElement.style.position = 'absolute'; // 要先转为absolute再计算，否则如果处于非fixed影响计算\r\n      }\r\n      this.wrapper.nativeElement.style.top =\r\n        this.calculateRemainPosition(this.wrapper.nativeElement, this.parentNode, this.container) + 'px';\r\n      this.wrapper.nativeElement.style.left = this.calculateRelativePosition(this.wrapper.nativeElement, this.parentNode, 'left') + 'px';\r\n      this.wrapper.nativeElement.style.position = 'relative';\r\n      break;\r\n    }\r\n    default:\r\n    }\r\n  }\r\n\r\n  @HostListener('window:resize')\r\n  throttle = () => {\r\n    const fn = this.scrollAndResizeHock;\r\n    const time = Date.now();\r\n    if (this.scrollTimer) {\r\n      clearTimeout(this.scrollTimer);\r\n    }\r\n    if (!this.scrollPreStart) {\r\n      this.scrollPreStart = time;\r\n    }\r\n    if (time - this.scrollPreStart > this.THROTTLE_TRIGGER) {\r\n      fn();\r\n      this.scrollPreStart = null;\r\n      this.scrollTimer = null;\r\n    } else {\r\n      this.scrollTimer = setTimeout(() => {\r\n        fn();\r\n        this.scrollPreStart = null;\r\n        this.scrollTimer = null;\r\n      }, this.THROTTLE_DELAY);\r\n    }\r\n  };\r\n  scrollAndResizeHock = () => {\r\n    if (this.container.getBoundingClientRect().left - (this.containerLeft || 0) !== 0) {\r\n      this.status = 'stay';\r\n      this.containerLeft = this.container.getBoundingClientRect().left;\r\n    } else {\r\n      this.scrollHandler();\r\n    }\r\n  };\r\n\r\n  scrollHandler = () => {\r\n    const viewOffsetTop =\r\n      this.scrollTarget && this.scrollTarget !== this.windowRef.window ? this.scrollTarget.getBoundingClientRect().top : 0;\r\n    const computedStyle = this.windowRef.window.getComputedStyle(this.container);\r\n    if (this.parentNode.getBoundingClientRect().top - viewOffsetTop > ((this.view && this.view.top) || 0)) {\r\n      this.status = 'normal'; // 全局滑动（container!==parentNode）时候增加预判\r\n    } else if (\r\n      this.container.getBoundingClientRect().top +\r\n        parseInt(computedStyle.paddingTop, 10) +\r\n        parseInt(computedStyle.borderTopWidth, 10) -\r\n        viewOffsetTop >=\r\n      ((this.view && this.view.top) || 0)\r\n    ) {\r\n      this.status = 'normal';\r\n    } else if (\r\n      this.container.getBoundingClientRect().bottom -\r\n        parseInt(computedStyle.paddingBottom, 10) -\r\n        parseInt(computedStyle.borderBottomWidth, 10) <\r\n      viewOffsetTop +\r\n        ((this.view && this.view.top) || 0) +\r\n        this.wrapper.nativeElement.getBoundingClientRect().height +\r\n        ((this.view && this.view.bottom) || 0)\r\n    ) {\r\n      this.status = 'remain';\r\n    } else if (\r\n      this.container.getBoundingClientRect().top + parseInt(computedStyle.paddingTop, 10) - viewOffsetTop <\r\n      ((this.view && this.view.top) || 0)\r\n    ) {\r\n      this.status = 'follow';\r\n    }\r\n  };\r\n\r\n  calculateRelativePosition(element, relativeElement, direction) {\r\n    const key = {\r\n      left: ['left', 'Left'],\r\n      top: ['top', 'Top'],\r\n    };\r\n    if (this.windowRef.window && this.windowRef.window.getComputedStyle) {\r\n      const computedStyle = this.windowRef.window.getComputedStyle(relativeElement);\r\n      return (\r\n        element.getBoundingClientRect()[key[direction][0]] -\r\n        relativeElement.getBoundingClientRect()[key[direction][0]] -\r\n        parseInt(computedStyle['padding' + key[direction][1]], 10) -\r\n        parseInt(computedStyle['border' + key[direction][1] + 'Width'], 10)\r\n      );\r\n    }\r\n  }\r\n  calculateRemainPosition(element, relativeElement, container) {\r\n    if (this.windowRef.window && this.windowRef.window.getComputedStyle) {\r\n      const computedStyle = this.windowRef.window.getComputedStyle(container);\r\n      const result =\r\n        container.getBoundingClientRect().height -\r\n        element.getBoundingClientRect().height +\r\n        container.getBoundingClientRect().top -\r\n        relativeElement.getBoundingClientRect().top -\r\n        parseInt(computedStyle.paddingTop, 10) -\r\n        parseInt(computedStyle.borderTopWidth, 10) -\r\n        parseInt(computedStyle.paddingBottom, 10) -\r\n        parseInt(computedStyle.borderBottomWidth, 10);\r\n      return result < 0 ? 0 : result;\r\n    }\r\n  }\r\n\r\n  initScrollStatus(target) {\r\n    const scrollTargets =\r\n      target === this.windowRef.window ? [this.windowRef.document.documentElement, this.windowRef.document.body] : [target];\r\n    let flag = false;\r\n    scrollTargets.forEach((scrollTarget) => {\r\n      if (scrollTarget.scrollTop && scrollTarget.scrollTop > 0) {\r\n        flag = true;\r\n      }\r\n    });\r\n    if (flag) {\r\n      setTimeout(this.scrollHandler);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 提供给业务自己触发\r\n   * 用法：\r\n   * 1.捕获所有sticky：```@ViewChildren(StickyComponent) stickies;```\r\n   * 2.触发刷新：当需要手动触发更新的时候，比如订阅数据返回后页面高度发生变化可以调用 ```stickies.forEach(sticky => sticky.recalculatePosition());```\r\n   * 慎用，少用， 使用太多会影响性能。\r\n   */\r\n  public recalculatePosition() {\r\n    this.initScrollStatus(this.scrollTarget);\r\n  }\r\n}\r\n// TODO: 重构梳理状态\r\n","import { NgModule } from '@angular/core';\nimport { WindowRefModule } from 'ng-devui/window-ref';\nimport { StickyComponent } from './sticky.component';\n\n@NgModule({\n  imports: [\n    WindowRefModule\n  ],\n  declarations: [\n    StickyComponent\n  ],\n  exports: [\n    StickyComponent,\n  ],\n})\n\nexport class StickyModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;MA4Ba,eAAe,CAAA;IAe1B,IAAI,MAAM,CAAC,MAAoB,EAAA;AAC7B,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;AAChC,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAClC;KACF;AACD,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAWD,WAAoB,CAAA,EAAc,EAAU,SAAoB,EAAA;QAA5C,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAAU,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAnCjC,IAAY,CAAA,YAAA,GAAG,UAAU,CAAC;AAS/C,QAAA,IAAA,CAAA,YAAY,GAA+B,IAAI,YAAY,EAAgB,CAAC;QAGtF,IAAW,CAAA,WAAA,GAAiB,SAAS,CAAC;QACtC,IAAO,CAAA,OAAA,GAAiB,QAAQ,CAAC;QAgBzB,IAAc,CAAA,cAAA,GAAG,EAAE,CAAC;QACpB,IAAgB,CAAA,gBAAA,GAAG,GAAG,CAAC;QAiF/B,IAAQ,CAAA,QAAA,GAAG,MAAK;AACd,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACpC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACxB,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAChC;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;aAC5B;YACD,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtD,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;iBAAM;AACL,gBAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAK;AACjC,oBAAA,EAAE,EAAE,CAAC;AACL,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC1B,iBAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;aACzB;AACH,SAAC,CAAC;QACF,IAAmB,CAAA,mBAAA,GAAG,MAAK;AACzB,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE;AACjF,gBAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC;aAClE;iBAAM;gBACL,IAAI,CAAC,aAAa,EAAE,CAAC;aACtB;AACH,SAAC,CAAC;QAEF,IAAa,CAAA,aAAA,GAAG,MAAK;AACnB,YAAA,MAAM,aAAa,GACjB,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACvH,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7E,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE;AACrG,gBAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;aACxB;AAAM,iBAAA,IACL,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,GAAG;AACxC,gBAAA,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC;AACtC,gBAAA,QAAQ,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1C,aAAa;AACf,iBAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EACnC;AACA,gBAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;aACxB;AAAM,iBAAA,IACL,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,MAAM;AAC3C,gBAAA,QAAQ,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC;AACzC,gBAAA,QAAQ,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,CAAC;gBAC/C,aAAa;AACX,qBAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;oBACnC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,MAAM;AACzD,qBAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,EACxC;AACA,gBAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;aACxB;AAAM,iBAAA,IACL,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,aAAa;AACnG,iBAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EACnC;AACA,gBAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;aACxB;AACH,SAAC,CAAC;KAxIkE;IAEpE,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;SAClC;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC/D,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAC/C,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;AAClE,iBAAA,IAAI,CACH,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAC/D,MAAM,CACJ,CAAC,KAAK,KACJ,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY;iBACjC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM;oBACrC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ;AACxC,qBAAe,KAAK,CAAC,MAAO,CAAC,QAAQ,IAAkB,KAAK,CAAC,MAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CACvG,CACF;AACA,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,aAAC,CAAC,CAAC;SACN;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/D,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACjC;KACF;AAED,IAAA,aAAa,CAAC,MAAM,EAAA;QAClB,QAAQ,MAAM;AACd,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;gBAC9C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACrD,MAAM;YACR,KAAK,QAAQ,EAAE;AACb,gBAAA,MAAM,UAAU,GACd,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACvH,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;gBACvG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;gBACvG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;gBACpD,MAAM;aACP;YACD,KAAK,MAAM,EAAE;gBACX,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;gBACjI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;gBACvD,MAAM;aACP;YACD,KAAK,QAAQ,EAAE;gBACb,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,KAAK,UAAU,EAAE;oBACrH,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;oBACjI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;AAC/C,oBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;iBACxD;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG;AAClC,oBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;gBACnG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;gBACnI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;gBACvD,MAAM;aACP;YACD,QAAQ;SACP;KACF;AAiED,IAAA,yBAAyB,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAA;AAC3D,QAAA,MAAM,GAAG,GAAG;AACV,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AACtB,YAAA,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;SACpB,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACnE,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAC9E,YAAA,QACE,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,eAAe,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,gBAAA,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1D,gBAAA,QAAQ,CAAC,aAAa,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,EACnE;SACH;KACF;AACD,IAAA,uBAAuB,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAA;AACzD,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACnE,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACxE,YAAA,MAAM,MAAM,GACV,SAAS,CAAC,qBAAqB,EAAE,CAAC,MAAM;AACxC,gBAAA,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM;AACtC,gBAAA,SAAS,CAAC,qBAAqB,EAAE,CAAC,GAAG;AACrC,gBAAA,eAAe,CAAC,qBAAqB,EAAE,CAAC,GAAG;AAC3C,gBAAA,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC;AACtC,gBAAA,QAAQ,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,CAAC;AAC1C,gBAAA,QAAQ,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC;AACzC,gBAAA,QAAQ,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;YAChD,OAAO,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;SAChC;KACF;AAED,IAAA,gBAAgB,CAAC,MAAM,EAAA;AACrB,QAAA,MAAM,aAAa,GACjB,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxH,IAAI,IAAI,GAAG,KAAK,CAAC;AACjB,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,KAAI;YACrC,IAAI,YAAY,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS,GAAG,CAAC,EAAE;gBACxD,IAAI,GAAG,IAAI,CAAC;aACb;AACH,SAAC,CAAC,CAAC;QACH,IAAI,IAAI,EAAE;AACR,YAAA,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAChC;KACF;AAED;;;;;;AAMG;IACI,mBAAmB,GAAA;AACxB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC1C;+GApOU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAPhB,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,YAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAGU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAT3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACD,oBAAA,mBAAmB,EAAE,KAAK;AAC3B,iBAAA,CAAA;uGAEgC,YAAY,EAAA,CAAA;sBAA1C,WAAW;uBAAC,gBAAgB,CAAA;gBACpB,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAIG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACuC,OAAO,EAAA,CAAA;sBAApD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAqG5C,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,eAAe,CAAA;;;MC3HlB,YAAY,CAAA;+GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,EAPrB,YAAA,EAAA,CAAA,eAAe,CAHf,EAAA,OAAA,EAAA,CAAA,eAAe,aAMf,eAAe,CAAA,EAAA,CAAA,CAAA,EAAA;AAIN,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAVrB,eAAe,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAUN,YAAY,EAAA,UAAA,EAAA,CAAA;kBAZxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,eAAe;AAChB,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,eAAe;AAChB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,eAAe;AAChB,qBAAA;AACF,iBAAA,CAAA;;;ACdD;;AAEG;;;;"}