ngx-mat-timeline
Version:
Timeline component for Angular Material
1 lines • 12.4 kB
Source Map (JSON)
{"version":3,"file":"ngx-mat-timeline.mjs","sources":["../../../projects/ngx-mat-timeline/src/lib/ngx-mat-timeline-item.component.ts","../../../projects/ngx-mat-timeline/src/lib/ngx-mat-timeline-item.component.html","../../../projects/ngx-mat-timeline/src/lib/ngx-mat-timeline.component.ts","../../../projects/ngx-mat-timeline/src/lib/ngx-mat-timeline.component.html","../../../projects/ngx-mat-timeline/src/lib/ngx-mat-timeline.module.ts","../../../projects/ngx-mat-timeline/src/public-api.ts","../../../projects/ngx-mat-timeline/src/ngx-mat-timeline.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Directive,\n ElementRef,\n Input,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\n\n@Directive({\n selector: 'ng-template[ngxMatTimelineItemIcon]',\n})\nexport class NgxMatTimelineItemIcon {\n}\n\n\n@Directive({\n selector: 'ng-template[ngxMatTimelineItemLabel]',\n})\nexport class NgxMatTimelineItemLabel {\n}\n\n\n@Component({\n selector: 'ngx-mat-timeline-item',\n templateUrl: './ngx-mat-timeline-item.component.html',\n styleUrls: ['./ngx-mat-timeline-item.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngx-mat-timeline-item'\n }\n})\nexport class NgxMatTimelineItem {\n\n @Input()\n label?: string | null;\n\n @Input()\n icon?: string | null;\n\n @Input()\n svgIcon?: string | null;\n\n @Input()\n iconUrl?: string | null;\n\n @ContentChild(NgxMatTimelineItemIcon, {read: TemplateRef})\n customIconTpl?: TemplateRef<any>;\n\n @ContentChild(NgxMatTimelineItemLabel, {read: TemplateRef})\n customLabelTpl?: TemplateRef<any>;\n\n @ViewChild('contentEl', {static: true})\n private _contentEl!: ElementRef;\n\n @ViewChild('fillEl', {static: true})\n private _fillEl!: ElementRef;\n\n constructor() {\n }\n\n _updateVerticalCenteredLayout() {\n this._fillEl.nativeElement.style.minWidth = this._contentEl.nativeElement.offsetWidth + 'px';\n this._fillEl.nativeElement.style.minHeight = 'unset';\n }\n\n _updateHorizontalCenteredLayout() {\n this._fillEl.nativeElement.style.minHeight = this._contentEl.nativeElement.offsetHeight + 'px';\n this._fillEl.nativeElement.style.minWidth = 'unset'\n }\n\n}\n","\n<div #fillEl class=\"ngx-mat-timeline-item-fill\"></div>\n\n<div class=\"ngx-mat-timeline-item-timeline\">\n\n <ng-container\n *ngTemplateOutlet=\"customIconTpl ? customIconTpl : iconTpl\"\n ></ng-container>\n\n <ng-template #iconTpl>\n <mat-icon\n *ngIf=\"icon; else svgIconTpl\"\n class=\"ngx-mat-timeline-item-icon\">{{ icon }}</mat-icon>\n </ng-template>\n\n <ng-template #svgIconTpl>\n <mat-icon\n *ngIf=\"svgIcon; else iconUrlTpl\"\n [svgIcon]=\"$any(svgIcon)\"\n class=\"ngx-mat-timeline-item-icon\"></mat-icon>\n </ng-template>\n\n <ng-template #iconUrlTpl>\n <img\n *ngIf=\"iconUrl\"\n [src]=\"iconUrl\"\n class=\"ngx-mat-timeline-item-icon\"/>\n </ng-template>\n\n <ng-container\n *ngTemplateOutlet=\"customLabelTpl ? customLabelTpl : labelTpl\"\n ></ng-container>\n\n <ng-template #labelTpl>\n <div *ngIf=\"label\" class=\"mat-caption ngx-mat-timeline-item-label\">{{ label }}</div>\n </ng-template>\n\n <div class=\"ngx-mat-timeline-item-line\"></div>\n\n</div>\n\n<div #contentEl class=\"ngx-mat-timeline-item-content\">\n <ng-content></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n HostBinding,\n Input, NgZone, OnChanges,\n OnDestroy,\n OnInit,\n QueryList, SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport { NgxMatTimelineItem } from \"./ngx-mat-timeline-item.component\";\nimport { Observable, Subject } from \"rxjs\";\nimport { first, takeUntil, tap, throttleTime } from \"rxjs/operators\";\n\n\nexport type NGX_MAT_TIMELINE_POSITION = 'start' | 'end' | 'center' | 'center-alt';\n\n\nexport type NGX_MAT_TIMELINE_ORIENTATION = 'vertical' | 'horizontal';\n\n\n@Component({\n selector: 'ngx-mat-timeline',\n templateUrl: './ngx-mat-timeline.component.html',\n styleUrls: ['./ngx-mat-timeline.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'ngx-mat-timeline'\n }\n})\nexport class NgxMatTimeline implements OnInit, OnDestroy, OnChanges {\n\n @Input()\n set position(position: NGX_MAT_TIMELINE_POSITION) {\n this._position = position;\n this.updateLayout();\n }\n private _position: NGX_MAT_TIMELINE_POSITION = 'start';\n\n @Input()\n set orientation(orientation: NGX_MAT_TIMELINE_ORIENTATION) {\n this._orientation = orientation;\n this.updateLayout();\n }\n private _orientation: NGX_MAT_TIMELINE_ORIENTATION = 'vertical';\n\n @Input()\n set reverse(reverse: boolean) {\n this._reverse = reverse;\n this.updateLayout();\n }\n _reverse: boolean = false;\n\n @HostBinding('class.ngx-mat-timeline-start')\n get isStartPosition(): boolean {\n return this._position == 'start';\n }\n\n @HostBinding('class.ngx-mat-timeline-end')\n get isEndPosition(): boolean {\n return this._position == 'end';\n }\n\n @HostBinding('class.ngx-mat-timeline-center')\n get isCenterPosition(): boolean {\n return this._position == 'center';\n }\n\n @HostBinding('class.ngx-mat-timeline-center-alt')\n get isCenterAltPosition(): boolean {\n return this._position == 'center-alt';\n }\n\n @HostBinding('class.ngx-mat-timeline-vertical')\n get isVerticalOrientation(): boolean {\n return this._orientation == 'vertical';\n }\n\n @HostBinding('class.ngx-mat-timeline-horizontal')\n get isHorizontalOrientation(): boolean {\n return this._orientation == 'horizontal';\n }\n\n @HostBinding('class.ngx-mat-timeline-reverse')\n get isReverse(): boolean {\n return this._reverse;\n }\n\n @ContentChildren(NgxMatTimelineItem)\n readonly items: QueryList<NgxMatTimelineItem> = new QueryList();\n\n private _destroyed: Subject<void> = new Subject();\n\n constructor(\n private _host: ElementRef,\n private _ngZone: NgZone\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this._ngZone.onStable.pipe(\n tap(() => this.updateLayout()),\n first()\n ).subscribe();\n }\n\n ngOnInit() {\n new Observable(observer => {\n const ro = new ResizeObserver(entries => observer.next(entries));\n ro.observe(this._host.nativeElement);\n // unsubscribe callback\n return () => {\n ro.unobserve(this._host.nativeElement);\n ro.disconnect();\n }\n }).pipe(\n throttleTime(10),\n tap(() => this.updateLayout()),\n takeUntil(this._destroyed)\n ).subscribe();\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n updateLayout() {\n if (this.isCenterPosition || this.isCenterAltPosition) {\n this.items.forEach(item => {\n if (this.isVerticalOrientation) {\n item._updateVerticalCenteredLayout();\n } else {\n item._updateHorizontalCenteredLayout();\n }\n });\n }\n }\n\n}\n","<div class=\"ngx-mat-timeline-content\">\n <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from \"@angular/common\";\nimport { MatIconModule } from \"@angular/material/icon\";\n\nimport { NgxMatTimeline } from './ngx-mat-timeline.component';\nimport {\n NgxMatTimelineItem,\n NgxMatTimelineItemIcon,\n NgxMatTimelineItemLabel\n} from './ngx-mat-timeline-item.component';\n\n\n@NgModule({\n declarations: [\n NgxMatTimeline,\n NgxMatTimelineItem,\n NgxMatTimelineItemIcon,\n NgxMatTimelineItemLabel,\n ],\n imports: [\n CommonModule,\n MatIconModule\n ],\n exports: [\n NgxMatTimeline,\n NgxMatTimelineItem,\n NgxMatTimelineItemIcon,\n NgxMatTimelineItemLabel,\n ]\n})\nexport class NgxMatTimelineModule { }\n","/*\n * Public API Surface of ngx-mat-timeline\n */\n\nexport * from './lib/ngx-mat-timeline.component';\nexport * from './lib/ngx-mat-timeline-item.component';\nexport * from './lib/ngx-mat-timeline.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}