ngx-mat-timeline
Version:
Timeline component for Angular Material
118 lines • 16.6 kB
JavaScript
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==