UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

1 lines 21.7 kB
{"version":3,"file":"ng-zorro-antd-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/ng-zorro-antd-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 { Direction, Directionality } from '@angular/cdk/bidi';\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 { fromEvent, merge, ReplaySubject, Subject, Subscription } from 'rxjs';\nimport { map, takeUntil, throttleTime } from 'rxjs/operators';\n\nimport { NzResizeObserver } from 'ng-zorro-antd/cdk/resize-observer';\nimport { NzConfigKey, NzConfigService, WithConfig } from 'ng-zorro-antd/core/config';\nimport { NzScrollService } from 'ng-zorro-antd/core/services';\nimport { NgStyleInterface, NumberInput, NzSafeAny } from 'ng-zorro-antd/core/types';\nimport { getStyleAsText, InputNumber, shallowEqual } from 'ng-zorro-antd/core/util';\n\nimport { AffixRespondEvents } from './respond-events';\nimport { getTargetRect, SimpleRect } from './utils';\n\nconst NZ_CONFIG_MODULE_NAME: NzConfigKey = 'affix';\nconst NZ_AFFIX_CLS_PREFIX = 'ant-affix';\nconst NZ_AFFIX_DEFAULT_SCROLL_TIME = 20;\n\n@Component({\n selector: 'nz-affix',\n exportAs: 'nzAffix',\n template: `\n <div #fixedEl>\n <ng-content></ng-content>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class NzAffixComponent implements AfterViewInit, OnChanges, OnDestroy, OnInit {\n readonly _nzModuleName: NzConfigKey = NZ_CONFIG_MODULE_NAME;\n static ngAcceptInputType_nzOffsetTop: NumberInput;\n static ngAcceptInputType_nzOffsetBottom: NumberInput;\n\n @ViewChild('fixedEl', { static: true }) private fixedEl!: ElementRef<HTMLDivElement>;\n\n @Input() nzTarget?: string | Element | Window;\n\n @Input()\n @WithConfig<number | null>()\n @InputNumber(undefined)\n nzOffsetTop?: null | number;\n\n @Input()\n @WithConfig<number | null>()\n @InputNumber(undefined)\n nzOffsetBottom?: null | number;\n\n @Output() readonly nzChange = 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;\n private document: Document;\n\n private get target(): Element | Window {\n const el = this.nzTarget;\n return (typeof el === 'string' ? this.document.querySelector(el) : el) || window;\n }\n\n constructor(\n el: ElementRef,\n @Inject(DOCUMENT) doc: NzSafeAny,\n public nzConfigService: NzConfigService,\n private scrollSrv: NzScrollService,\n private ngZone: NgZone,\n private platform: Platform,\n private renderer: Renderer2,\n private nzResizeObserver: NzResizeObserver,\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 { nzOffsetBottom, nzOffsetTop, nzTarget } = changes;\n\n if (nzOffsetBottom || nzOffsetTop) {\n this.offsetChanged$.next();\n }\n if (nzTarget) {\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 const el = this.target === window ? this.document.body : (this.target as Element);\n this.positionChangeSubscription = this.ngZone.runOutsideAngular(() =>\n merge(\n ...Object.keys(AffixRespondEvents).map(evName => fromEvent(this.target, evName)),\n this.offsetChanged$.pipe(map(() => ({}))),\n this.nzResizeObserver.observe(el)\n )\n .pipe(throttleTime(NZ_AFFIX_DEFAULT_SCROLL_TIME, undefined, { trailing: true }), takeUntil(this.destroy$))\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(NZ_AFFIX_CLS_PREFIX);\n } else {\n wrapEl.classList.remove(NZ_AFFIX_CLS_PREFIX);\n }\n this.updateRtlClass();\n if ((affixStyle && !originalAffixStyle) || (!affixStyle && originalAffixStyle)) {\n this.nzChange.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.nzOffsetTop;\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.nzOffsetBottom !== 'number') {\n offsetMode.top = true;\n offsetTop = 0;\n } else {\n offsetMode.top = typeof offsetTop === 'number';\n offsetMode.bottom = typeof this.nzOffsetBottom === 'number';\n }\n const targetRect = getTargetRect(targetNode as Window);\n const targetInnerHeight = (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 <= elemOffset.top + elemSize.height + (this.nzOffsetBottom as number) - targetInnerHeight &&\n offsetMode.bottom\n ) {\n const targetBottomOffset = targetNode === window ? 0 : window.innerHeight - targetRect.bottom!;\n const width = elemOffset.width;\n this.setAffixStyle(e, {\n position: 'fixed',\n bottom: targetBottomOffset + (this.nzOffsetBottom 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(NZ_AFFIX_CLS_PREFIX)) {\n wrapEl.classList.add(`${NZ_AFFIX_CLS_PREFIX}-rtl`);\n } else {\n wrapEl.classList.remove(`${NZ_AFFIX_CLS_PREFIX}-rtl`);\n }\n } else {\n wrapEl.classList.remove(`${NZ_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 */\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 { NzAffixComponent } from './affix.component';\n\n@NgModule({\n declarations: [NzAffixComponent],\n exports: [NzAffixComponent],\n imports: [BidiModule, CommonModule, PlatformModule]\n})\nexport class NzAffixModule {}\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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"}