UNPKG

ng-zorro-antd

Version:

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

113 lines 14.2 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { MediaMatcher } from '@angular/cdk/layout'; import { Platform } from '@angular/cdk/platform'; import { Directive, ElementRef, Input, NgZone, Renderer2 } from '@angular/core'; import { gridResponsiveMap, NzBreakpointService } from 'ng-zorro-antd/core/services'; import { ReplaySubject, Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; export class NzRowDirective { constructor(elementRef, renderer, mediaMatcher, ngZone, platform, breakpointService) { this.elementRef = elementRef; this.renderer = renderer; this.mediaMatcher = mediaMatcher; this.ngZone = ngZone; this.platform = platform; this.breakpointService = breakpointService; this.nzAlign = null; this.nzJustify = null; this.nzGutter = null; this.actualGutter$ = new ReplaySubject(1); this.destroy$ = new Subject(); // TODO: move to host after View Engine deprecation this.elementRef.nativeElement.classList.add('ant-row'); } getGutter() { const results = [null, null]; const gutter = this.nzGutter || 0; const normalizedGutter = Array.isArray(gutter) ? gutter : [gutter, null]; normalizedGutter.forEach((g, index) => { if (typeof g === 'object' && g !== null) { results[index] = null; Object.keys(gridResponsiveMap).map((screen) => { const bp = screen; if (this.mediaMatcher.matchMedia(gridResponsiveMap[bp]).matches && g[bp]) { results[index] = g[bp]; } }); } else { results[index] = g || null; } }); return results; } setGutterStyle() { const [horizontalGutter, verticalGutter] = this.getGutter(); this.actualGutter$.next([horizontalGutter, verticalGutter]); const renderGutter = (name, gutter) => { const nativeElement = this.elementRef.nativeElement; if (gutter !== null) { this.renderer.setStyle(nativeElement, name, `-${gutter / 2}px`); } }; renderGutter('margin-left', horizontalGutter); renderGutter('margin-right', horizontalGutter); renderGutter('margin-top', verticalGutter); renderGutter('margin-bottom', verticalGutter); } ngOnInit() { this.setGutterStyle(); } ngOnChanges(changes) { if (changes.nzGutter) { this.setGutterStyle(); } } ngAfterViewInit() { if (this.platform.isBrowser) { this.breakpointService .subscribe(gridResponsiveMap) .pipe(takeUntil(this.destroy$)) .subscribe(() => { this.setGutterStyle(); }); } } ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } } NzRowDirective.decorators = [ { type: Directive, args: [{ selector: '[nz-row],nz-row,nz-form-item', exportAs: 'nzRow', host: { '[class.ant-row-top]': `nzAlign === 'top'`, '[class.ant-row-middle]': `nzAlign === 'middle'`, '[class.ant-row-bottom]': `nzAlign === 'bottom'`, '[class.ant-row-start]': `nzJustify === 'start'`, '[class.ant-row-end]': `nzJustify === 'end'`, '[class.ant-row-center]': `nzJustify === 'center'`, '[class.ant-row-space-around]': `nzJustify === 'space-around'`, '[class.ant-row-space-between]': `nzJustify === 'space-between'` } },] } ]; NzRowDirective.ctorParameters = () => [ { type: ElementRef }, { type: Renderer2 }, { type: MediaMatcher }, { type: NgZone }, { type: Platform }, { type: NzBreakpointService } ]; NzRowDirective.propDecorators = { nzAlign: [{ type: Input }], nzJustify: [{ type: Input }], nzGutter: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS92c3RzL3dvcmsvMS9zL2NvbXBvbmVudHMvZ3JpZC8iLCJzb3VyY2VzIjpbInJvdy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZ0MsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM1SSxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFdEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBbUIzQyxNQUFNLE9BQU8sY0FBYztJQTRDekIsWUFDUyxVQUFzQixFQUN0QixRQUFtQixFQUNuQixZQUEwQixFQUMxQixNQUFjLEVBQ2QsUUFBa0IsRUFDakIsaUJBQXNDO1FBTHZDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNqQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBakR2QyxZQUFPLEdBQW1CLElBQUksQ0FBQztRQUMvQixjQUFTLEdBQXFCLElBQUksQ0FBQztRQUNuQyxhQUFRLEdBQTRGLElBQUksQ0FBQztRQUV6RyxrQkFBYSxHQUFHLElBQUksYUFBYSxDQUFpQyxDQUFDLENBQUMsQ0FBQztRQUU3RCxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUs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QUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7OztZQTlGRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtnQkFDeEMsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLElBQUksRUFBRTtvQkFDSixxQkFBcUIsRUFBRSxtQkFBbUI7b0JBQzFDLHdCQUF3QixFQUFFLHNCQUFzQjtvQkFDaEQsd0JBQXdCLEVBQUUsc0JBQXNCO29CQUNoRCx1QkFBdUIsRUFBRSx1QkFBdUI7b0JBQ2hELHFCQUFxQixFQUFFLHFCQUFxQjtvQkFDNUMsd0JBQXdCLEVBQUUsd0JBQXdCO29CQUNsRCw4QkFBOEIsRUFBRSw4QkFBOEI7b0JBQzlELCtCQUErQixFQUFFLCtCQUErQjtpQkFDakU7YUFDRjs7O1lBdEJrQyxVQUFVO1lBQStDLFNBQVM7WUFGNUYsWUFBWTtZQUVpQyxNQUFNO1lBRG5ELFFBQVE7WUFFNEIsbUJBQW1COzs7c0JBdUI3RCxLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IE1lZGlhTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgTmdab25lLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdyaWRSZXNwb25zaXZlTWFwLCBOekJyZWFrcG9pbnRLZXksIE56QnJlYWtwb2ludFNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvc2VydmljZXMnO1xuaW1wb3J0IHsgSW5kZXhhYmxlT2JqZWN0IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IHR5cGUgTnpKdXN0aWZ5ID0gJ3N0YXJ0JyB8ICdlbmQnIHwgJ2NlbnRlcicgfCAnc3BhY2UtYXJvdW5kJyB8ICdzcGFjZS1iZXR3ZWVuJztcbmV4cG9ydCB0eXBlIE56QWxpZ24gPSAndG9wJyB8ICdtaWRkbGUnIHwgJ2JvdHRvbSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuei1yb3ddLG56LXJvdyxuei1mb3JtLWl0ZW0nLFxuICBleHBvcnRBczogJ256Um93JyxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MuYW50LXJvdy10b3BdJzogYG56QWxpZ24gPT09ICd0b3AnYCxcbiAgICAnW2NsYXNzLmFudC1yb3ctbWlkZGxlXSc6IGBuekFsaWduID09PSAnbWlkZGxlJ2AsXG4gICAgJ1tjbGFzcy5hbnQtcm93LWJvdHRvbV0nOiBgbnpBbGlnbiA9PT0gJ2JvdHRvbSdgLFxuICAgICdbY2xhc3MuYW50LXJvdy1zdGFydF0nOiBgbnpKdXN0aWZ5ID09PSAnc3RhcnQnYCxcbiAgICAnW2NsYXNzLmFudC1yb3ctZW5kXSc6IGBuekp1c3RpZnkgPT09ICdlbmQnYCxcbiAgICAnW2NsYXNzLmFudC1yb3ctY2VudGVyXSc6IGBuekp1c3RpZnkgPT09ICdjZW50ZXInYCxcbiAgICAnW2NsYXNzLmFudC1yb3ctc3BhY2UtYXJvdW5kXSc6IGBuekp1c3RpZnkgPT09ICdzcGFjZS1hcm91bmQnYCxcbiAgICAnW2NsYXNzLmFudC1yb3ctc3BhY2UtYmV0d2Vlbl0nOiBgbnpKdXN0aWZ5ID09PSAnc3BhY2UtYmV0d2VlbidgXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTnpSb3dEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgbnpBbGlnbjogTnpBbGlnbiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBuekp1c3RpZnk6IE56SnVzdGlmeSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBuekd1dHRlcjogbnVtYmVyIHwgSW5kZXhhYmxlT2JqZWN0IHwgW251bWJlciwgbnVtYmVyXSB8IFtJbmRleGFibGVPYmplY3QsIEluZGV4YWJsZU9iamVjdF0gfCBudWxsID0gbnVsbDtcblxuICByZWFkb25seSBhY3R1YWxHdXR0ZXIkID0gbmV3IFJlcGxheVN1YmplY3Q8W251bWJlciB8IG51bGwsIG51bWJlciB8IG51bGxdPigxKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBnZXRHdXR0ZXIoKTogW251bWJlciB8IG51bGwsIG51bWJlciB8IG51bGxdIHtcbiAgICBjb25zdCByZXN1bHRzOiBbbnVtYmVyIHwgbnVsbCwgbnVtYmVyIHwgbnVsbF0gPSBbbnVsbCwgbnVsbF07XG4gICAgY29uc3QgZ3V0dGVyID0gdGhpcy5uekd1dHRlciB8fCAwO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRHdXR0ZXIgPSBBcnJheS5pc0FycmF5KGd1dHRlcikgPyBndXR0ZXIgOiBbZ3V0dGVyLCBudWxsXTtcbiAgICBub3JtYWxpemVkR3V0dGVyLmZvckVhY2goKGcsIGluZGV4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGcgPT09ICdvYmplY3QnICYmIGcgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0c1tpbmRleF0gPSBudWxsO1xuICAgICAgICBPYmplY3Qua2V5cyhncmlkUmVzcG9uc2l2ZU1hcCkubWFwKChzY3JlZW46IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGJwID0gc2NyZWVuIGFzIE56QnJlYWtwb2ludEtleTtcbiAgICAgICAgICBpZiAodGhpcy5tZWRpYU1hdGNoZXIubWF0Y2hNZWRpYShncmlkUmVzcG9uc2l2ZU1hcFticF0pLm1hdGNoZXMgJiYgZ1ticF0pIHtcbiAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gZyFbYnBdIGFzIG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0c1tpbmRleF0gPSBnIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBzZXRHdXR0ZXJTdHlsZSgpOiB2b2lkIHtcbiAgICBjb25zdCBbaG9yaXpvbnRhbEd1dHRlciwgdmVydGljYWxHdXR0ZXJdID0gdGhpcy5nZXRHdXR0ZXIoKTtcbiAgICB0aGlzLmFjdHVhbEd1dHRlciQubmV4dChbaG9yaXpvbnRhbEd1dHRlciwgdmVydGljYWxHdXR0ZXJdKTtcbiAgICBjb25zdCByZW5kZXJHdXR0ZXIgPSAobmFtZTogc3RyaW5nLCBndXR0ZXI6IG51bWJlciB8IG51bGwpID0+IHtcbiAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmIChndXR0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXRpdmVFbGVtZW50LCBuYW1lLCBgLSR7Z3V0dGVyIC8gMn1weGApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmVuZGVyR3V0dGVyKCdtYXJnaW4tbGVmdCcsIGhvcml6b250YWxHdXR0ZXIpO1xuICAgIHJlbmRlckd1dHRlcignbWFyZ2luLXJpZ2h0JywgaG9yaXpvbnRhbEd1dHRlcik7XG4gICAgcmVuZGVyR3V0dGVyKCdtYXJnaW4tdG9wJywgdmVydGljYWxHdXR0ZXIpO1xuICAgIHJlbmRlckd1dHRlcignbWFyZ2luLWJvdHRvbScsIHZlcnRpY2FsR3V0dGVyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHB1YmxpYyBtZWRpYU1hdGNoZXI6IE1lZGlhTWF0Y2hlcixcbiAgICBwdWJsaWMgbmdab25lOiBOZ1pvbmUsXG4gICAgcHVibGljIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRTZXJ2aWNlOiBOekJyZWFrcG9pbnRTZXJ2aWNlXG4gICkge1xuICAgIC8vIFRPRE86IG1vdmUgdG8gaG9zdCBhZnRlciBWaWV3IEVuZ2luZSBkZXByZWNhdGlvblxuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2FudC1yb3cnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0R3V0dGVyU3R5bGUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5uekd1dHRlcikge1xuICAgICAgdGhpcy5zZXRHdXR0ZXJTdHlsZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgIHRoaXMuYnJlYWtwb2ludFNlcnZpY2VcbiAgICAgICAgLnN1YnNjcmliZShncmlkUmVzcG9uc2l2ZU1hcClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldEd1dHRlclN0eWxlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19