UNPKG

ngx-mat-timeline

Version:

Timeline component for Angular Material

118 lines 16.6 kB
import { ChangeDetectionStrategy, Component, ContentChildren, HostBinding, Input, QueryList, ViewEncapsulation } from '@angular/core'; import { NgxMatTimelineItem } from "./ngx-mat-timeline-item.component"; import { Observable, Subject } from "rxjs"; import { first, takeUntil, tap, throttleTime } from "rxjs/operators"; import * as i0 from "@angular/core"; export class NgxMatTimeline { constructor(_host, _ngZone) { this._host = _host; this._ngZone = _ngZone; this._position = 'start'; this._orientation = 'vertical'; this._reverse = false; this.items = new QueryList(); this._destroyed = new Subject(); } set position(position) { this._position = position; this.updateLayout(); } set orientation(orientation) { this._orientation = orientation; this.updateLayout(); } set reverse(reverse) { this._reverse = reverse; this.updateLayout(); } get isStartPosition() { return this._position == 'start'; } get isEndPosition() { return this._position == 'end'; } get isCenterPosition() { return this._position == 'center'; } get isCenterAltPosition() { return this._position == 'center-alt'; } get isVerticalOrientation() { return this._orientation == 'vertical'; } get isHorizontalOrientation() { return this._orientation == 'horizontal'; } get isReverse() { return this._reverse; } ngOnChanges(changes) { this._ngZone.onStable.pipe(tap(() => this.updateLayout()), first()).subscribe(); } ngOnInit() { new Observable(observer => { const ro = new ResizeObserver(entries => observer.next(entries)); ro.observe(this._host.nativeElement); // unsubscribe callback return () => { ro.unobserve(this._host.nativeElement); ro.disconnect(); }; }).pipe(throttleTime(10), tap(() => this.updateLayout()), takeUntil(this._destroyed)).subscribe(); } ngOnDestroy() { this._destroyed.next(); this._destroyed.complete(); } updateLayout() { if (this.isCenterPosition || this.isCenterAltPosition) { this.items.forEach(item => { if (this.isVerticalOrientation) { item._updateVerticalCenteredLayout(); } else { item._updateHorizontalCenteredLayout(); } }); } } } NgxMatTimeline.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: NgxMatTimeline, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); NgxMatTimeline.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: NgxMatTimeline, selector: "ngx-mat-timeline", inputs: { position: "position", orientation: "orientation", reverse: "reverse" }, host: { properties: { "class.ngx-mat-timeline-start": "this.isStartPosition", "class.ngx-mat-timeline-end": "this.isEndPosition", "class.ngx-mat-timeline-center": "this.isCenterPosition", "class.ngx-mat-timeline-center-alt": "this.isCenterAltPosition", "class.ngx-mat-timeline-vertical": "this.isVerticalOrientation", "class.ngx-mat-timeline-horizontal": "this.isHorizontalOrientation", "class.ngx-mat-timeline-reverse": "this.isReverse" }, classAttribute: "ngx-mat-timeline" }, queries: [{ propertyName: "items", predicate: NgxMatTimelineItem }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ngx-mat-timeline-content\">\n <ng-content></ng-content>\n</div>\n", styles: [".ngx-mat-timeline{margin:0;padding:0;width:100%;display:flex;justify-content:stretch;align-items:stretch;overflow:auto}.ngx-mat-timeline-content{margin:0;padding:0;width:100%;display:flex;justify-content:stretch;align-items:stretch;min-width:min-content;min-height:min-content}.ngx-mat-timeline-center>.ngx-mat-timeline-content,.ngx-mat-timeline-center-alt>.ngx-mat-timeline-content{align-items:center}.ngx-mat-timeline-vertical>.ngx-mat-timeline-content{flex-direction:column}.ngx-mat-timeline-vertical.ngx-mat-timeline-reverse>.ngx-mat-timeline-content{flex-direction:column-reverse}.ngx-mat-timeline-horizontal>.ngx-mat-timeline-content{flex-direction:row}.ngx-mat-timeline-horizontal.ngx-mat-timeline-reverse>.ngx-mat-timeline-content{flex-direction:row-reverse}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: NgxMatTimeline, decorators: [{ type: Component, args: [{ selector: 'ngx-mat-timeline', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { 'class': 'ngx-mat-timeline' }, template: "<div class=\"ngx-mat-timeline-content\">\n <ng-content></ng-content>\n</div>\n", styles: [".ngx-mat-timeline{margin:0;padding:0;width:100%;display:flex;justify-content:stretch;align-items:stretch;overflow:auto}.ngx-mat-timeline-content{margin:0;padding:0;width:100%;display:flex;justify-content:stretch;align-items:stretch;min-width:min-content;min-height:min-content}.ngx-mat-timeline-center>.ngx-mat-timeline-content,.ngx-mat-timeline-center-alt>.ngx-mat-timeline-content{align-items:center}.ngx-mat-timeline-vertical>.ngx-mat-timeline-content{flex-direction:column}.ngx-mat-timeline-vertical.ngx-mat-timeline-reverse>.ngx-mat-timeline-content{flex-direction:column-reverse}.ngx-mat-timeline-horizontal>.ngx-mat-timeline-content{flex-direction:row}.ngx-mat-timeline-horizontal.ngx-mat-timeline-reverse>.ngx-mat-timeline-content{flex-direction:row-reverse}\n"] }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { position: [{ type: Input }], orientation: [{ type: Input }], reverse: [{ type: Input }], isStartPosition: [{ type: HostBinding, args: ['class.ngx-mat-timeline-start'] }], isEndPosition: [{ type: HostBinding, args: ['class.ngx-mat-timeline-end'] }], isCenterPosition: [{ type: HostBinding, args: ['class.ngx-mat-timeline-center'] }], isCenterAltPosition: [{ type: HostBinding, args: ['class.ngx-mat-timeline-center-alt'] }], isVerticalOrientation: [{ type: HostBinding, args: ['class.ngx-mat-timeline-vertical'] }], isHorizontalOrientation: [{ type: HostBinding, args: ['class.ngx-mat-timeline-horizontal'] }], isReverse: [{ type: HostBinding, args: ['class.ngx-mat-timeline-reverse'] }], items: [{ type: ContentChildren, args: [NgxMatTimelineItem] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hdC10aW1lbGluZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0LXRpbWVsaW5lL3NyYy9saWIvbmd4LW1hdC10aW1lbGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0LXRpbWVsaW5lL3NyYy9saWIvbmd4LW1hdC10aW1lbGluZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsV0FBVyxFQUNYLEtBQUssRUFHTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFtQnJFLE1BQU0sT0FBTyxjQUFjO0lBK0R6QixZQUNVLEtBQWlCLEVBQ2pCLE9BQWU7UUFEZixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUExRGpCLGNBQVMsR0FBOEIsT0FBTyxDQUFDO1FBTy9DLGlCQUFZLEdBQWlDLFVBQVUsQ0FBQztRQU9oRSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBc0NqQixVQUFLLEdBQWtDLElBQUksU0FBUyxFQUFFLENBQUM7UUFFeEQsZUFBVSxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBSy9DLENBQUM7SUFoRUosSUFDSSxRQUFRLENBQUMsUUFBbUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFD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RkFHQTsyRkQ4QmEsY0FBYztrQkFWMUIsU0FBUzsrQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixPQUFPLEVBQUUsa0JBQWtCO3FCQUM1QjtzSEFLRyxRQUFRO3NCQURYLEtBQUs7Z0JBUUYsV0FBVztzQkFEZCxLQUFLO2dCQVFGLE9BQU87c0JBRFYsS0FBSztnQkFRRixlQUFlO3NCQURsQixXQUFXO3VCQUFDLDhCQUE4QjtnQkFNdkMsYUFBYTtzQkFEaEIsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBTXJDLGdCQUFnQjtzQkFEbkIsV0FBVzt1QkFBQywrQkFBK0I7Z0JBTXhDLG1CQUFtQjtzQkFEdEIsV0FBVzt1QkFBQyxtQ0FBbUM7Z0JBTTVDLHFCQUFxQjtzQkFEeEIsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBTTFDLHVCQUF1QjtzQkFEMUIsV0FBVzt1QkFBQyxtQ0FBbUM7Z0JBTTVDLFNBQVM7c0JBRFosV0FBVzt1QkFBQyxnQ0FBZ0M7Z0JBTXBDLEtBQUs7c0JBRGIsZUFBZTt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCwgTmdab25lLCBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4TWF0VGltZWxpbmVJdGVtIH0gZnJvbSBcIi4vbmd4LW1hdC10aW1lbGluZS1pdGVtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBmaXJzdCwgdGFrZVVudGlsLCB0YXAsIHRocm90dGxlVGltZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5cbmV4cG9ydCB0eXBlIE5HWF9NQVRfVElNRUxJTkVfUE9TSVRJT04gPSAnc3RhcnQnIHwgJ2VuZCcgfCAnY2VudGVyJyB8ICdjZW50ZXItYWx0JztcblxuXG5leHBvcnQgdHlwZSBOR1hfTUFUX1RJTUVMSU5FX09SSUVOVEFUSU9OID0gJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtbWF0LXRpbWVsaW5lJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25neC1tYXQtdGltZWxpbmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uZ3gtbWF0LXRpbWVsaW5lLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ25neC1tYXQtdGltZWxpbmUnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0VGltZWxpbmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKVxuICBzZXQgcG9zaXRpb24ocG9zaXRpb246IE5HWF9NQVRfVElNRUxJTkVfUE9TSVRJT04pIHtcbiAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfcG9zaXRpb246IE5HWF9NQVRfVElNRUxJTkVfUE9TSVRJT04gPSAnc3RhcnQnO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBvcmllbnRhdGlvbihvcmllbnRhdGlvbjogTkdYX01BVF9USU1FTElORV9PUklFTlRBVElPTikge1xuICAgIHRoaXMuX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247XG4gICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcbiAgfVxuICBwcml2YXRlIF9vcmllbnRhdGlvbjogTkdYX01BVF9USU1FTElORV9PUklFTlRBVElPTiA9ICd2ZXJ0aWNhbCc7XG5cbiAgQElucHV0KClcbiAgc2V0IHJldmVyc2UocmV2ZXJzZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JldmVyc2UgPSByZXZlcnNlO1xuICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XG4gIH1cbiAgX3JldmVyc2U6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5neC1tYXQtdGltZWxpbmUtc3RhcnQnKVxuICBnZXQgaXNTdGFydFBvc2l0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbiA9PSAnc3RhcnQnO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5uZ3gtbWF0LXRpbWVsaW5lLWVuZCcpXG4gIGdldCBpc0VuZFBvc2l0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbiA9PSAnZW5kJztcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mubmd4LW1hdC10aW1lbGluZS1jZW50ZXInKVxuICBnZXQgaXNDZW50ZXJQb3NpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcG9zaXRpb24gPT0gJ2NlbnRlcic7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5neC1tYXQtdGltZWxpbmUtY2VudGVyLWFsdCcpXG4gIGdldCBpc0NlbnRlckFsdFBvc2l0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbiA9PSAnY2VudGVyLWFsdCc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5neC1tYXQtdGltZWxpbmUtdmVydGljYWwnKVxuICBnZXQgaXNWZXJ0aWNhbE9yaWVudGF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvbiA9PSAndmVydGljYWwnO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5uZ3gtbWF0LXRpbWVsaW5lLWhvcml6b250YWwnKVxuICBnZXQgaXNIb3Jpem9udGFsT3JpZW50YXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uID09ICdob3Jpem9udGFsJztcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mubmd4LW1hdC10aW1lbGluZS1yZXZlcnNlJylcbiAgZ2V0IGlzUmV2ZXJzZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZTtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oTmd4TWF0VGltZWxpbmVJdGVtKVxuICByZWFkb25seSBpdGVtczogUXVlcnlMaXN0PE5neE1hdFRpbWVsaW5lSXRlbT4gPSBuZXcgUXVlcnlMaXN0KCk7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9ob3N0OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lXG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy51cGRhdGVMYXlvdXQoKSksXG4gICAgICBmaXJzdCgpXG4gICAgKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIGNvbnN0IHJvID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4gb2JzZXJ2ZXIubmV4dChlbnRyaWVzKSk7XG4gICAgICByby5vYnNlcnZlKHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudCk7XG4gICAgICAvLyB1bnN1YnNjcmliZSBjYWxsYmFja1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcm8udW5vYnNlcnZlKHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHJvLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9KS5waXBlKFxuICAgICAgdGhyb3R0bGVUaW1lKDEwKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnVwZGF0ZUxheW91dCgpKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB1cGRhdGVMYXlvdXQoKSB7XG4gICAgaWYgKHRoaXMuaXNDZW50ZXJQb3NpdGlvbiB8fCB0aGlzLmlzQ2VudGVyQWx0UG9zaXRpb24pIHtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbE9yaWVudGF0aW9uKSB7XG4gICAgICAgICAgaXRlbS5fdXBkYXRlVmVydGljYWxDZW50ZXJlZExheW91dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW0uX3VwZGF0ZUhvcml6b250YWxDZW50ZXJlZExheW91dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cIm5neC1tYXQtdGltZWxpbmUtY29udGVudFwiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==