{"version":3,"file":"ui-vts-kit-ng-vts-affix.mjs","sources":["../../components/affix/respond-events.ts","../../components/affix/utils.ts","../../components/affix/affix.component.ts","../../components/affix/affix.module.ts","../../components/affix/public-api.ts","../../components/affix/ui-vts-kit-ng-vts-affix.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport enum AffixRespondEvents {\n  resize = 'resize',\n  scroll = 'scroll',\n  touchstart = 'touchstart',\n  touchmove = 'touchmove',\n  touchend = 'touchend',\n  pageshow = 'pageshow',\n  load = 'LOAD'\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport interface SimpleRect {\n  top: number;\n  left: number;\n  width?: number;\n  height?: number;\n  bottom?: number;\n}\n\nexport function isTargetWindow(target: Element | Window): target is Window {\n  return typeof window !== 'undefined' && target === window;\n}\n\nexport function getTargetRect(target: Element | Window): SimpleRect {\n  return !isTargetWindow(target)\n    ? target.getBoundingClientRect()\n    : {\n        top: 0,\n        left: 0,\n        bottom: 0\n      };\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  Renderer2,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { VtsConfigKey, VtsConfigService, WithConfig } from '@ui-vts-kit/ng-vts/core/config';\nimport { VtsScrollService } from '@ui-vts-kit/ng-vts/core/services';\nimport { NgStyleInterface, NumberInput, VtsSafeAny } from '@ui-vts-kit/ng-vts/core/types';\nimport { getStyleAsText, InputNumber, shallowEqual } from '@ui-vts-kit/ng-vts/core/util';\n\nimport { fromEvent, merge, ReplaySubject, Subject, Subscription } from 'rxjs';\nimport { auditTime, map, takeUntil } from 'rxjs/operators';\n\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { AffixRespondEvents } from './respond-events';\nimport { getTargetRect, SimpleRect } from './utils';\n\nconst VTS_CONFIG_MODULE_NAME: VtsConfigKey = 'affix';\nconst VTS_AFFIX_CLS_PREFIX = 'vts-affix';\nconst VTS_AFFIX_DEFAULT_SCROLL_TIME = 20;\n\n@Component({\n  selector: 'vts-affix',\n  exportAs: 'vtsAffix',\n  template: `\n    <div #fixedEl>\n      <ng-content></ng-content>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class VtsAffixComponent implements AfterViewInit, OnChanges, OnDestroy, OnInit {\n  readonly _vtsModuleName: VtsConfigKey = VTS_CONFIG_MODULE_NAME;\n  static ngAcceptInputType_vtsOffsetTop: NumberInput;\n  static ngAcceptInputType_vtsOffsetBottom: NumberInput;\n\n  @ViewChild('fixedEl', { static: true })\n  private fixedEl!: ElementRef<HTMLDivElement>;\n\n  @Input() vtsTarget?: string | Element | Window;\n\n  @Input()\n  @WithConfig<number | null>()\n  @InputNumber(undefined)\n  vtsOffsetTop?: null | number;\n\n  @Input()\n  @WithConfig<number | null>()\n  @InputNumber(undefined)\n  vtsOffsetBottom?: null | number;\n\n  @Output() readonly vtsChange = new EventEmitter<boolean>();\n\n  dir: Direction = 'ltr';\n\n  private readonly placeholderNode: HTMLElement;\n\n  private affixStyle?: NgStyleInterface;\n  private placeholderStyle?: NgStyleInterface;\n  private positionChangeSubscription: Subscription = Subscription.EMPTY;\n  private offsetChanged$ = new ReplaySubject(1);\n  private destroy$ = new Subject<void>();\n  private timeout?: number | ReturnType<typeof setTimeout>;\n  private document: Document;\n\n  private get target(): Element | Window {\n    const el = this.vtsTarget;\n    return (typeof el === 'string' ? this.document.querySelector(el) : el) || window;\n  }\n\n  constructor(\n    el: ElementRef,\n    @Inject(DOCUMENT) doc: VtsSafeAny,\n    public vtsConfigService: VtsConfigService,\n    private scrollSrv: VtsScrollService,\n    private ngZone: NgZone,\n    private platform: Platform,\n    private renderer: Renderer2,\n    private cdr: ChangeDetectorRef,\n    @Optional() private directionality: Directionality\n  ) {\n    // The wrapper would stay at the original position as a placeholder.\n    this.placeholderNode = el.nativeElement;\n    this.document = doc;\n  }\n\n  ngOnInit(): void {\n    this.directionality.change?.pipe(takeUntil(this.destroy$)).subscribe((direction: Direction) => {\n      this.dir = direction;\n      this.registerListeners();\n      this.updatePosition({} as Event);\n      this.cdr.detectChanges();\n    });\n\n    this.dir = this.directionality.value;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const { vtsOffsetBottom, vtsOffsetTop, vtsTarget } = changes;\n\n    if (vtsOffsetBottom || vtsOffsetTop) {\n      this.offsetChanged$.next();\n    }\n    if (vtsTarget) {\n      this.registerListeners();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.registerListeners();\n  }\n\n  ngOnDestroy(): void {\n    this.removeListeners();\n  }\n\n  private registerListeners(): void {\n    if (!this.platform.isBrowser) {\n      return;\n    }\n\n    this.removeListeners();\n    this.positionChangeSubscription = this.ngZone.runOutsideAngular(() => {\n      return merge(\n        ...Object.keys(AffixRespondEvents).map(evName => fromEvent(this.target, evName)),\n        this.offsetChanged$.pipe(\n          takeUntil(this.destroy$),\n          map(() => ({}))\n        )\n      )\n        .pipe(auditTime(VTS_AFFIX_DEFAULT_SCROLL_TIME))\n        .subscribe(e => this.updatePosition(e as Event));\n    });\n    this.timeout = setTimeout(() => this.updatePosition({} as Event));\n  }\n\n  private removeListeners(): void {\n    clearTimeout(this.timeout);\n    this.positionChangeSubscription.unsubscribe();\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  getOffset(element: Element, target: Element | Window | undefined): SimpleRect {\n    const elemRect = element.getBoundingClientRect();\n    const targetRect = getTargetRect(target!);\n\n    const scrollTop = this.scrollSrv.getScroll(target, true);\n    const scrollLeft = this.scrollSrv.getScroll(target, false);\n\n    const docElem = this.document.body;\n    const clientTop = docElem.clientTop || 0;\n    const clientLeft = docElem.clientLeft || 0;\n\n    return {\n      top: elemRect.top - targetRect.top + scrollTop - clientTop,\n      left: elemRect.left - targetRect.left + scrollLeft - clientLeft,\n      width: elemRect.width,\n      height: elemRect.height\n    };\n  }\n\n  private setAffixStyle(e: Event, affixStyle?: NgStyleInterface): void {\n    const originalAffixStyle = this.affixStyle;\n    const isWindow = this.target === window;\n    if (e.type === 'scroll' && originalAffixStyle && affixStyle && isWindow) {\n      return;\n    }\n    if (shallowEqual(originalAffixStyle, affixStyle)) {\n      return;\n    }\n\n    const fixed = !!affixStyle;\n    const wrapEl = this.fixedEl.nativeElement;\n    this.renderer.setStyle(wrapEl, 'cssText', getStyleAsText(affixStyle));\n    this.affixStyle = affixStyle;\n    if (fixed) {\n      wrapEl.classList.add(VTS_AFFIX_CLS_PREFIX);\n    } else {\n      wrapEl.classList.remove(VTS_AFFIX_CLS_PREFIX);\n    }\n    this.updateRtlClass();\n    if ((affixStyle && !originalAffixStyle) || (!affixStyle && originalAffixStyle)) {\n      this.vtsChange.emit(fixed);\n    }\n  }\n\n  private setPlaceholderStyle(placeholderStyle?: NgStyleInterface): void {\n    const originalPlaceholderStyle = this.placeholderStyle;\n    if (shallowEqual(placeholderStyle, originalPlaceholderStyle)) {\n      return;\n    }\n    this.renderer.setStyle(this.placeholderNode, 'cssText', getStyleAsText(placeholderStyle));\n    this.placeholderStyle = placeholderStyle;\n  }\n\n  private syncPlaceholderStyle(e: Event): void {\n    if (!this.affixStyle) {\n      return;\n    }\n    this.renderer.setStyle(this.placeholderNode, 'cssText', '');\n    this.placeholderStyle = undefined;\n    const styleObj = {\n      width: this.placeholderNode.offsetWidth,\n      height: this.fixedEl.nativeElement.offsetHeight\n    };\n    this.setAffixStyle(e, {\n      ...this.affixStyle,\n      ...styleObj\n    });\n    this.setPlaceholderStyle(styleObj);\n  }\n\n  updatePosition(e: Event): void {\n    if (!this.platform.isBrowser) {\n      return;\n    }\n\n    const targetNode = this.target;\n    let offsetTop = this.vtsOffsetTop;\n    const scrollTop = this.scrollSrv.getScroll(targetNode, true);\n    const elemOffset = this.getOffset(this.placeholderNode, targetNode!);\n    const fixedNode = this.fixedEl.nativeElement;\n    const elemSize = {\n      width: fixedNode.offsetWidth,\n      height: fixedNode.offsetHeight\n    };\n    const offsetMode = {\n      top: false,\n      bottom: false\n    };\n    // Default to `offsetTop=0`.\n    if (typeof offsetTop !== 'number' && typeof this.vtsOffsetBottom !== 'number') {\n      offsetMode.top = true;\n      offsetTop = 0;\n    } else {\n      offsetMode.top = typeof offsetTop === 'number';\n      offsetMode.bottom = typeof this.vtsOffsetBottom === 'number';\n    }\n    const targetRect = getTargetRect(targetNode as Window);\n    const targetInnerHeight =\n      (targetNode as Window).innerHeight || (targetNode as HTMLElement).clientHeight;\n    if (scrollTop >= elemOffset.top - (offsetTop as number) && offsetMode.top) {\n      const width = elemOffset.width;\n      const top = targetRect.top + (offsetTop as number);\n      this.setAffixStyle(e, {\n        position: 'fixed',\n        top,\n        left: targetRect.left + elemOffset.left,\n        width\n      });\n      this.setPlaceholderStyle({\n        width,\n        height: elemSize.height\n      });\n    } else if (\n      scrollTop <=\n        elemOffset.top + elemSize.height + (this.vtsOffsetBottom as number) - targetInnerHeight &&\n      offsetMode.bottom\n    ) {\n      const targetBottomOffset =\n        targetNode === window ? 0 : window.innerHeight - targetRect.bottom!;\n      const width = elemOffset.width;\n      this.setAffixStyle(e, {\n        position: 'fixed',\n        bottom: targetBottomOffset + (this.vtsOffsetBottom as number),\n        left: targetRect.left + elemOffset.left,\n        width\n      });\n      this.setPlaceholderStyle({\n        width,\n        height: elemOffset.height\n      });\n    } else {\n      if (\n        e.type === AffixRespondEvents.resize &&\n        this.affixStyle &&\n        this.affixStyle.position === 'fixed' &&\n        this.placeholderNode.offsetWidth\n      ) {\n        this.setAffixStyle(e, {\n          ...this.affixStyle,\n          width: this.placeholderNode.offsetWidth\n        });\n      } else {\n        this.setAffixStyle(e);\n      }\n      this.setPlaceholderStyle();\n    }\n\n    if (e.type === 'resize') {\n      this.syncPlaceholderStyle(e);\n    }\n  }\n\n  private updateRtlClass(): void {\n    const wrapEl = this.fixedEl.nativeElement;\n    if (this.dir === 'rtl') {\n      if (wrapEl.classList.contains(VTS_AFFIX_CLS_PREFIX)) {\n        wrapEl.classList.add(`${VTS_AFFIX_CLS_PREFIX}-rtl`);\n      } else {\n        wrapEl.classList.remove(`${VTS_AFFIX_CLS_PREFIX}-rtl`);\n      }\n    } else {\n      wrapEl.classList.remove(`${VTS_AFFIX_CLS_PREFIX}-rtl`);\n    }\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { VtsAffixComponent } from './affix.component';\n\n@NgModule({\n  declarations: [VtsAffixComponent],\n  exports: [VtsAffixComponent],\n  imports: [BidiModule, CommonModule, PlatformModule]\n})\nexport class VtsAffixModule {}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport * from './affix.component';\nexport * from './affix.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}